Class: ValidatesTimeliness::Converter
- Inherits:
-
Object
- Object
- ValidatesTimeliness::Converter
- Defined in:
- lib/validates_timeliness/converter.rb
Instance Attribute Summary collapse
-
#format ⇒ Object
readonly
Returns the value of attribute format.
-
#ignore_usec ⇒ Object
readonly
Returns the value of attribute ignore_usec.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
Instance Method Summary collapse
- #dummy_time(value) ⇒ Object
- #evaluate(value, scope = nil) ⇒ Object
-
#initialize(type:, format: nil, ignore_usec: false, time_zone_aware: false) ⇒ Converter
constructor
A new instance of Converter.
- #parse(value) ⇒ Object
- #restriction_shorthand?(symbol) ⇒ Boolean
- #time_zone_aware? ⇒ Boolean
- #type_cast_value(value) ⇒ Object
Constructor Details
#initialize(type:, format: nil, ignore_usec: false, time_zone_aware: false) ⇒ Converter
Returns a new instance of Converter.
5 6 7 8 9 10 |
# File 'lib/validates_timeliness/converter.rb', line 5 def initialize(type:, format: nil, ignore_usec: false, time_zone_aware: false) @type = type @format = format @ignore_usec = ignore_usec @time_zone_aware = time_zone_aware end |
Instance Attribute Details
#format ⇒ Object (readonly)
Returns the value of attribute format.
3 4 5 |
# File 'lib/validates_timeliness/converter.rb', line 3 def format @format end |
#ignore_usec ⇒ Object (readonly)
Returns the value of attribute ignore_usec.
3 4 5 |
# File 'lib/validates_timeliness/converter.rb', line 3 def ignore_usec @ignore_usec end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
3 4 5 |
# File 'lib/validates_timeliness/converter.rb', line 3 def type @type end |
Instance Method Details
#dummy_time(value) ⇒ Object
34 35 36 37 38 39 40 41 42 43 |
# File 'lib/validates_timeliness/converter.rb', line 34 def dummy_time(value) time = if value.acts_like?(:time) value = value.in_time_zone if time_zone_aware? [value.hour, value.min, value.sec] else [0,0,0] end values = ValidatesTimeliness.dummy_date_for_time_type + time Timeliness::Parser.make_time(values, (:current if time_zone_aware?)) end |
#evaluate(value, scope = nil) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/validates_timeliness/converter.rb', line 45 def evaluate(value, scope=nil) case value when Time, Date value when String parse(value) when Symbol if !scope.respond_to?(value) && restriction_shorthand?(value) ValidatesTimeliness.restriction_shorthand_symbols[value].call else evaluate(scope.send(value)) end when Proc result = value.arity > 0 ? value.call(scope) : value.call evaluate(result, scope) else value end end |
#parse(value) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/validates_timeliness/converter.rb', line 69 def parse(value) return nil if value.nil? if ValidatesTimeliness.use_plugin_parser Timeliness::Parser.parse(value, type, zone: (:current if time_zone_aware?), format: format, strict: false) else time_zone_aware? ? Time.zone.parse(value) : value.to_time(ValidatesTimeliness.default_timezone) end rescue ArgumentError, TypeError nil end |
#restriction_shorthand?(symbol) ⇒ Boolean
65 66 67 |
# File 'lib/validates_timeliness/converter.rb', line 65 def restriction_shorthand?(symbol) ValidatesTimeliness.restriction_shorthand_symbols.keys.include?(symbol) end |
#time_zone_aware? ⇒ Boolean
81 82 83 |
# File 'lib/validates_timeliness/converter.rb', line 81 def time_zone_aware? @time_zone_aware end |
#type_cast_value(value) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/validates_timeliness/converter.rb', line 12 def type_cast_value(value) return nil if value.nil? || !value.respond_to?(:to_time) value = value.in_time_zone if value.acts_like?(:time) && time_zone_aware? value = case type when :time dummy_time(value) when :date value.to_date when :datetime value.is_a?(Time) ? value : (time_zone_aware? ? value.in_time_zone : value.to_time) else value end if ignore_usec && value.is_a?(Time) value.change(usec: 0) else value end end |