Sha256: a7ff869d5aa3b575e78169ebfe5c5fa90635baa390ac8a73185882c2df80a92e

Contents?: true

Size: 1.29 KB

Versions: 10

Compression:

Stored size: 1.29 KB

Contents

module ActiveRecord
  module AttributeMethods
    module Read
      module ClassMethods
        def internal_attribute_access_code(attr_name, cast_code)
          # CPK - this is a really horrid hack, needed to get
          # right class namespace :(
          if cast_code.match(/^ActiveRecord/)
            cast_code = "::#{cast_code}"
          end
          access_code = "(v=@attributes[attr_name]) && #{cast_code}"

          # CPK
          #unless attr_name == primary_key
          primary_keys = Array(self.primary_key)
          unless primary_keys.include?(attr_name.to_s)
            access_code.insert(0, "missing_attribute(attr_name, caller) unless @attributes.has_key?(attr_name); ")
          end

          if cache_attribute?(attr_name)
            access_code = "@attributes_cache[attr_name] ||= (#{access_code})"
          end

          "attr_name = '#{attr_name}'; #{access_code}"
        end
      end

      rails_read_attribute = instance_method(:read_attribute)
      define_method(:read_attribute) do |attr_name|
        if attr_name.kind_of?(Array)
          attr_name.map {|name| read_attribute(name)}.to_composite_keys
        else
          rails_read_attribute.bind(self).(attr_name)
        end
      end
    end
  end
end

ActiveRecord::Base.class_eval do
  alias :[] :read_attribute
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
composite_primary_keys-6.0.8 lib/composite_primary_keys/attribute_methods/read.rb
composite_primary_keys-6.0.7 lib/composite_primary_keys/attribute_methods/read.rb
composite_primary_keys-7.0.2 lib/composite_primary_keys/attribute_methods/read.rb
composite_primary_keys-7.0.1 lib/composite_primary_keys/attribute_methods/read.rb
composite_primary_keys-7.0.0 lib/composite_primary_keys/attribute_methods/read.rb
composite_primary_keys-6.0.6 lib/composite_primary_keys/attribute_methods/read.rb
composite_primary_keys-6.0.5 lib/composite_primary_keys/attribute_methods/read.rb
composite_primary_keys-6.0.3 lib/composite_primary_keys/attribute_methods/read.rb
composite_primary_keys-6.0.1 lib/composite_primary_keys/attribute_methods/read.rb
composite_primary_keys-6.0.0 lib/composite_primary_keys/attribute_methods/read.rb