ar-octopus 0.10.1 → 0.10.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 10312fc71268bf4330c9a6c49038d5b1b3dab35a
4
- data.tar.gz: 3aaf8fd301f7a018b9df3fbc247b3080f624ed52
2
+ SHA256:
3
+ metadata.gz: be74de9c9b6dfacee338dfa5d500da6ce758f501e3be7fa0f154afda07f31f40
4
+ data.tar.gz: 1892942a155383583a054e4d61cc588ebca2b33749ca191762d550bf9bf13022
5
5
  SHA512:
6
- metadata.gz: 79dd6e2fedf56d5bb00ecf8afef6f0749fd842c8b7c9f1bb4735a059a6706d373623e49b43c1f47606808a4c6b90e40b5640f29053d0ee4f7de25a043ff175a2
7
- data.tar.gz: 0400e3053af09d3b591a4992967787fb4957a48148b0a8fa3b290b8b8f7201519f72361a45acd49f366323b821463a1039059b186baf5ac38653b26649ebd87c
6
+ metadata.gz: c0b21eb7e0fa5397b77c5df6c0bdce5fced41b7284ee7fc4869539ec6219bfcbe2f02a7e85239979b7534a298e2b7ad34e6833fdeb0fd81c67c536b17ea73ae9
7
+ data.tar.gz: 34bd15fbfb892fca1329f69abf85ba4421d563278d846a67014b710b473919d50cfc3425ed76de1580484a4f10554d4464a490e5ac49b3339553b810acdacfd5
@@ -67,13 +67,13 @@ First, you need to create a config file, shards.yml, inside your config/ directo
67
67
  Octopus adds a method to each AR Class and object: the using method is used to select the shard like this:
68
68
 
69
69
  ```ruby
70
- User.where(:name => "Boba").limit(3).using(:slave_one)
70
+ User.where(:name => "Boba").limit(3).using(:read_replica_one)
71
71
  ```
72
72
 
73
73
  Octopus also supports queries within a block. When you pass a block to the using method, all queries inside the block will be sent to the specified shard.
74
74
 
75
75
  ```ruby
76
- Octopus.using(:slave_two) do
76
+ Octopus.using(:read_replica_two) do
77
77
  User.create(:name => "Thiago")
78
78
  end
79
79
  ```
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
32
32
  s.add_development_dependency 'rake'
33
33
  s.add_development_dependency 'rspec', '>= 3'
34
34
  s.add_development_dependency 'rubocop'
35
- s.add_development_dependency 'sqlite3', '>= 1.3.4'
35
+ s.add_development_dependency 'sqlite3', '~> 1.3.6'
36
36
  s.add_development_dependency 'pry-byebug'
37
37
 
38
38
  s.license = 'MIT'
@@ -27,6 +27,7 @@ module Octopus
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
29
  BATCH_METHODS = [:find_each, :find_in_batches, :in_batches]
30
+ WHERE_CHAIN_METHODS = [:not]
30
31
 
31
32
  def method_missing(method, *args, &block)
32
33
  if !block && BATCH_METHODS.include?(method)
@@ -39,6 +40,8 @@ module Octopus
39
40
  end
40
41
  elsif ENUM_METHODS.include?(method) || block && ENUM_WITH_BLOCK_METHODS.include?(method)
41
42
  run_on_shard { @ar_relation.to_a }.public_send(method, *args, &block)
43
+ elsif WHERE_CHAIN_METHODS.include?(method)
44
+ ::Octopus::ScopeProxy.new(@current_shard, run_on_shard { @ar_relation.public_send(method, *args) } )
42
45
  elsif block
43
46
  @ar_relation.public_send(method, *args, &block)
44
47
  else
@@ -28,7 +28,7 @@ module Octopus
28
28
 
29
29
  # Transaction Method send all queries to a specified shard.
30
30
  def transaction(options = {}, &block)
