class RegistrationFormField < ActiveRecord::Base Types = { :single => [:title, :required, :input_type, :help], :multiple => [:title, :required, :selection_type, :options, :other, :help] } Fields = { :title => {:control => 'text_field'}, :input_type => {:control => 'select', :options => [[:text_field, :text_area, :number_field, :date_field, :time_field, :phone_field, :checkbox]], :option => true}, :selection_type => {:control => 'select', :options => [[:check_box, :radio_button, :select]], :option => true}, :options => {:control => 'text_area', :option => true}, :help => {:control => 'text_area'}, :other => {:control => 'check_box', :option => true}, :required => {:control => 'check_box'} } def self.TypesForField(field) types = [] Types.each do |k, t| if t.include?(field) types << k end end types end def input_type get_from_options 'input_type' end def selection_type get_from_options 'selection_type' end def other get_from_options 'other' end def self.GetOptions(type, values) o = {} Fields.each do |k, f| if f[:option] && Types[type.to_sym].include?(k) o[k] = values[k] end end o end def self.GetNonOptionKeys(type, values) o = [] Fields.each do |k, f| if !f[:option] && Types[type.to_sym].include?(k) o << k end end o end def repeats?() field_type.to_s == 'multiple' && selection_type.to_s != 'select' end def is_array?() field_type.to_s == 'multiple' && selection_type.to_s != 'radio_button' end private def get_from_options(key) if options _options = ActiveSupport::JSON.decode(options) return _options[key] end nil end end