This simple gem implements a Kernel#with method much like Python’s with statement.
Simple usage:
withexpressiondo|resource|# ... interact with resource ...end
The expression must return a context manager. A context manager is an object which implements two methods: acquire and release. When Kernel#with receives the context manager it calls its acquire method and grab the result. Then it yields the result to the block. When the block returns, the context manager send the release message to the context manager.
Kernel#with by itself does not attempt to run acquire or release atomically; the context manager should ensure that if required.
Since 0.2.0 release you can put several context managers in a single with sentence:
withexp1, exp2do|r1, r2|# do something with the acquired resourcesend
That sentence it’s semantically equivalent to:
withexp1do|r1|withexp2do|r2|# do something with the acquired resourcesendend
The general syntax for the Kernel#with method is:
with(*managers){|*resources|#code }
If any of the context managers fails to enter (acquire), the block is never executed and any previous acquired resource is released.
As of version 0.3.0, with allows non-context managers to be passed as arguments. This is make with an idiomatic substitution for Object#tap.
with12+98do|result|putsresultend
Check out the latest master to make sure the feature hasn’t been implemented or the bug hasn’t been fixed yet
Check out the issue tracker to make sure someone already hasn’t requested it and/or contributed it
Fork the project
Start a feature/bugfix branch
Commit and push until you are happy with your contribution
Make sure to add tests for it. This is important so I don’t break it in a future version unintentionally.
Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
Copyright © 2010, 2011 Manuel Vázquez Acosta. See LICENSE.txt for further details.