Module: Opium::Model::Fieldable::ClassMethods
- Defined in:
- lib/opium/model/fieldable.rb
Instance Method Summary collapse
- #default_attributes ⇒ Object
- #field(name, options = {}) ⇒ Object
- #fields ⇒ Object
- #parse_canonical_field_names ⇒ Object
- #ruby_canonical_field_names ⇒ Object
Instance Method Details
#default_attributes ⇒ Object
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, = {} ) name = name.to_sym fields[name] = Field.new( name, [:type] || Object, [:default], [:readonly] || false, [: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 [:readonly] end end fields[name] end |
#fields ⇒ Object
39 40 41 |
# File 'lib/opium/model/fieldable.rb', line 39 def fields @fields ||= ActiveSupport::HashWithIndifferentAccess.new end |
#parse_canonical_field_names ⇒ Object
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_names ⇒ Object
43 44 45 |
# File 'lib/opium/model/fieldable.rb', line 43 def ruby_canonical_field_names @ruby_canonical_field_names ||= ActiveSupport::HashWithIndifferentAccess.new end |