Class: Og::RefersTo

Inherits:
Relation show all
Defined in:
lib/og/relation/refers_to.rb

Direct Known Subclasses

BelongsTo, HasOne

Instance Attribute Summary

Attributes inherited from Relation

#options

Instance Method Summary collapse

Methods inherited from Relation

#[], #[]=, enchant, #initialize, #method_missing, #polymorphic?, #polymorphic_marker?, resolve, resolve_names, #resolve_polymorphic, resolve_polymorphic_markers, resolve_polymorphic_relations, resolve_targets, symbol_to_class

Constructor Details

This class inherits a constructor from Og::Relation

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Og::Relation

Instance Method Details

#enchantObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/og/relation/refers_to.rb', line 7

def enchant
  self[:foreign_key] = "#{foreign_name || target_singular_name}_#{target_class.primary_key}"

  if self[:field]
    field = ", :field => :#{self[:field]}"
  end 

  owner_class.module_eval %{
    attr_accessor :#{target_singular_name}
    prop_accessor :#{foreign_key}, #{target_class.primary_key.klass}#{field}, :relation => true

    def #{target_singular_name}(reload = false)
      return nil if @#{foreign_key}.nil? 

      # will reload if forced or first load or
      if reload or not @#{target_singular_name}
        @#{target_singular_name} = #{target_class}[@#{foreign_key}]
      end
      @#{target_singular_name}
    end

    def #{target_singular_name}=(obj)
      @#{foreign_key} = obj.#{target_class.primary_key} if obj
    end
  }    
end