attr_json 2.3.0 → 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 +4 -4
- data/.github/workflows/ci.yml +7 -1
- data/.github/workflows/future_rails_ci.yml +1 -1
- data/Appraisals +8 -0
- data/CHANGELOG.md +18 -1
- data/README.md +2 -2
- data/attr_json.gemspec +1 -1
- data/gemfiles/rails_7_2.gemfile +18 -0
- data/lib/attr_json/model/nested_model_validator.rb +27 -0
- data/lib/attr_json/model.rb +6 -6
- data/lib/attr_json/version.rb +1 -1
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 158f20e87ae0be8aae9c5421c587380d5c9404c1df7271634fd20c607f10c823
|
4
|
+
data.tar.gz: 470d5fc5cdd5f8a2c797765f0a3cefe1c138026c8684ea9fb20c1883ed1566ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e33cf6fb2b71be270c938395b6c453a8311519f0a875372534677c2f7bc9a2a15311dec666ab7d93b4a7fe0f4da36996cded7862fd9cf1b01a89100ce3bfaf6
|
7
|
+
data.tar.gz: d4eed5840a55e7d98158e1bd3b70b9f082b114f6dc389d532547d93d776684602ba896c297abc0f124d10a24821ad4eb13ef0036c1d9ac0771b198d30b868a2e
|
data/.github/workflows/ci.yml
CHANGED
@@ -62,10 +62,16 @@ jobs:
|
|
62
62
|
- gemfile: rails_7_1
|
63
63
|
ruby: 3.2
|
64
64
|
|
65
|
+
- gemfile: rails_7_1
|
66
|
+
ruby: 3.3
|
67
|
+
|
68
|
+
- gemfile: rails_7_2
|
69
|
+
ruby: 3.3
|
70
|
+
|
65
71
|
name: ${{ matrix.gemfile }}, ruby ${{ matrix.ruby }}
|
66
72
|
|
67
73
|
steps:
|
68
|
-
- uses: actions/checkout@
|
74
|
+
- uses: actions/checkout@v4
|
69
75
|
|
70
76
|
- name: Set up Ruby
|
71
77
|
uses: ruby/setup-ruby@v1
|
data/Appraisals
CHANGED
@@ -37,6 +37,14 @@ appraise "rails-7-1" do
|
|
37
37
|
gem "pg", "~> 1.0"
|
38
38
|
end
|
39
39
|
|
40
|
+
appraise "rails-7-2" do
|
41
|
+
gem 'combustion', "~> 1.0"
|
42
|
+
|
43
|
+
gem "rails", "~> 7.2.0"
|
44
|
+
gem "pg", "~> 1.0"
|
45
|
+
end
|
46
|
+
|
47
|
+
|
40
48
|
appraise "rails-edge" do
|
41
49
|
# need combustion edge to work with rails edge, will no longer
|
42
50
|
# be true on next combustion release, probably no later than Rails 7.1
|
data/CHANGELOG.md
CHANGED
@@ -4,7 +4,8 @@ Notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
-
|
7
|
+
|
8
|
+
## [Unreleased](https://github.com/jrochkind/attr_json/compare/v2.3.1...HEAD)
|
8
9
|
|
9
10
|
### Fixed
|
10
11
|
|
@@ -30,6 +31,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
30
31
|
|
31
32
|
*
|
32
33
|
|
34
|
+
## [2.3.1](https://github.com/jrochkind/attr_json/compare/v2.3.1...v2.4.0)
|
35
|
+
|
36
|
+
### Added
|
37
|
+
|
38
|
+
* Allow Rails 7.2 in gemspec (no code changes required to support) https://github.com/jrochkind/attr_json/pull/228
|
39
|
+
|
40
|
+
|
41
|
+
## [2.3.1](https://github.com/jrochkind/attr_json/compare/v2.3.0...v2.3.1)
|
42
|
+
|
43
|
+
### Fixed
|
44
|
+
|
45
|
+
* Keep nested model validation working in Rails post-7.1, by no longer trying to re-use ActiveRecord::Validations::AssociatedValidator, instead supplying our own custom code. https://github.com/jrochkind/attr_json/pull/220
|
46
|
+
|
47
|
+
* Validate PolymorphicModel instances. https://github.com/jrochkind/attr_json/pull/225 Thanks @LyricL-Gitster
|
48
|
+
|
49
|
+
|
33
50
|
## [2.3.0]((https://github.com/jrochkind/attr_json/compare/v2.2.0...v2.3.0))
|
34
51
|
|
35
52
|
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# AttrJson
|
2
|
-
[](https://github.com/jrochkind/attr_json/actions?query=workflow%3ACI+branch%3Amaster)
|
3
|
-
[](https://github.com/jrochkind/attr_json/actions?query=workflow%
|
2
|
+
[](https://github.com/jrochkind/attr_json/actions/workflows/ci.yml?query=workflow%3ACI+branch%3Amaster)
|
3
|
+
[](https://github.com/jrochkind/attr_json/actions/workflows/future_rails_ci.yml?query=workflow%3ACI+branch%3Amaster)
|
4
4
|
[](https://badge.fury.io/rb/attr_json)
|
5
5
|
|
6
6
|
ActiveRecord attributes stored serialized in a json column, super smooth. For Rails 6.0.x through 7.0.x. Ruby 2.7+.
|
data/attr_json.gemspec
CHANGED
@@ -47,7 +47,7 @@ attributes use as much of the existing ActiveRecord architecture as we can.}
|
|
47
47
|
# dependency included just as it is here, should never be released
|
48
48
|
# from an env tht has any of these variables set.
|
49
49
|
unless ENV['APPRAISAL_INITIALIZED'] || ENV["TRAVIS"] || ENV['CI']
|
50
|
-
spec.add_runtime_dependency "activerecord", ">= 6.0.0", "< 7.
|
50
|
+
spec.add_runtime_dependency "activerecord", ">= 6.0.0", "< 7.3"
|
51
51
|
end
|
52
52
|
|
53
53
|
spec.add_development_dependency "bundler"
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "combustion", "~> 1.0"
|
6
|
+
gem "rails", "~> 7.2.0"
|
7
|
+
gem "pg", "~> 1.0"
|
8
|
+
gem "rspec-rails", "~> 6.0"
|
9
|
+
gem "simple_form", ">= 4.0"
|
10
|
+
gem "cocoon", ">= 1.2"
|
11
|
+
gem "jquery-rails"
|
12
|
+
gem "coffee-rails"
|
13
|
+
gem "sprockets-rails"
|
14
|
+
gem "capybara", "~> 3.0"
|
15
|
+
gem "selenium-webdriver"
|
16
|
+
gem "byebug"
|
17
|
+
|
18
|
+
gemspec path: "../"
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module AttrJson
|
2
|
+
module Model
|
3
|
+
# Used to validate an attribute in an AttrJson::Model whose values are other models, when
|
4
|
+
# you want validation errors on the nested models to post up.
|
5
|
+
#
|
6
|
+
# This is based on ActiveRecord's own ActiveRecord::Validations::AssociatedValidator, and actually forked
|
7
|
+
# from it at https://github.com/rails/rails/blob/e37adfed4eff3b43350ec87222a922e9c72d9c1b/activerecord/lib/active_record/validations/associated.rb
|
8
|
+
#
|
9
|
+
# We used to simply use an ActiveRecord::Validations::AssociatedValidator, but as of https://github.com/jrochkind/attr_json/pull/220 (e1e798142d)
|
10
|
+
# it got ActiveRecord-specific functionality that no longer worked with our use case.
|
11
|
+
#
|
12
|
+
# No problem, the implementation is simple, we can provide it here, based on the last version that did work.
|
13
|
+
class NestedModelValidator < ActiveModel::EachValidator
|
14
|
+
def validate_each(record, attribute, value)
|
15
|
+
if Array(value).reject { |r| valid_object?(r) }.any?
|
16
|
+
record.errors.add(attribute, :invalid, **options.merge(value: value))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def valid_object?(record)
|
22
|
+
#(record.respond_to?(:marked_for_destruction?) && record.marked_for_destruction?) || record.valid?
|
23
|
+
record.valid?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/attr_json/model.rb
CHANGED
@@ -8,6 +8,7 @@ require 'attr_json/attribute_definition/registry'
|
|
8
8
|
|
9
9
|
require 'attr_json/type/model'
|
10
10
|
require 'attr_json/model/cocoon_compat'
|
11
|
+
require 'attr_json/model/nested_model_validator'
|
11
12
|
|
12
13
|
require 'attr_json/serialization_coder_from_type'
|
13
14
|
|
@@ -207,8 +208,8 @@ module AttrJson
|
|
207
208
|
# @option options [String,Symbol] :store_key (nil) Serialize to JSON using
|
208
209
|
# given store_key, rather than name as would be usual.
|
209
210
|
#
|
210
|
-
# @option options [Boolean] :validate (true)
|
211
|
-
#
|
211
|
+
# @option options [Boolean] :validate (true) Mak validation errors on the attributes post up
|
212
|
+
# to self, using something similar to an ActiveRecord::Validations::AssociatedValidator
|
212
213
|
def attr_json(name, type, **options)
|
213
214
|
options.assert_valid_keys(*(AttributeDefinition::VALID_OPTIONS - [:container_attribute] + [:validate]))
|
214
215
|
|
@@ -219,10 +220,9 @@ module AttrJson
|
|
219
220
|
)
|
220
221
|
|
221
222
|
# By default, automatically validate nested models
|
222
|
-
if type.kind_of?(AttrJson::Type::Model) && options[:validate] != false
|
223
|
-
#
|
224
|
-
|
225
|
-
self.validates_with ActiveRecord::Validations::AssociatedValidator, attributes: [name.to_sym]
|
223
|
+
if (type.kind_of?(AttrJson::Type::Model) || type.kind_of?(AttrJson::Type::PolymorphicModel)) && options[:validate] != false
|
224
|
+
# Post validations up with something based on ActiveRecord::Validations::AssociatedValidator
|
225
|
+
self.validates_with ::AttrJson::Model::NestedModelValidator, attributes: [name.to_sym]
|
226
226
|
end
|
227
227
|
|
228
228
|
_attr_jsons_module.module_eval do
|
data/lib/attr_json/version.rb
CHANGED
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: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Rochkind
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 6.0.0
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '7.
|
22
|
+
version: '7.3'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 6.0.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '7.
|
32
|
+
version: '7.3'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: bundler
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -165,6 +165,7 @@ files:
|
|
165
165
|
- gemfiles/rails_6_1.gemfile
|
166
166
|
- gemfiles/rails_7_0.gemfile
|
167
167
|
- gemfiles/rails_7_1.gemfile
|
168
|
+
- gemfiles/rails_7_2.gemfile
|
168
169
|
- gemfiles/rails_edge.gemfile
|
169
170
|
- lib/attr_json.rb
|
170
171
|
- lib/attr_json/attribute_definition.rb
|
@@ -172,6 +173,7 @@ files:
|
|
172
173
|
- lib/attr_json/config.rb
|
173
174
|
- lib/attr_json/model.rb
|
174
175
|
- lib/attr_json/model/cocoon_compat.rb
|
176
|
+
- lib/attr_json/model/nested_model_validator.rb
|
175
177
|
- lib/attr_json/nested_attributes.rb
|
176
178
|
- lib/attr_json/nested_attributes/builder.rb
|
177
179
|
- lib/attr_json/nested_attributes/multiparameter_attribute_writer.rb
|
@@ -207,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
207
209
|
- !ruby/object:Gem::Version
|
208
210
|
version: '0'
|
209
211
|
requirements: []
|
210
|
-
rubygems_version: 3.
|
212
|
+
rubygems_version: 3.2.33
|
211
213
|
signing_key:
|
212
214
|
specification_version: 4
|
213
215
|
summary: ActiveRecord attributes stored serialized in a json column, super smooth.
|