27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/riak_record/associations.rb', line 27
def belongs_to_riak(association_name, options = {})
class_name = options[:class_name] ||= association_name.to_s.split("_").collect(&:capitalize).join
foreign_key = options[:foreign_key] || "#{association_name}_id"
if options[:link]
raise ArgumentError, "link option only available for instances of RiakRecord" unless self < RiakRecord::Base
link_definitions[association_name.to_sym] = {:class_name => class_name, :foreign_key => foreign_key}
end
method_def = <<-END_OF_RUBY
def #{association_name}
@belongs_to_riak_#{association_name} = nil if @belongs_to_riak_#{association_name} && @belongs_to_riak_#{association_name}.id.to_s != Array(#{foreign_key}).first.to_s
related_id = Array(#{foreign_key}).first
@belongs_to_riak_#{association_name} ||= #{class_name}.find(related_id) if related_id
@belongs_to_riak_#{association_name}
end
def #{association_name}=(obj)
raise ArgumentError, "not an instance of RiakRecord" unless obj.kind_of?(RiakRecord::Base)
@belongs_to_riak_#{association_name} = obj
self.#{foreign_key} = obj.id
end
END_OF_RUBY
class_eval method_def
end
|