janus-ar 0.15.2 → 7.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,59 +1,59 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Janus::QueryDirector do
4
- describe 'Constants' do
5
- it { expect(described_class::SQL_SKIP_ALL_MATCHERS).to eq [/\A\s*set\s+local\s/i] }
6
- it {
7
- expect(described_class::SQL_PRIMARY_MATCHERS).to eq(
8
- [
9
- /\A\s*select.+for update\Z/i, /select.+lock in share mode\Z/i,
10
- /\A\s*select.+(nextval|currval|lastval|get_lock|release_lock|pg_advisory_lock|pg_advisory_unlock)\(/i,
11
- /\A\s*show/i
12
- ]
13
- )
14
- }
15
- it { expect(described_class::SQL_REPLICA_MATCHERS).to eq([/\A\s*(select|with.+\)\s*select)\s/i]) }
16
- it { expect(described_class::SQL_ALL_MATCHERS).to eq([/\A\s*set\s/i]) }
17
- it {
18
- expect(described_class::WRITE_PREFIXES).to eq %w(INSERT UPDATE DELETE LOCK CREATE GRANT DROP ALTER TRUNCATE BEGIN
19
- SAVEPOINT FLUSH)
20
- }
21
-
22
- it { expect(described_class::ALL).to eq :all }
23
- it { expect(described_class::REPLICA).to eq :replica }
24
- it { expect(described_class::PRIMARY).to eq :primary }
25
- end
26
-
27
- describe '#where_to_send?' do
28
- before(:each) do
29
- Janus::Context.release_all
30
- end
31
-
32
- context 'when should send to all' do
33
- it 'returns :all' do
34
- sql = 'SET foo = bar'
35
- open_transactions = 0
36
- query_director = described_class.new(sql, open_transactions)
37
- expect(query_director.where_to_send?).to eq(:all)
38
- end
39
- end
40
-
41
- context 'when can go to replica' do
42
- it 'returns :replica' do
43
- sql = 'SELECT * FROM users'
44
- open_transactions = 0
45
- query_director = described_class.new(sql, open_transactions)
46
- expect(query_director.where_to_send?).to eq(:replica)
47
- end
48
- end
49
-
50
- context 'when should go to primary' do
51
- it 'returns :primary' do
52
- sql = 'INSERT INTO users (name) VALUES ("John")'
53
- open_transactions = 0
54
- query_director = described_class.new(sql, open_transactions)
55
- expect(query_director.where_to_send?).to eq(:primary)
56
- end
57
- end
58
- end
59
- end
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Janus::QueryDirector do
4
+ describe 'Constants' do
5
+ it { expect(described_class::SQL_SKIP_ALL_MATCHERS).to eq [/\A\s*set\s+local\s/i] }
6
+ it {
7
+ expect(described_class::SQL_PRIMARY_MATCHERS).to eq(
8
+ [
9
+ /\A\s*select.+for update\Z/i, /select.+lock in share mode\Z/i,
10
+ /\A\s*select.+(nextval|currval|lastval|get_lock|release_lock|pg_advisory_lock|pg_advisory_unlock)\(/i,
11
+ /\A\s*show/i
12
+ ]
13
+ )
14
+ }
15
+ it { expect(described_class::SQL_REPLICA_MATCHERS).to eq([/\A\s*(select|with.+\)\s*select)\s/i]) }
16
+ it { expect(described_class::SQL_ALL_MATCHERS).to eq([/\A\s*set\s/i]) }
17
+ it {
18
+ expect(described_class::WRITE_PREFIXES).to eq %w(INSERT UPDATE DELETE LOCK CREATE GRANT DROP ALTER TRUNCATE BEGIN
19
+ SAVEPOINT FLUSH)
20
+ }
21
+
22
+ it { expect(described_class::ALL).to eq :all }
23
+ it { expect(described_class::REPLICA).to eq :replica }
24
+ it { expect(described_class::PRIMARY).to eq :primary }
25
+ end
26
+
27
+ describe '#where_to_send?' do
28
+ before(:each) do
29
+ Janus::Context.release_all
30
+ end
31
+
32
+ context 'when should send to all' do
33
+ it 'returns :all' do
34
+ sql = 'SET foo = bar'
35
+ open_transactions = 0
36
+ query_director = described_class.new(sql, open_transactions)
37
+ expect(query_director.where_to_send?).to eq(:all)
38
+ end
39
+ end
40
+
41
+ context 'when can go to replica' do
42
+ it 'returns :replica' do
43
+ sql = 'SELECT * FROM users'
44
+ open_transactions = 0
45
+ query_director = described_class.new(sql, open_transactions)
46
+ expect(query_director.where_to_send?).to eq(:replica)
47
+ end
48
+ end
49
+
50
+ context 'when should go to primary' do
51
+ it 'returns :primary' do
52
+ sql = 'INSERT INTO users (name) VALUES ("John")'
53
+ open_transactions = 0
54
+ query_director = described_class.new(sql, open_transactions)
55
+ expect(query_director.where_to_send?).to eq(:primary)
56
+ end
57
+ end
58
+ end
59
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,43 +1,46 @@
1
- # frozen_string_literal: true
2
-
3
- require 'pry'
4
-
5
- require 'active_record'
6
-
7
- require './lib/janus'
8
- require './lib/active_record/connection_adapters/janus_mysql2_adapter'
9
- require './lib/active_record/connection_adapters/janus_trilogy_adapter'
10
-
11
- require './spec/shared_examples/a_mysql_like_server.rb'
12
-
13
- class QueryLogger
14
- def initialize
15
- @_logs = []
16
- end
17
-
18
- def flush_all
19
- @_logs = []
20
- end
21
-
22
- def log(level, message)
23
- @_logs << "#{level}: #{message}"
24
- end
25
-
26
- def error(message)
27
- log('error', message)
28
- end
29
-
30
- def queries
31
- @_logs
32
- end
33
-
34
- def debug?
35
- true
36
- end
37
-
38
- def debug(message)
39
- log('debug', message)
40
- end
41
- end
42
-
43
- $query_logger = ActiveRecord::Base.logger = QueryLogger.new
1
+ # frozen_string_literal: true
2
+
3
+ require 'pry'
4
+
5
+ require 'active_record'
6
+
7
+ require './lib/janus-ar'
8
+ require './lib/janus-ar/active_record/connection_adapters/janus_mysql2_adapter'
9
+ require './lib/janus-ar/active_record/connection_adapters/janus_trilogy_adapter'
10
+
11
+ ActiveRecord::ConnectionAdapters.register("janus_trilogy", "ActiveRecord::ConnectionAdapters::JanusTrilogyAdapter")
12
+ ActiveRecord::ConnectionAdapters.register("janus_mysql2", "ActiveRecord::ConnectionAdapters::JanusMysql2Adapter")
13
+
14
+ require './spec/shared_examples/a_mysql_like_server.rb'
15
+
16
+ class QueryLogger
17
+ def initialize
18
+ @_logs = []
19
+ end
20
+
21
+ def flush_all
22
+ @_logs = []
23
+ end
24
+
25
+ def log(level, message)
26
+ @_logs << "#{level}: #{message}"
27
+ end
28
+
29
+ def error(message)
30
+ log('error', message)
31
+ end
32
+
33
+ def queries
34
+ @_logs
35
+ end
36
+
37
+ def debug?
38
+ true
39
+ end
40
+
41
+ def debug(message)
42
+ log('debug', message)
43
+ end
44
+ end
45
+
46
+ $query_logger = ActiveRecord::Base.logger = QueryLogger.new
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: janus-ar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.2
4
+ version: 7.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lloyd Watkin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-02 00:00:00.000000000 Z
11
+ date: 2024-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 7.1.0
20
- type: :development
19
+ version: '7.2'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 7.1.0
26
+ version: '7.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 7.1.0
33
+ version: 7.2.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 7.1.0
40
+ version: 7.2.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mysql2
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -114,28 +114,28 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 1.63.0
117
+ version: 1.65.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 1.63.0
124
+ version: 1.65.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rubocop-rails
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 2.24.0
131
+ version: 2.26.0
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 2.24.0
138
+ version: 2.26.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rubocop-rspec
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -203,22 +203,22 @@ files:
203
203
  - assets/janus-logo.png
