Module: ActiveData::Model::Attributable::ClassMethods

Defined in:
lib/active_data/model/attributable.rb

Instance Method Summary collapse

Instance Method Details

#attribute(name, options = {}, &block) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/active_data/model/attributable.rb', line 14

def attribute name, options = {}, &block
  attribute = build_attribute(name, options, &block)
  self._attributes = _attributes.merge(attribute.name => attribute)

  attribute.generate_instance_methods generated_instance_attributes_methods
  attribute.generate_class_methods generated_class_attributes_methods
  attribute
end

#build_attribute(name, options = {}, &block) ⇒ Object



23
24
25
26
27
28
29
30
31
# File 'lib/active_data/model/attributable.rb', line 23

def build_attribute name, options = {}, &block
  klass = case options[:type].to_s
  when 'Localized'
    ActiveData::Attributes::Localized
  else
    ActiveData::Attributes::Base
  end
  klass.new name, options, &block
end

#generated_class_attributes_methodsObject



33
34
35
# File 'lib/active_data/model/attributable.rb', line 33

def generated_class_attributes_methods
  @generated_class_attributes_methods ||= Module.new.tap { |proxy| extend proxy }
end

#generated_instance_attributes_methodsObject



37
38
39
# File 'lib/active_data/model/attributable.rb', line 37

def generated_instance_attributes_methods
  @generated_instance_attributes_methods ||= Module.new.tap { |proxy| include proxy }
end

#initialize_attributesObject



41
42
43
# File 'lib/active_data/model/attributable.rb', line 41

def initialize_attributes
  Hash[_attributes.map { |(name, _)| [name, nil] }]
end