ar-octopus 0.10.0 → 0.10.1
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.
- checksums.yaml +4 -4
- data/lib/octopus/relation_proxy.rb +10 -1
- data/lib/octopus/version.rb +1 -1
- data/spec/octopus/model_spec.rb +42 -2
- data/spec/octopus/relation_proxy_spec.rb +9 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10312fc71268bf4330c9a6c49038d5b1b3dab35a
|
4
|
+
data.tar.gz: 3aaf8fd301f7a018b9df3fbc247b3080f624ed52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79dd6e2fedf56d5bb00ecf8afef6f0749fd842c8b7c9f1bb4735a059a6706d373623e49b43c1f47606808a4c6b90e40b5640f29053d0ee4f7de25a043ff175a2
|
7
|
+
data.tar.gz: 0400e3053af09d3b591a4992967787fb4957a48148b0a8fa3b290b8b8f7201519f72361a45acd49f366323b821463a1039059b186baf5ac38653b26649ebd87c
|
@@ -26,9 +26,18 @@ module Octopus
|
|
26
26
|
end + [:each, :map, :index_by]
|
27
27
|
# `find { ... }` etc. should run_on_shard, `find(id)` should be sent to relation
|
28
28
|
ENUM_WITH_BLOCK_METHODS = [:find, :select, :none?, :any?, :one?, :many?, :sum]
|
29
|
+
BATCH_METHODS = [:find_each, :find_in_batches, :in_batches]
|
29
30
|
|
30
31
|
def method_missing(method, *args, &block)
|
31
|
-
if
|
32
|
+
if !block && BATCH_METHODS.include?(method)
|
33
|
+
::Enumerator.new do |yielder|
|
34
|
+
run_on_shard do
|
35
|
+
@ar_relation.public_send(method, *args) do |batch_item|
|
36
|
+
yielder << batch_item
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
elsif ENUM_METHODS.include?(method) || block && ENUM_WITH_BLOCK_METHODS.include?(method)
|
32
41
|
run_on_shard { @ar_relation.to_a }.public_send(method, *args, &block)
|
33
42
|
elsif block
|
34
43
|
@ar_relation.public_send(method, *args, &block)
|
data/lib/octopus/version.rb
CHANGED
data/spec/octopus/model_spec.rb
CHANGED
@@ -522,7 +522,7 @@ describe Octopus::Model do
|
|
522
522
|
@user3 = User.using(:brazil).create!(:name => 'User3')
|
523
523
|
end
|
524
524
|
|
525
|
-
it "#find_each should work" do
|
525
|
+
it "#find_each should work with a block" do
|
526
526
|
result_array = []
|
527
527
|
|
528
528
|
User.using(:brazil).where("name is not NULL").find_each do |user|
|
@@ -532,7 +532,27 @@ describe Octopus::Model do
|
|
532
532
|
expect(result_array).to eq([@user1, @user2, @user3])
|
533
533
|
end
|
534
534
|
|
535
|
-
it "#
|
535
|
+
it "#find_each should work as an enumerator" do
|
536
|
+
result_array = []
|
537
|
+
|
538
|
+
User.using(:brazil).where("name is not NULL").find_each.each do |user|
|
539
|
+
result_array << user
|
540
|
+
end
|
541
|
+
|
542
|
+
expect(result_array).to eq([@user1, @user2, @user3])
|
543
|
+
end
|
544
|
+
|
545
|
+
it "#find_each should work as a lazy enumerator" do
|
546
|
+
result_array = []
|
547
|
+
|
548
|
+
User.using(:brazil).where("name is not NULL").find_each.lazy.each do |user|
|
549
|
+
result_array << user
|
550
|
+
end
|
551
|
+
|
552
|
+
expect(result_array).to eq([@user1, @user2, @user3])
|
553
|
+
end
|
554
|
+
|
555
|
+
it "#find_in_batches should work with a block" do
|
536
556
|
result_array = []
|
537
557
|
|
538
558
|
User.using(:brazil).where("name is not NULL").find_in_batches(batch_size: 1) do |user|
|
@@ -541,6 +561,26 @@ describe Octopus::Model do
|
|
541
561
|
|
542
562
|
expect(result_array).to eq([[@user1], [@user2], [@user3]])
|
543
563
|
end
|
564
|
+
|
565
|
+
it "#find_in_batches should work as an enumerator" do
|
566
|
+
result_array = []
|
567
|
+
|
568
|
+
User.using(:brazil).where("name is not NULL").find_in_batches(batch_size: 1).each do |user|
|
569
|
+
result_array << user
|
570
|
+
end
|
571
|
+
|
572
|
+
expect(result_array).to eq([[@user1], [@user2], [@user3]])
|
573
|
+
end
|
574
|
+
|
575
|
+
it "#find_in_batches should work as a lazy enumerator" do
|
576
|
+
result_array = []
|
577
|
+
|
578
|
+
User.using(:brazil).where("name is not NULL").find_in_batches(batch_size: 1).lazy.each do |user|
|
579
|
+
result_array << user
|
580
|
+
end
|
581
|
+
|
582
|
+
expect(result_array).to eq([[@user1], [@user2], [@user3]])
|
583
|
+
end
|
544
584
|
end
|
545
585
|
|
546
586
|
describe 'deleting a record' do
|
@@ -58,10 +58,18 @@ describe Octopus::RelationProxy do
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
it "can deliver methods in ActiveRecord::Batches correctly" do
|
61
|
+
it "can deliver methods in ActiveRecord::Batches correctly when given a block" do
|
62
62
|
expect { @relation.find_each(&:inspect) }.not_to raise_error
|
63
63
|
end
|
64
64
|
|
65
|
+
it "can deliver methods in ActiveRecord::Batches correctly as an enumerator" do
|
66
|
+
expect { @relation.find_each.each(&:inspect) }.not_to raise_error
|
67
|
+
end
|
68
|
+
|
69
|
+
it "can deliver methods in ActiveRecord::Batches correctly as a lazy enumerator" do
|
70
|
+
expect { @relation.find_each.lazy.each(&:inspect) }.not_to raise_error
|
71
|
+
end
|
72
|
+
|
65
73
|
context 'under Rails 4' do
|
66
74
|
it 'is an Octopus::RelationProxy' do
|
67
75
|
expect{@relation.ar_relation}.not_to raise_error
|