Module: SuperModel::Associations::HasOne

Defined in:
lib/super_model/associations/has_one.rb

Instance Method Summary collapse

Instance Method Details

#has_one(resource_name, options = {}) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/super_model/associations/has_one.rb', line 8

def has_one(resource_name, options={})
  
  options[:resource_name] ||= SuperModel::Associations.sanitize_resource_name( resource_name, :singularize )
  options[:foreign_key] ||= SuperModel::Associations.foreign_key_for( options[:resource_name], :singularize )
  
  SuperModel::Associations.def_foreign_key_methods( self, options[:foreign_key] )
  
  SuperModel::Associations.def_association_methods(
    class: self,
    resource_name: options[:resource_name],
    foreign_key: options[:foreign_key],
    getter_proc: Proc.new do
      ObjectSpace._id2ref( instance_variable_get("@#{ options[:foreign_key] }") ) if instance_variable_defined?("@#{ options[:foreign_key] }")
    end,
    setter_proc: Proc.new do |value|
      send( "#{ options[:foreign_key] }=", value.object_id )
    end
  )
  
end