activerecord-turntable 2.3.3 → 2.4.0

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
2
  SHA1:
3
- metadata.gz: fa472cf634328899013e975790cca934f62d5b34
4
- data.tar.gz: 345bb3bc47f17141e12dfe9a0b2179d4e8db5f07
3
+ metadata.gz: 1d9d385f15413261bc87c1e2444193c53a9ee657
4
+ data.tar.gz: '009577b936eded2be655a3b850787a14dfd03cbf'
5
5
  SHA512:
6
- metadata.gz: 9996e3262e5887a1ec95e6355dac2f3d3aaaa5d10e580dbc1e7e6ffcdfedc8af75cd6cc7cbef9f0551961cc38d25123c883d42e4a6e10f0f0ee34a327d915b91
7
- data.tar.gz: f47e0368705ac7b0073721544feef5838aca511c7c26464957e173700a8ef73ec9f3d0741706384bb792e271149a6e27355d4d1481ed8bf275c7d75f8fe383d1
6
+ metadata.gz: ce1c55a07c1b94377e206d4cf97b2fbb961bb0bf1025d0150c540771eff0fa56df3f0360741b4102aaef698c5913da463fc459c23016b7c28c699fac79e5c548
7
+ data.tar.gz: e74cfd821f2c84ddeec7a950335a017f8cc058cece9daee3ce2f5c3a67a3969009a5486714cd822eef412c6f01f595e001f8685f1bce4cdb82f750951ea008e5
data/.travis.yml CHANGED
@@ -1,10 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
3
  - 2.0.0
5
4
  - 2.1
6
5
  - 2.2
7
- - 2.3.0
6
+ - 2.3.3
8
7
  - ruby-head
9
8
  gemfile:
10
9
  - gemfiles/rails4_0.gemfile
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ## activerecord-turntable 2.4.0 ##
2
+
3
+ ### Incompatible Change
4
+
5
+ * Drop support for ruby 1.9.3
6
+
7
+ ### Bugfix
8
+
9
+ * Update activerecord 4.2 patches
10
+ * Fixes optimistic locking with a serialized column causes JSON::Error.
11
+
1
12
  ## activerecord-turntable 2.3.3 ##
2
13
 
3
14
  ### Bugfix
data/Rakefile CHANGED
@@ -62,6 +62,7 @@ namespace :turntable do
62
62
  t.belongs_to :user, :null => false
63
63
  t.integer :hp, :null => false, :default => 0
64
64
  t.integer :mp, :null => false, :default => 0
65
+ t.text :data
65
66
  t.integer :lock_version, :null => false, :default => 0
66
67
  t.datetime :deleted_at, :default => nil
67
68
  t.timestamps
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
22
22
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
23
23
  spec.require_paths = ["lib"]
24
- spec.required_ruby_version = '>= 1.9.3'
24
+ spec.required_ruby_version = '>= 2.0.0'
25
25
 
26
26
  spec.add_runtime_dependency "activerecord", ">= 4.0.0", "< 5.0"
27
27
  spec.add_runtime_dependency "activesupport", ">= 4.0.0", "< 5.0"
@@ -35,8 +35,8 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency "mysql2"
36
36
 
37
37
  spec.add_development_dependency "rake"
38
- spec.add_development_dependency "rack"
39
- spec.add_development_dependency "rspec", "~> 3.1.0"
38
+ spec.add_development_dependency "rack", "< 2"
39
+ spec.add_development_dependency "rspec", "~> 3.5.0"
40
40
  spec.add_development_dependency "rspec-its"
41
41
  spec.add_development_dependency "rspec-collection_matchers"
42
42
  spec.add_development_dependency "fabrication"
@@ -47,6 +47,7 @@ Gem::Specification.new do |spec|
47
47
  spec.add_development_dependency "pry-byebug"
48
48
  end
49
49
  spec.add_development_dependency "guard-rspec"
50
+ spec.add_development_dependency "listen", "= 3.0.6"
50
51
  spec.add_development_dependency "coveralls"
51
52
 
52
53
  if RUBY_PLATFORM =~ /darwin/
