Sha256: 6f6a16b2bd50fb0efa095750790a705176c0e1351810b11c71a1559d86ebf5fa

Contents?: true

Size: 1.3 KB

Versions: 25

Compression:

Stored size: 1.3 KB

Contents

require 'cgi'
require 'pact/shared/active_support_support'
require 'pact/symbolize_keys'

module Pact
  class QueryHash

    include ActiveSupportSupport
    include SymbolizeKeys

    def initialize(query)
      @hash = query.nil? ? query : convert_to_hash_of_arrays(query)
    end

    def as_json(opts = {})
      @hash
    end

    def to_json(opts = {})
      as_json(opts).to_json(opts)
    end

    def eql?(other)
      self == other
    end

    def ==(other)
      QueryHash === other && other.query == query
    end

    # other will always be a QueryString, not a QueryHash, as it will have ben created
    # from the actual query string.
    def difference(other)
      require 'pact/matchers' # avoid recursive loop between this file, pact/reification and pact/matchers
      Pact::Matchers.diff(query, symbolize_keys(CGI::parse(other.query)), allow_unexpected_keys: false)
    end

    def query
      @hash
    end

    def to_s
      @hash.inspect
    end

    def empty?
      @hash && @hash.empty?
    end

    private

    def convert_to_hash_of_arrays(query)
      query.each_with_object({}) {|(k, v), hash| insert(hash, k, v) }
    end

    def insert(hash, k, v)
      if Hash === v
        v.each {|k2, v2| insert(hash, :"#{k}[#{k2}]", v2) }
      else
        hash[k.to_sym] = [*v]
      end
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
pact-support-1.6.2 lib/pact/consumer_contract/query_hash.rb
pact-support-1.6.1 lib/pact/consumer_contract/query_hash.rb
pact-support-1.6.0 lib/pact/consumer_contract/query_hash.rb
pact-support-1.5.2 lib/pact/consumer_contract/query_hash.rb
pact-support-1.5.1 lib/pact/consumer_contract/query_hash.rb
pact-support-1.5.0 lib/pact/consumer_contract/query_hash.rb
pact-support-1.4.0 lib/pact/consumer_contract/query_hash.rb
pact-support-1.3.1 lib/pact/consumer_contract/query_hash.rb
pact-support-1.3.0 lib/pact/consumer_contract/query_hash.rb
pact-support-1.2.99.alpha.1 lib/pact/consumer_contract/query_hash.rb
pact-support-1.3.0.alpha.2 lib/pact/consumer_contract/query_hash.rb
pact-support-1.3.0.alpha.1 lib/pact/consumer_contract/query_hash.rb
pact-support-1.2.5 lib/pact/consumer_contract/query_hash.rb
pact-support-1.2.4 lib/pact/consumer_contract/query_hash.rb
pact-support-1.2.3 lib/pact/consumer_contract/query_hash.rb
pact-support-1.2.2 lib/pact/consumer_contract/query_hash.rb
pact-support-1.2.1 lib/pact/consumer_contract/query_hash.rb
pact-support-1.2.0 lib/pact/consumer_contract/query_hash.rb
pact-support-1.1.8 lib/pact/consumer_contract/query_hash.rb
pact-support-1.1.7 lib/pact/consumer_contract/query_hash.rb