class Responding::Class

Public Class Methods

new(hash = {}) click to toggle source
# File lib/responding.rb, line 15
def initialize(hash = {})
  hash.each do |attr, value|
    public_send :"#{attr}=", value
  end
end

Private Class Methods

define_attribute(attribute) click to toggle source
# File lib/responding.rb, line 22
def self.define_attribute(attribute)
  case attribute
  when Symbol
    attr_accessor attribute
  when Hash
    attribute.each do |name, nested_attributes|
      nested_cls = Responding.new(*nested_attributes)

      define_method :"#{name}" do
        var_name = :"@#{name}"
        result = instance_variable_get(var_name)
        unless result
          result = nested_cls.new
          instance_variable_set var_name, result
        end
        result
      end

      define_method :"#{name}=" do |value|
        instance_variable_set :"@#{name}", nested_cls.new(value)
      end
    end
  end
end