aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/module/delegation.rb
diff options
context:
space:
mode:
authorGeorge Claghorn <george@basecamp.com>2019-05-23 12:33:34 -0400
committerGitHub <noreply@github.com>2019-05-23 12:33:34 -0400
commit639d7beb0b2f2c412b6f561f10bc1d66ab3b0b1e (patch)
treeeb368b86d475a4cd3449de50bc8af3d40e4b48fa /activesupport/lib/active_support/core_ext/module/delegation.rb
parenteba859d867454cd441f29ff15d8dbf442e51919c (diff)
parentf002be148e1377709ed28b8e80c5db76ee2fa410 (diff)
downloadrails-639d7beb0b2f2c412b6f561f10bc1d66ab3b0b1e.tar.gz
rails-639d7beb0b2f2c412b6f561f10bc1d66ab3b0b1e.tar.bz2
rails-639d7beb0b2f2c412b6f561f10bc1d66ab3b0b1e.zip
Merge pull request #33437 from CodingAnarchy/delegate_missing_allow_nil
Add :allow_nil option to delegate_missing_to
Diffstat (limited to 'activesupport/lib/active_support/core_ext/module/delegation.rb')
-rw-r--r--activesupport/lib/active_support/core_ext/module/delegation.rb11
1 files changed, 8 insertions, 3 deletions
diff --git a/activesupport/lib/active_support/core_ext/module/delegation.rb b/activesupport/lib/active_support/core_ext/module/delegation.rb
index 9fe7f8fe01..2f88010d27 100644
--- a/activesupport/lib/active_support/core_ext/module/delegation.rb
+++ b/activesupport/lib/active_support/core_ext/module/delegation.rb
@@ -274,8 +274,9 @@ class Module
# variables, methods, constants, etc.
#
# The delegated method must be public on the target, otherwise it will
- # raise +NoMethodError+.
- def delegate_missing_to(target)
+ # raise +DelegationError+. If you wish to instead return +nil+,
+ # use the <tt>:allow_nil</tt> option.
+ def delegate_missing_to(target, allow_nil: nil)
target = target.to_s
target = "self.#{target}" if DELEGATION_RESERVED_METHOD_NAMES.include?(target)
@@ -295,7 +296,11 @@ class Module
super
rescue NoMethodError
if #{target}.nil?
- raise DelegationError, "\#{method} delegated to #{target}, but #{target} is nil"
+ if #{allow_nil == true}
+ return nil
+ else
+ raise DelegationError, "\#{method} delegated to #{target}, but #{target} is nil"
+ end
else
raise
end