I\'m going through a phase of trying to avoid temporary variables and over-use of conditional where I can use a more fluid style of coding. I\'ve taken a great liking to us
instance_eval can be misused for this purpose 
"this".instance_eval { |test| test + " works" }
since 2.5 it is possible to use yield_self
"easy".yield_self{ |a| a + " peasy" }
Read more:
https://ruby-doc.org/core-1.9.3/BasicObject.html#method-i-instance_eval
https://ruby-doc.org/core-2.5.0/Object.html#method-i-yield_self
I needed to do something like this and I like tokland's answer, but I didn't want to pollute Object for the small script I was writing.  Instead, I made use of tap on an array:
[something_complicated].tap { |s| s[0] = new_cool_thing)}.first
Define Object#as:
class Object
  def as
    yield self
  end
end
And now you can write:
def not_sure_this_is_nice_enough_method1
  something_complex(a, b, c).as do |obj| 
    a_predicate_check? ? obj.one_more_method_call : obj
  end
end
def best_nice_method
  something_complex(a, b, c).tap |obj|
    break obj.one_more_method_call if a_predicate_check?
  end
end
The magic is break in tap returns another value.
new
ruby 2.5 has yield_self which exactly you want.
https://stackoverflow.com/a/47890832/683157
I found a method in the Facets gem that might be what you were looking for: Kernel#ergo
So your original method:
def not_nice_method
  obj = something_complex(a, b, c)
  if a_predicate_check?
    obj.one_more_method_call
  else
    obj
  end
end
might end up looking something like this:
require 'facets/kernel/ergo'
def nice_method
  something_complex(a, b, c).ergo do |_| 
    a_predicate_check? ? _.one_more_method_call : _
  end
end