Module: Enumerize::ActiveRecordSupport::InstanceMethods

Defined in:
lib/enumerize/activerecord.rb

Instance Method Summary collapse

Instance Method Details

#becomes(klass) ⇒ Object

Support multiple enumerized attributes


49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/enumerize/activerecord.rb', line 49

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


62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/enumerize/activerecord.rb', line 62

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?
        reloaded.send("#{attr.name}=", reloaded.send(store_attr).with_indifferent_access[attr.name])
      else
        reloaded.send("#{attr.name}=", reloaded[attr.name])
      end
    rescue ActiveModel::MissingAttributeError
    end
  end

  reloaded
end

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


40
41
42
43
44
45
46
# File 'lib/enumerize/activerecord.rb', line 40

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