store_attribute 1.1.1 → 1.2.0

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: 6078ba7214bee86726edd35c8cfbac054907c2aada0e5644d63b906b1884cb37
4
- data.tar.gz: b3ac4c23dfdc1f8412fccf67fe8c7e9a441943ae7d3adba95eb735e7cd5e0302
3
+ metadata.gz: 601846a5ef07068e0777b17cfb7896a6bcd1fe32ef93ac107f957c568a6598de
4
+ data.tar.gz: 7ebee7679babde4188b07aa0504310001edbe31758070112b6f5c0e48eadc83d
5
5
  SHA512:
6
- metadata.gz: 2c8b70decca97c29ec6b112265d318f7fcb598a87dccbcc6531fc7f9e1de8701830f7d963f6890cfb453704ad19b14e2b6550d9d513c33fbfadf85952a9491a4
7
- data.tar.gz: 41a9e77501f4c9e4df33a06fa343c0377e8cb982b0dfda250003345e16d4afc635b39b99c9570ded1f7af27a6781b76c8dba013b3586bf699c048260159bf507
6
+ metadata.gz: 64d0e3b562bd62b6e8b65b993f049b3af805d0a38f075218eaa05993f7229befbf10f21e59dd1709ddd1faa5397e20ca4f02c8800a703cee7f3db79b12a28a98
7
+ data.tar.gz: 29623e721a38b1bf646f3a45c00c605c4162236716624e3cb8a0dceee69641d254145baa84b58008e3fe61084b1eb76249a34775f186bbe86861eca827ba2856
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 1.2.0 (2023-11-29)
6
+
7
+ - Support Rails >7.1. ([@palkan][])
8
+
9
+ - Fix handling of store attributes for not-yet-defined columns. ([@palkan][])
10
+
5
11
  ## 1.1.1 (2023-06-27)
6
12
 
7
13
  - Lookup store attribute types only after schema load.
@@ -157,16 +157,13 @@ module ActiveRecord
157
157
 
158
158
  def _define_store_attribute(store_name)
159
159
  attr_name = store_name.to_s
160
- was_type = attributes_to_define_after_schema_loads[attr_name]&.first
161
-
162
- # For Rails <6.1
163
- use_decorator = respond_to?(:decorate_attribute_type) && method(:decorate_attribute_type).parameters.count { |type, _| type == :req } == 2
164
160
 
165
161
  defaultik = Type::TypedStore::Defaultik.new
166
162
 
167
163
  owner = self
168
164
 
169
- if use_decorator
165
+ # For Rails <6.1
166
+ if respond_to?(:decorate_attribute_type) && method(:decorate_attribute_type).parameters.count { |type, _| type == :req } == 2
170
167
  decorate_attribute_type(attr_name, "typed_accessor_for_#{attr_name}") do |subtype|
171
168
  subtypes = _local_typed_stored_attributes[attr_name]
172
169
  type = Type::TypedStore.create_from_type(subtype)
@@ -180,7 +177,25 @@ module ActiveRecord
180
177
 
181
178
  type
182
179
  end
180
+ # Rails >7.1
181
+ elsif respond_to?(:decorate_attributes)
182
+ decorate_attributes([attr_name]) do |_, subtype|
183
+ subtypes = _local_typed_stored_attributes[attr_name]
184
+ type = Type::TypedStore.create_from_type(subtype)
185
+ type.owner = owner
186
+ defaultik.type = type
187
+ subtypes.each do |name, (cast_type, options)|
188
+ type.add_typed_key(name, cast_type, **options.symbolize_keys)
189
+ end
190
+
191
+ type
192
+ end
193
+
194
+ attribute(attr_name, default: defaultik.proc)
195
+ # Rails >=6.1, <=7.1
183
196
  else
197
+ was_type = attributes_to_define_after_schema_loads[attr_name]&.first
198
+
184
199
  attribute(attr_name, default: defaultik.proc) do |subtype|
185
200
  subtypes = _local_typed_stored_attributes[attr_name]
186
201
  subtype = _lookup_cast_type(attr_name, was_type, {}) if defined?(_lookup_cast_type)
@@ -30,7 +30,7 @@ module ActiveRecord
30
30
  def initialize(subtype)
31
31
  @accessor_types = {}
32
32
  @defaults = {}
33
- @store_accessor = subtype.accessor
33
+ @subtype = subtype
34
34
  super(subtype)
35
35
  end
36
36
 
@@ -118,7 +118,7 @@ module ActiveRecord
118
118
  def key_to_cast(val, key)
119
119
  return key if val.key?(key)
120
120
  return key.to_sym if val.key?(key.to_sym)
121
- return key if defaults.key?(key)
121
+ key if defaults.key?(key)
122
122
  end
123
123
 
124
124
  def typed?(key)
@@ -133,7 +133,11 @@ module ActiveRecord
133
133
  owner&.store_attribute_unset_values_fallback_to_default && defaults.key?(key)
134
134
  end
135
135
 
136
- attr_reader :accessor_types, :defaults, :store_accessor, :owner
136
+ def store_accessor
137
+ subtype.accessor
138
+ end
139
+
140
+ attr_reader :accessor_types, :defaults, :subtype, :owner
137
141
  end
138
142
  end
139
143
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StoreAttribute # :nodoc:
4
- VERSION = "1.1.1"
4
+ VERSION = "1.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: store_attribute
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - palkan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-27 00:00:00.000000000 Z
11
+ date: 2023-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  - !ruby/object:Gem::Version
107
107
  version: '0'
108
108
  requirements: []
109
- rubygems_version: 3.4.8
109
+ rubygems_version: 3.4.20
110
110
  signing_key:
111
111
  specification_version: 4
112
112
  summary: ActiveRecord extension which adds typecasting to store accessors