Wrapper for IO such as third-party API calls to prevent sudden blow up the main program.
- Add the dependency to your
shard.yml
:
dependencies:
cocoon:
github: creadone/cocoon
- Run
shards install
require "cocoon"
require "http/client"
alias Response = HTTP::Client::Response
cocoon = Cocoon::Wrapper(Response).new
loop do
result = cocoon.wrap do
if Random.rand > 0.5
HTTP::Client.get("https://github.com")
else
raise "Connection is lost"
end
end
# something in the &block raised Exception
if result.is_a?(Exception)
puts result.message
end
# &block is done
if result.is_a?(Response)
puts "X-GitHub-Request-Id: #{result.headers["X-GitHub-Request-Id"]}"
end
# &block has no result or task is not ended yet
if result.is_a?(Nil)
puts "Nothing..."
end
sleep 1
end
# => Nothing...
# => X-GitHub-Request-Id: EF51:10C35:3A33E0D:3BCCF8A:603C72E7
# => Connection is lost
# => X-GitHub-Request-Id: EF52:0AF5:44114C4:45B5044:603C72E9
# => X-GitHub-Request-Id: EF53:E298:B55ADC:B9B0DF:603C72EA
# => Connection is lost
# => Connection is lost
- Fork it (https://github.com/creadone/cocoon/fork)
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
- creadone - creator and maintainer