31
- run_on_shard { @klass = klass.transaction(options, &block) }
31
+ run_on_shard { klass.transaction(options, &block) }
32
32
  end
33
33
 
34
34
  def connection
@@ -1,3 +1,3 @@
1
1
  module Octopus
2
- VERSION = '0.10.1'
2
+ VERSION = '0.10.2'
3
3
  end
@@ -500,19 +500,35 @@ describe Octopus::Model do
500
500
  expect(user.as_json(:except => [:created_at, :updated_at, :id])).to eq('admin' => nil, 'name' => 'User1', 'number' => nil)
501
501
  end
502
502
 
503
- it 'transaction' do
504
- _u = User.create!(:name => 'Thiago')
503
+ describe 'transaction' do
504
+ context 'without assigning a database' do
505
+ it 'works as expected' do
506
+ _u = User.create!(:name => 'Thiago')
505
507
 
506
- expect(User.using(:brazil).count).to eq(0)
507
- expect(User.using(:master).count).to eq(1)
508
+ expect(User.using(:brazil).count).to eq(0)
509
+ expect(User.using(:master).count).to eq(1)
510
+
511
+ User.using(:brazil).transaction do
512
+ expect(User.find_by_name('Thiago')).to be_nil
513
+ User.create!(:name => 'Brazil')
514
+ end
508
515
 
509
- User.using(:brazil).transaction do
510
- expect(User.find_by_name('Thiago')).to be_nil
511
- User.create!(:name => 'Brazil')
516
+ expect(User.using(:brazil).count).to eq(1)
517
+ expect(User.using(:master).count).to eq(1)
518
+ end
512
519
  end
513
520
 
514
- expect(User.using(:brazil).count).to eq(1)
515
- expect(User.using(:master).count).to eq(1)
521
+ context 'when assigning a database' do
522
+ it 'works as expected' do
523
+ klass = User.using(:brazil)
524
+
525
+ klass.transaction do
526
+ klass.create!(:name => 'Brazil')
527
+ end
528
+
529
+ expect(klass.find_by_name('Brazil')).to be_present
530
+ end
531
+ end
516
532
  end
517
533
 
518
534
  describe "#finder methods" do
@@ -532,6 +548,16 @@ describe Octopus::Model do
532
548
  expect(result_array).to eq([@user1, @user2, @user3])
533
549
  end
534
550
 
551
+ it "#find_each should work with a where.not(...)" do
552
+ result_array = []
553
+
554
+ User.using(:brazil).where.not(:name => 'User2').find_each do |user|
555
+ result_array << user
556
+ end
557
+
558
+ expect(result_array).to eq([@user1, @user3])
559
+ end
560
+
535
561
  it "#find_each should work as an enumerator" do
536
562
  result_array = []
537
563
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar-octopus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thiago Pradi
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-10-31 00:00:00.000000000 Z
13
+ date: 2019-03-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -134,16 +134,16 @@ dependencies:
134
134
  name: sqlite3
135
135
  requirement: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - ">="
137
+ - - "~>"
138
138
  - !ruby/object:Gem::Version
139
- version: 1.3.4
139
+ version: 1.3.6
140
140
  type: :development
141
141
  prerelease: false
142
142
  version_requirements: !ruby/object:Gem::Requirement
143
143
  requirements:
144
- - - ">="
144
+ - - "~>"
145
145
  - !ruby/object:Gem::Version
146
- version: 1.3.4
146
+ version: 1.3.6
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: pry-byebug
149
149
  requirement: !ruby/object:Gem::Requirement
@@ -350,8 +350,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
350
350
  - !ruby/object:Gem::Version
351
351
  version: '0'
352
352
  requirements: []
353
- rubyforge_project:
354
- rubygems_version: 2.4.5.1
353
+ rubygems_version: 3.0.1
355
354
  signing_key:
356
355
  specification_version: 4
357
356
  summary: Easy Database Sharding for ActiveRecord