ar-ondemand 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.gitignore +8 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +63 -0
- data/README.md +3 -0
- data/lib/ar-ondemand/delete_all_by_pk.rb +55 -0
- data/lib/ar-ondemand/version.rb +1 -1
- data/lib/ar-ondemand.rb +2 -1
- data/solano.yml +8 -0
- data/spec/app/models/audit_record.rb +3 -0
- data/spec/db/schema.rb +11 -0
- data/spec/db/seeds.rb +0 -0
- data/spec/factories/audit_record.rb +11 -0
- data/spec/lib/for_reading_spec.rb +51 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/support/active_record.rb +18 -0
- metadata +13 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NWZmY2Y4ZmY1MzQxODNmZjc1NDI2NmY4OTY3MTdkZGQ1OGZmZmZmMA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Yzg2YzI2ZTA2MmMwNjM0OThjYTJjZTBlYmIyYTgwMTE0ODE0NDM2MQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OWNjYjA5MzcwMGZjNWZiOWZlZDM4MjIzMTFjZTQ2ZDBhNWJjZTI1NzYxNjdh
|
10
|
+
NDYwM2JjOTg3ZjQxYTljMDYxYzQ1YjNhYWQxNjZhYjU5NDFhMGNmZWIwZDdk
|
11
|
+
YzhmZjkxZWQxNTI3OGE1ZjYxNDBjNmY5YmY1ZDk1NWE1NzExZGU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NjNiMTk3MjUwNWI3M2VhMmJmZmVmMjA2Mzg4YmZkMWNkNzFjYTNlMTYzNTgw
|
14
|
+
YWRkMTQwZWIwOTMyOTE3MGE1NzgwNTRiMDZmOWE0YmUwN2FhOTNjNzc2MDk1
|
15
|
+
NDkyYmNmNjdlODBkYTlkMDNhYjRlYzY1MWRlMzk3MmE1ODQ2OTg=
|
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
group :test, :development do
|
6
|
+
if RUBY_ENGINE == 'jruby'
|
7
|
+
gem 'activerecord-jdbc-adapter'
|
8
|
+
else
|
9
|
+
gem 'sqlite3'
|
10
|
+
end
|
11
|
+
|
12
|
+
gem 'rspec'
|
13
|
+
gem 'factory_girl'
|
14
|
+
gem 'shoulda'
|
15
|
+
gem 'shoulda-matchers'
|
16
|
+
gem 'pry'
|
17
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
ar-ondemand (1.0.1)
|
5
|
+
activerecord (>= 3.2)
|
6
|
+
activesupport (>= 3.2)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
activemodel (3.2.21)
|
12
|
+
activesupport (= 3.2.21)
|
13
|
+
builder (~> 3.0.0)
|
14
|
+
activerecord (3.2.21)
|
15
|
+
activemodel (= 3.2.21)
|
16
|
+
activesupport (= 3.2.21)
|
17
|
+
arel (~> 3.0.2)
|
18
|
+
tzinfo (~> 0.3.29)
|
19
|
+
activesupport (3.2.21)
|
20
|
+
i18n (~> 0.6, >= 0.6.4)
|
21
|
+
multi_json (~> 1.0)
|
22
|
+
arel (3.0.3)
|
23
|
+
builder (3.0.4)
|
24
|
+
coderay (1.1.0)
|
25
|
+
diff-lcs (1.2.5)
|
26
|
+
factory_girl (4.5.0)
|
27
|
+
activesupport (>= 3.0.0)
|
28
|
+
i18n (0.6.11)
|
29
|
+
method_source (0.8.2)
|
30
|
+
multi_json (1.10.1)
|
31
|
+
pry (0.10.1)
|
32
|
+
coderay (~> 1.1.0)
|
33
|
+
method_source (~> 0.8.1)
|
34
|
+
slop (~> 3.4)
|
35
|
+
rspec (2.99.0)
|
36
|
+
rspec-core (~> 2.99.0)
|
37
|
+
rspec-expectations (~> 2.99.0)
|
38
|
+
rspec-mocks (~> 2.99.0)
|
39
|
+
rspec-core (2.99.2)
|
40
|
+
rspec-expectations (2.99.2)
|
41
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
42
|
+
rspec-mocks (2.99.2)
|
43
|
+
shoulda (3.5.0)
|
44
|
+
shoulda-context (~> 1.0, >= 1.0.1)
|
45
|
+
shoulda-matchers (>= 1.4.1, < 3.0)
|
46
|
+
shoulda-context (1.2.1)
|
47
|
+
shoulda-matchers (2.7.0)
|
48
|
+
activesupport (>= 3.0.0)
|
49
|
+
slop (3.6.0)
|
50
|
+
sqlite3 (1.3.10)
|
51
|
+
tzinfo (0.3.42)
|
52
|
+
|
53
|
+
PLATFORMS
|
54
|
+
ruby
|
55
|
+
|
56
|
+
DEPENDENCIES
|
57
|
+
ar-ondemand!
|
58
|
+
factory_girl
|
59
|
+
pry
|
60
|
+
rspec
|
61
|
+
shoulda
|
62
|
+
shoulda-matchers
|
63
|
+
sqlite3
|
data/README.md
CHANGED
@@ -1 +1,4 @@
|
|
1
1
|
# ar-ondemand
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/ar-ondemand.svg)](http://badge.fury.io/rb/ar-ondemand)
|
4
|
+
[![](https://ci.solanolabs.com:443/cloudhealthtech/ar-ondemand/badges/170027.png?badge_token=bd73a19d5421a68f29e22ad15ad080cbabc56ba7)](https://ci.solanolabs.com:443/cloudhealthtech/ar-ondemand/suites/170027)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module OnDemand
|
5
|
+
module DeleteAllByPkExtension
|
6
|
+
extend ::ActiveSupport::Concern
|
7
|
+
|
8
|
+
# Ripped from the find_in_batches function, but customized to return an ::ActiveRecord::OnDemand::ResultSet
|
9
|
+
def delete_all_by_pk(options = {})
|
10
|
+
relation = self
|
11
|
+
|
12
|
+
unless arel.orders.blank? && arel.taken.blank?
|
13
|
+
ActiveRecord::Base.logger.warn("Scoped order and limit are ignored, it's forced to be batch order and batch size")
|
14
|
+
end
|
15
|
+
|
16
|
+
if (finder_options = options.except(:start, :batch_size)).present?
|
17
|
+
raise "You can't specify an order, it's forced to be #{batch_order}" if options[:order].present?
|
18
|
+
raise "You can't specify a limit, it's forced to be the batch_size" if options[:limit].present?
|
19
|
+
|
20
|
+
relation = apply_finder_options(finder_options)
|
21
|
+
end
|
22
|
+
|
23
|
+
start = options.delete(:start)
|
24
|
+
batch_size = options.delete(:batch_size) || 1000
|
25
|
+
|
26
|
+
relation = relation.reorder(batch_order).limit(batch_size)
|
27
|
+
records = start ? query(relation.where(table[primary_key].gteq(start))) : query(relation)
|
28
|
+
|
29
|
+
while records.any?
|
30
|
+
records_size = records.size
|
31
|
+
primary_key_offset = records.last
|
32
|
+
|
33
|
+
self.unscoped.where(id: records).delete_all
|
34
|
+
|
35
|
+
break if records_size < batch_size
|
36
|
+
|
37
|
+
records = query relation.where(table[primary_key].gt(primary_key_offset))
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def query(ar)
|
44
|
+
results = ::ActiveRecord::Base.connection.exec_query ar.select([table[primary_key]]).to_sql
|
45
|
+
results.rows.flatten
|
46
|
+
end
|
47
|
+
|
48
|
+
def batch_order
|
49
|
+
"#{quoted_table_name}.#{quoted_primary_key} ASC"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
::ActiveRecord::Relation.send(:include, ::ActiveRecord::OnDemand::DeleteAllByPkExtension)
|
data/lib/ar-ondemand/version.rb
CHANGED
data/lib/ar-ondemand.rb
CHANGED
data/solano.yml
ADDED
data/spec/db/schema.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
ActiveRecord::Schema.define do
|
2
|
+
create_table "audit_records", :force => true do |t|
|
3
|
+
t.integer "customer_id"
|
4
|
+
t.integer "model_id"
|
5
|
+
t.integer "model_type_id"
|
6
|
+
t.string "action", :limit => 6
|
7
|
+
t.text "description"
|
8
|
+
t.datetime "created_at", :null => false
|
9
|
+
t.datetime "updated_at", :null => false
|
10
|
+
end
|
11
|
+
end
|
data/spec/db/seeds.rb
ADDED
File without changes
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# Read about factories at https://github.com/thoughtbot/factory_girl
|
2
|
+
|
3
|
+
FactoryGirl.define do
|
4
|
+
factory :audit_record do
|
5
|
+
customer_id 1
|
6
|
+
sequence(:model_id)
|
7
|
+
model_type_id { rand(100_000) }
|
8
|
+
action 'create'
|
9
|
+
description { (0...50).map { ('a'..'z').to_a[rand(26)] }.join }
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ar-ondemand'
|
3
|
+
|
4
|
+
describe 'ForReading' do
|
5
|
+
context 'Testing' do
|
6
|
+
context 'Ensure Persistance Works' do
|
7
|
+
before(:each) do
|
8
|
+
create(:audit_record)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should do persist' do
|
12
|
+
AuditRecord.all.length.should eq(1)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should do foo' do
|
16
|
+
AuditRecord.first.action.should eq('create')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'Iterating' do
|
21
|
+
before(:each) do
|
22
|
+
(1..100).each do
|
23
|
+
create(:audit_record)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should support iterating' do
|
28
|
+
total = 0
|
29
|
+
AuditRecord.where(customer_id: 1).for_reading.each do |r|
|
30
|
+
total += 1
|
31
|
+
end
|
32
|
+
total.should eq(100)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should produce same results as regular iterating' do
|
36
|
+
records_a = Set.new
|
37
|
+
AuditRecord.where(customer_id: 1).for_reading.each do |r|
|
38
|
+
records_a.add r.id
|
39
|
+
end
|
40
|
+
|
41
|
+
records_b = Set.new
|
42
|
+
AuditRecord.where(customer_id: 1).each do |r|
|
43
|
+
records_b.add r.id
|
44
|
+
end
|
45
|
+
|
46
|
+
records_a.should eq(records_b)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'rspec/core'
|
3
|
+
require 'rspec/expectations'
|
4
|
+
require 'active_support'
|
5
|
+
require 'active_record'
|
6
|
+
|
7
|
+
I18n.enforce_available_locales = false
|
8
|
+
|
9
|
+
Dir['spec/support/**/*.rb'].sort.each { |f| load f }
|
10
|
+
|
11
|
+
require 'factory_girl'
|
12
|
+
|
13
|
+
RSpec.configure do |config|
|
14
|
+
config.include FactoryGirl::Syntax::Methods
|
15
|
+
end
|
16
|
+
|
17
|
+
FactoryGirl.find_definitions
|
18
|
+
|
19
|
+
Dir['spec/app/models/*.rb'].sort.each { |f| load f }
|
@@ -0,0 +1,18 @@
|
|
1
|
+
ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
|
2
|
+
|
3
|
+
ActiveRecord::Migration.suppress_messages do
|
4
|
+
load 'spec/db/schema.rb'
|
5
|
+
load 'spec/db/seeds.rb'
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'shoulda'
|
9
|
+
require 'shoulda/matchers/integrations/rspec'
|
10
|
+
|
11
|
+
RSpec.configure do |config|
|
12
|
+
config.around do |example|
|
13
|
+
ActiveRecord::Base.transaction do
|
14
|
+
example.run
|
15
|
+
raise ActiveRecord::Rollback
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ar-ondemand
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Frank
|
@@ -47,14 +47,26 @@ executables: []
|
|
47
47
|
extensions: []
|
48
48
|
extra_rdoc_files: []
|
49
49
|
files:
|
50
|
+
- .gitignore
|
51
|
+
- Gemfile
|
52
|
+
- Gemfile.lock
|
50
53
|
- README.md
|
51
54
|
- ar-ondemand.gemspec
|
52
55
|
- lib/ar-ondemand.rb
|
56
|
+
- lib/ar-ondemand/delete_all_by_pk.rb
|
53
57
|
- lib/ar-ondemand/for_reading.rb
|
54
58
|
- lib/ar-ondemand/on_demand.rb
|
55
59
|
- lib/ar-ondemand/record.rb
|
56
60
|
- lib/ar-ondemand/result.rb
|
57
61
|
- lib/ar-ondemand/version.rb
|
62
|
+
- solano.yml
|
63
|
+
- spec/app/models/audit_record.rb
|
64
|
+
- spec/db/schema.rb
|
65
|
+
- spec/db/seeds.rb
|
66
|
+
- spec/factories/audit_record.rb
|
67
|
+
- spec/lib/for_reading_spec.rb
|
68
|
+
- spec/spec_helper.rb
|
69
|
+
- spec/support/active_record.rb
|
58
70
|
homepage: https://github.com/CloudHealth/ar-ondemand
|
59
71
|
licenses:
|
60
72
|
- MIT
|
@@ -80,4 +92,3 @@ signing_key:
|
|
80
92
|
specification_version: 4
|
81
93
|
summary: ActiveRecord On-demand
|
82
94
|
test_files: []
|
83
|
-
has_rdoc:
|