Skip to content
Functional Reactive Programming in Ruby.
Ruby
Latest commit ff2f622 Feb 9, 2016 @steveklabnik Merge pull request #29 from adomokos/fix-typo-in-readme
Fix typo in README
Failed to load latest commit information.
lib Stream#reduce is aliased to Stream#inject Nov 25, 2014
test
.gitignore Added .DS_Store to gitignore Dec 13, 2014
.travis.yml
Gemfile
LICENSE.txt
README.md
Rakefile
frappuccino.gemspec

README.md

Frappuccino

Functional Reactive Programming for Ruby.

Build Status Code Climate Coverage Status

Installation

Add this line to your application's Gemfile:

gem 'frappuccino'

And then execute:

$ bundle

Or install it yourself as:

$ git clone https://github.com/steveklabnik/frappuccino
$ cd frappuccino
$ bundle
$ rake install

Usage

Basically, this:

require 'frappuccino'

class Button
  def push
    emit(:pushed) # emit sends a value into the stream
  end
end

button = Button.new
stream = Frappuccino::Stream.new(button)

counter = stream
            .map {|event| event == :pushed ? 1 : 0 } # convert events to ints
            .inject(0) {|sum, n| sum + n } # add them up

counter.now # => 0

button.push
button.push
button.push

counter.now # => 3

button.push

counter.now # => 4

You can also map via a hash, if you prefer:

.map(:pushed => 1, :default => 0)

You can also register callbacks to a Stream. These will be executed for each event that occurs in the Stream:

stream.on_value do |event|
  puts "I got a #{event}!"
end

You can combine two streams together:

merged_stream = stream_one.merge(stream_two)

# or

merged_stream = Frappuccino::Stream.merge(one_stream , other_stream)

# or

merged_stream = Frappuccino::Stream.new(button_one, button_two)

You can select events from a stream, too:

stream = Frappuccino::Stream.new(button, something_else)
filtered_stream = stream.select{|event| event == :pushed }

filtered_stream.on_value do |event|
  # event will only ever be :pushed
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
Something went wrong with that request. Please try again.