Module: Enumerize::ActiveRecordSupport::InstanceMethods

Defined in:
lib/enumerize/activerecord.rb

Instance Method Summary collapse

Instance Method Details

#becomes(klass) ⇒ Object

Support multiple enumerized attributes



59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/enumerize/activerecord.rb', line 59

def becomes(klass)
  became = super
  klass.enumerized_attributes.each do |attr|
    # Rescue when column associated to the enum does not exist.
    begin
      became.send("#{attr.name}=", send(attr.name))
    rescue ActiveModel::MissingAttributeError
    end
  end

  became
end

#reload(options = nil) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/enumerize/activerecord.rb', line 72

def reload(options = nil)
  reloaded = super

  reloaded.class.enumerized_attributes.each do |attr|
    begin
      # Checks first if the enumerized attribute is in ActiveRecord::Store
      store_attr, _ = reloaded.class.stored_attributes.detect do |_store_attr, keys|
        keys.include?(attr.name)
      end

      if store_attr.present?
        unless reloaded.send(store_attr).nil?
          reloaded.send("#{attr.name}=", reloaded.send(store_attr).with_indifferent_access[attr.name])
        end
      else
        reloaded.send("#{attr.name}=", reloaded[attr.name])
      end
    rescue ActiveModel::MissingAttributeError
    end
  end

  reloaded
end

#write_attribute(attr_name, value, *options) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/enumerize/activerecord.rb', line 50

def write_attribute(attr_name, value, *options)
  if self.class.enumerized_attributes[attr_name]
    _enumerized_values_for_validation[attr_name.to_s] = value
  end

  super
end