mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Use instance_eval on @tenderlove's suggestion :trollface:
This commit is contained in:
parent
cc0d8fbec9
commit
9619450468
3 changed files with 8 additions and 7 deletions
|
@ -1,6 +1,6 @@
|
|||
* Added yield to Object#presence, so you can do this:
|
||||
|
||||
project.account.owner.presence { |p| p.name.first } || 'Nobody'
|
||||
project.account.owner.presence { name.first } || 'Nobody'
|
||||
|
||||
instead of calling twice (which may incur double SQL calls):
|
||||
|
||||
|
|
|
@ -40,15 +40,16 @@ class Object
|
|||
# region = params[:state].presence || params[:country].presence || 'US'
|
||||
#
|
||||
# You can also use this with a block that will be yielded if the object is present
|
||||
# and the result of that block will then be returned
|
||||
# and the result of that block will then be returned. The block itself is run against
|
||||
# the instance you're running #presence on (using instance_eval)
|
||||
#
|
||||
# project.account.owner.presence { |p| p.name.first } || 'Nobody'
|
||||
# project.account.owner.presence { name.first } || 'Nobody'
|
||||
#
|
||||
# @return [Object]
|
||||
def presence
|
||||
def presence(&block)
|
||||
if present?
|
||||
if block_given?
|
||||
yield self
|
||||
instance_eval(&block)
|
||||
else
|
||||
self
|
||||
end
|
||||
|
|
|
@ -35,7 +35,7 @@ class BlankTest < ActiveSupport::TestCase
|
|||
end
|
||||
|
||||
def test_presence_with_a_block
|
||||
assert_equal "SALLY", "sally".presence(&:upcase) || "Nobody"
|
||||
assert_equal "Nobody", nil.presence(&:upcase) || "Nobody"
|
||||
assert_equal "SALLY", "sally".presence { upcase } || "Nobody"
|
||||
assert_equal "Nobody", nil.presence { upcase } || "Nobody"
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue