Project

mangrove

0.0
There's a lot of open issues
Mangrove is a Ruby Gem designed to be the definitive toolkit for leveraging Sorbet's type system in Ruby applications. It's designed to offer a robust, statically-typed experience, focusing on solid types, a functional programming style, and an interface-driven approach. Mangrove has `Result`, `Option` and `Algebraic Data Type` currently.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

Mangrove

Mangrove is a Ruby Gem designed to be the definitive toolkit for leveraging Sorbet's type system in Ruby applications. It's designed to offer a robust, statically-typed experience, focusing on solid types, a functional programming style, and an interface-driven approach.

Features

  • Option Type
  • Result Type
  • Enums with inner types (ADTs)

Installation

bundle add mangrove

Usage

Documentation is available here. For more concrete examples, see spec/**/**_spec.rb.

Mangrove::Result[OkType, ErrType]
Mangrove::Result::Ok[OkType, ErrType]
Mangrove::Result::Err[OkType, ErrType]
Mangrove::Option[InnerType]
Mangrove::Option::Some[InnerType]
Mangrove::Option::None[InnerType]

my_ok = Result::Ok.new("my value")
my_err = Result::Err.new("my err")
my_some = Option::Some.new(1234)
my_none = Option::None.new

##############################

response = MyClient
  .new
  .and_then { |client| client.get_response() }
  .and_then { |response| response.body }

case response
when Mangrove::Result::Ok
  puts response.ok_inner
when Mangrove::Result::Err
  puts response.err_inner
end

##############################

class MyEnum
  extend Mangrove::Enum

  variants do
    variant VariantWithInteger, Integer
    variant VariantWithString, String
    variant VariantWithException, Exception
    variant VariantWithTuple, [Integer, String]
    variant VariantWithShape, { name: String, age: Integer }
  end
end

Commands for Development

git config core.hooksPath hooks
bundle install
bundle exec tapioca init
bundle exec tapioca gems -w `nproc`
bundle exec tapioca dsl -w `nproc`
bundle exec tapioca check-shims
bundle exec tapioca init
bundle exec rspec -f d
bundle exec rubocop -DESP
bundle exec srb typecheck
bundle exec spoom srb tc
bundle exec ordinare --check
bundle exec ruboclean --verify
bundle exec yardoc -o docs/ --plugin yard-sorbet
bundle exec yard server --reload --plugin yard-sorbet
rake build
rake release