atomically 1.1.0 → 1.1.1

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: f11789d3b23462ec0a597434cbd71ad693684fb2
4
- data.tar.gz: '0365791ed9e8a5f1b0d035a0db850cc8a5619983'
2
+ SHA256:
3
+ metadata.gz: 4785f6bc399158f874395e862ef07c1f945e78490b18e56c06fc903bdf32e139
4
+ data.tar.gz: 6b14e38f5df25ffdb507c34a7b7fc099b42f112bb91c66f026a86e3302fe4169
5
5
  SHA512:
6
- metadata.gz: 1bd013da03d5b05cb5dd98545f94cca224efa8815822b0ef1eed537bb1f2f5f5fe05fb82d9aa9fdfefb6c6f676e194a344c6a84254a999d7b3e6e69bc80badbc
7
- data.tar.gz: 16335847dbb0540de93a43595a151324109539d9b6d6b728b885e7e83499c7293f6e4ecd5e81d34e41ce2279ab40f67cb10a19eba7529425a602ce4e5c39155f
6
+ metadata.gz: de8c068d9f094983f16893e7157302e3c053c5095929f0eec3a790bfefa81f49a0bdbc5da9f6d56ec6d8b1fb4dc96266fb68745aae473beabc93000b6c14222e
7
+ data.tar.gz: a963fbc7b93c3ccf240f0067b2e1355259076bcccb5e4caa22791f7ad515b468bd72d7d008fd5bdd1a59939f590e1dbc4e3b5dafcf3e20b2f0b592936486ada3
@@ -21,6 +21,13 @@ gemfile:
21
21
  - gemfiles/5.2.gemfile
22
22
  - gemfiles/6.0.gemfile
23
23
  matrix:
24
+ include:
25
+ - env: DB=makara_mysql
26
+ gemfile: gemfiles/6.0.makara.gemfile
27
+ rvm: 2.6
28
+ - env: DB=makara_pg
29
+ gemfile: gemfiles/6.0.makara.gemfile
30
+ rvm: 2.6
24
31
  exclude:
25
32
  - gemfile: gemfiles/3.2.gemfile
26
33
  rvm: 2.6
@@ -1,5 +1,11 @@
1
1
  ## Change Log
2
2
 
