attr_json 1.4.0 → 1.4.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
2
  SHA256:
3
- metadata.gz: b2f8a06eaf0058564901292a35bf15fd56c24b0eb8cb784ab1b1e9adc94b87e5
4
- data.tar.gz: eb4917f0eb8304b8261536ae75a5abd64dfc29aed52d82c190bb9b48a738ff08
3
+ metadata.gz: 3f2658693e8b0c4d99e412e33c8d2ef67a70bb71302f0d3d079326bef2380c44
4
+ data.tar.gz: 6acbf7ca9e743a2a22550731baf495306bc087fd3787c02ea19435b94f96a85d
5
5
  SHA512:
6
- metadata.gz: 599a5e752e187a9e511b766efffda2bbf546c6940f42e58c2f0cb883ef835c017e4ec8b9a4fbc2a3236fde733ae6c77c8d27e4728b0fff53dc993b209a3d7882
7
- data.tar.gz: 84dac19bcebedf7979ad3299b28ecc175fec59887cc9e6d761d708f0dbb240f8443aba52aca89a434ab8040f5ff64288ce4a428a659c61e8ff11d128399b5974
6
+ metadata.gz: 9a3cf5a739623ba998162b0072b351a2ae07316691dc013c2f88820dc36d5119833d64bc89335379dbd636f65fcf4253f818649f57538c753b0a5d98fc7c5b6c
7
+ data.tar.gz: 79a977eb57509ad7035bb5d20e6212568d51b8062de11d536bbeae58acab8bc8db48eba181adeecff97286fa59042b6eb143359b41a7c65d73955fb18c2edc75
@@ -54,15 +54,18 @@ jobs:
54
54
  ruby: 2.7
55
55
 
56
56
  - gemfile: rails_6_1
57
- ruby: 3.0
57
+ ruby: '3.0'
58
58
 
59
59
  - gemfile: rails_7_0
60
- ruby: 3.0
60
+ ruby: '3.0'
61
+
62
+ - gemfile: rails_7_0
63
+ ruby: 3.1
61
64
 
62
65
  name: ${{ matrix.gemfile }}, ruby ${{ matrix.ruby }}
63
66
 
64
67
  steps:
65
- - uses: actions/checkout@v2
68
+ - uses: actions/checkout@v3
66
69
 
67
70
  - name: Set up Ruby
68
71
  uses: ruby/setup-ruby@v1
@@ -45,7 +45,7 @@ jobs:
45
45
  include:
46
46
 
47
47
  - gemfile: rails_edge
48
- ruby: 2.7
48
+ ruby: '3.0'
49
49
 
50
50
  name: ${{ matrix.gemfile }}, ruby ${{ matrix.ruby }}
51
51
 
data/Appraisals CHANGED
@@ -37,6 +37,11 @@ appraise "rails-6-1" do
37
37
 
38
38
  gem "rails", "~> 6.1.0"
39
39
  gem "pg", "~> 1.0"
40
+
41
+ # sprockets-rails is already a rails 6.1 dependency, but combustion is failing
42
+ # to require it, this is one way to get it required.
43
+ # https://github.com/pat/combustion/issues/128
44
+ gem "sprockets-rails"
40
45
  end
41
46
 
42
47
  appraise "rails-7-0" do
@@ -44,21 +49,14 @@ appraise "rails-7-0" do
44
49
 
45
50
  gem "rails", "~> 7.0.0"
46
51
  gem "pg", "~> 1.0"
47
-
48
- # to make our integration tests using simple_form work as-is,
49
- # this works. Don't totally underestand the actual simple_form
50
- # setup paths in Rails 7....
51
- gem "sprockets-rails"
52
52
  end
53
53
 
54
54
  appraise "rails-edge" do
55
- gem 'combustion', "~> 1.0"
55
+ # need combustion edge to work with rails edge, will no longer
56
+ # be true on next combustion release, probably no later than Rails 7.1
57
+ # https://github.com/pat/combustion/pull/126
58
+ gem 'combustion', "~> 1.0", github: "pat/combustion"
56
59
 
57
60
  gem "rails", git: "https://github.com/rails/rails.git", branch: "main"
58
61
  gem "pg", "~> 1.0"
59
-
60
- # We do some tests using cocoon, currently via sprockets-rails,
61
- # which is not automatically available in Rails 7. Not sure
62
- # the future of cocoon in general. https://github.com/nathanvda/cocoon/issues/555
63
- gem "sprockets-rails"
64
62
  end
data/CHANGELOG.md CHANGED
@@ -7,7 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
  ## [Unreleased](https://github.com/jrochkind/attr_json/compare/v1.4.0...HEAD)
8
8
 
