Module: EnumeratedAttribute::Integrations::ActiveRecord
- Defined in:
- lib/enumerated_attribute/integrations/active_record.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
- #[](attr_name) ⇒ Object
- #[]=(attr_name, value) ⇒ Object
- #attributes ⇒ Object
- #attributes=(attrs, guard_protected_attributes = true) ⇒ Object
- #read_enumerated_attribute(name) ⇒ Object
- #write_enumerated_attribute(name, val) ⇒ Object
Class Method Details
.included(klass) ⇒ Object
5 6 7 |
# File 'lib/enumerated_attribute/integrations/active_record.rb', line 5 def self.included(klass) klass.extend(ClassMethods) end |
Instance Method Details
#[](attr_name) ⇒ Object
62 |
# File 'lib/enumerated_attribute/integrations/active_record.rb', line 62 def [](attr_name); read_enumerated_attribute(attr_name); end |
#[]=(attr_name, value) ⇒ Object
63 |
# File 'lib/enumerated_attribute/integrations/active_record.rb', line 63 def []=(attr_name, value); write_enumerated_attribute(attr_name, value); end |
#attributes ⇒ Object
52 53 54 55 56 57 58 59 60 |
# File 'lib/enumerated_attribute/integrations/active_record.rb', line 52 def attributes atts = super atts.each do |k,v| if self.class.has_enumerated_attribute?(k) atts[k] = v.to_sym if v end end atts end |
#attributes=(attrs, guard_protected_attributes = true) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/enumerated_attribute/integrations/active_record.rb', line 37 def attributes=(attrs, guard_protected_attributes=true) return if attrs.nil? #check the attributes then turn them over attrs.each do |k, v| if self.class.has_enumerated_attribute?(k) unless self.class.enumerated_attribute_allows_value?(k, v) raise InvalidEnumeration, ":#{v.to_s} is not a defined enumeration value for the '#{k.to_s}' attribute", caller end attrs[k] = v.to_s end end super end |
#read_enumerated_attribute(name) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/enumerated_attribute/integrations/active_record.rb', line 24 def read_enumerated_attribute(name) name = name.to_s #if not enumerated - let active record handle it return read_attribute(name) unless self.class.has_enumerated_attribute?(name) #if enumerated, is it an active record attribute, if not, the value is stored in an instance variable name_sym = name.to_sym return instance_variable_get('@'+name) unless self.has_attribute?(name) #this is an enumerated active record attribute val = read_attribute(name) val = val.to_sym if !!val val end |
#write_enumerated_attribute(name, val) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/enumerated_attribute/integrations/active_record.rb', line 9 def write_enumerated_attribute(name, val) name = name.to_s return write_attribute(name, val) unless self.class.has_enumerated_attribute?(name) val = nil if val == '' val_str = val.to_s if val val_sym = val.to_sym if val unless self.class.enumerated_attribute_allows_value?(name, val_sym) raise(InvalidEnumeration, "nil is not allowed on '#{name}' attribute, set :nil=>true option", caller) unless val raise(InvalidEnumeration, ":#{val_str} is not a defined enumeration value for the '#{name}' attribute", caller) end return instance_variable_set('@'+name, val_sym) unless self.has_attribute?(name) write_attribute(name, val_str) val_sym end |