Sha256: 047485a1252bea9ba5d76f28fffff3a1db9823c1c2d2abe08700872f10d08e55

Contents?: true

Size: 1.74 KB

Versions: 7

Compression:

Stored size: 1.74 KB

Contents

# frozen_string_literal: true
module  Drillbit
class   Parameters
class   Filter
  NUMERICAL       = /[\d_\.]+?/
  ISO8601         = /\d{4}-\d{2}-\d{2}T\d{2}\:\d{2}\:\d{2}(?:[+-]\d{2}\:\d{2}|Z)/
  NUMERICAL_RANGE = /\A(#{NUMERICAL})\.\.\.?(#{NUMERICAL}|Infinity)\z/
  DATE_RANGE      = /\A(#{ISO8601})\.\.\.?(#{ISO8601})\z/

  attr_accessor :raw_parameters

  def initialize(raw_parameters)
    self.raw_parameters = raw_parameters || {}
  end

  def present?
    compacted_parameters.any?
  end

  def each_with_object(memoized)
    compacted_parameters.each do |name, value|
      memoized = yield name, format_value(value), memoized
    end

    memoized
  end

  private

  def compacted_parameters
    @compacted_parameters ||= raw_parameters.reject do |name, value|
                                name == 'query' ||
                                value == '' ||
                                value.nil?
    end
  end

  # rubocop:disable Lint/AssignmentInCondition
  def format_value(value)
    return value unless value.is_a?(String)

    if range_points = value.match(DATE_RANGE)
      exclusive      = value.include? '...'
      starting_point = Time.iso8601(range_points[1])
      ending_point   = Time.iso8601(range_points[2])

      Range.new(starting_point, ending_point, exclusive)
    elsif range_points = value.match(NUMERICAL_RANGE)
      exclusive      = value.include? '...'
      starting_point = range_points[1].to_f
      ending_point   = if range_points[2] == 'Infinity'
                         9_999_999
                       else
                         range_points[2].to_f
                       end

      Range.new(starting_point, ending_point, exclusive)
    else
      value
    end
  end
  # rubocop:enable Lint/AssignmentInCondition
end
end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
drillbit-2.11.0 lib/drillbit/parameters/filter.rb
drillbit-2.10.0 lib/drillbit/parameters/filter.rb
drillbit-2.9.1 lib/drillbit/parameters/filter.rb
drillbit-2.9.0 lib/drillbit/parameters/filter.rb
drillbit-2.8.0 lib/drillbit/parameters/filter.rb
drillbit-2.7.0 lib/drillbit/parameters/filter.rb
drillbit-2.6.0 lib/drillbit/parameters/filter.rb