ar_transaction_changes 1.1.1 → 1.1.6

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: 464cbfbf5ac37f36f38328159dc6c6d913d5db95
4
- data.tar.gz: 59ae318875b3050ee7a4a2c71f196a6e2eb34669
2
+ SHA256:
3
+ metadata.gz: 4a6cb7a7d939217a2aa0ce44c25c2f89a97ed7457be1c1836d6e7d82e2250c9a
4
+ data.tar.gz: 4d7295698fedf9d8981be7266b86f5c0ef75794ded3f0fce511b3aec151df76e
5
5
  SHA512:
6
- metadata.gz: 7d46632d1585c8038490067757bb143fb0f0d32a2fd4465e03b424b148177454305042a9ad15ec9c9c761c8f743814e5b7d6a431c76b7cc56b482c896eda1b72
7
- data.tar.gz: 86a9948798f5a517adb26262d73064e03f8cb4f7ae1da73e94a24e796fe7ff0590d1145389a1f46f24cdcb59abab2d43f4619bf14c31caf3de0bae61c2691b24
6
+ metadata.gz: b3fbd5e913fc97722ea9181f088f9dd2b0282751ceb5cc1588a9f73c63b5f3e1df97dfad7f4aa9ee9952b3bb52bba49edafa65419ca904623475806aad5ebb92
7
+ data.tar.gz: 8bbbcf7edd439aa32bed2d1ef988a20adc49629256b779f1e6c473193c9b28c50c0d246e80b57195b37e452d81324a7ec71fd448a35f4b8f5bebe9abd4f4b7b8
@@ -1,22 +1,17 @@
1
1
  language: ruby
2
2
  sudo: false
3
3
 
4
- rvm:
5
- - 2.2.5
6
- - 2.3.1
7
-
8
- gemfile:
9
- - Gemfile.rails42
10
- - Gemfile.rails50
11
- - Gemfile.rails51
12
-
13
- matrix:
4
+ jobs:
14
5
  include:
15
- - rvm: 2.1.9
16
- gemfile: Gemfile.rails42
6
+ - name: "Minimum supported versions"
7
+ rvm: 2.4
8
+ gemfile: Gemfile.rails52
9
+ - name: "Latest released versions"
10
+ rvm: 2.7
11
+ gemfile: Gemfile
12
+ - name: "Rails master branch"
13
+ rvm: 2.7
14
+ gemfile: Gemfile.rails_head
17
15
 
18
16
  services:
19
17
  - mysql
20
-
21
- before_script:
22
- - mysql -e 'create database ar_transaction_changes_test'
@@ -1,5 +1,5 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem "rails", "~> 4.2.0"
3
+ gem 'activerecord', '~> 5.2.0'
4
4
 
5
5
  gemspec
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem 'activerecord', github: 'rails/rails'
4
+
5
+ gemspec
data/README.md CHANGED
@@ -44,6 +44,19 @@ class User < ActiveRecord::Base
44
44
  end
45
45
  ```
46
46
 
47
+ ## Important Notes
48
+
49
+ `ar_transaction_changes` may have conflict with another gems who modify
50
+ `active_record#write_attribute` method, e.g. `globalize` gem
51
+
52
+ the workaround is by requiring this gem first, for example:
53
+
54
+ ```ruby
55
+ gem 'ar_transaction_changes', require: false
56
+ gem 'globalize', require: ['ar_transaction_changes', 'globalize']
57
+
58
+ ```
59
+
47
60
  ## Contributing
48
61
 
49
62
  1. Fork it
@@ -11,13 +11,14 @@ Gem::Specification.new do |gem|
11
11
  gem.description = %q{Solves the problem of trying to get all the changes to an object during a transaction in an after_commit callbacks.}
12
12
  gem.summary = %q{Store transaction changes for active record objects}
13
13
  gem.homepage = "https://github.com/dylanahsmith/ar_transaction_changes"
14
+ gem.license = "MIT"
14
15
 
15
16
  gem.files = `git ls-files`.split($/)
16
17
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
19
  gem.require_paths = ["lib"]
19
20
 
20
- gem.add_dependency "activerecord", ">= 4.2.4", "< 6.0"
21
+ gem.add_dependency "activerecord", ">= 5.2.0"
21
22
 
22
23
  gem.add_development_dependency("rake")
23
24
  gem.add_development_dependency("mysql2")
@@ -1,4 +1,5 @@
1
1
  require "ar_transaction_changes/version"
2
+ require "active_record"
2
3
 
3
4
  module ArTransactionChanges
4
5
  def _run_commit_callbacks
@@ -17,13 +18,28 @@ module ArTransactionChanges
17
18
  @transaction_changed_attributes ||= HashWithIndifferentAccess.new
18
19
  end
19
20
 
21
+ def _write_attribute(attr_name, value)
22
+ _store_transaction_changed_attributes(attr_name) do
23
+ super(attr_name, value)
24
+ end
25
+ end
26
+
27
+ if ActiveRecord.version >= Gem::Version.new('6.1.0.alpha')
28
+ def write_attribute(attr_name, value)
29
+ _store_transaction_changed_attributes(attr_name) do
30
+ super(attr_name, value)
31
+ end
32
+ end
33
+ end
34
+
20
35
  private
21
36
 
22
- def write_attribute(attr_name, value) # override
37
+ def _store_transaction_changed_attributes(attr_name)
23
38
  attr_name = attr_name.to_s
24
- old_value = attributes[attr_name]
25
- ret = super
26
- unless transaction_changed_attributes.key?(attr_name) || value == old_value
39
+ old_value = read_attribute(attr_name)
40
+ ret = yield
41
+ new_value = read_attribute(attr_name)
42
+ unless transaction_changed_attributes.key?(attr_name) || new_value == old_value
27
43
  transaction_changed_attributes[attr_name] = old_value
