Sha256: cc49ebc75600551df598e0f99fc01a9676f8a133c638fe9121e3e6c96a63fc72
Contents?: true
Size: 1.17 KB
Versions: 6
Compression:
Stored size: 1.17 KB
Contents
require 'og/relation' module Og class RefersTo < Relation def self.foreign_key(rel) "#{rel[:foreign_name] || rel[:target_singular_name]}_#{rel[:target_class].primary_key}" end def enchant raise "#{target_singular_name} in #{owner_class} refers to an undefined class" if target_class.nil? 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
6 entries across 6 versions & 1 rubygems