Class: Rasti::DB::Collection
- Inherits:
-
Object
- Object
- Rasti::DB::Collection
- 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
- .collection_attributes ⇒ Object
- .collection_name ⇒ Object
- .computed_attributes ⇒ Object
- .data_source_name ⇒ Object
- .foreign_key ⇒ Object
- .model ⇒ Object
- .primary_key ⇒ Object
- .queries ⇒ Object
- .relations ⇒ Object
Instance Method Summary collapse
- #bulk_delete(&block) ⇒ Object
- #bulk_insert(attributes, options = {}) ⇒ Object
- #bulk_update(attributes, &block) ⇒ Object
- #delete(primary_key) ⇒ Object
- #delete_cascade(*primary_keys) ⇒ Object
- #delete_relations(primary_key, relations) ⇒ Object
- #detect(filter = nil, &block) ⇒ Object
- #exists?(filter = nil, &block) ⇒ Boolean
- #find(primary_key) ⇒ Object
- #find_graph(primary_key, *relations) ⇒ Object
-
#initialize(environment) ⇒ Collection
constructor
A new instance of Collection.
- #insert(attributes) ⇒ Object
- #insert_relations(primary_key, relations) ⇒ Object
- #update(primary_key, attributes) ⇒ Object
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_attributes ⇒ Object
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_name ⇒ Object
12 13 14 |
# File 'lib/rasti/db/collection.rb', line 12 def collection_name @collection_name ||= underscore(demodulize(name)).to_sym end |
.computed_attributes ⇒ Object
50 51 52 |
# File 'lib/rasti/db/collection.rb', line 50 def computed_attributes @computed_attributes ||= Hash::Indifferent.new end |
.data_source_name ⇒ Object
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_key ⇒ Object
24 25 26 |
# File 'lib/rasti/db/collection.rb', line 24 def foreign_key @foreign_key ||= "#{singularize(collection_name)}_id".to_sym end |
.model ⇒ Object
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_key ⇒ Object
20 21 22 |
# File 'lib/rasti/db/collection.rb', line 20 def primary_key @primary_key ||= :id end |
.queries ⇒ Object
46 47 48 |
# File 'lib/rasti/db/collection.rb', line 46 def queries @queries ||= Hash::Indifferent.new end |
.relations ⇒ Object
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, ={}) db_attributes = attributes.map { |attrs| transform_attributes_to_db attrs } dataset.multi_insert db_attributes, 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
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 = 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 = 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 |