Module: Metabolical::ClassMethods

Defined in:
lib/metabolical.rb

Instance Method Summary collapse

Instance Method Details

#metabolize!Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/metabolical.rb', line 12

def metabolize!
  if self.respond_to?(:named_scope)
    include Metabolical::AR3Scopes
  else
    include Metabolical::AR4Scopes
  end

  class_eval do
    has_many :metas, :as => :metabolized, :class_name => 'Metabolical::MetaDatum' do
      def [](key)
        owner = (self.respond_to?(:proxy_association) ? self.proxy_association.owner : self.proxy_owner)
        (owner.metas.loaded? && owner.metas.detect { |m| m.key == key }) || find_by(key: key) || owner.metas.load.build(:key => key)
      end

      def []=(key, data)
        owner = (self.respond_to?(:proxy_association) ? self.proxy_association.owner : self.proxy_owner)
        meta = self[key]
        meta.data = data
        meta.save unless owner.new_record?
        meta
      end
    end
  end

end