9
9
 
10
+ ## [1.4.1](https://github.com/jrochkind/attr_json/compare/v1.4.0...v1.4.1)
10
11
 
12
+ ### Fixed
13
+
14
+ * Fixed an obscure bug involving a conflict between attribute defaults and accepts_nested_attributes, in which defaults could overwrite assigned attributes. The `.fill_in_defaults` class method, which was never intended as public API and was commented accordingly, is gone. https://github.com/jrochkind/attr_json/pull/160
11
15
 
12
16
  ## [1.4.0](https://github.com/jrochkind/attr_json/compare/v1.3.0...v1.4.0)
13
17
 
data/Gemfile CHANGED
@@ -29,6 +29,13 @@ gem 'jquery-rails'
29
29
  # don't understand, so we need to depend on it.
30
30
  gem "coffee-rails"
31
31
 
32
+ # We do some tests using cocoon via sprockets, which needs sprockets-rails,
33
+ # which is not automatically available in Rails 7. We add it explicitly,
34
+ # which will duplciate dependences in rails pre-7, but add for rails 7. Not sure
35
+ # the future of cocoon in general. https://github.com/nathanvda/cocoon/issues/555
36
+ gem "sprockets-rails"
37
+
38
+
32
39
  gem 'capybara', "~> 3.0"
33
40
  gem 'webdrivers', '~> 4.0'
34
41
  gem "selenium-webdriver"
data/attr_json.gemspec CHANGED
@@ -51,7 +51,6 @@ attributes use as much of the existing ActiveRecord architecture as we can.}
51
51
  spec.add_development_dependency "bundler"
52
52
  spec.add_development_dependency "rake", ">= 10.0"
53
53
  spec.add_development_dependency "rspec", "~> 3.7"
54
- spec.add_development_dependency "database_cleaner", "~> 1.5"
55
54
  spec.add_development_dependency "yard-activesupport-concern"
56
55
  spec.add_development_dependency "appraisal", "~> 2.2"
57
56
 
@@ -10,6 +10,7 @@ gem "simple_form", ">= 4.0"
10
10
  gem "cocoon", ">= 1.2"
11
11
  gem "jquery-rails"
12
12
  gem "coffee-rails"
13
+ gem "sprockets-rails"
13
14
  gem "capybara", "~> 3.0"
14
15
  gem "webdrivers", "~> 4.0"
15
16
  gem "selenium-webdriver"
@@ -10,6 +10,7 @@ gem "simple_form", ">= 4.0"
10
10
  gem "cocoon", ">= 1.2"
11
11
  gem "jquery-rails"
12
12
  gem "coffee-rails"
13
+ gem "sprockets-rails"
13
14
  gem "capybara", "~> 3.0"
14
15
  gem "webdrivers", "~> 4.0"
15
16
  gem "selenium-webdriver"
@@ -10,6 +10,7 @@ gem "simple_form", ">= 4.0"
10
10
  gem "cocoon", ">= 1.2"
11
11
  gem "jquery-rails"
12
12
  gem "coffee-rails"
13
+ gem "sprockets-rails"
13
14
  gem "capybara", "~> 3.0"
14
15
  gem "webdrivers", "~> 4.0"
15
16
  gem "selenium-webdriver"
@@ -10,6 +10,7 @@ gem "simple_form", ">= 4.0"
10
10
  gem "cocoon", ">= 1.2"
11
11
  gem "jquery-rails"
12
12
  gem "coffee-rails"
13
+ gem "sprockets-rails"
13
14
  gem "capybara", "~> 3.0"
14
15
  gem "webdrivers", "~> 4.0"
15
16
  gem "selenium-webdriver"
@@ -10,6 +10,7 @@ gem "simple_form", ">= 4.0"
10
10
  gem "cocoon", ">= 1.2"
11
11
  gem "jquery-rails"
12
12
  gem "coffee-rails"
13
+ gem "sprockets-rails"
13
14
  gem "capybara", "~> 3.0"
14
15
  gem "webdrivers", "~> 4.0"
15
16
  gem "selenium-webdriver"
@@ -10,10 +10,10 @@ gem "simple_form", ">= 4.0"
10
10
  gem "cocoon", ">= 1.2"
11
11
  gem "jquery-rails"
12
12
  gem "coffee-rails"
13
+ gem "sprockets-rails"
13
14
  gem "capybara", "~> 3.0"
14
15
  gem "webdrivers", "~> 4.0"
15
16
  gem "selenium-webdriver"
16
17
  gem "byebug"
17
- gem "sprockets-rails"
18
18
 
19
19
  gemspec path: "../"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "combustion", "~> 1.0"