@@ -7,13 +7,14 @@ module ActiveRecord::Turntable
7
7
  protected
8
8
 
9
9
  # @note override for logging current shard name
10
- def log(sql, name = "SQL", binds = [])
10
+ def log(sql, name = "SQL", binds = [], statement_name = nil)
11
11
  @instrumenter.instrument(
12
12
  "sql.active_record",
13
- :sql => sql,
14
- :name => name,
15
- :connection_id => object_id,
16
- :binds => binds,
13
+ :sql => sql,
14
+ :name => name,
15
+ :connection_id => object_id,
16
+ :statement_name => statement_name,
17
+ :binds => binds,
17
18
  :turntable_shard_name => turntable_shard_name) { yield }
18
19
  rescue Exception => e
19
20
  message = "#{e.class.name}: #{e.message}: #{sql} : #{turntable_shard_name}"
@@ -122,10 +122,10 @@ module ActiveRecord::Turntable
122
122
  relation = self.class.unscoped
123
123
 
124
124
  condition_scope = relation.where(
125
- relation.table[self.class.primary_key].eq(id).and(
126
- relation.table[lock_col].eq(self.class.quote_value(previous_lock_value, column_for_attribute(lock_col)))
127
- )
125
+ self.class.primary_key => id,
126
+ lock_col => previous_lock_value,
128
127
  )
128
+
129
129
  if klass.turntable_enabled? and klass.primary_key != klass.turntable_shard_key.to_s
