Module: Transproc::Coercions

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

Overview

Coercion functions for common types

Constant Summary collapse

TRUE_VALUES =
[true, 1, '1', 'on', 't', 'true', 'y', 'yes'].freeze
FALSE_VALUES =
[false, 0, '0', 'off', 'f', 'false', 'n', 'no', nil].freeze
BOOLEAN_MAP =
Hash[
  TRUE_VALUES.product([true]) + FALSE_VALUES.product([false])
].freeze

Class Method Summary collapse

Methods included from Registry

[], fetch, import, store

Class Method Details

.identity(value = nil) ⇒ Object

Does nothing and returns a value

Examples:

fn = Coercions[:identity]
fn[:foo] # => :foo

Parameters:

  • value (Object) (defaults to: nil)

Returns:

  • (Object)


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

def self.identity(value = nil)
  value
end

.to_boolean(value) ⇒ TrueClass, FalseClass

Coerce value into a boolean

Examples:

Transproc(:to_boolean)['true']
# => true
Transproc(:to_boolean)['f']
# => false

Parameters:

  • value (Object)

    The input value

Returns:

  • (TrueClass, FalseClass)


123
124
125
# File 'lib/transproc/coercions.rb', line 123

def self.to_boolean(value)
  BOOLEAN_MAP.fetch(value)
end

.to_date(value) ⇒ Date

Coerce value into a date

Examples:

Transproc(:to_date)['2015-04-14']
# => #<Date: 2015-04-14 ((2457127j,0s,0n),+0s,2299161j)>

Parameters:

  • value (Object)

    The input value

Returns:

  • (Date)


138
139
140
# File 'lib/transproc/coercions.rb', line 138

def self.to_date(value)
  Date.parse(value)
end

.to_datetime(value) ⇒ DateTime

Coerce value into a datetime

Examples:

Transproc(:to_datetime)['2015-04-14 12:01:45']
# => #<DateTime: 2015-04-14T12:01:45+00:00 ((2457127j,43305s,0n),+0s,2299161j)>

Parameters:

  • value (Object)

    The input value

Returns:

  • (DateTime)


168
169
170
# File 'lib/transproc/coercions.rb', line 168

def self.to_datetime(value)
  DateTime.parse(value)
end

.to_decimal(value) ⇒ Decimal

Coerce value into a decimal

Examples:

Transproc(:to_decimal)[1.2]
# => #<BigDecimal:7fca32acea50,'0.12E1',18(36)>

Parameters:

  • value (Object)

    The input value

Returns:

  • (Decimal)


106
107
108
# File 'lib/transproc/coercions.rb', line 106

def self.to_decimal(value)
  value.to_d
end

.to_float(value) ⇒ Float

Coerce value into a float

Examples:

Transproc(:to_float)['1.2']
# => 1.2

Parameters:

  • value (Object)

    The input value

Returns:

  • (Float)


91
92
93
# File 'lib/transproc/coercions.rb', line 91

def self.to_float(value)
  value.to_f
end

.to_integer(value) ⇒ Integer

Coerce value into a integer

Examples:

Transproc(:to_integer)['1']
# => 1

Parameters:

  • value (Object)

    The input value

Returns:

  • (Integer)


76
77
78
# File 'lib/transproc/coercions.rb', line 76

def self.to_integer(value)
  value.to_i
end

.to_string(value) ⇒ String

Coerce value into a string

Examples:

Transproc(:to_string)[1]
# => "1"

Parameters:

  • value (Object)

    The input value

Returns:

  • (String)


46
47
48
# File 'lib/transproc/coercions.rb', line 46

def self.to_string(value)
  value.to_s
end

.to_symbol(value) ⇒ Symbol

Coerce value into a symbol

Examples:

Transproc(:to_symbol)['foo']
# => :foo

Parameters:

  • value (#to_s)

    The input value

Returns:

  • (Symbol)


61
62
63
# File 'lib/transproc/coercions.rb', line 61

def self.to_symbol(value)
  value.to_s.to_sym
end

.to_time(value) ⇒ Time

Coerce value into a time

Examples:

Transproc(:to_time)['2015-04-14 12:01:45']
# => 2015-04-14 12:01:45 +0200

Parameters:

  • value (Object)

    The input value

Returns:

  • (Time)


153
154
155
# File 'lib/transproc/coercions.rb', line 153

def self.to_time(value)
  Time.parse(value)
end

.to_tuples(value) ⇒ Array<Hash>

Coerce value into an array containing tuples only

If the source is not an array, or doesn't contain a tuple, returns an array with one empty tuple

Examples:

Transproc(:to_tuples)[:foo]                  # => [{}]
Transproc(:to_tuples)[[]]                    # => [{}]
Transproc(:to_tuples)[[{ foo: :FOO, :bar }]] # => [{ foo: :FOO }]

Parameters:

  • value (Object)

Returns:

  • (Array<Hash>)


186
187
188
189
190
# File 'lib/transproc/coercions.rb', line 186

def self.to_tuples(value)
  array = value.is_a?(Array) ? Array[*value] : [{}]
  array.select! { |item| item.is_a?(Hash) }
  array.any? ? array : [{}]
end