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
|
# 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 = "\n def \#{association_name}\n @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\n @belongs_to_riak_\#{association_name} ||= \#{class_name}.find(Array(\#{foreign_key}).first)\n end\n\n def \#{association_name}=(obj)\n raise ArgumentError, \"not an instance of RiakRecord\" unless obj.kind_of?(RiakRecord::Base)\n @belongs_to_riak_\#{association_name} = obj\n self.\#{foreign_key} = obj.id\n end\n\n END_OF_RUBY\n\n class_eval method_def\nend\n"
|