• Stars
    star
    354
  • Rank 120,042 (Top 3 %)
  • Language
    Ruby
  • License
    MIT License
  • Created over 11 years ago
  • Updated almost 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Functional Reactive Programming in Ruby.

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

More Repositories

1

request_store

Per-request global storage for Rack.
Ruby
1,415
star
2

CLOSURE

Thanks, _why.
502
star
3

rust_for_rubyists

Learn Rust
HTML
425
star
4

automatically_update_github_pages_with_travis_example

An example of automatically updating GitHub Pages when you're using Travis CI.
Shell
240
star
5

simple-server

A simple webserver built on top of the Rust standard library and the http crate.
Rust
180
star
6

doxidize

Amazing documentation tooling for Rust
Rust
151
star
7

rustbook

A simplified version of gitbook, atop rustdoc
Rust
124
star
8

mono_logger

A lock-free logger for Ruby 2.0
Ruby
107
star
9

rustdoc

Not a real thing, see https://github.com/rust-lang/rust for rustdoc's actual source code
104
star
10

words

A way to turn markdown into HTML and ebooks
102
star
11

rust_example

A Ruby gem, implemented in Rust
Ruby
101
star
12

indexlist

indexlist: A doubly linked list, backed by a vector
Rust
83
star
13

rust-in-ten-slides

Short presentations about Rust syntax + concepts
HTML
72
star
14

turbolinks_test

Seriously. Use numbers.
Ruby
71
star
15

rustmvc

TodoMVC, with Rust and Ember
JavaScript
70
star
16

mojikun

A programming language that you'll ❀️
Ruby
70
star
17

metadown

Annotate your Markdown files with metadata.
Ruby
69
star
18

ruby-sys

Low-level bindings to Ruby
Rust
66
star
19

jujutsu-tutorial

trying to figure out this jujutsu thing
47
star
20

becoming

Add additional functionality to objects.
Ruby
42
star
21

pomodoro

A pomodoro counter, that turns off your access to certain sites.
Ruby
42
star
22

issue2pr

Transmute your Issues into Pull Requests
CSS
39
star
23

ticketee_review

The example application for Rails 4 in Action.
Ruby
38
star
24

sunlight-congress

A wrapper for the Sunlight Foundation's Congress API
Ruby
36
star
25

history-of-rust

A talk about the history of Rust
HTML
35
star
26

security_release_practice

Ruby
34
star
27

semver-parser

A parser for the semver specification
Rust
33
star
28

blog

This is my blog.
CSS
32
star
29

ticketee

The sample app for Rails 4 in Action
Ruby
32
star
30

dining_philosophers

The Dining Philosophers problem, in Rust
Rust
28
star
31

ref_slice

Take a reference and get back a slice of length one
Rust
26
star
32

hateoas

Build easy clients for Hypermedia APIs.
Ruby
25
star
33

adventure

A text adventure game, in Rust.
Rust
24
star
34

derp

Lets you herp all of your Strings with a to_derp method.
Ruby
21
star
35

trpl

don't worry about it
20
star
36

get_a_job

A hypermedia job queue
Ruby
20
star
37

bring_back_snowman

Ruby
20
star
38

buck-rust-hello

A demo of using buck2 with Rust.
Starlark
19
star
39

json-merge_patch

An implementation of the snell-merge-patch draft for JSON.
Ruby
18
star
40

ticketee_backup

A ticking application. The example app for "Rails 4 in Action"
Ruby
17
star
41

livestream

the source of the stuff I do on twitch.tv
Rust
16
star
42

how_i_start

A sample project for How I Start.
Ruby
16
star
43

no_secrets_anymore

JavaScript
15
star
44

pastebin

This is a copy of the old pastebin 6.0 code
PHP
15
star
45

teachmehowtomakearubygem

Shows you how to make a ruby gem.
Ruby
15
star
46

warehouse

Crates.io's index as a web app.
JavaScript
14
star
47