3
+ ### [v1.1.0](https://github.com/khiav223577/atomically/compare/v1.0.6...v1.1.0) 2019/10/23
4
+ - [#12](https://github.com/khiav223577/atomically/pull/12) Support pg (@khiav223577)
5
+ - [#14](https://github.com/khiav223577/atomically/pull/14) Support Rails 6.0 (@khiav223577)
6
+ - [#13](https://github.com/khiav223577/atomically/pull/13) Remove deprecated codeclimate-test-reporter gem (@khiav223577)
7
+ - [#11](https://github.com/khiav223577/atomically/pull/11) Fix: Non-attribute arguments will be disallowed in Rails 6.0 (@khiav223577)
8
+
3
9
  ### [v1.0.6](https://github.com/khiav223577/atomically/compare/v1.0.5...v1.0.6) 2019/01/28
4
10
  - [#10](https://github.com/khiav223577/atomically/pull/10) `decrement_unsigned_counters` should be able to decrement the field to zero (@khiav223577)
5
11
 
data/README.md CHANGED
@@ -263,11 +263,11 @@ arena.atomically_close!
263
263
  # => false (if race condition occurs)
264
264
  ```
265
265
 
266
- The return value can be used to prevent race condition and make sure some piece of code is executed once.
266
+ The return value can be used to prevent race condition and make sure some piece of code is executed only once.
267
267
 
268
268
  ```rb
269
269
  if arena.atomically_close!
270
- # Only one request can pass this check and excete the code here.
270
+ # Only one request can pass this check and execute the code here.
271
271
  # You can send rewards, calculate ranking, or fire background job here.
272
272
  # No need to worry about being invoked multiple times.
273
273
  do_something
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ['khiav reoy']
10
10
  spec.email = ['mrtmrt15xn@yahoo.com.tw']
11
11
 
12
- spec.summary = 'Adds commonly useful atomic SQL statements to ActiveRecord to avoid race condition.'
13
- spec.description = 'Adds commonly useful atomic SQL statements to ActiveRecord to avoid race condition.'
12
+ spec.summary = 'An ActiveRecord extension for writing commonly useful atomic SQL statements to avoid race condition.'
13
+ spec.description = 'An ActiveRecord extension for writing commonly useful atomic SQL statements to avoid race condition.'
14
14
  spec.homepage = 'https://github.com/khiav223577/atomically'
15
15
  spec.license = 'MIT'
16
16
 
@@ -0,0 +1,17 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'activerecord', '~> 6.0.0'
4
+
5
+ group :test do
6
+ case ENV['DB']
7
+ when 'mysql' ; gem 'mysql2', '0.5.1'
8
+ when 'postgres' ; gem 'pg', '~> 0.18'
9
+ end
10
+ gem 'simplecov'
11
+ gem 'pluck_all', '>= 2.0.4'
12
+ gem 'timecop', '~> 0.9.1'
13
+ gem 'update_all_scope', '~> 0.1.0'
14
+ gem 'makara', '~> 0.4.1'
15
+ end
16
+
17
+ gemspec path: '../'
@@ -5,12 +5,26 @@ class Atomically::AdapterCheckService
5
5
  end
6
6
 
7
7
  def pg?
8
- return false if not defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
9
- return @klass.connection.is_a?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
8
+ possible_pg_klasses.any?{|s| @klass.connection.is_a?(s) }
10
9
  end
11
10
 
12
11
  def mysql?
13
- return false if not defined?(ActiveRecord::ConnectionAdapters::Mysql2Adapter)
14
- return @klass.connection.is_a?(ActiveRecord::ConnectionAdapters::Mysql2Adapter)
12
+ possible_mysql_klasses.any?{|s| @klass.connection.is_a?(s) }
13
+ end
14
+
15
+ private
16
+
17
+ def possible_pg_klasses
18
+ @possible_pg_klasses ||= [].tap do |result|
19
+ result << ActiveRecord::ConnectionAdapters::PostgreSQLAdapter if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
20
+ result << ActiveRecord::ConnectionAdapters::MakaraPostgreSQLAdapter if defined?(ActiveRecord::ConnectionAdapters::MakaraPostgreSQLAdapter)
21
+ end
22
+ end
23
+
24
+ def possible_mysql_klasses
25
+ @possible_mysql_klasses ||= [].tap do |result|
26
+ result << ActiveRecord::ConnectionAdapters::Mysql2Adapter if defined?(ActiveRecord::ConnectionAdapters::Mysql2Adapter)
27
+ result << ActiveRecord::ConnectionAdapters::MakaraMysql2Adapter if defined?(ActiveRecord::ConnectionAdapters::MakaraMysql2Adapter)
28
+ end
15
29
  end
16
30
  end
@@ -34,7 +34,7 @@ class Atomically::QueryService
34
34
  end
35
35
 
36
36
  raw_when_sql = hash.map{|id, pay_count| "WHEN #{sanitize(id)} THEN #{sanitize(-pay_count)}" }.join("\n")
37
- no_var_in_sql = true if update_columns.size == 1 or db_is_pg?
37
+ no_var_in_sql = true if update_columns.size == 1 or adapter_check_service.pg?
38
38
  update_sqls = update_columns.map.with_index do |column, idx|
39
39
  if no_var_in_sql
40
40
  value = "(\nCASE #{quote_column(primary_key)}\n#{raw_when_sql}\nEND)"
@@ -71,7 +71,7 @@ class Atomically::QueryService
71
71
  end
72
72
 
73
73
  def update_all_and_get_ids(*args)
74
- if db_is_pg?
74
+ if adapter_check_service.pg?
75
75
  scope = UpdateAllScope::UpdateAllScope.new(model: @model, relation: @relation.where(''))
76
76
  scope.update(*args)
77
77
  return @klass.connection.execute("#{scope.to_sql} RETURNING id", "#{@klass} Update All").map{|s| s['id'].to_i }
@@ -89,17 +89,13 @@ class Atomically::QueryService
89
89
 
90
90
  private
91
91
 
92
- def db_is_pg?
93
- Atomically::AdapterCheckService.new(@klass).pg?
94
- end
95
-
96
- def db_is_mysql?
97
- Atomically::AdapterCheckService.new(@klass).mysql?
92
+ def adapter_check_service
93
+ @adapter_check_service ||= Atomically::AdapterCheckService.new(@klass)
98
94
  end
99
95
 
100
96
  def on_duplicate_key_plus_sql(columns, conflict_target)
101
97
  service = Atomically::OnDuplicateSqlService.new(@klass, columns)
102
- return service.mysql_quote_columns_for_plus.join(', ') if db_is_mysql?
98
+ return service.mysql_quote_columns_for_plus.join(', ') if adapter_check_service.mysql?
103
99
  return {
104
100
  conflict_target: conflict_target,
105
101
  columns: service.pg_quote_columns_for_plus.join(', ')
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Atomically
4
- VERSION = '1.1.0'
4
+ VERSION = '1.1.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atomically
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - khiav reoy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-23 00:00:00.000000000 Z
11
+ date: 2019-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -184,8 +184,8 @@ dependencies:
184
184
  - - "~>"
185
185
  - !ruby/object:Gem::Version
186
186
  version: 0.1.0
187
- description: Adds commonly useful atomic SQL statements to ActiveRecord to avoid race
188
- condition.
187
+ description: An ActiveRecord extension for writing commonly useful atomic SQL statements
188
+ to avoid race condition.
189
189
  email:
190
190
  - mrtmrt15xn@yahoo.com.tw
191
191
  executables: []
@@ -210,6 +210,7 @@ files:
210
210
  - gemfiles/5.1.gemfile
211
211
  - gemfiles/5.2.gemfile
212
212
  - gemfiles/6.0.gemfile
213
+ - gemfiles/6.0.makara.gemfile
213
214
  - lib/atomically.rb
214
215
  - lib/atomically/active_record/extension.rb
215
216
  - lib/atomically/adapter_check_service.rb
@@ -243,10 +244,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
244
  - !ruby/object:Gem::Version
244
245
  version: '0'
245
246
  requirements: []
246
- rubyforge_project:
247
- rubygems_version: 2.6.14
247
+ rubygems_version: 3.0.3
248
248
  signing_key:
249
249
  specification_version: 4
250
- summary: Adds commonly useful atomic SQL statements to ActiveRecord to avoid race
251
- condition.
250
+ summary: An ActiveRecord extension for writing commonly useful atomic SQL statements
251
+ to avoid race condition.
252
252
  test_files: []