5
+ gem "combustion", "~> 1.0", github: "pat/combustion"
6
6
  gem "rails", git: "https://github.com/rails/rails.git", branch: "main"
7
7
  gem "pg", "~> 1.0"
8
8
  gem "rspec-rails", "~> 4.0"
@@ -10,10 +10,10 @@ gem "simple_form", ">= 4.0"
10
10
  gem "cocoon", ">= 1.2"
11
11
  gem "jquery-rails"
12
12
  gem "coffee-rails"
13
+ gem "sprockets-rails"
13
14
  gem "capybara", "~> 3.0"
14
15
  gem "webdrivers", "~> 4.0"
15
16
  gem "selenium-webdriver"
16
17
  gem "byebug"
17
- gem "sprockets-rails"
18
18
 
19
19
  gemspec path: "../"
@@ -177,27 +177,6 @@ module AttrJson
177
177
  end
178
178
  end
179
179
 
180
- # This should kind of be considered 'protected', but the semantics
181
- # of how we want to call it don't give us a visibility modifier that works.
182
- # Prob means refactoring called for. TODO?
183
- def fill_in_defaults(hash)
184
- # Only if we need to mutate it to add defaults, we'll dup it first. deep_dup not neccesary
185
- # since we're only modifying top-level here.
186
- duped = false
187
- attr_json_registry.definitions.each do |definition|
188
- if definition.has_default? && ! (hash.has_key?(definition.store_key.to_s) || hash.has_key?(definition.store_key.to_sym))
189
- unless duped
190
- hash = hash.dup
191
- duped = true
192
- end
193
-
194
- hash[definition.store_key] = definition.provide_default!
195
- end
196
- end
197
-
198
- hash
199
- end
200
-
201
180
  private
202
181
 
203
182
  # Define an anonymous module and include it, so can still be easily
@@ -213,11 +192,9 @@ module AttrJson
213
192
  end
214
193
 
215
194
  def initialize(attributes = {})
216
- if !attributes.respond_to?(:transform_keys)
217
- raise ArgumentError, "When assigning attributes, you must pass a hash as an argument."
218
- end
195
+ super
219
196
 
220
- super(self.class.fill_in_defaults(attributes))
197
+ fill_in_defaults!
221
198
  end
222
199
 
223
200
  def attributes
@@ -303,6 +280,14 @@ module AttrJson
303
280
 
304
281
  private
305
282
 
283
+ def fill_in_defaults!
284
+ self.class.attr_json_registry.definitions.each do |definition|
285
+ if definition.has_default? && !attributes.has_key?(definition.name.to_s)
286
+ self.send("#{definition.name.to_s}=", definition.provide_default!)
287
+ end
288
+ end
289
+ end
290
+
306
291
  def _attr_json_write(key, value)
307
292
  if attribute_def = self.class.attr_json_registry[key.to_sym]
308
293
  attributes[key.to_s] = attribute_def.cast(value)
@@ -270,7 +270,13 @@ module AttrJson
270
270
  # find it from currently declared attributes.
271
271
  # https://github.com/rails/rails/blob/6aa5cf03ea8232180ffbbae4c130b051f813c670/activemodel/lib/active_model/attribute_methods.rb#L463-L468
272
272
  def matched_attribute_method(method_name)
273
- matches = self.class.send(:attribute_method_matchers_matching, method_name)
273
+ if self.class.respond_to?(:attribute_method_patterns_matching, true)
274
+ # Rails 7.1+
275
+ matches = self.class.send(:attribute_method_patterns_matching, method_name)
276
+ else
277
+ matches = self.class.send(:attribute_method_matchers_matching, method_name)
278
+ end
279
+
274
280
  matches.detect do |match|
275
281
  registry.has_attribute?(match.attr_name)
276
282
  end
@@ -1,3 +1,3 @@
1
1
  module AttrJson
2
- VERSION = "1.4.0"
2
+ VERSION = "1.4.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attr_json
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Rochkind
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-22 00:00:00.000000000 Z
11
+ date: 2022-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -72,20 +72,6 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '3.7'
75
- - !ruby/object:Gem::Dependency
76
- name: database_cleaner
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '1.5'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '1.5'
89
75
  - !ruby/object:Gem::Dependency
90
76
  name: yard-activesupport-concern
91
77
  requirement: !ruby/object:Gem::Requirement
@@ -225,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
211
  - !ruby/object:Gem::Version
226
212
  version: '0'
227
213
  requirements: []
228
- rubygems_version: 3.1.6
214
+ rubygems_version: 3.2.33
229
215
  signing_key:
230
216
  specification_version: 4
231
217
  summary: ActiveRecord attributes stored serialized in a json column, super smooth.