Class: CassandraObject::Associations::OneToMany

Inherits:
Object
  • Object
show all
Defined in:
lib/cassandra_object/associations/one_to_many.rb

Instance Method Summary collapse

Constructor Details

#initialize(association_name, owner_class, options) ⇒ OneToMany

Returns a new instance of OneToMany.



4
5
6
7
8
9
10
11
# File 'lib/cassandra_object/associations/one_to_many.rb', line 4

def initialize(association_name, owner_class, options)
  @association_name  = association_name.to_s
  @owner_class       = owner_class
  @target_class_name = options[:class_name] || association_name.to_s.singularize.camelize
  @options           = options

  define_methods!
end

Instance Method Details

#add(owner, record, set_inverse = true) ⇒ Object



19
20
21
22
23
24
25
26
27
28
# File 'lib/cassandra_object/associations/one_to_many.rb', line 19

def add(owner, record, set_inverse = true)
  key = owner.key
  attributes = {@association_name=>{new_key=>record.key.to_s}}
  ActiveSupport::Notifications.instrument("insert.cassandra_object", :column_family => column_family, :key => key, :attributes => attributes) do
    connection.insert(column_family, key.to_s, attributes, :consistency => @owner_class.thrift_write_consistency)
  end
  if has_inverse? && set_inverse
    inverse.set_inverse(record, owner)
  end
end

#column_familyObject



34
35
36
# File 'lib/cassandra_object/associations/one_to_many.rb', line 34

def column_family
  @owner_class.relationships_column_family
end

#connectionObject



38
39
40
# File 'lib/cassandra_object/associations/one_to_many.rb', line 38

def connection
  @owner_class.connection
end

#define_methods!Object



66
67
68
69
70
71
72
# File 'lib/cassandra_object/associations/one_to_many.rb', line 66

def define_methods!
  @owner_class.class_eval <<-eos
  def #{@association_name}
    @_#{@association_name} ||= self.class.associations[:#{@association_name}].new_proxy(self)
  end
  eos
end

#find(owner, options = {}) ⇒ Object



13
14
15
16
17
# File 'lib/cassandra_object/associations/one_to_many.rb', line 13

def find(owner, options = {})
  reversed = options.has_key?(:reversed) ? options[:reversed] : reversed?
  cursor   = CassandraObject::Cursor.new(target_class, column_family, owner.key.to_s, @association_name, :start_after => options[:start_after], :reversed => reversed)
  cursor.find(options[:limit] || 100)
end

#has_inverse?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/cassandra_object/associations/one_to_many.rb', line 50

def has_inverse?
  @options[:inverse_of]
end

#inverseObject



54
55
56
# File 'lib/cassandra_object/associations/one_to_many.rb', line 54

def inverse
  has_inverse? && target_class.associations[@options[:inverse_of]]
end

#new_keyObject



30
31
32
# File 'lib/cassandra_object/associations/one_to_many.rb', line 30

def new_key
  SimpleUUID::UUID.new
end

#new_proxy(owner) ⇒ Object



46
47
48
# File 'lib/cassandra_object/associations/one_to_many.rb', line 46

def new_proxy(owner)
  OneToManyAssociationProxy.new(self, owner)
end

#reversed?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/cassandra_object/associations/one_to_many.rb', line 62

def reversed?
  @options[:reversed] == true
end

#set_inverse(owner, record) ⇒ Object



58
59
60
# File 'lib/cassandra_object/associations/one_to_many.rb', line 58

def set_inverse(owner, record)
  add(owner, record, false)
end

#target_classObject



42
43
44
# File 'lib/cassandra_object/associations/one_to_many.rb', line 42

def target_class
  @target_class ||= @target_class_name.constantize
end