rubyworks / facets

Ruby Facets
http://rubyworks.github.com/facets
Other
798 stars 99 forks source link

ergo's behavior on nil isn't like tap #279

Open benatkin opened 7 years ago

benatkin commented 7 years ago

This is a neat gem. I especially like how you can pull in just the modules you want.

According to the docs, ergo is like tap. But this example in nil deviates from tap's behavior:

nil.ergo{ |o| o.bar }    #=> nil

Whereas with tap:

2.2.4 :024 > { value: nil }.tap { |o| o[:value] = o[:value].bar }
NoMethodError: undefined method `bar' for nil:NilClass
        from (irb):24:in `block in irb_binding'
        from (irb):24:in `tap'
        from (irb):24
        from /Users/benatkin/.rvm/rubies/ruby-2.2.4/bin/irb:11:in `<main>'
2.2.4 :025 >

Perhaps mention this in the docs, and consider changing it in a future release? This could be surprising behavior.

kuboon commented 7 years ago

Try { value: nil }.ergo { |o| o[:value] = o[:value].bar } and check the same result.