module ENV_BANG::Classes

Attributes

default_class[W]

Public Class Methods

Array(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 18
def Array(value, options)
  item_options = options.merge(class: options.fetch(:of, default_class))
  value.split(',').map { |v| cast(v.strip, item_options) }
end
Complex(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 61
def Complex(value, options)
  Kernel.Complex(value)
end
Date(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 73
def Date(value, options)
  Date.parse(value)
end
DateTime(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 77
def DateTime(value, options)
  DateTime.parse(value)
end
Float(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 49
def Float(value, options)
  Kernel.Float(value)
end
Hash(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 23
def Hash(value, options)
  key_options   = options.merge(class: options.fetch(:keys, Symbol))
  value_options = options.merge(class: options.fetch(:of, default_class))
  sep = options.fetch(:sep, ',')
  val_sep = options.fetch(:val_sep, ':')

  {}.tap do |h|
    value.split(sep).each do |pair|
      key, value = pair.split(val_sep, 2)
      h[cast(key.to_s.strip, key_options)] = cast(value.to_s.strip, value_options)
    end
  end
end
Integer(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 45
def Integer(value, options)
  Kernel.Integer(value)
end
Pathname(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 65
def Pathname(value, options)
  Kernel.Pathname(value)
end
Range(value, options = {}) click to toggle source
# File lib/env_bang/classes.rb, line 85
def Range(value, options = {})
  beginning, ending = value.split('...')
  if beginning && ending
    options[:exclusive] = true unless options.has_key?(:exclusive)
  else
    beginning, ending = value.split('..')
  end
  unless beginning && ending
    raise ArgumentError.new("Range '#{value}' cannot be parsed as a range. Must be in the form <start>..<end> or <start>...<end>")
  end

  options[:of] ||= Integer
  beginning = cast(beginning, class: options[:of])
  ending    = cast(ending, class: options[:of])

  if options[:exclusive]
    beginning...ending
  else
    beginning..ending
  end
end
Rational(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 57
def Rational(value, options)
  Kernel.Rational(value)
end
Regexp(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 107
def Regexp(value, options)
  Regexp.new(value)
end
String(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 53
def String(value, options)
  Kernel.String(value)
end
StringUnlessFalsey(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 41
def StringUnlessFalsey(value, options)
  boolean(value, options) && value
end
Symbol(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 37
def Symbol(value, options)
  value.to_sym
end
Time(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 81
def Time(value, options)
  Time.parse(value)
end
URI(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 69
def URI(value, options)
  Kernel.URI(value)
end
boolean(value, options) click to toggle source
# File lib/env_bang/classes.rb, line 14
def boolean(value, options)
  !(value =~ /^(|0|disabled?|false|no|off)$/i)
end
cast(value, options = {}) click to toggle source
# File lib/env_bang/classes.rb, line 10
def cast(value, options = {})
  public_send(:"#{options.fetch(:class, default_class)}", value, options)
end
default_class() click to toggle source
# File lib/env_bang/classes.rb, line 6
def default_class
  @default_class ||= :StringUnlessFalsey
end