Class: Sequent::Core::Helpers::StringToValueParsers
- Inherits:
-
Object
- Object
- Sequent::Core::Helpers::StringToValueParsers
- Defined in:
- lib/sequent/core/helpers/string_to_value_parsers.rb
Constant Summary collapse
- PARSERS =
{ ::Symbol => ->(value) { Symbol.deserialize_from_json(value) }, ::String => ->(value) { value }, ::Integer => ->(value) { parse_to_integer(value) }, ::BigDecimal => ->(value) { parse_to_bigdecimal(value) }, ::Float => ->(value) { parse_to_float(value) }, ::Boolean => ->(value) { parse_to_bool(value) }, ::Date => ->(value) { parse_to_date(value) }, ::DateTime => ->(value) { parse_to_date_time(value) }, ::Sequent::Core::Helpers::ArrayWithType => ->(values, type_in_array) { parse_array(values, type_in_array) } }
Class Method Summary collapse
- .for(klass) ⇒ Object
- .parse_array(values, type_in_array) ⇒ Object
- .parse_to_bigdecimal(value) ⇒ Object
- .parse_to_bool(value) ⇒ Object
- .parse_to_date(value) ⇒ Object
- .parse_to_date_time(value) ⇒ Object
- .parse_to_float(value) ⇒ Object
- .parse_to_integer(value) ⇒ Object
Instance Method Summary collapse
-
#initialize(klass) ⇒ StringToValueParsers
constructor
A new instance of StringToValueParsers.
- #parse_from_string(value) ⇒ Object
Constructor Details
#initialize(klass) ⇒ StringToValueParsers
Returns a new instance of StringToValueParsers.
65 66 67 68 69 70 71 72 |
# File 'lib/sequent/core/helpers/string_to_value_parsers.rb', line 65 def initialize(klass) if klass.is_a? Sequent::Core::Helpers::ArrayWithType @array_with_type = klass @klass = klass.class else @klass = klass end end |
Class Method Details
.for(klass) ⇒ Object
61 62 63 |
# File 'lib/sequent/core/helpers/string_to_value_parsers.rb', line 61 def self.for(klass) new(klass) end |
.parse_array(values, type_in_array) ⇒ Object
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/sequent/core/helpers/string_to_value_parsers.rb', line 50 def self.parse_array(values, type_in_array) fail "invalid value for array(): \"#{values}\"" unless values.is_a?(Array) values.map do |item| if item.respond_to?(:parse_attrs_to_correct_types) item.parse_attrs_to_correct_types else Sequent::Core::Helpers::StringToValueParsers.for(type_in_array).parse_from_string(item) end end end |
.parse_to_bigdecimal(value) ⇒ Object
25 26 27 |
# File 'lib/sequent/core/helpers/string_to_value_parsers.rb', line 25 def self.parse_to_bigdecimal(value) BigDecimal.new(value) unless value.blank? end |
.parse_to_bool(value) ⇒ Object
33 34 35 36 37 38 39 |
# File 'lib/sequent/core/helpers/string_to_value_parsers.rb', line 33 def self.parse_to_bool(value) if value.blank? && !(value.is_a?(TrueClass) || value.is_a?(FalseClass)) nil else (value.is_a?(TrueClass) || value == "true") end end |
.parse_to_date(value) ⇒ Object
41 42 43 44 |
# File 'lib/sequent/core/helpers/string_to_value_parsers.rb', line 41 def self.parse_to_date(value) return if value.blank? value.is_a?(Date) ? value : Date.iso8601(value.dup) end |
.parse_to_date_time(value) ⇒ Object
46 47 48 |
# File 'lib/sequent/core/helpers/string_to_value_parsers.rb', line 46 def self.parse_to_date_time(value) value.is_a?(DateTime) ? value : DateTime.deserialize_from_json(value) end |
.parse_to_float(value) ⇒ Object
29 30 31 |
# File 'lib/sequent/core/helpers/string_to_value_parsers.rb', line 29 def self.parse_to_float(value) Float(value) unless value.blank? end |
.parse_to_integer(value) ⇒ Object
20 21 22 23 |
# File 'lib/sequent/core/helpers/string_to_value_parsers.rb', line 20 def self.parse_to_integer(value) return value if value.is_a?(Integer) Integer(value, 10) unless value.blank? end |
Instance Method Details
#parse_from_string(value) ⇒ Object
74 75 76 77 78 79 80 81 |
# File 'lib/sequent/core/helpers/string_to_value_parsers.rb', line 74 def parse_from_string(value) parser = PARSERS.fetch(@klass) { |key| fail "Unsupported value type: #{key}" } if @array_with_type parser.call(value, @array_with_type.item_type) else parser.call(value) end end |