Module: Opium::Model::Fieldable::ClassMethods

Defined in:
lib/opium/model/fieldable.rb

Instance Method Summary collapse

Instance Method Details

#default_attributesObject



51
52
53
# File 'lib/opium/model/fieldable.rb', line 51

def default_attributes
  fields.transform_values {|field| field.type.to_ruby field.default}.with_indifferent_access
end

#field(name, options = {}) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/opium/model/fieldable.rb', line 15

def field( name, options = {} )
  name = name.to_sym
  fields[name] = Field.new( name, options[:type] || Object, options[:default], options[:readonly] || false, options[:as] )
  ruby_canonical_field_names[name] = ruby_canonical_field_names[fields[name].name_to_parse] = name.to_s
  parse_canonical_field_names[name] = parse_canonical_field_names[fields[name].name_to_parse] = fields[name].name_to_parse.to_s
  class_eval do
    define_attribute_methods [name]
    define_method(name) do
      self.attributes[name]
    end
  end
  unless self.respond_to? "#{name}="
    class_eval do
      define_method("#{name}=") do |value|
        converted = self.class.fields[name].type.to_ruby(value)
        send( "#{name}_will_change!" ) unless self.attributes[name] == converted
        self.attributes[name] = converted
      end
      send(:private, "#{name}=") if options[:readonly]
    end
  end
  fields[name]
end

#fieldsObject



39
40
41
# File 'lib/opium/model/fieldable.rb', line 39

def fields
  @fields ||= ActiveSupport::HashWithIndifferentAccess.new
end

#parse_canonical_field_namesObject



47
48
49
# File 'lib/opium/model/fieldable.rb', line 47

def parse_canonical_field_names
  @parse_canonical_field_names ||= ActiveSupport::HashWithIndifferentAccess.new
end

#ruby_canonical_field_namesObject



43
44
45
# File 'lib/opium/model/fieldable.rb', line 43

def ruby_canonical_field_names
  @ruby_canonical_field_names ||= ActiveSupport::HashWithIndifferentAccess.new
end