Sha256: 580d714a7050c79c1632a203a6635802a4f33af2bc06310284949e6de719693c

Contents?: true

Size: 1 KB

Versions: 12

Compression:

Stored size: 1 KB

Contents

module Garb
  class FilterParameters
    def self.define_operators(*methods)
      methods.each do |method|
        class_eval <<-CODE
          def #{method}(field, value)
            @filter_hash.merge!({SymbolOperator.new(field, :#{method}) => value})
          end
        CODE
      end
    end

    define_operators :eql, :not_eql, :gt, :gte, :lt, :lte, :matches,
      :does_not_match, :contains, :does_not_contain, :substring, :not_substring

    attr_accessor :parameters

    def initialize
      self.parameters = []
    end

    def filters(&block)
      @filter_hash = {}

      instance_eval &block

      self.parameters << @filter_hash
    end

    def to_params
      value = self.parameters.map do |param|
        param.map do |k,v|
          next unless k.is_a?(SymbolOperator)
          "#{URI.encode(k.to_google_analytics, /[=<>]/)}#{CGI::escape(v.to_s)}"
        end.join(';') # Hash AND (no duplicate keys)
      end.join(',') # Array OR

      value.empty? ? {} : {'filters' => value}
    end
  end
end

Version data entries

12 entries across 12 versions & 3 rubygems

Version Path
garb-0.8.3 lib/garb/filter_parameters.rb
garb-0.8.2 lib/garb/filter_parameters.rb
garb-0.8.1 lib/garb/filter_parameters.rb
garb-0.8.0 lib/garb/filter_parameters.rb
garb-0.7.6 lib/garb/filter_parameters.rb
garb-0.7.5 lib/garb/filter_parameters.rb
shingara-garb-0.7.6 lib/garb/filter_parameters.rb
garb-no-activesupport-0.7.4 lib/garb/filter_parameters.rb
garb-0.7.4 lib/garb/filter_parameters.rb
garb-no-activesupport-0.7.3 lib/garb/filter_parameters.rb
garb-0.7.3 lib/garb/filter_parameters.rb
garb-0.7.2 lib/garb/filter_parameters.rb