0.11
No commit activity in last 3 years
No release in over 3 years
A library to do Functional Reactive Programming in Ruby.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

~> 1.3
>= 0
 Project Readme

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