diff --git a/lib/errgonomic.rb b/lib/errgonomic.rb index 27f253f..339cdae 100644 --- a/lib/errgonomic.rb +++ b/lib/errgonomic.rb @@ -12,6 +12,9 @@ require_relative 'errgonomic/option' require_relative 'errgonomic/result' +# some extensions on true and false +require_relative 'errgonomic/bool' + # Rails fu require_relative 'errgonomic/rails' if defined?(Rails::Railtie) diff --git a/lib/errgonomic/bool.rb b/lib/errgonomic/bool.rb new file mode 100644 index 0000000..3af9cf9 --- /dev/null +++ b/lib/errgonomic/bool.rb @@ -0,0 +1,60 @@ +class TrueClass + # @example + # true.then { :hello } #=> Some(:hello) + # false.then { :goodbye } #=> None() + def then(&block) + Some(block.call) + end + + # @example + # true.then_some(:hello) #=> Some(:hello) + # false.then_some(:goodbye) #=> None() + def then_some(val) + Some(val) + end + + # @example + # true.ok_or(:ohno) # => Ok(true) + # false.ok_or(:ohno) # => Err(:ohno) + def ok_or(val) + Ok(true) + end + + # @example + # true.ok_or_else { :ohno } # => Ok(true) + # false.ok_or_else { :ohno } # => Err(:ohno) + def ok_or_else(&block) + Ok(true) + end + +end + +class FalseClass + # @example + # true.then { :hello } #=> Some(:hello) + # false.then { :goodbye } #=> None() + def then(&block) + None() + end + + # @example + # true.then_some(:hello) #=> Some(:hello) + # false.then_some(:goodbye) #=> None() + def then_some(_val) + None() + end + + # @example + # true.ok_or(:ohno) # => Ok(true) + # false.ok_or(:ohno) # => Err(:ohno) + def ok_or(err) + Err(err) + end + + # @example + # true.ok_or_else { :ohno } # => Ok(true) + # false.ok_or_else { :ohno } # => Err(:ohno) + def ok_or_else(&block) + Err(block.call) + end +end