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
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

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



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

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 = <<-END_OF_RUBY

  def #{association_name}
    @has_many_riak_#{association_name} ||= #{class_name}.where(:#{foreign_key} => self.id.to_s)
  end

  END_OF_RUBY

  class_eval method_def
end


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

def link_definitions
  @link_definitions ||= {}
end