attr_json 2.1.0 → 2.3.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 +12 -1
- data/Appraisals +12 -0
- data/CHANGELOG.md +25 -1
- data/Gemfile +0 -1
- data/README.md +3 -5
- data/attr_json.gemspec +1 -1
- data/gemfiles/rails_6_0.gemfile +1 -1
- data/gemfiles/rails_6_1.gemfile +0 -1
- data/gemfiles/rails_7_0.gemfile +0 -1
- data/gemfiles/rails_7_1.gemfile +18 -0
- data/gemfiles/rails_edge.gemfile +0 -1
- data/lib/attr_json/attribute_definition/registry.rb +43 -9
- data/lib/attr_json/attribute_definition.rb +3 -1
- data/lib/attr_json/model.rb +10 -8
- data/lib/attr_json/nested_attributes/builder.rb +2 -0
- data/lib/attr_json/nested_attributes/multiparameter_attribute_writer.rb +2 -0
- data/lib/attr_json/nested_attributes/writer.rb +2 -0
- data/lib/attr_json/nested_attributes.rb +2 -0
- data/lib/attr_json/record/query_builder.rb +2 -0
- data/lib/attr_json/record/query_scopes.rb +2 -0
- data/lib/attr_json/record.rb +8 -14
- data/lib/attr_json/serialization_coder_from_type.rb +2 -0
- data/lib/attr_json/type/array.rb +2 -0
- data/lib/attr_json/type/container_attribute.rb +2 -0
- data/lib/attr_json/type/model.rb +2 -0
- data/lib/attr_json/type/polymorphic_model.rb +2 -0
- data/lib/attr_json/version.rb +1 -1
- data/lib/attr_json.rb +21 -1
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eb4f8078039ec81cc25e7a95318ff5e42cb5bf85a955b40326f60f9022af16a2
|
4
|
+
data.tar.gz: 635f08ce5fa34ce45dfdd5256ae0e81fdcc2d455f4525bad5f71f5b0c4391c6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22c35f674c7b5f3a4e91f348d20439df3e8fe175ca5d3c8938720a5e71739df2474cdddd5fdab5f0527f8751ed0fb6dee11ba7f75889c143daca92bd84afc86b
|
7
|
+
data.tar.gz: 636628f0083dd61c869de5b9eb65a0c11988560e26d5dcd8e822759788bdac4bdb3c6f0359e2257867ac91a61721fda32df54a36f51a001450ef883289be433a
|
data/.github/workflows/ci.yml
CHANGED
@@ -18,7 +18,10 @@ jobs:
|
|
18
18
|
tests:
|
19
19
|
services:
|
20
20
|
db:
|
21
|
-
|
21
|
+
# used to be 9.4, should work on 9.4, only moved to 10.0
|
22
|
+
# because of rails 7.1 bug (rails intends to support 9 too!)
|
23
|
+
# https://github.com/jrochkind/attr_json/issues/211
|
24
|
+
image: postgres:10.0
|
22
25
|
env:
|
23
26
|
POSTGRES_USER: postgres
|
24
27
|
POSTGRES_PASSWORD: postgres
|
@@ -50,6 +53,14 @@ jobs:
|
|
50
53
|
- gemfile: rails_7_0
|
51
54
|
ruby: 3.2
|
52
55
|
|
56
|
+
- gemfile: rails_7_1
|
57
|
+
ruby: '3.0'
|
58
|
+
|
59
|
+
- gemfile: rails_7_1
|
60
|
+
ruby: 3.1
|
61
|
+
|
62
|
+
- gemfile: rails_7_1
|
63
|
+
ruby: 3.2
|
53
64
|
|
54
65
|
name: ${{ matrix.gemfile }}, ruby ${{ matrix.ruby }}
|
55
66
|
|
data/Appraisals
CHANGED
@@ -4,6 +4,11 @@ appraise "rails-6-0" do
|
|
4
4
|
gem "rails", ">= 6.0.0", "< 6.1"
|
5
5
|
gem "pg", "~> 1.0"
|
6
6
|
gem "rspec-rails", "~> 5.0"
|
7
|
+
|
8
|
+
|
9
|
+
# Ruby 2.7 still needs webdrivers, since it can't use a new enough
|
10
|
+
# version of selenium-webdriver to download drivers itself
|
11
|
+
gem "webdrivers", ">= 5.3.1"
|
7
12
|
end
|
8
13
|
|
9
14
|
appraise "rails-6-1" do
|
@@ -25,6 +30,13 @@ appraise "rails-7-0" do
|
|
25
30
|
gem "pg", "~> 1.0"
|
26
31
|
end
|
27
32
|
|
33
|
+
appraise "rails-7-1" do
|
34
|
+
gem 'combustion', "~> 1.0"
|
35
|
+
|
36
|
+
gem "rails", "~> 7.1.0"
|
37
|
+
gem "pg", "~> 1.0"
|
38
|
+
end
|
39
|
+
|
28
40
|
appraise "rails-edge" do
|
29
41
|
# need combustion edge to work with rails edge, will no longer
|
30
42
|
# be true on next combustion release, probably no later than Rails 7.1
|
data/CHANGELOG.md
CHANGED
@@ -4,7 +4,7 @@ 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
|
-
## [Unreleased](https://github.com/jrochkind/attr_json/compare/v2.0
|
7
|
+
## [Unreleased](https://github.com/jrochkind/attr_json/compare/v2.3.0...HEAD)
|
8
8
|
|
9
9
|
### Fixed
|
10
10
|
|
@@ -22,6 +22,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
22
22
|
|
23
23
|
*
|
24
24
|
|
25
|
+
### Changed
|
26
|
+
|
27
|
+
*
|
28
|
+
|
29
|
+
*
|
30
|
+
|
31
|
+
*
|
32
|
+
|
33
|
+
## [2.3.0]((https://github.com/jrochkind/attr_json/compare/v2.2.0...v2.3.0))
|
34
|
+
|
35
|
+
|
36
|
+
### Changed
|
37
|
+
|
38
|
+
* Avoid private ActiveRecord API when lazily registering container attributes. (Compat with Rails post 7.1) https://github.com/jrochkind/attr_json/pull/214
|
39
|
+
|
40
|
+
* Freeze more strings to reduce String allocations https://github.com/jrochkind/attr_json/pull/216
|
41
|
+
|
42
|
+
## [2.2.0](https://github.com/jrochkind/attr_json/compare/v2.1.0...v2.2.0)
|
43
|
+
|
44
|
+
### Added
|
45
|
+
|
46
|
+
* Test and allow Rails 7.1 https://github.com/jrochkind/attr_json/pull/208 Thanks @JoeSouthan
|
47
|
+
|
48
|
+
|
25
49
|
## [2.1.0](https://github.com/jrochkind/attr_json/compare/v2.0.1...v2.1.0)
|
26
50
|
|
27
51
|
### Added
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -48,7 +48,7 @@ class MyModel < ActiveRecord::Base
|
|
48
48
|
|
49
49
|
# You can have an _array_ of those things too. It will ordinarily default to empty array.
|
50
50
|
attr_json :int_array, :integer, array: true
|
51
|
-
|
51
|
+
|
52
52
|
# The empty array default can be disabled with the following setting
|
53
53
|
attr_json :str_array, :string, array: true, default: AttrJson::AttributeDefinition::NO_DEFAULT_PROVIDED
|
54
54
|
|
@@ -189,10 +189,8 @@ attribute name, it'll actually query on store_key. And properly handles any
|
|
189
189
|
`container_attribute` -- it'll look in the proper jsonb column.
|
190
190
|
|
191
191
|
Anything you can do with `jsonb_contains` should be handled
|
192
|
-
by a [postgres `USING GIN` index](https://www.postgresql.org/docs/9.5/static/datatype-json.html#JSON-INDEXING)
|
193
|
-
|
194
|
-
investigate: Check out `to_sql` on any query to see what jsonb SQL it generates,
|
195
|
-
and explore if you have the indexes you need.
|
192
|
+
by a [postgres `USING GIN` index](https://www.postgresql.org/docs/9.5/static/datatype-json.html#JSON-INDEXING). Figuring out how to use indexes for jsonb
|
193
|
+
queries can be confusing, [here is a good blog post](https://blog.kiprosh.com/postgres-gin-index-in-rails/).
|
196
194
|
|
197
195
|
<a name="nested"></a>
|
198
196
|
## Nested models -- Structured/compound data
|
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.2"
|
51
51
|
end
|
52
52
|
|
53
53
|
spec.add_development_dependency "bundler"
|
data/gemfiles/rails_6_0.gemfile
CHANGED
data/gemfiles/rails_6_1.gemfile
CHANGED
data/gemfiles/rails_7_0.gemfile
CHANGED
@@ -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.1.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: "../"
|
data/gemfiles/rails_edge.gemfile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'attr_json/attribute_definition'
|
2
4
|
|
3
5
|
module AttrJson
|
@@ -25,7 +27,10 @@ module AttrJson
|
|
25
27
|
def initialize(hash = {})
|
26
28
|
@name_to_definition = hash.dup
|
27
29
|
@store_key_to_definition = {}
|
28
|
-
|
30
|
+
|
31
|
+
@name_to_definition.values.each { |d| store_key_index!(d) }
|
32
|
+
|
33
|
+
@container_attributes_registered = Hash.new { Set.new }
|
29
34
|
end
|
30
35
|
|
31
36
|
def fetch(key, *args, &block)
|
@@ -46,12 +51,13 @@ module AttrJson
|
|
46
51
|
|
47
52
|
# Can return nil if none found.
|
48
53
|
def store_key_lookup(container_attribute, store_key)
|
49
|
-
@store_key_to_definition[container_attribute
|
50
|
-
@store_key_to_definition[container_attribute
|
54
|
+
@store_key_to_definition[AttrJson.efficient_to_s(container_attribute)] &&
|
55
|
+
@store_key_to_definition[AttrJson.efficient_to_s(container_attribute)][AttrJson.efficient_to_s(store_key)]
|
51
56
|
end
|
52
57
|
|
53
58
|
def definitions
|
54
|
-
|
59
|
+
# Since we are immutable, we can cache this to avoid allocation in a hot spot
|
60
|
+
@stored_definitions ||= @name_to_definition.values
|
55
61
|
end
|
56
62
|
|
57
63
|
# Returns all registered attributes as an array of symbols
|
@@ -60,7 +66,7 @@ module AttrJson
|
|
60
66
|
end
|
61
67
|
|
62
68
|
def container_attributes
|
63
|
-
@store_key_to_definition.keys.collect(
|
69
|
+
@store_key_to_definition.keys.collect { |s| AttrJson.efficient_to_s(s) }
|
64
70
|
end
|
65
71
|
|
66
72
|
# This is how you register additional definitions, as a non-mutating
|
@@ -73,6 +79,32 @@ module AttrJson
|
|
73
79
|
end
|
74
80
|
end
|
75
81
|
|
82
|
+
|
83
|
+
# We need to lazily set the container type only the FIRST time
|
84
|
+
#
|
85
|
+
# While also avoiding this triggering ActiveRecord to actually go to DB,
|
86
|
+
# we don't want DB connection forced on boot, that's a problem for many apps,
|
87
|
+
# including that may not have a DB connection in initial development.
|
88
|
+
# (#type_for_attribute forces DB connection)
|
89
|
+
#
|
90
|
+
# AND we need to call container attriubte on SUB-CLASS AGAIN, iff sub-class
|
91
|
+
# has any of it's own new registrations, to make sure we get the right type in
|
92
|
+
# sub-class!
|
93
|
+
#
|
94
|
+
# So we just keep track of whether we've registered ourselves, so we can
|
95
|
+
# first time we need to.
|
96
|
+
#
|
97
|
+
# While current implementation is simple, this has ended up a bit fragile,
|
98
|
+
# a different API that doesn't require us to do this implicitly lazily
|
99
|
+
# might be preferred! But this is what we got for now.
|
100
|
+
def register_container_attribute(attribute_name:, model:)
|
101
|
+
@container_attributes_registered[attribute_name.to_sym] << model
|
102
|
+
end
|
103
|
+
|
104
|
+
def container_attribute_registered?(attribute_name:, model:)
|
105
|
+
@container_attributes_registered[attribute_name.to_sym].include?(model)
|
106
|
+
end
|
107
|
+
|
76
108
|
protected
|
77
109
|
|
78
110
|
def add!(definition)
|
@@ -81,17 +113,19 @@ module AttrJson
|
|
81
113
|
end
|
82
114
|
@name_to_definition[definition.name.to_sym] = definition
|
83
115
|
store_key_index!(definition)
|
116
|
+
|
117
|
+
@stored_definitions = nil
|
84
118
|
end
|
85
119
|
|
86
120
|
def store_key_index!(definition)
|
87
|
-
container_hash = (@store_key_to_definition[definition.container_attribute
|
121
|
+
container_hash = (@store_key_to_definition[AttrJson.efficient_to_s(definition.container_attribute)] ||= {})
|
88
122
|
|
89
|
-
if container_hash.has_key?(definition.store_key
|
90
|
-
existing = container_hash[definition.store_key
|
123
|
+
if container_hash.has_key?(AttrJson.efficient_to_s(definition.store_key))
|
124
|
+
existing = container_hash[AttrJson.efficient_to_s(definition.store_key)]
|
91
125
|
raise ArgumentError, "Can't add, store key `#{definition.store_key}` conflicts with existing attribute: #{existing.original_args}"
|
92
126
|
end
|
93
127
|
|
94
|
-
container_hash[definition.store_key
|
128
|
+
container_hash[AttrJson.efficient_to_s(definition.store_key)] = definition
|
95
129
|
end
|
96
130
|
end
|
97
131
|
end
|
data/lib/attr_json/model.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support/concern'
|
2
4
|
require 'active_model/type'
|
3
5
|
|
@@ -136,8 +138,8 @@ module AttrJson
|
|
136
138
|
def new_from_serializable(attributes = {})
|
137
139
|
attributes = attributes.collect do |key, value|
|
138
140
|
# store keys in arguments get translated to attribute names on initialize.
|
139
|
-
if attribute_def = self.attr_json_registry.store_key_lookup("", key
|
140
|
-
key = attribute_def.name
|
141
|
+
if attribute_def = self.attr_json_registry.store_key_lookup("".freeze, AttrJson.efficient_to_s(key))
|
142
|
+
key = AttrJson.efficient_to_s(attribute_def.name)
|
141
143
|
end
|
142
144
|
|
143
145
|
attr_type = self.attr_json_registry.has_attribute?(key) && self.attr_json_registry.type_for_attribute(key)
|
@@ -184,7 +186,7 @@ module AttrJson
|
|
184
186
|
|
185
187
|
# like the ActiveModel::Attributes method, hash with name keys, and ActiveModel::Type values
|
186
188
|
def attribute_types
|
187
|
-
attribute_names.collect { |name| [name
|
189
|
+
attribute_names.collect { |name| [AttrJson.efficient_to_s(name), attr_json_registry.type_for_attribute(name)]}.to_h
|
188
190
|
end
|
189
191
|
|
190
192
|
|
@@ -225,11 +227,11 @@ module AttrJson
|
|
225
227
|
|
226
228
|
_attr_jsons_module.module_eval do
|
227
229
|
define_method("#{name}=") do |value|
|
228
|
-
_attr_json_write(name
|
230
|
+
_attr_json_write(AttrJson.efficient_to_s(name), value)
|
229
231
|
end
|
230
232
|
|
231
233
|
define_method("#{name}") do
|
232
|
-
attributes[name
|
234
|
+
attributes[AttrJson.efficient_to_s(name)]
|
233
235
|
end
|
234
236
|
end
|
235
237
|
end
|
@@ -427,7 +429,7 @@ module AttrJson
|
|
427
429
|
|
428
430
|
def fill_in_defaults!
|
429
431
|
self.class.attr_json_registry.definitions.each do |definition|
|
430
|
-
if definition.has_default? && !attributes.has_key?(definition.name
|
432
|
+
if definition.has_default? && !attributes.has_key?(AttrJson.efficient_to_s(definition.name))
|
431
433
|
self.send("#{definition.name.to_s}=", definition.provide_default!)
|
432
434
|
end
|
433
435
|
end
|
@@ -435,10 +437,10 @@ module AttrJson
|
|
435
437
|
|
436
438
|
def _attr_json_write(key, value)
|
437
439
|
if attribute_def = self.class.attr_json_registry[key.to_sym]
|
438
|
-
attributes[key
|
440
|
+
attributes[AttrJson.efficient_to_s(key)] = attribute_def.cast(value)
|
439
441
|
else
|
440
442
|
# TODO, strict mode, ignore, raise, allow.
|
441
|
-
attributes[key
|
443
|
+
attributes[AttrJson.efficient_to_s(key)] = value
|
442
444
|
end
|
443
445
|
end
|
444
446
|
|
data/lib/attr_json/record.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'attr_json/attribute_definition'
|
2
4
|
require 'attr_json/attribute_definition/registry'
|
3
5
|
require 'attr_json/type/container_attribute'
|
@@ -160,22 +162,14 @@ module AttrJson
|
|
160
162
|
options.assert_valid_keys(AttributeDefinition::VALID_OPTIONS + [:validate, :accepts_nested_attributes])
|
161
163
|
container_attribute = options[:container_attribute]
|
162
164
|
|
163
|
-
# TODO arg check container_attribute make sure it exists. Hard cause
|
164
|
-
# schema isn't loaded yet when class def is loaded. Maybe not.
|
165
165
|
|
166
|
-
#
|
167
|
-
#
|
168
|
-
#
|
169
|
-
#
|
170
|
-
|
171
|
-
# We set default to empty hash, because that 'tricks' AR into knowing any
|
172
|
-
# application of defaults is a change that needs to be saved.
|
173
|
-
unless attributes_to_define_after_schema_loads[container_attribute.to_s] &&
|
174
|
-
attributes_to_define_after_schema_loads[container_attribute.to_s].first.is_a?(AttrJson::Type::ContainerAttribute) &&
|
175
|
-
attributes_to_define_after_schema_loads[container_attribute.to_s].first.model == self
|
176
|
-
# If this is already defined, but was for superclass, we need to define it again for
|
177
|
-
# this class.
|
166
|
+
# Make sure to "lazily" register attribute for *container* class if this is the first time
|
167
|
+
# this container attribute hsa been encountered for this specific class. The registry
|
168
|
+
# helps us keep track. Kinda messy, in future we may want a more explicit API
|
169
|
+
# that does not require us to implicitly track first-time per-container.
|
170
|
+
unless self.attr_json_registry.container_attribute_registered?(model: self, attribute_name: container_attribute.to_sym)
|
178
171
|
attribute container_attribute.to_sym, AttrJson::Type::ContainerAttribute.new(self, container_attribute), default: -> { {} }
|
172
|
+
self.attr_json_registry.register_container_attribute(model: self, attribute_name: container_attribute.to_sym)
|
179
173
|
end
|
180
174
|
|
181
175
|
self.attr_json_registry = attr_json_registry.with(
|
data/lib/attr_json/type/array.rb
CHANGED
data/lib/attr_json/type/model.rb
CHANGED
data/lib/attr_json/version.rb
CHANGED
data/lib/attr_json.rb
CHANGED
@@ -10,5 +10,25 @@ require 'attr_json/record/query_scopes'
|
|
10
10
|
require 'attr_json/type/polymorphic_model'
|
11
11
|
|
12
12
|
module AttrJson
|
13
|
-
|
13
|
+
# We need to convert Symbols to strings a lot at present -- ActiveRecord does too, so
|
14
|
+
# not too suprrising.
|
15
|
+
#
|
16
|
+
# In Rails 3.0 and above, we can use Symbol#name to get a frozen string back
|
17
|
+
# and avoid extra allocations. https://bugs.ruby-lang.org/issues/16150
|
18
|
+
#
|
19
|
+
# Ruby 2.7 doens't yet have it though. As long as we are supporting ruby 2.7,
|
20
|
+
# we'll just check at runtime to keep this lean
|
21
|
+
if RUBY_VERSION.split('.').first.to_i >= 3
|
22
|
+
def self.efficient_to_s(obj)
|
23
|
+
if obj.kind_of?(Symbol)
|
24
|
+
obj.name
|
25
|
+
else
|
26
|
+
obj.to_s
|
27
|
+
end
|
28
|
+
end
|
29
|
+
else
|
30
|
+
def self.efficient_to_s(obj)
|
31
|
+
obj.to_s
|
32
|
+
end
|
33
|
+
end
|
14
34
|
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: 2.
|
4
|
+
version: 2.3.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: 2023-
|
11
|
+
date: 2023-12-04 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.2'
|
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.2'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: bundler
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +164,7 @@ files:
|
|
164
164
|
- gemfiles/rails_6_0.gemfile
|
165
165
|
- gemfiles/rails_6_1.gemfile
|
166
166
|
- gemfiles/rails_7_0.gemfile
|
167
|
+
- gemfiles/rails_7_1.gemfile
|
167
168
|
- gemfiles/rails_edge.gemfile
|
168
169
|
- lib/attr_json.rb
|
169
170
|
- lib/attr_json/attribute_definition.rb
|
@@ -206,7 +207,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
206
207
|
- !ruby/object:Gem::Version
|
207
208
|
version: '0'
|
208
209
|
requirements: []
|
209
|
-
rubygems_version: 3.
|
210
|
+
rubygems_version: 3.4.21
|
210
211
|
signing_key:
|
211
212
|
specification_version: 4
|
212
213
|
summary: ActiveRecord attributes stored serialized in a json column, super smooth.
|