Sha256: 69215bf4c64d2999ccf428c5f7c938ff086c92f62a6f24baca0e9b5902dc2639

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

module Census
  class UserData

    def initialize(user, data_group = nil)
      @user = user
      
      if data_group
        @questions = {}
        define_question_methods(data_group)
      else
        @data_groups = Hash.new { |h,v| h[v] = {} }
        define_data_group_methods
      end
    end
    
    def [](key)
      if @data_groups
        @data_groups[key]
      else
        @user.first_answer_for(@questions[key]).formatted_data if @questions[key]
      end
    end

    def []=(key, value)
      if @data_groups
        @data_groups[key] = value
      else
        @user.first_answer_for(@questions[key]).update_attribute(:data, @questions[key].format_data(value).to_s) if @questions[key]
      end
    end
    
    
    private
    
    
    def define_data_group_methods
      DataGroup.all.each do |group|
        @data_groups[group.name] = Census::UserData.new(@user, group)
        
        (class << self; self; end).class_eval do
          define_method group.name.parameterize.underscore do
            @data_groups[group.name]
          end
        end
      end
    end
    
    def define_question_methods(data_group)
      data_group.questions.each do |question|
        @questions[question.prompt] = question
        
        (class << self; self; end).class_eval do
          define_method question.prompt.parameterize.underscore do
            @user.first_answer_for(question).formatted_data
          end

          define_method "#{question.prompt.parameterize.underscore}=" do |value|
            @user.first_answer_for(question).update_attribute(:data, question.format_data(value).to_s)
          end
        end
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
census-0.4.2 lib/census/user_data.rb