Class: ClassKit::ValueHelper

Inherits:
Object
  • Object
show all
Defined in:
lib/class_kit/value_helper.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.instanceObject



4
5
6
# File 'lib/class_kit/value_helper.rb', line 4

def self.instance
  @@instance ||= new
end

Instance Method Details

#parse(type:, value:) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/class_kit/value_helper.rb', line 8

def parse(type:, value:)
  if type == Time
    if value.is_a?(Time)
      value
    elsif value.is_a?(Integer) || value.is_a?(Float) || value.is_a?(BigDecimal)
      Time.at(value)
    else
      Time.parse(value)
    end
  elsif type == Date
    if value.is_a?(Date)
      value
    elsif value.is_a?(Integer)
      Date.at(value)
    else
      Date.parse(value)
    end
  elsif type == DateTime
    if value.is_a?(DateTime)
      value
    elsif value.is_a?(Integer)
      DateTime.at(value)
    else
      DateTime.parse(value)
    end
  elsif type == :bool
    if value == true || value == false
      value
    elsif(/(true|t|yes|y|1)$/i === value.to_s.downcase)
      true
    elsif (/(false|f|no|n|0)$/i === value.to_s.downcase)
      false
    elsif value != nil
      raise 'Unable to parse bool'
    end
  elsif type == Integer
    Integer(value)
  elsif type == Float
    Float(value)
  elsif type == BigDecimal
    if value.is_a?(BigDecimal)
      value
    else
      value = value.to_s
      raise 'Unable to parse BigDecimal' unless value =~ /\A-?\d+(\.\d*)?/
      BigDecimal(value)
    end
  elsif type == String
    String(value)
  elsif type == Regexp
    Regexp.new(value)
  elsif type == Hash
    raise 'Unable to parse Hash' unless value.is_a?(Hash)
    value
  elsif type == Array
    raise 'Unable to parse Array' unless value.is_a?(Array)
    value
  else
    raise 'Unable to parse'
  end
rescue => e
  raise ClassKit::Exceptions::InvalidParseValueError,
        "Unable to parse value: #{value} into type: #{type}. Error: #{e}"
end