Sha256: 49eb2d6d5589d9f34e10719fe411111289a7037f0012f155d39fb0d5cc8a98a2

Contents?: true

Size: 1.4 KB

Versions: 3

Compression:

Stored size: 1.4 KB

Contents

module Influxer
  module WhereClause #:nodoc:
    # accepts hash or strings conditions
    def where(*args, **hargs)
      build_where(args, hargs, false)
      self
    end

    def not(*args, **hargs)
      build_where(args, hargs, true)
      self
    end

    protected

    def build_where(args, hargs, negate)
      case
      when (args.present? && args[0].is_a?(String))
        where_values.concat args.map { |str| "(#{str})" }
      when hargs.present?
        build_hash_where(hargs, negate)
      else
        false
      end
    end

    def build_hash_where(hargs, negate = false)
      hargs.each do |key, val|
        where_values << "(#{build_eql(key, val, negate)})"
      end
    end

    def build_eql(key, val, negate)
      case val
      when Regexp
        "#{key}#{negate ? '!~' : '=~'}#{val.inspect}"
      when Array
        build_in(key, val, negate)
      when Range
        build_range(key, val, negate)
      else
        "#{key}#{negate ? '<>' : '='}#{quoted(val, key)}"
      end
    end

    def build_in(key, arr, negate)
      buf = []
      arr.each do |val|
        buf << build_eql(key, val, negate)
      end
      "#{buf.join(negate ? ' and ' : ' or ')}"
    end

    def build_range(key, val, negate)
      if negate
        "#{key}<#{quoted(val.begin)} and #{key}>#{quoted(val.end)}"
      else
        "#{key}>#{quoted(val.begin)} and #{key}<#{quoted(val.end)}"
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
influxer-0.5.0 lib/influxer/metrics/relation/where_clause.rb
influxer-0.4.0 lib/influxer/metrics/relation/where_clause.rb
influxer-0.3.1 lib/influxer/metrics/relation/where_clause.rb