130
130
  condition_scope = condition_scope.where(
131
131
  relation.table[klass.turntable_shard_key].eq(
@@ -134,13 +134,12 @@ module ActiveRecord::Turntable
134
134
  )
135
135
  end
136
136
 
137
- stmt = condition_scope.arel.compile_update(
138
- arel_attributes_with_values_for_update(attribute_names),
139
- self.class.primary_key
137
+ affected_rows = condition_scope.update_all(
138
+ Hash[attributes_for_update(attribute_names).map do |name|
139
+ [name, _read_attribute(name)]
140
+ end]
140
141
  )
141
142
 
142
- affected_rows = self.class.connection.update stmt
143
-
144
143
  unless affected_rows == 1
145
144
  raise ActiveRecord::StaleObjectError.new(self, "update")
146
145
  end
@@ -32,14 +32,20 @@ module ActiveRecord::Turntable
32
32
  if pkcol
33
33
  if pk != 'id'
34
34
  tbl.print %Q(, primary_key: "#{pk}")
35
+ elsif pkcol.sql_type == 'bigint'
36
+ tbl.print ", id: :bigserial"
35
37
  elsif pkcol.sql_type == 'uuid'
36
38
  tbl.print ", id: :uuid"
37
- tbl.print %Q(, default: "#{pkcol.default_function}") if pkcol.default_function
39
+ tbl.print %Q(, default: "#{pkcol.default_function.inspect}")
38
40
  end
39
41
  else
40
42
  tbl.print ", id: false"
41
43
  end
42
- tbl.print ", force: true"
44
+ if Util.earlier_than_ar42?
45
+ tbl.print ", force: true"
46
+ else
47
+ tbl.print ", force: :cascade"
48
+ end
43
49
  tbl.puts " do |t|"
44
50
 
45
51
  # then dump all non-primary key columns
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module Turntable
3
- VERSION = "2.3.3"
3
+ VERSION = "2.4.0"
4
4
  end
5
5
  end
@@ -10,10 +10,14 @@ describe ActiveRecord::Turntable::ActiveRecordExt::LockingOptimistic do
10
10
  truncate_shard
11
11
  end
12
12
 
13
- before do
13
+ before(:each) do
14
14
  ActiveRecord::Base.turntable_config.instance_variable_get(:@config)[:raise_on_not_specified_shard_update] = true
15
15
  end
16
16
 
17
+ after(:each) do
18
+ ActiveRecord::Base.turntable_config.instance_variable_get(:@config)[:raise_on_not_specified_shard_update] = false
19
+ end
20
+
17
21
  let!(:user_status) do
18
22
  user_status = UserStatus.new(user_id: 1)
19
23
  user_status.id = 10
@@ -25,4 +29,13 @@ describe ActiveRecord::Turntable::ActiveRecordExt::LockingOptimistic do
25
29
  subject { user_status.update_attributes(hp: 20) }
26
30
  it { expect { subject }.to change(user_status, :lock_version).by(1) }
27
31
  end
32
+
33
+ describe "Json serialized column is saved" do
34
+ before do
35
+ user_status.update_attributes(data: {foo: 'bar'})
36
+ user_status.reload
37
+ end
38
+ subject { user_status.data }
39
+ it { expect { subject }.to_not raise_error }
40
+ end
28
41
  end
@@ -3,4 +3,5 @@ class UserStatus < ActiveRecord::Base
3
3
  turntable :user_cluster, :user_id
4
4
  sequencer :user_seq
5
5
  belongs_to :user
6
+ serialize :data, JSON
6
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-turntable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.3
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - gussan
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-03-14 00:00:00.000000000 Z
12
+ date: 2017-01-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -153,30 +153,30 @@ dependencies:
153
153
  name: rack
154
154
  requirement: !ruby/object:Gem::Requirement
155
155
  requirements:
156
- - - ">="
156
+ - - "<"
157
157
  - !ruby/object:Gem::Version
158
- version: '0'
158
+ version: '2'
159
159
  type: :development
160
160
  prerelease: false
161
161
  version_requirements: !ruby/object:Gem::Requirement
162
162
  requirements:
163
- - - ">="
163
+ - - "<"
164
164
  - !ruby/object:Gem::Version
165
- version: '0'
165
+ version: '2'
166
166
  - !ruby/object:Gem::Dependency
167
167
  name: rspec
168
168
  requirement: !ruby/object:Gem::Requirement
169
169
  requirements:
170
170
  - - "~>"
171
171
  - !ruby/object:Gem::Version
172
- version: 3.1.0
172
+ version: 3.5.0
173
173
  type: :development
174
174
  prerelease: false
175
175
  version_requirements: !ruby/object:Gem::Requirement
176
176
  requirements:
177
177
  - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: 3.1.0
179
+ version: 3.5.0
180
180
  - !ruby/object:Gem::Dependency
181
181
  name: rspec-its
182
182
  requirement: !ruby/object:Gem::Requirement
@@ -289,6 +289,20 @@ dependencies:
289
289
  - - ">="
290
290
  - !ruby/object:Gem::Version
291
291
  version: '0'
292
+ - !ruby/object:Gem::Dependency
293
+ name: listen
294
+ requirement: !ruby/object:Gem::Requirement
295
+ requirements:
296
+ - - '='
297
+ - !ruby/object:Gem::Version
298
+ version: 3.0.6
299
+ type: :development
300
+ prerelease: false
301
+ version_requirements: !ruby/object:Gem::Requirement
302
+ requirements:
303
+ - - '='
304
+ - !ruby/object:Gem::Version
305
+ version: 3.0.6
292
306
  - !ruby/object:Gem::Dependency
293
307
  name: coveralls
294
308
  requirement: !ruby/object:Gem::Requirement
@@ -464,7 +478,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
464
478
  requirements:
465
479
  - - ">="
466
480
  - !ruby/object:Gem::Version
467
- version: 1.9.3
481
+ version: 2.0.0
468
482
  required_rubygems_version: !ruby/object:Gem::Requirement
469
483
  requirements:
470
484
  - - ">="
@@ -472,7 +486,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
472
486
  version: '0'
473
487
  requirements: []
474
488
  rubyforge_project: activerecord-turntable
475
- rubygems_version: 2.5.1
489
+ rubygems_version: 2.5.2
476
490
  signing_key:
477
491
  specification_version: 4
478
492
  summary: ActiveRecord sharding extension
@@ -524,4 +538,3 @@ test_files:
524
538
  - spec/spec_helper.rb
525
539
  - spec/support/matchers/be_saved_to.rb
526
540
  - spec/support/turntable_helper.rb
527
- has_rdoc: