| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Added the ability to initialize `thread_mattr_*` methods with default
values like so:
``` ruby
class MyClass
thread_attr_reader :foo, default: :foo
thread_attr_writer :bar, default: :bar
thread_attr_accessor: baz do
"baz"
end
end
```
This is consistent with the api exposed by `mattr_accessor`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Exclude missing marshal_dump and _dump methods from being delegated to
an object's delegation target via the delegate_missing_to extension.
This avoids unintentionally adding instance variables to an object
during marshallization, should the delegation target be a method which
would otherwise add them.
In current versions of Ruby, a bug exists in the way objects are
marshalled, allowing for instance variables to be added or removed
during marshallization (see https://bugs.ruby-lang.org/issues/15968).
This results in a corrupted serialized byte stream, causing an object's
instance variables to "leak" into subsequent serialized objects during
demarshallization.
In Rails, this behavior may be triggered when marshalling an object that
uses the delegate_missing_to extension, if the delegation target is a
method which adds or removes instance variables to an object being
marshalled - when calling Marshal.dump(object), Ruby's built in behavior
will check whether the object responds to :marshal_dump or :_dump, which
in turn triggers the delegation target method in the
responds_to_missing? function defined in
activesupport/lib/active_support/core_ext/module/delegation.rb
While future versions of Ruby will resolve this bug by raising a
RuntimeError, the underlying cause of this error may not be readily
apparent when encountered by Rails developers. By excluding marshal_dump
and _dump from being delegated to an object's target, this commit
eliminates a potential cause of unexpected behavior and/or
RuntimeErrors.
Fixes #36522
|
| |
|
| |
|
|
|
|
| |
attachment
|
|
|
|
|
|
|
|
|
| |
ActiveSupport `delegate` has `to` option, but it's not a option hash
anymore and now it's a keyword argument.
When `to` argument is not given, it raises an ArgumentError but
the message suggests supplying "options hash", which is now wrong.
Now it's fixed to provide correct suggestion to supply a keyword
argument.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
Since #34864 removed explicit receiver to clarify the
purpose of `delegate_missing_to`, I think it will be
better to do the same a few lines above to easier figure
out that `delegate_missing_to` defines `method_missing`,
`respond_to_missing?` when comparing these examples.
|
|
|
| |
Removing the explicit receiver clarifies the purpose of `delegate_missing_to`.
|
| |
|
|
|
|
|
|
|
|
| |
Since #29294, `mattr_acessor` uses kwargs for `instance_reader`,
`instance_writer`, and `instance_accessor` options.
`thread_mattr_accessor` and `config_accessor` also take the same
options, so let's maintain these options handles the same.
|
|
|
|
| |
a5b0c60714e1e8d8c182af830a26e1c7c884271d
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
Ruby 2.4 has native `Regexp#match?`.
https://ruby-doc.org/core-2.4.0/Regexp.html#method-i-match-3F
Related #32034.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Convert the user to atheism by ditching the extra example that demonstrates
the same thing as date_of_birth.
Demonstrate the NoMethodError on date_of_birth first, then call age that
uses date_of_birth internally. Thus showing that accessing it publicly fails,
but using it internally succeeds.
|
|
|
|
|
|
|
|
| |
correct value
Remove extra comments `# Asking for private method` in activesupport/test/core_ext/module_test.rb
Improve docs of using `delegate` with `:private`
Update changelog of #31944
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Example codes that use `has_many` or `before_create` in `Module::Concerning` look like active record models.
So I've made them inherit `ApplicationRecord`.
|
|
|
|
| |
This basically reverts 8da30ad6be34339124ba4cb4e36aea260dda12bc
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Don't use remove_method or remove_possible_method just before a new
definition: at best the purpose is unclear, and at worst it creates a
race condition.
Instead, prefer redefine_method when practical, and
silence_redefinition_of_method otherwise.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add test for the new exception of delegate_missing_to
* Add a changelog entry
* Only check for nil if NoMethodError was raised
* Make method private
* Have to pass both target name and value
* Inline the re-raise
[Rafael Mendonça França + Anton Khamets]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Extend image_tag to accept ActiveStorage's Attachments and Variants
* Flip resolve_image_source around
* Add tests for the new use-cases of image_tag
* Remove the higher-level test
* Update image_tag documentation
* Add error states into the test suite
* Re-raise polymorhic_url's NoMethodError as ArgumentError
* delegate_missing_to will raise DelegationError instead of NoMethodError
|
| |
|
|\
| |
| | |
Use frozen-string-literal in ActiveSupport
|
| | |
|
|/
|
|
| |
if using prefix version.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix rdoc code formatting — `tt`, not backticks
* Fix/simplify sentence grammar — should at least just be “and the like”, not “likes”, but this is just general tightening up.
* Add note that delegated methods must be public. Tested here: https://github.com/rails/rails/blob/7ff5ccae94ce2aff76b5f8a31a28e305a047d642/activesupport/test/core_ext/module_test.rb#L359-L365
* Simplify example code for delegate_missing_to. The example had complexity that wasn’t necessary for demonstrating `delegate_missing_to`. This gets rid of a bunch of cruft so the example is more obvious about what’s going on regarding the feature itself.
[ci skip]
|
| |
|
|
|
|
| |
So we shouldn't claim they're there, even when asked explicitly.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When the delegation target is nil and the allow_nil option is not
in use, a Module::DelegationError is raised.
class C
delegate :a, to: :b
def b
nil
end
end
C.new.a
# => Module::DelegationError: C#a delegated to b.a, but b is nil
[ci skip]
|
| |
|
|\
| |
| | |
Clarify that mattr_* creates public methods
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|