Module: TShield::Matching::Filters

Included in:
RequestMatching
Defined in:
lib/tshield/matching/filters.rb

Overview

Filters used in request matching

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build_query_hash(raw_query) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/tshield/matching/filters.rb', line 51

def self.build_query_hash(raw_query)
  params = {}
  raw_query.split('&').each do |query|
    key, value = query.split('=')
    params[key] = value
  end

  params
end

.include_headers(stub_headers, request_headers) ⇒ Object



37
38
39
40
41
42
# File 'lib/tshield/matching/filters.rb', line 37

def self.include_headers(stub_headers, request_headers)
  request_headers ||= {}
  stub_headers ||= {}
  result = stub_headers.reject { |key, value| request_headers[key.to_rack_name] == value }
  result.empty? || stub_headers.empty?
end

.include_query(stub_query, raw_query) ⇒ Object



44
45
46
47
48
49
# File 'lib/tshield/matching/filters.rb', line 44

def self.include_query(stub_query, raw_query)
  request_query = Filters.build_query_hash(raw_query)
  stub_query ||= {}
  result = stub_query.reject { |key, value| request_query[key] == value.to_s }
  result.empty? || stub_query.empty?
end

Instance Method Details

#filter_by_headers(stubs) ⇒ Object



18
19
20
# File 'lib/tshield/matching/filters.rb', line 18

def filter_by_headers(stubs)
  stubs.select { |stub| Filters.include_headers(stub['headers'], @options[:headers]) }
end

#filter_by_method(stubs) ⇒ Object



14
15
16
# File 'lib/tshield/matching/filters.rb', line 14

def filter_by_method(stubs)
  stubs.select { |stub| stub['method'] == @options[:method] }
end

#filter_by_path(stubs) ⇒ Object



26
27
28
29
30
# File 'lib/tshield/matching/filters.rb', line 26

def filter_by_path(stubs)
  stubs.each do |key, value|
    return value if @path =~ /^#{key}$/
  end
end

#filter_by_query(stubs) ⇒ Object



22
23
24
# File 'lib/tshield/matching/filters.rb', line 22

def filter_by_query(stubs)
  stubs.select { |stub| Filters.include_query(stub['query'], @options[:raw_query] || '') }
end

#filter_stubs(stubs) ⇒ Object



32
33
34
35
# File 'lib/tshield/matching/filters.rb', line 32

def filter_stubs(stubs)
  result = filter_by_query(filter_by_headers(filter_by_method(filter_by_path(stubs))))
  result[0]['response'] unless result.empty?
end

#find_stub(stubs) ⇒ Object



7
8
9
10
11
12
# File 'lib/tshield/matching/filters.rb', line 7

def find_stub(stubs)
  result = filter_stubs(stubs[@options[:session]] || {})
  return result if result

  filter_stubs(stubs[DEFAULT_SESSION] || {}) unless @options[:session] == DEFAULT_SESSION
end