Sha256: 5a3495a990c693604748c6348c5a4d9cdf36e15d879fa4d651d9acb9e08d55e4

Contents?: true

Size: 960 Bytes

Versions: 2

Compression:

Stored size: 960 Bytes

Contents

require 'og/relation'

module Og

class RefersTo < Relation

  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

end

end

# * George Moschovitis <gm@navel.gr>
# * Michael Neumann <mneumann@ntecs.de>

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
og-0.24.0 lib/og/relation/refers_to.rb
og-0.25.0 lib/og/relation/refers_to.rb