Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

steveklabnik/frappuccino

Functional Reactive Programming in Ruby.

steveklabnik/frappuccino.json
{
"createdAt": "2013-04-22T14:53:51Z",
"defaultBranch": "master",
"description": "Functional Reactive Programming in Ruby.",
"fullName": "steveklabnik/frappuccino",
"homepage": "https://github.com/steveklabnik/frappuccino",
"language": "Ruby",
"name": "frappuccino",
"pushedAt": "2016-02-09T21:52:19Z",
"stargazersCount": 354,
"topics": [],
"updatedAt": "2025-08-26T03:22:18Z",
"url": "https://github.com/steveklabnik/frappuccino"
}

Functional Reactive Programming for Ruby.

Build Status Code Climate Coverage Status

Add this line to your application’s Gemfile:

gem 'frappuccino'

And then execute:

Terminal window
$ bundle

Or install it yourself as:

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

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
  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