Sha256: 18626c49a09e4ed1cd845607e3344f4a13f27d47fcd3620edd1d25eccae13049

Contents?: true

Size: 1 KB

Versions: 1

Compression:

Stored size: 1 KB

Contents

require 'metabolical/meta_datum'
require 'metabolical/scopes'

module Metabolical
  def self.included(klass)
    klass.extend ClassMethods
  end  
  
  module ClassMethods
    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)
            find_by_key(key) || owner.metas.detect{|m| m.key == key} || owner.metas.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
  end
    
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
metabolical-1.1.0 lib/metabolical.rb