A lightweight promises implementation in Ruby
Ruby
Switch branches/tags
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
.gitignore Initial commit Jul 8, 2013
Gemfile Initial commit Jul 8, 2013
LICENSE.txt
README.md
Rakefile
q-defer.gemspec

README.md

Q

Q is a lightweight promise implementation in Ruby.

DON'T USE ME! This project doesn't follow any promises spec. It's all wrong.

Installation

Add this line to your application's Gemfile:

gem 'q-defer', require: 'q'

And then execute:

$ bundle

Or install it yourself as:

$ gem install q-defer

Usage

Defer a single block:

require "open-uri"

Q.defer do |defer|
  Thread.new do
    response = open("http://www.example.com")

    if response.status[0] == "200"
      defer.resolve(response)
    else
      defer.reject([response.status, response])
    end
  end
end.then do |result|
  puts "ok"
end.fail do |err, result|
  puts "status code: #{err[0]}"
end.always do
  puts "All finished!"
end

Defer multiple blocks:

def defer_open(url)
  Q.defer do |defer|
    Thread.new do
      response = open("http://www.example.com")

      if response.status[0] == "200"
        defer.resolve(response)
      else
        defer.reject([response.status, response])
      end
    end
  end
end

Q.when([
  defer_open("http://www.example.com"),
  defer_open("http://www.google.com")
]).then do |results|
  puts "All successful!"
end.fail do |err, results|
  puts "Error: #{err}"
end.always do |results|
  puts "All successful or one failure."
end

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request