ludum

My entry for Ludum Dare 35
Rust
13
star
48

forward2015

My talk from forward2015
HTML
13
star
49

abnf

A ABNF parser for Ruby.
Ruby
13
star
50

dtp

Document Transfer Protocol
12
star
51

media_type_template

A template for media type definitions
JavaScript
11
star
52

rwc

A wc clone in Rust
Rust
10
star
53

hypermedia-presentation

JavaScript
10
star
54

require_relative

This backports require_relative to Ruby 1.8.
Ruby
10
star
55

from_behind

Rogues do it from behind; a roguelike in Haskell
Haskell
9
star
56

eployday

A deploy bot for IRC
Ruby
9
star
57

open_company_talk

A talk about open companies.
JavaScript
8
star
58

frp_shoes

Functional Reactive Programming + Shoes
Ruby
8
star
59

grok

Fun with compilers, interpreters and such.
Rust
8
star
60

password-cracker

ceasar cypher cracker in rust
Rust
7
star
61

oredev2018

My talk at Oredev 2018: rustc errors a UX perspective
JavaScript
6
star
62

uniq_ptr_problem

Unsafety with uniq_ptr in C++
HTML
6
star
63

maze_solver

Some experiments with Maze+XML
Ruby
6
star
64

not-the-rust-blog

CSS
5
star
65

meloria

CRM for tattoo shops
Ruby
5
star
66

the_rust_programming_language

Makefile
5
star
67

bad_idea

this is a bad idea
Makefile
5
star
68

parse-example

Parsing a file to a struct in Rust
Rust
5
star
69

antisocialne.ws

fuck reddit
Ruby
5
star
70

heroku-buildpack-rbx

Shell
5
star
71

extraextra

Need to add a news feed to your application? EXTRA! EXTRA! is just the Gem for you!
Ruby
5
star
72

nobody_knows_rust

JavaScript
5
star
73

rustconf2018-wasm-workshop

The WebAssembly workshop at RustConf 2018
HTML
5
star
74

rust-algebra

Monoids, semigroups, and other algebraic structures in Rust
Rust
5
star
75

nasm-rust

Rust
4
star
76

guessing_game

The classic guessing game in Rust.
Rust
4
star
77

rust-adt

A collection of abstract data types, written in Rust
Rust
4
star
78

compass-rust

Rust
4
star
79

cryptopals

http://cryptopals.com/ in Rust
Rust
4
star
80

fosdem2015

My slides for FOSDEM 2015
JavaScript
4
star
81

totally-not-semver

Rust
4
star
82

aoc2017

Advent of Code 2017
HTML
4
star
83

s

My own personal sub: https://github.com/37signals/sub
Shell
4
star
84

rust-linked-lists

Several linked list implementations in Rust
Rust
4
star
85

steveklabnik.com

My personal website.
MDX
4
star
86

geekout2016

The code from my talk at GeekOut
Rust
4
star
87

ActiveRepository

A brain dump of a new persistence strategy for Rails.
Ruby
4
star
88

art_of_ruby

JavaScript
4
star
89

avr-emulator

Atmel 8-bit AVR Emulator in React and Rust
Rust
3
star
90

coinbaser

Coinbase REST API for Rust
Rust
3
star
91

bitcoin-secp256k1-rs

Rust language bindings for Bitcoin secp256k1 library.
Rust
3
star
92

learn_c_the_hard_way_exercises

3
star
93

rust_documentation

A talk about Rust's docs.
JavaScript
3
star
94

heroku-buildpack-rust-wasm

Shell
3
star
95

attendr

Ruby
3
star
96

semver.crates.io

Rust
3
star
97

daw

A little DAW, in Shoes
Ruby
3
star
98

booster2018

Our workshop at BoosterConf 2018
HTML
3
star
99

workers-steveklabnik.com

My personal website
HTML
2
star
100

webscale-ruby-version

This makes RUBY_VERSION web scale
Ruby
2
star