File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ require_relative 'class_kit/constants'
12require_relative 'class_kit/class_methods'
23require_relative 'class_kit/exceptions'
34require_relative 'class_kit/attribute_helper'
1011require 'date'
1112require 'bigdecimal'
1213require 'time'
13-
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ module ClassKit
4+ module Constants
5+ # Shared constants, to avoid re-creating them on each call to helper methods.
6+ BOOL_TRUE_RE = /\A (?:true|t|yes|y|1)\z /i
7+ BOOL_FALSE_RE = /\A (?:false|f|no|n|0)\z /i
8+ end
9+ end
Original file line number Diff line number Diff line change 11module ClassKit
22 class ValueHelper
3-
43 def self . instance
54 @@instance ||= new
65 end
76
87 def parse ( type :, value :)
9- if type == Time
10- if value . is_a? ( Time )
11- value
12- elsif value . is_a? ( Integer ) || value . is_a? ( Float ) || value . is_a? ( BigDecimal )
13- Time . at ( value )
14- else
15- Time . parse ( value )
16- end
17- elsif type == Date
18- if value . is_a? ( Date )
19- value
20- else
21- Date . parse ( value )
22- end
23- elsif type == DateTime
24- if value . is_a? ( DateTime )
25- value
26- else
27- DateTime . parse ( value )
28- end
29- elsif type == :bool
30- if value == true || value == false
31- value
32- elsif ( /(true|t|yes|y|1)$/i === value . to_s . downcase )
8+ if type == :bool
9+ return value if value == true || value == false
10+
11+ s = value . to_s
12+ if Constants ::BOOL_TRUE_RE . match? ( s )
3313 true
34- elsif ( /(false|f|no|n|0)$/i === value . to_s . downcase )
14+ elsif Constants :: BOOL_FALSE_RE . match? ( s )
3515 false
36- elsif value != nil
16+ elsif ! value . nil?
3717 raise 'Unable to parse bool'
3818 end
3919 elsif type == Integer
@@ -44,26 +24,41 @@ def parse(type:, value:)
4424 if value . is_a? ( BigDecimal )
4525 value
4626 else
47- value = value . to_s
48- raise 'Unable to parse BigDecimal' unless value =~ /\A -?\d +(\. \d *)?/
49- BigDecimal ( value )
27+ s = value . to_s
28+ raise 'Unable to parse BigDecimal' unless s =~ /\A -?\d +(\. \d *)?/
29+
30+ BigDecimal ( s )
5031 end
5132 elsif type == String
5233 String ( value )
34+ elsif type == Time
35+ if value . is_a? ( Time )
36+ value
37+ elsif value . is_a? ( Integer ) || value . is_a? ( Float ) || value . is_a? ( BigDecimal )
38+ Time . at ( value )
39+ else
40+ Time . parse ( value )
41+ end
42+ elsif type == Date
43+ value . is_a? ( Date ) ? value : Date . parse ( value )
44+ elsif type == DateTime
45+ value . is_a? ( DateTime ) ? value : DateTime . parse ( value )
5346 elsif type == Regexp
5447 Regexp . new ( value )
5548 elsif type == Hash
5649 raise 'Unable to parse Hash' unless value . is_a? ( Hash )
50+
5751 value
5852 elsif type == Array
5953 raise 'Unable to parse Array' unless value . is_a? ( Array )
54+
6055 value
6156 elsif type . include? ( ClassKit ::CustomType )
6257 type . parse_assign ( value )
6358 else
6459 raise 'Unable to parse'
6560 end
66- rescue => e
61+ rescue StandardError => e
6762 raise ClassKit ::Exceptions ::InvalidParseValueError ,
6863 "Unable to parse value: #{ value } into type: #{ type } . Error: #{ e } "
6964 end
You can’t perform that action at this time.
0 commit comments