Class: SafeYAML::Transform::ToFloat

Inherits:
Object
  • Object
show all
Defined in:
lib/safe_yaml/transform/to_float.rb

Constant Summary collapse

Infinity =
1.0 / 0.0
NaN =
0.0 / 0.0
PREDEFINED_VALUES =
{
  ".inf"  => Infinity,
  ".Inf"  => Infinity,
  ".INF"  => Infinity,
  "-.inf" => -Infinity,
  "-.Inf" => -Infinity,
  "-.INF" => -Infinity,
  ".nan"  => NaN,
  ".NaN"  => NaN,
  ".NAN"  => NaN,
}.freeze
MATCHER =
/\A[-+]?(?:\d[\d_]*)?\.[\d_]+(?:[eE][-+][\d]+)?\Z/.freeze

Instance Method Summary collapse

Instance Method Details

#transform?(value) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
24
# File 'lib/safe_yaml/transform/to_float.rb', line 21

def transform?(value)
  return true, Float(value) if MATCHER.match(value)
  try_edge_cases?(value)
end

#try_edge_cases?(value) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
29
30
# File 'lib/safe_yaml/transform/to_float.rb', line 26

def try_edge_cases?(value)
  return true, PREDEFINED_VALUES[value] if PREDEFINED_VALUES.include?(value)
  return true, Parse::Sexagesimal.value(value) if Parse::Sexagesimal::FLOAT_MATCHER.match(value)
  return false
end