class Brita::ValueParser

Attributes

supports_boolean[RW]
supports_json[RW]
supports_ranges[RW]
value[RW]

Public Class Methods

new(value:, options: {}) click to toggle source
# File lib/brita/value_parser.rb, line 4
def initialize(value:, options: {})
  @value = value
  @supports_boolean = options.fetch(:supports_boolean, false)
  @supports_ranges = options.fetch(:supports_ranges, false)
  @supports_json = options.fetch(:supports_json, false)
end

Public Instance Methods

array_from_json() click to toggle source
# File lib/brita/value_parser.rb, line 24
def array_from_json
  result = JSON.parse(value)
  if result.is_a?(Array)
    result
  else
    value
  end
rescue JSON::ParserError
  value
end
parse() click to toggle source
# File lib/brita/value_parser.rb, line 11
def parse
  @_result ||=
    if parse_as_range?
      range_value
    elsif parse_as_boolean?
      boolean_value
    elsif parse_as_json?
      array_from_json
    else
      value
    end
end

Private Instance Methods

boolean_value() click to toggle source
# File lib/brita/value_parser.rb, line 53
def boolean_value
  if Rails.version.starts_with?("5")
    ActiveRecord::Type::Boolean.new.cast(value)
  else
    ActiveRecord::Type::Boolean.new.type_cast_from_user(value)
  end
end
parse_as_boolean?() click to toggle source
# File lib/brita/value_parser.rb, line 49
def parse_as_boolean?
  supports_boolean
end
parse_as_json?() click to toggle source
# File lib/brita/value_parser.rb, line 45
def parse_as_json?
  supports_json && value.is_a?(String)
end
parse_as_range?() click to toggle source
# File lib/brita/value_parser.rb, line 37
def parse_as_range?
  supports_ranges && value.to_s.include?("...")
end
range_value() click to toggle source
# File lib/brita/value_parser.rb, line 41
def range_value
  Range.new(*value.split("..."))
end