activemodel 7.1.3 → 7.1.5.1
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/CHANGELOG.md +62 -0
- data/lib/active_model/attribute_methods.rb +41 -19
- data/lib/active_model/attributes.rb +3 -3
- data/lib/active_model/gem_version.rb +2 -2
- data/lib/active_model.rb +1 -1
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f79873d7c2a9772e4c9ca33cf468880b923a818c11b874eb7c8c40954a1e652
|
4
|
+
data.tar.gz: a264d11a6a4a6783d08513145436a78440847774f64ab8bfe5436e0e0c56224b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7019a3654dabd54a630605e8b032450f170fe5aa8f3fa0ec626f80546dbf9c09cea143bed32356608319b059127ede72aae6e08c5a280dfae9021e98f027640f
|
7
|
+
data.tar.gz: 72936b14496e7b9465b6cdaf7894b80b502bb275e58f7e4b9e52d67ccfd671ee1a4f952ea3da25b504147d81a645755a4cb16dde63f4ecbc68b6787636201b0b
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,65 @@
|
|
1
|
+
## Rails 7.1.5.1 (December 10, 2024) ##
|
2
|
+
|
3
|
+
* No changes.
|
4
|
+
|
5
|
+
|
6
|
+
## Rails 7.1.5 (October 30, 2024) ##
|
7
|
+
|
8
|
+
* Fix regression in `alias_attribute` to work with user defined methods.
|
9
|
+
|
10
|
+
`alias_attribute` would wrongly assume the attribute accessor was generated by Active Model.
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
class Person
|
14
|
+
include ActiveModel::AttributeMethods
|
15
|
+
|
16
|
+
define_attribute_methods :name
|
17
|
+
attr_accessor :name
|
18
|
+
|
19
|
+
alias_attribute :full_name, :name
|
20
|
+
end
|
21
|
+
|
22
|
+
person.full_name # => NoMethodError: undefined method `attribute' for an instance of Person
|
23
|
+
```
|
24
|
+
|
25
|
+
*Jean Boussier*
|
26
|
+
|
27
|
+
|
28
|
+
## Rails 7.1.4.2 (October 23, 2024) ##
|
29
|
+
|
30
|
+
* No changes.
|
31
|
+
|
32
|
+
|
33
|
+
## Rails 7.1.4.1 (October 15, 2024) ##
|
34
|
+
|
35
|
+
* No changes.
|
36
|
+
|
37
|
+
|
38
|
+
## Rails 7.1.4 (August 22, 2024) ##
|
39
|
+
|
40
|
+
* No changes.
|
41
|
+
|
42
|
+
|
43
|
+
## Rails 7.1.3.4 (June 04, 2024) ##
|
44
|
+
|
45
|
+
* No changes.
|
46
|
+
|
47
|
+
|
48
|
+
## Rails 7.1.3.3 (May 16, 2024) ##
|
49
|
+
|
50
|
+
* No changes.
|
51
|
+
|
52
|
+
|
53
|
+
## Rails 7.1.3.2 (February 21, 2024) ##
|
54
|
+
|
55
|
+
* No changes.
|
56
|
+
|
57
|
+
|
58
|
+
## Rails 7.1.3.1 (February 21, 2024) ##
|
59
|
+
|
60
|
+
* No changes.
|
61
|
+
|
62
|
+
|
1
63
|
## Rails 7.1.3 (January 16, 2024) ##
|
2
64
|
|
3
65
|
* No changes.
|
@@ -215,9 +215,12 @@ module ActiveModel
|
|
215
215
|
end
|
216
216
|
end
|
217
217
|
|
218
|
-
def generate_alias_attribute_methods(code_generator, new_name, old_name)
|
219
|
-
|
220
|
-
|
218
|
+
def generate_alias_attribute_methods(code_generator, new_name, old_name) # :nodoc:
|
219
|
+
ActiveSupport::CodeGenerator.batch(code_generator, __FILE__, __LINE__) do |owner|
|
220
|
+
attribute_method_patterns.each do |pattern|
|
221
|
+
alias_attribute_method_definition(code_generator, pattern, new_name, old_name)
|
222
|
+
end
|
223
|
+
attribute_method_patterns_cache.clear
|
221
224
|
end
|
222
225
|
end
|
223
226
|
|
@@ -231,7 +234,7 @@ module ActiveModel
|
|
231
234
|
mangled_name = "__temp__#{target_name.unpack1("h*")}"
|
232
235
|
end
|
233
236
|
|
234
|
-
code_generator.define_cached_method(
|
237
|
+
code_generator.define_cached_method(mangled_name, as: method_name, namespace: :alias_attribute) do |batch|
|
235
238
|
body = if CALL_COMPILABLE_REGEXP.match?(target_name)
|
236
239
|
"self.#{target_name}(#{parameters || ''})"
|
237
240
|
else
|
@@ -321,25 +324,44 @@ module ActiveModel
|
|
321
324
|
# person.name = 'Bob'
|
322
325
|
# person.name # => "Bob"
|
323
326
|
# person.name_short? # => true
|
324
|
-
def define_attribute_method(attr_name, _owner: generated_attribute_methods)
|
327
|
+
def define_attribute_method(attr_name, _owner: generated_attribute_methods, as: attr_name)
|
325
328
|
ActiveSupport::CodeGenerator.batch(_owner, __FILE__, __LINE__) do |owner|
|
326
329
|
attribute_method_patterns.each do |pattern|
|
327
|
-
|
328
|
-
|
329
|
-
unless instance_method_already_implemented?(method_name)
|
330
|
-
generate_method = "define_method_#{pattern.proxy_target}"
|
331
|
-
|
332
|
-
if respond_to?(generate_method, true)
|
333
|
-
send(generate_method, attr_name.to_s, owner: owner)
|
334
|
-
else
|
335
|
-
define_proxy_call(owner, method_name, pattern.proxy_target, pattern.parameters, attr_name.to_s, namespace: :active_model_proxy)
|
336
|
-
end
|
337
|
-
end
|
330
|
+
define_attribute_method_pattern(pattern, attr_name, owner: owner, as: as)
|
338
331
|
end
|
339
332
|
attribute_method_patterns_cache.clear
|
340
333
|
end
|
341
334
|
end
|
342
335
|
|
336
|
+
def define_attribute_method_pattern(pattern, attr_name, owner:, as:, override: false) # :nodoc:
|
337
|
+
canonical_method_name = pattern.method_name(attr_name)
|
338
|
+
public_method_name = pattern.method_name(as)
|
339
|
+
|
340
|
+
# If defining a regular attribute method, we don't override methods that are explictly
|
341
|
+
# defined in parrent classes.
|
342
|
+
if instance_method_already_implemented?(public_method_name)
|
343
|
+
# However, for `alias_attribute`, we always define the method.
|
344
|
+
# We check for override second because `instance_method_already_implemented?`
|
345
|
+
# also check for dangerous methods.
|
346
|
+
return unless override
|
347
|
+
end
|
348
|
+
|
349
|
+
generate_method = "define_method_#{pattern.proxy_target}"
|
350
|
+
if respond_to?(generate_method, true)
|
351
|
+
send(generate_method, attr_name.to_s, owner: owner, as: as)
|
352
|
+
else
|
353
|
+
define_proxy_call(
|
354
|
+
owner,
|
355
|
+
canonical_method_name,
|
356
|
+
pattern.proxy_target,
|
357
|
+
pattern.parameters,
|
358
|
+
attr_name.to_s,
|
359
|
+
namespace: :active_model_proxy,
|
360
|
+
as: public_method_name,
|
361
|
+
)
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
343
365
|
# Removes all the previously dynamically defined methods from the class, including alias attribute methods.
|
344
366
|
#
|
345
367
|
# class Person
|
@@ -418,7 +440,7 @@ module ActiveModel
|
|
418
440
|
# Define a method `name` in `mod` that dispatches to `send`
|
419
441
|
# using the given `extra` args. This falls back on `send`
|
420
442
|
# if the called name cannot be compiled.
|
421
|
-
def define_proxy_call(code_generator, name, proxy_target, parameters, *call_args, namespace:)
|
443
|
+
def define_proxy_call(code_generator, name, proxy_target, parameters, *call_args, namespace:, as: name)
|
422
444
|
mangled_name = name
|
423
445
|
unless NAME_COMPILABLE_REGEXP.match?(name)
|
424
446
|
mangled_name = "__temp__#{name.unpack1("h*")}"
|
@@ -426,9 +448,9 @@ module ActiveModel
|
|
426
448
|
|
427
449
|
call_args.map!(&:inspect)
|
428
450
|
call_args << parameters if parameters
|
429
|
-
namespace = :"#{namespace}_#{proxy_target}
|
451
|
+
namespace = :"#{namespace}_#{proxy_target}"
|
430
452
|
|
431
|
-
code_generator.define_cached_method(
|
453
|
+
code_generator.define_cached_method(mangled_name, as: as, namespace: namespace) do |batch|
|
432
454
|
body = if CALL_COMPILABLE_REGEXP.match?(proxy_target)
|
433
455
|
"self.#{proxy_target}(#{call_args.join(", ")})"
|
434
456
|
else
|
@@ -76,11 +76,11 @@ module ActiveModel
|
|
76
76
|
end
|
77
77
|
|
78
78
|
private
|
79
|
-
def define_method_attribute=(
|
79
|
+
def define_method_attribute=(canonical_name, owner:, as: canonical_name)
|
80
80
|
ActiveModel::AttributeMethods::AttrNames.define_attribute_accessor_method(
|
81
|
-
owner,
|
81
|
+
owner, canonical_name, writer: true,
|
82
82
|
) do |temp_method_name, attr_name_expr|
|
83
|
-
owner.define_cached_method("#{
|
83
|
+
owner.define_cached_method(temp_method_name, as: "#{as}=", namespace: :active_model) do |batch|
|
84
84
|
batch <<
|
85
85
|
"def #{temp_method_name}(value)" <<
|
86
86
|
" _write_attribute(#{attr_name_expr}, value)" <<
|
data/lib/active_model.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activemodel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.1.
|
4
|
+
version: 7.1.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 7.1.
|
19
|
+
version: 7.1.5.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 7.1.
|
26
|
+
version: 7.1.5.1
|
27
27
|
description: A toolkit for building modeling frameworks like Active Record. Rich support
|
28
28
|
for attributes, callbacks, validations, serialization, internationalization, and
|
29
29
|
testing.
|
@@ -112,12 +112,12 @@ licenses:
|
|
112
112
|
- MIT
|
113
113
|
metadata:
|
114
114
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
115
|
-
changelog_uri: https://github.com/rails/rails/blob/v7.1.
|
116
|
-
documentation_uri: https://api.rubyonrails.org/v7.1.
|
115
|
+
changelog_uri: https://github.com/rails/rails/blob/v7.1.5.1/activemodel/CHANGELOG.md
|
116
|
+
documentation_uri: https://api.rubyonrails.org/v7.1.5.1/
|
117
117
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
118
|
-
source_code_uri: https://github.com/rails/rails/tree/v7.1.
|
118
|
+
source_code_uri: https://github.com/rails/rails/tree/v7.1.5.1/activemodel
|
119
119
|
rubygems_mfa_required: 'true'
|
120
|
-
post_install_message:
|
120
|
+
post_install_message:
|
121
121
|
rdoc_options: []
|
122
122
|
require_paths:
|
123
123
|
- lib
|
@@ -132,8 +132,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
132
|
- !ruby/object:Gem::Version
|
133
133
|
version: '0'
|
134
134
|
requirements: []
|
135
|
-
rubygems_version: 3.
|
136
|
-
signing_key:
|
135
|
+
rubygems_version: 3.5.22
|
136
|
+
signing_key:
|
137
137
|
specification_version: 4
|
138
138
|
summary: A toolkit for building modeling frameworks (part of Rails).
|
139
139
|
test_files: []
|