Class: Choosy::Converter

Inherits:
Object
  • Object
show all
Defined in:
lib/choosy/converter.rb

Constant Summary collapse

CONVERSIONS =
{
  :integer => nil,
  :int     => :integer,
  :float   => nil,
  :symbol  => nil,
  :file    => nil,  # Succeeds only if a file is present
  :yaml    => nil,  # Loads a YAML file, if present
  :date    => nil,
  :time    => nil,
  :datetime => nil,
  :string  => nil,
  :boolean => nil,
  :bool    => :boolean
}

Class Method Summary collapse

Class Method Details

.boolean(value) ⇒ Object



50
51
52
# File 'lib/choosy/converter.rb', line 50

def self.boolean(value)
  value # already set
end

.convert(ty, value) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/choosy/converter.rb', line 38

def self.convert(ty, value)
  if ty.nil?
    raise ArgumentError.new("Can't convert nil to a type.")
  end

  if CONVERSIONS.has_key?(ty)
    send(ty, value)
  else
    ty.convert(value)
  end
end

.date(value) ⇒ Object



95
96
97
98
99
100
101
# File 'lib/choosy/converter.rb', line 95

def self.date(value)
  begin
    return Date.parse(value)
  rescue ArgumentError
    raise Choosy::ConversionError.new("Unable to convert '#{value}' into a date")
  end
end

.datetime(value) ⇒ Object



111
112
113
114
115
116
117
# File 'lib/choosy/converter.rb', line 111

def self.datetime(value)
  begin
    return DateTime.parse(value)
  rescue ArgumentError
    raise Choosy::ConversionError.new("Unable to convert '#{value}' into datetime")
  end
end

.file(value) ⇒ Object



78
79
80
81
82
83
84
# File 'lib/choosy/converter.rb', line 78

def self.file(value)
  if File.file?(value)
    File.new(value)
  else
    raise Choosy::ValidationError.new("Unable to locate file: '#{value}'")
  end
end

.float(value) ⇒ Object



66
67
68
69
70
71
72
# File 'lib/choosy/converter.rb', line 66

def self.float(value)
  begin
    return Float(value)
  rescue ArgumentError
    raise Choosy::ConversionError.new("Unable to convert '#{value}' into a float")
  end
end

.for(ty) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/choosy/converter.rb', line 23

def self.for(ty)
  if ty.is_a?(Symbol) && CONVERSIONS.has_key?(ty)
    val = CONVERSIONS[ty]
    if val
      return val 
    else
      return ty
    end
  elsif ty.respond_to?(:convert)
    return ty
  end

  nil
end

.integer(value) ⇒ Object



58
59
60
61
62
63
64
# File 'lib/choosy/converter.rb', line 58

def self.integer(value)
  begin
    return Integer(value)
  rescue ArgumentError
    raise Choosy::ConversionError.new("Unable to convert '#{value}' into an integer")
  end
end

.string(value) ⇒ Object



54
55
56
# File 'lib/choosy/converter.rb', line 54

def self.string(value)
  value # already set
end

.symbol(value) ⇒ Object



74
75
76
# File 'lib/choosy/converter.rb', line 74

def self.symbol(value)
  value.to_sym
end

.time(value) ⇒ Object



103
104
105
106
107
108
109
# File 'lib/choosy/converter.rb', line 103

def self.time(value)
  begin
    return Time.parse(value)
  rescue ArgumentError
    raise Choosy::ConversionError.new("Unable to convert '#{value}' into a time")
  end
end

.yaml(value) ⇒ Object



86
87
88
89
90
91
92
93
# File 'lib/choosy/converter.rb', line 86

def self.yaml(value)
  fd = file(value)
  begin
    return YAML::load_file(fd.path)
  rescue Error
    raise Choosy::ConversionError.new("Unable to load YAML from file: '#{value}'")
  end
end