believer 0.2.17 → 0.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +6 -0
- data/lib/believer.rb +2 -0
- data/lib/believer/purging.rb +38 -0
- data/lib/believer/query.rb +2 -31
- data/lib/believer/updating.rb +21 -0
- data/lib/believer/version.rb +1 -1
- data/spec/believer/updating_spec.rb +24 -0
- metadata +6 -2
data/README.md
CHANGED
@@ -173,6 +173,12 @@ Album.allow_filtering(true) # -> SELECT * FROM albums ALLOW FILTERING
|
|
173
173
|
Album.allow_filtering(false) # -> SELECT * FROM albums
|
174
174
|
```
|
175
175
|
|
176
|
+
#### Query methods
|
177
|
+
All query instances are decorated with a few data manipulation methods:
|
178
|
+
* update_all(values): updates all objects returned by the query with the given values
|
179
|
+
* destroy_all: destroys all objects returned by the query. This first loads the object before deleting, allowing callbacks to be called.
|
180
|
+
* destroy_all: directly deletes rows the query references. No object are loaded.
|
181
|
+
|
176
182
|
#### Method chaining
|
177
183
|
All query methods can be chained.
|
178
184
|
This is done by creating and returning a clone of the receiver. The clone is the receiver of the query method.
|
data/lib/believer.rb
CHANGED
@@ -50,6 +50,8 @@ require 'believer/limit'
|
|
50
50
|
require 'believer/order_by'
|
51
51
|
require 'believer/filter_command'
|
52
52
|
require 'believer/act_as_enumerable'
|
53
|
+
require 'believer/updating'
|
54
|
+
require 'believer/purging'
|
53
55
|
require 'believer/query'
|
54
56
|
require 'believer/empty_result'
|
55
57
|
require 'believer/delete'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Believer
|
2
|
+
module Purging
|
3
|
+
|
4
|
+
# Destroys all objects returned by the query. This first loads the object before deleting, allowing callbacks to be called.
|
5
|
+
def destroy_all
|
6
|
+
objects = to_a
|
7
|
+
objects.each do |obj|
|
8
|
+
obj.destroy
|
9
|
+
end
|
10
|
+
objects.size
|
11
|
+
end
|
12
|
+
|
13
|
+
# Directly deletes rows the query references. No object are loaded.
|
14
|
+
def delete_all
|
15
|
+
del = Delete.new(:record_class => self.record_class)
|
16
|
+
del.wheres = self.wheres.dup
|
17
|
+
del.execute
|
18
|
+
end
|
19
|
+
|
20
|
+
def delete_all_chunked(options = {})
|
21
|
+
cnt = count
|
22
|
+
chunk_size = options[:delete_batch_chunk_size] || (self.limit_to.nil? ? nil : self.limit_to.size) || cnt
|
23
|
+
key_cols = self.record_class.primary_key_columns
|
24
|
+
deleted_count = 0
|
25
|
+
while deleted_count < cnt
|
26
|
+
batch = Batch.new(:record_class => @record_class)
|
27
|
+
rows_to_delete = clone.select(key_cols).limit(chunk_size).execute
|
28
|
+
rows_to_delete.each do |row_to_delete|
|
29
|
+
batch << Delete.new(:record_class => self.record_class).where(row_to_delete)
|
30
|
+
end
|
31
|
+
batch.execute
|
32
|
+
deleted_count += batch.commands.size
|
33
|
+
end
|
34
|
+
deleted_count
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
data/lib/believer/query.rb
CHANGED
@@ -3,6 +3,8 @@ require 'believer/extending'
|
|
3
3
|
module Believer
|
4
4
|
class Query < FilterCommand
|
5
5
|
include Extending
|
6
|
+
include Updating
|
7
|
+
include Purging
|
6
8
|
include ActAsEnumerable
|
7
9
|
|
8
10
|
DEFAULT_FILTER_LIMIT = 10000
|
@@ -99,37 +101,6 @@ module Believer
|
|
99
101
|
cql
|
100
102
|
end
|
101
103
|
|
102
|
-
def destroy_all
|
103
|
-
objects = to_a
|
104
|
-
objects.each do |obj|
|
105
|
-
obj.destroy
|
106
|
-
end
|
107
|
-
objects.size
|
108
|
-
end
|
109
|
-
|
110
|
-
def delete_all
|
111
|
-
del = Delete.new(:record_class => self.record_class)
|
112
|
-
del.wheres = self.wheres.dup
|
113
|
-
del.execute
|
114
|
-
end
|
115
|
-
|
116
|
-
def delete_all_chunked(options = {})
|
117
|
-
cnt = count
|
118
|
-
chunk_size = options[:delete_batch_chunk_size] || (self.limit_to.nil? ? nil : self.limit_to.size) || cnt
|
119
|
-
key_cols = self.record_class.primary_key_columns
|
120
|
-
deleted_count = 0
|
121
|
-
while deleted_count < cnt
|
122
|
-
batch = Batch.new(:record_class => @record_class)
|
123
|
-
rows_to_delete = clone.select(key_cols).limit(chunk_size).execute
|
124
|
-
rows_to_delete.each do |row_to_delete|
|
125
|
-
batch << Delete.new(:record_class => self.record_class).where(row_to_delete)
|
126
|
-
end
|
127
|
-
batch.execute
|
128
|
-
deleted_count += batch.commands.size
|
129
|
-
end
|
130
|
-
deleted_count
|
131
|
-
end
|
132
|
-
|
133
104
|
def to_a
|
134
105
|
if @loaded_objects.nil?
|
135
106
|
result = execute
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Believer
|
2
|
+
module Updating
|
3
|
+
|
4
|
+
# Updates all objects returned by the query with the given values
|
5
|
+
# @param values [Hash] a hash of new values
|
6
|
+
def update_all(values)
|
7
|
+
q = clone
|
8
|
+
q.selects = primary_key_columns
|
9
|
+
|
10
|
+
batch = Batch.new(:record_class => record_class)
|
11
|
+
|
12
|
+
q.each do |obj|
|
13
|
+
update = Update.create(obj)
|
14
|
+
update.values = values
|
15
|
+
batch << update
|
16
|
+
end
|
17
|
+
batch.execute
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
data/lib/believer/version.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Believer::Updating do
|
4
|
+
|
5
|
+
it "should update all" do
|
6
|
+
Test::Album.create(
|
7
|
+
[
|
8
|
+
{:artist_name => 'Beatles', :name => 'Help', :release_date => Time.utc(1965)},
|
9
|
+
{:artist_name => 'Jethro Tull', :name => 'Aqualung', :release_date => Time.utc(1971)},
|
10
|
+
{:artist_name => 'Jethro Tull', :name => 'Standup', :release_date => Time.utc(1969)},
|
11
|
+
{:artist_name => 'Michael Jackson', :name => 'Thriller', :release_date => Time.utc(1982)}
|
12
|
+
])
|
13
|
+
|
14
|
+
Test::Album.where(:artist_name => 'Jethro Tull').update_all(:release_date => Time.utc(2000))
|
15
|
+
albums = Test::Album.where(:artist_name => 'Jethro Tull').to_a
|
16
|
+
albums.each do |album|
|
17
|
+
expect(album.release_date).to eql(Time.utc(2000))
|
18
|
+
end
|
19
|
+
|
20
|
+
help = Test::Album.where(:artist_name => 'Beatles', :name => 'Help').first
|
21
|
+
expect(help.release_date).to eql(Time.utc(1965))
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: believer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.18
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-11-
|
12
|
+
date: 2013-11-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -162,6 +162,7 @@ files:
|
|
162
162
|
- lib/believer/observer.rb
|
163
163
|
- lib/believer/order_by.rb
|
164
164
|
- lib/believer/persistence.rb
|
165
|
+
- lib/believer/purging.rb
|
165
166
|
- lib/believer/query.rb
|
166
167
|
- lib/believer/querying.rb
|
167
168
|
- lib/believer/relation.rb
|
@@ -169,6 +170,7 @@ files:
|
|
169
170
|
- lib/believer/test/database.rb
|
170
171
|
- lib/believer/test/test_run_life_cycle.rb
|
171
172
|
- lib/believer/update.rb
|
173
|
+
- lib/believer/updating.rb
|
172
174
|
- lib/believer/values.rb
|
173
175
|
- lib/believer/version.rb
|
174
176
|
- lib/believer/where_clause.rb
|
@@ -194,6 +196,7 @@ files:
|
|
194
196
|
- spec/believer/test_run_life_cycle_spec.rb
|
195
197
|
- spec/believer/time_series_spec.rb
|
196
198
|
- spec/believer/update_spec.rb
|
199
|
+
- spec/believer/updating_spec.rb
|
197
200
|
- spec/believer/where_spec.rb
|
198
201
|
- spec/spec_helper.rb
|
199
202
|
- spec/support/setup_database.rb
|
@@ -244,6 +247,7 @@ test_files:
|
|
244
247
|
- spec/believer/test_run_life_cycle_spec.rb
|
245
248
|
- spec/believer/time_series_spec.rb
|
246
249
|
- spec/believer/update_spec.rb
|
250
|
+
- spec/believer/updating_spec.rb
|
247
251
|
- spec/believer/where_spec.rb
|
248
252
|
- spec/spec_helper.rb
|
249
253
|
- spec/support/setup_database.rb
|