28
44
  end
29
45
  ret
@@ -1,3 +1,3 @@
1
1
  module ArTransactionChanges
2
- VERSION = "1.1.1"
2
+ VERSION = "1.1.6"
3
3
  end
@@ -1,20 +1,24 @@
1
- ENV["RAILS_ENV"] = "test"
2
1
  require 'pathname'
3
2
  require 'yaml'
4
- require 'active_record'
5
3
  require 'ar_transaction_changes'
6
4
  require 'minitest/autorun'
7
5
 
6
+ ENV["RAILS_ENV"] = "test"
7
+
8
8
  test_dir = Pathname.new(File.dirname(__FILE__))
9
9
  config_filename = test_dir.join("database.yml").exist? ? "database.yml" : "database.yml.default"
10
10
  database_yml = YAML.load(test_dir.join(config_filename).read)
11
- ActiveRecord::Base.establish_connection database_yml['test']
11
+ database_config = database_yml.fetch("test")
12
+
13
+ ActiveRecord::Base.establish_connection(database_config.except("database"))
14
+ ActiveRecord::Base.connection.recreate_database(database_config.fetch("database"))
15
+ ActiveRecord::Base.establish_connection(database_config)
12
16
 
13
17
  ActiveRecord::Base.connection.tap do |db|
14
- db.drop_table(:users) if db.table_exists?(:users)
15
18
  db.create_table(:users) do |t|
16
19
  t.string :name
17
20
  t.string :occupation
21
+ t.integer :age
18
22
  t.timestamps null: false
19
23
  end
20
24
  end
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
 
3
3
  class TransactionChangesTest < MiniTest::Unit::TestCase
4
4
  def setup
5
- @user = User.new(:name => "Dylan", :occupation => "Developer")
5
+ @user = User.new(:name => "Dylan", :occupation => "Developer", age: 20)
6
6
  @user.save!
7
7
  @user.stored_transaction_changes = nil
8
8
  end
@@ -23,6 +23,13 @@ class TransactionChangesTest < MiniTest::Unit::TestCase
23
23
  assert_equal ["Dylan", "Dillon"], @user.stored_transaction_changes["name"]
24
24
  end
25
25
 
26
+ def test_transaction_changes_for_updating_attribute
27
+ @user[:name] = "Dillon"
28
+ @user.save!
29
+
30
+ assert_equal ["Dylan", "Dillon"], @user.stored_transaction_changes["name"]
31
+ end
32
+
26
33
  def test_transaction_changes_for_double_save
27
34
  @user.transaction do
28
35
  @user.name = "Dillon"
@@ -67,7 +74,7 @@ class TransactionChangesTest < MiniTest::Unit::TestCase
67
74
  end
68
75
 
69
76
  def test_transaction_changes_for_changing_updated_at
70
- @user.update_attributes!(updated_at: Time.now - 1.second)
77
+ @user.update!(updated_at: Time.now - 1.second)
71
78
  old_updated_at = @user.updated_at
72
79
  @user.stored_transaction_changes = nil
73
80
 
@@ -78,7 +85,7 @@ class TransactionChangesTest < MiniTest::Unit::TestCase
78
85
  end
79
86
 
80
87
  def test_transaction_changes_for_touch
81
- @user.update_attributes!(updated_at: Time.now - 1.second)
88
+ @user.update!(updated_at: Time.now - 1.second)
82
89
  old_updated_at = @user.updated_at
83
90
  @user.stored_transaction_changes = nil
84
91
 
@@ -94,4 +101,13 @@ class TransactionChangesTest < MiniTest::Unit::TestCase
94
101
  end
95
102
  refute @user.stored_transaction_changes["name"]
96
103
  end
104
+
105
+ def test_transaction_changes_type_cast
106
+ # "20" will be converted to 20 by read_attribute https://apidock.com/rails/ActiveRecord/AttributeMethods/read_attribute
107
+ @user.transaction do
108
+ @user.age = "20"
109
+ @user.save!
110
+ end
111
+ assert_empty @user.stored_transaction_changes
112
+ end
97
113
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar_transaction_changes
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dylan Thacker-Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-23 00:00:00.000000000 Z
11
+ date: 2020-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,20 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.2.4
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '6.0'
19
+ version: 5.2.0
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: 4.2.4
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '6.0'
26
+ version: 5.2.0
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: rake
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -69,9 +63,8 @@ files:
69
63
  - ".gitignore"
70
64
  - ".travis.yml"
71
65
  - Gemfile
72
- - Gemfile.rails42
73
- - Gemfile.rails50
74
- - Gemfile.rails51
66
+ - Gemfile.rails52
67
+ - Gemfile.rails_head
75
68
  - LICENSE.txt
76
69
  - README.md
77
70
  - Rakefile
@@ -83,7 +76,8 @@ files:
83
76
  - test/test_helper.rb
84
77
  - test/transaction_changes_test.rb
85
78
  homepage: https://github.com/dylanahsmith/ar_transaction_changes
86
- licenses: []
79
+ licenses:
80
+ - MIT
87
81
  metadata: {}
88
82
  post_install_message:
89
83
  rdoc_options: []
@@ -100,8 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
94
  - !ruby/object:Gem::Version
101
95
  version: '0'
102
96
  requirements: []
103
- rubyforge_project:
104
- rubygems_version: 2.6.10
97
+ rubygems_version: 3.1.2
105
98
  signing_key:
106
99
  specification_version: 4
107
100
  summary: Store transaction changes for active record objects
@@ -1,5 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem "rails", "~> 5.0.0"
4
-
5
- gemspec
@@ -1,5 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem "rails", "~> 5.1.0.rc1"
4
-
5
- gemspec