Module: Transproc::Conditional

Extended by:
Registry
Defined in:
lib/transproc/conditional.rb

Overview

Conditional transformation functions

Examples:

require 'transproc/conditional'

include Transproc::Helper

fn = t(:guard, -> s { s.is_a?(::String) }, -> s { s.to_sym })

[fn[2], fn['Jane']]
# => [2, :Jane]

Class Method Summary collapse

Methods included from Registry

[], fetch, import, store

Class Method Details

.guard(value, predicate, fn) ⇒ Mixed

Apply the transformation function to subject if the predicate returns true, or return un-modified

Examples:

[2, 'Jane'].map do |subject|
  Transproc(:guard, -> s { s.is_a?(::String) }, -> s { s.to_sym })[subject]
end
# => [2, :Jane]

48
49
50
# File 'lib/transproc/conditional.rb', line 48

def self.guard(value, predicate, fn)
  predicate[value] ? fn[value] : value
end

.is(value, type, fn) ⇒ Object

Calls a function when type-check passes

Examples:

fn = Transproc(:is, Array, -> arr { arr.map(&:upcase) })
fn.call(['a', 'b', 'c']) # => ['A', 'B', 'C']

fn = Transproc(:is, Array, -> arr { arr.map(&:upcase) })
fn.call('foo') # => "foo"

68
69
70
# File 'lib/transproc/conditional.rb', line 68

def self.is(value, type, fn)
  guard(value, -> v { v.is_a?(type) }, fn)
end

.not(value, fn) ⇒ Boolean

Negates the result of transformation

Examples:

fn = Conditional[:not, -> value { value.is_a? ::String }]
fn[:foo]  # => true
fn["foo"] # => false

31
32
33
# File 'lib/transproc/conditional.rb', line 31

def self.not(value, fn)
  !fn[value]
end