atomically 1.1.0 → 1.1.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 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: []