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
29
30
# 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}}
  CassandraObject::Base.with_connection(key, :write) do
    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
  end
  if has_inverse? && set_inverse
    inverse.set_inverse(record, owner)
  end
end

#column_familyObject



36
37
38
# File 'lib/cassandra_object/associations/one_to_many.rb', line 36

def column_family
  @owner_class.relationships_column_family
end

#connectionObject



40
41
42
# File 'lib/cassandra_object/associations/one_to_many.rb', line 40

def connection
  @owner_class.connection
end

#define_methods!Object



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

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)


52
53
54
# File 'lib/cassandra_object/associations/one_to_many.rb', line 52

def has_inverse?
  @options[:inverse_of]
end

#inverseObject



56
57
58
# File 'lib/cassandra_object/associations/one_to_many.rb', line 56

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

#new_keyObject



32
33
34
# File 'lib/cassandra_object/associations/one_to_many.rb', line 32

def new_key
  SimpleUUID::UUID.new
end

#new_proxy(owner) ⇒ Object



48
49
50
# File 'lib/cassandra_object/associations/one_to_many.rb', line 48

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

#reversed?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/cassandra_object/associations/one_to_many.rb', line 64

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

#set_inverse(owner, record) ⇒ Object



60
61
62
# File 'lib/cassandra_object/associations/one_to_many.rb', line 60

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

#target_classObject



44
45
46
# File 'lib/cassandra_object/associations/one_to_many.rb', line 44

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