Module: ActiveRecord::AttributeMethods::Read::ClassMethods

Defined in:
lib/composite_primary_keys/attribute_methods/read.rb

Instance Method Summary collapse

Instance Method Details

#internal_attribute_access_code(attr_name, cast_code) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/composite_primary_keys/attribute_methods/read.rb', line 5

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