Class: Rasti::DB::Collection

Inherits:
Object
  • Object
show all
Extended by:
Sequel::Inflections
Defined in:
lib/rasti/db/collection.rb

Constant Summary collapse

QUERY_METHODS =
Query.public_instance_methods - Object.public_instance_methods

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(environment) ⇒ Collection

Returns a new instance of Collection.



105
106
107
# File 'lib/rasti/db/collection.rb', line 105

def initialize(environment)
  @environment = environment
end

Class Method Details

.collection_attributesObject



16
17
18
# File 'lib/rasti/db/collection.rb', line 16

def collection_attributes
  @collection_attributes ||= model.attribute_names - relations.keys - computed_attributes.keys
end

.collection_nameObject



12
13
14
# File 'lib/rasti/db/collection.rb', line 12

def collection_name
  @collection_name ||= underscore(demodulize(name)).to_sym
end

.computed_attributesObject



50
51
52
# File 'lib/rasti/db/collection.rb', line 50

def computed_attributes
  @computed_attributes ||= Hash::Indifferent.new
end

.data_source_nameObject



38
39
40
# File 'lib/rasti/db/collection.rb', line 38

def data_source_name
  @data_source_name ||= superclass.respond_to?(:data_source_name) ? superclass.data_source_name : :default
end

.foreign_keyObject



24
25
26
# File 'lib/rasti/db/collection.rb', line 24

def foreign_key
  @foreign_key ||= "#{singularize(collection_name)}_id".to_sym
end

.modelObject



28
29
30
31
32
33
34
35
36
# File 'lib/rasti/db/collection.rb', line 28

def model
  if @model.is_a? Class
    @model
  elsif @model
    @model = Consty.get @model, self
  else
    @model = Consty.get demodulize(singularize(name)), self
  end
end

.primary_keyObject



20
21
22
# File 'lib/rasti/db/collection.rb', line 20

def primary_key
  @primary_key ||= :id
end

.queriesObject



46
47
48
# File 'lib/rasti/db/collection.rb', line 46

def queries
  @queries ||= Hash::Indifferent.new
end

.relationsObject



42
43
44
# File 'lib/rasti/db/collection.rb', line 42

def relations
  @relations ||= Hash::Indifferent.new
end

Instance Method Details

#bulk_delete(&block) ⇒ Object



159
160
161
162
# File 'lib/rasti/db/collection.rb', line 159

def bulk_delete(&block)
  build_query(&block).instance_eval { dataset.delete }
  nil
end

#bulk_insert(attributes, options = {}) ⇒ Object



125
126
127
128
# File 'lib/rasti/db/collection.rb', line 125

def bulk_insert(attributes, options={})
  db_attributes = attributes.map { |attrs| transform_attributes_to_db attrs }
  dataset.multi_insert db_attributes, options
end

#bulk_update(attributes, &block) ⇒ Object



148
149
150
151
152
# File 'lib/rasti/db/collection.rb', line 148

def bulk_update(attributes, &block)
  db_attributes = transform_attributes_to_db attributes
  build_query(&block).instance_eval { dataset.update db_attributes }
  nil
end

#delete(primary_key) ⇒ Object



154
155
156
157
# File 'lib/rasti/db/collection.rb', line 154

def delete(primary_key)
  dataset.where(self.class.primary_key => primary_key).delete
  nil
end

#delete_cascade(*primary_keys) ⇒ Object



174
175
176
177
178
179
180
# File 'lib/rasti/db/collection.rb', line 174

def delete_cascade(*primary_keys)
  data_source.db.transaction do
    delete_cascade_relations primary_keys
    bulk_delete { |q| q.where self.class.primary_key => primary_keys }
  end
  nil
end

#delete_relations(primary_key, relations) ⇒ Object



164
165
166
167
168
169
170
171
172
# File 'lib/rasti/db/collection.rb', line 164

def delete_relations(primary_key, relations)
  data_source.db.transaction do
    relations.each do |relation_name, relation_primary_keys|
      relation = self.class.relations[relation_name]
      delete_relation_table relation, primary_key, relation_primary_keys
    end
  end
  nil
end

#detect(filter = nil, &block) ⇒ Object



194
195
196
# File 'lib/rasti/db/collection.rb', line 194

def detect(filter=nil, &block)
  build_query(filter, &block).first
end

#exists?(filter = nil, &block) ⇒ Boolean

Returns:

  • (Boolean)


190
191
192
# File 'lib/rasti/db/collection.rb', line 190

def exists?(filter=nil, &block)
  build_query(filter, &block).any?
end

#find(primary_key) ⇒ Object



182
183
184
# File 'lib/rasti/db/collection.rb', line 182

def find(primary_key)
  where(self.class.primary_key => primary_key).first
end

#find_graph(primary_key, *relations) ⇒ Object



186
187
188
# File 'lib/rasti/db/collection.rb', line 186

def find_graph(primary_key, *relations)
  where(self.class.primary_key => primary_key).graph(*relations).first
end

#insert(attributes) ⇒ Object



115
116
117
118
119
120
121
122
123
# File 'lib/rasti/db/collection.rb', line 115

def insert(attributes)
  data_source.db.transaction do
    db_attributes = transform_attributes_to_db attributes
    collection_attributes, relations_primary_keys = split_related_attributes db_attributes
    primary_key = dataset.insert collection_attributes
    save_relations primary_key, relations_primary_keys
    primary_key
  end
end

#insert_relations(primary_key, relations) ⇒ Object



130
131
132
133
134
135
136
# File 'lib/rasti/db/collection.rb', line 130

def insert_relations(primary_key, relations)
  relations.each do |relation_name, relation_primary_keys|
    relation = self.class.relations[relation_name]
    insert_relation_table relation, primary_key, relation_primary_keys
  end
  nil
end

#update(primary_key, attributes) ⇒ Object



138
139
140
141
142
143
144
145
146
# File 'lib/rasti/db/collection.rb', line 138

def update(primary_key, attributes)
  data_source.db.transaction do
    db_attributes = transform_attributes_to_db attributes
    collection_attributes, relations_primary_keys = split_related_attributes db_attributes
    dataset.where(self.class.primary_key => primary_key).update(collection_attributes) unless collection_attributes.empty?
    save_relations primary_key, relations_primary_keys
  end
  nil
end