Class: Sift::ValueParser

Inherits:
Object
  • Object
show all
Defined in:
lib/sift/value_parser.rb

Instance Method Summary collapse

Constructor Details

#initialize(value:, type: nil, options: {}) ⇒ ValueParser

Returns a new instance of ValueParser.



3
4
5
6
7
8
9
10
# File 'lib/sift/value_parser.rb', line 3

def initialize(value:, type: nil, options: {})
  @value = value
  @supports_boolean = options.fetch(:supports_boolean, false)
  @supports_ranges = options.fetch(:supports_ranges, false)
  @supports_json = options.fetch(:supports_json, false)
  @supports_json_object = options.fetch(:supports_json_object, false)
  @value = normalized_value(value, type)
end

Instance Method Details

#array_from_jsonObject



42
43
44
45
46
47
48
49
# File 'lib/sift/value_parser.rb', line 42

def array_from_json
  result = parse_json(value)
  if result.is_a?(Array)
    result
  else
    value
  end
end

#parseObject



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/sift/value_parser.rb', line 12

def parse
  @_result ||=
    if parse_as_range?
      range_value
    elsif parse_as_boolean?
      boolean_value
    elsif parse_as_json?
      supports_json_object ? parse_json_and_values : array_from_json
    else
      value
    end
end

#parse_json(string) ⇒ Object



25
26
27
28
29
# File 'lib/sift/value_parser.rb', line 25

def parse_json(string)
  JSON.parse(string)
rescue JSON::ParserError
  string
end

#parse_json_and_valuesObject



31
32
33
34
35
36
37
38
39
40
# File 'lib/sift/value_parser.rb', line 31

def parse_json_and_values
  parsed_jsonb = parse_json(value)
  return parsed_jsonb if parsed_jsonb.is_a?(Array) || parsed_jsonb.is_a?(String)

  parsed_jsonb.each_with_object({}) do |key_value, hash|
    key   = key_value.first
    value = key_value.last
    hash[key] = value.is_a?(String) ? parse_json(value) : value
  end
end