Skip to content
forked from rares/option

Ruby implementation of Scala's Option Monad

License

Notifications You must be signed in to change notification settings

opbandit/option

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Option

A Ruby port of Scala's Option monad. Tries to be faithful but also pragmatic in RE: to duck typing.

Blog post: http://robares.com/2012/09/16/ruby-port-of-scala-option/

Installation

Add this line to your application's Gemfile:

gem 'option'

And then execute:

$ bundle

Or install it yourself as:

$ gem install option

Usage

Generally, you want to use the Option(A) wrapper method to box your value. This will make the right decision as to what your initial value should be:

foo = Option("bar")

This will allow you to now manipulate the value in the box via various means:

# get the value
foo.get #=> "bar"

# return a default if the box is None
None.get_or_else { "default" } #=> "default"

# map the value to another option
foo.map { |v| v.upcase } #=> Some("BAR")

# does the value meet a requirement?
foo.exists? { |v| v == "bar" } #=> true

# return the value or nil depending on the state
foo.or_nil #=> "bar"

# chain values
foo.map { |v| v * 2 }.map { |v| v.upcase }.get_or_else { "missing" } #=> BARBAR

# attempt to extract a value but default if None
None.fold(-> { "missing" }) { |v| v.upcase } #=> missing

# filter values returning an option
foo.filter { |v| v == "baz" } #=> None

# Side-effects
foo.inside { |v| v.upcase! } #=> Some("BAR")

# use in a for loop
for value in foo
  puts value #=> bar
end

Build Status

Travis CI

Code Climate

Code Climate

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

About

Ruby implementation of Scala's Option Monad

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%