Module: RiakRecord::Associations::ClassMethods

Defined in:
lib/riak_record/associations.rb

Instance Method Summary collapse

Instance Method Details

#belongs_to_riak(association_name, options = {}) ⇒ Object



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"

#has_many_riak(association_name, options = {}) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/riak_record/associations.rb', line 54

def has_many_riak(association_name, options = {})
  class_name = options[:class_name]
  foreign_key = options[:foreign_key]
  class_name && foreign_key or raise ArgumentError, "has_many_riak requires class_name and foreign_key options"

  method_def = "\n  def \#{association_name}\n    @has_many_riak_\#{association_name} ||= \#{class_name}.where(:\#{foreign_key} => self.id.to_s)\n  end\n\n  END_OF_RUBY\n\n  class_eval method_def\nend\n"


23
24
25
# File 'lib/riak_record/associations.rb', line 23

def link_definitions
  @link_definitions ||= {}
end