Skip to content

Commit

Permalink
Setup for travis and project page.
Browse files Browse the repository at this point in the history
  • Loading branch information
blatyo committed Jun 30, 2012
1 parent e95914f commit 3cf7558
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 15 deletions.
9 changes: 9 additions & 0 deletions .travis.yml
@@ -0,0 +1,9 @@
language: ruby
rvm:
- 1.8.7
- 1.9.2
- 1.9.3
- jruby-18mode # JRuby in 1.8 mode
- jruby-19mode # JRuby in 1.9 mode
- rbx-18mode
- rbx-19mode
74 changes: 59 additions & 15 deletions README.md
@@ -1,21 +1,65 @@
# Maybelline

An implementation of the maybe monad.
[![Build Status](http://travis-ci.org/blatyo/maybelline.png)](http://travis-ci.org/blatyo/maybelline)

An implementation of the [maybe monad](http://en.wikipedia.org/wiki/Monad_(functional_programming)#The_Maybe_monad).

## Setup

**Gemfile**
``` ruby
gem 'maybelline'
```

**Manual**
``` ruby
require 'maybelline'
```

## Usage

Say you have some objects like the ones below:

``` ruby
class B
def b
nil
end
end

# if any method in the chain of calls returns nil, the
# block will return nil
Maybe(B){|b| b.new.b.this_method_wont_get_called} #=> nil
B.maybe{|b| b.new.b.this_method_wont_get_called} #=> nil

# if it is successful, it will return the value
1.maybe{|n| n.to_s(16).to_i.to_s(8)} #=> 1
```
require 'ostruct'

data = {
"neat" => {
"super" => "cool",
"lame" => nil
}
}

object = OpenStruct.new(data)
object.neat = OpenStruct.new(object.neat)
```

If any method in the chain of calls returns nil, the block will return nil.

``` ruby
Maybe(data){|d| d["this_key_doesnt_exist"]["this_key_wont_get_called"]} #=> nil
data.maybe{|d| d["this_key_doesnt_exist"]["this_key_wont_get_called"]} #=> nil
object.maybe{|o| o.neat.lame.this_method_never_gets_called} #=> nil
```

If it is successful, it will return the value.

``` ruby
data.maybe{|d| d["neat"]["super"]} #=> "cool"
object.maybe{|o| o.neat.super} #=> "cool"
```

## Note on Reporting Issues

* Try to make a failing test case
* Tell me which version of ruby you're using
* Tell me which OS you are using
* Provide me with any extra files if necessary

## Note on Patches/Pull Requests

* Fork the project.
* Make your feature addition or bug fix.
* Add tests for it. This is important so I don't break it in a future version unintentionally.
* Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
* Send me a pull request. Bonus points for topic branches.
5 changes: 5 additions & 0 deletions Rakefile
@@ -1 +1,6 @@
require "bundler/gem_tasks"

require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new('spec')
task :default => :spec
task :test => :spec

0 comments on commit 3cf7558

Please sign in to comment.