204
204
  - bin/release.sh
205
205
  - janus-ar.gemspec
206
- - lib/active_record/connection_adapters/janus_mysql2_adapter.rb
207
- - lib/active_record/connection_adapters/janus_trilogy_adapter.rb
208
- - lib/janus.rb
209
- - lib/janus/client.rb
210
- - lib/janus/context.rb
211
- - lib/janus/db_console_config.rb
212
- - lib/janus/logging/logger.rb
213
- - lib/janus/logging/subscriber.rb
214
- - lib/janus/query_director.rb
215
- - lib/janus/version.rb
216
- - spec/lib/active_record/connection_adapters/janus_mysql_adapter_spec.rb
217
- - spec/lib/active_record/connection_adapters/janus_trilogy_adapter_spec.rb
218
- - spec/lib/janus/client_spec.rb
219
- - spec/lib/janus/context_spec.rb
220
- - spec/lib/janus/logging/logger_spec.rb
221
- - spec/lib/janus/query_director_spec.rb
206
+ - lib/janus-ar.rb
207
+ - lib/janus-ar/active_record/connection_adapters/janus_mysql2_adapter.rb
208
+ - lib/janus-ar/active_record/connection_adapters/janus_trilogy_adapter.rb
209
+ - lib/janus-ar/client.rb
210
+ - lib/janus-ar/context.rb
211
+ - lib/janus-ar/db_console_config.rb
212
+ - lib/janus-ar/logging/logger.rb
213
+ - lib/janus-ar/logging/subscriber.rb
214
+ - lib/janus-ar/query_director.rb
215
+ - lib/janus-ar/version.rb
216
+ - spec/lib/janus-ar/active_record/connection_adapters/janus_mysql_adapter_spec.rb
217
+ - spec/lib/janus-ar/active_record/connection_adapters/janus_trilogy_adapter_spec.rb
218
+ - spec/lib/janus-ar/client_spec.rb
219
+ - spec/lib/janus-ar/context_spec.rb
220
+ - spec/lib/janus-ar/logging/logger_spec.rb
221
+ - spec/lib/janus-ar/query_director_spec.rb
222
222
  - spec/shared_examples/a_mysql_like_server.rb
223
223
  - spec/spec_helper.rb
224
224
  homepage: https://github.com/olioex/janus-ar
@@ -241,7 +241,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
241
241
  - !ruby/object:Gem::Version
242
242
  version: '0'
243
243
  requirements: []
244
- rubygems_version: 3.5.7
244
+ rubygems_version: 3.5.11
245
245
  signing_key:
246
246
  specification_version: 4
247
247
  summary: Read/Write proxy for ActiveRecord using primary/replica databases
data/lib/janus.rb DELETED
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support'
4
-
5
- module Janus
6
- autoload :Context, 'janus/context'
7
- autoload :Client, 'janus/client'
8
- autoload :QueryDirector, 'janus/query_director'
9
- autoload :VERSION, 'janus/version'
10
- autoload :DbConsoleConfig, 'janus/db_console_config'
11
-
12
- module Logging
13
- autoload :Subscriber, 'janus/logging/subscriber'
14
- autoload :Logger, 'janus/logging/logger'
15
- end
16
- end
17
-
18
- ActiveSupport.on_load(:active_record) do
19
- ActiveRecord::LogSubscriber.log_subscribers.each do |subscriber|
20
- subscriber.extend Janus::Logging::Subscriber
21
- end
22
- end