ar-octopus 0.10.1 → 0.10.2

Sign up to get free protection for your applications and to get access to all the features.
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