class WebMock::RequestPattern
Attributes
body_pattern[R]
headers_pattern[R]
method_pattern[R]
uri_pattern[R]
Public Class Methods
new(method, uri, options = {})
click to toggle source
# File lib/webmock/request_pattern.rb, line 17 def initialize(method, uri, options = {}) @method_pattern = MethodPattern.new(method) @uri_pattern = create_uri_pattern(uri) @body_pattern = nil @headers_pattern = nil @with_block = nil assign_options(options) end
Public Instance Methods
matches?(request_signature)
click to toggle source
# File lib/webmock/request_pattern.rb, line 33 def matches?(request_signature) content_type = request_signature.headers['Content-Type'] if request_signature.headers content_type = content_type.split(';').first if content_type @method_pattern.matches?(request_signature.method) && @uri_pattern.matches?(request_signature.uri) && (@body_pattern.nil? || @body_pattern.matches?(request_signature.body, content_type || "")) && (@headers_pattern.nil? || @headers_pattern.matches?(request_signature.headers)) && (@with_block.nil? || @with_block.call(request_signature)) end
to_s()
click to toggle source
# File lib/webmock/request_pattern.rb, line 43 def to_s string = "#{@method_pattern.to_s.upcase}".dup string << " #{@uri_pattern.to_s}" string << " with body #{@body_pattern.to_s}" if @body_pattern string << " with headers #{@headers_pattern.to_s}" if @headers_pattern string << " with given block" if @with_block string end
with(options = {}, &block)
click to toggle source
# File lib/webmock/request_pattern.rb, line 26 def with(options = {}, &block) raise ArgumentError.new('#with method invoked with no arguments. Either options hash or block must be specified.') if options.empty? && !block_given? assign_options(options) @with_block = block self end
Private Instance Methods
assign_options(options)
click to toggle source
# File lib/webmock/request_pattern.rb, line 55 def assign_options(options) options = WebMock::Util::HashKeysStringifier.stringify_keys!(options, deep: true) HashValidator.new(options).validate_keys('body', 'headers', 'query', 'basic_auth') set_basic_auth_as_headers!(options) @body_pattern = BodyPattern.new(options['body']) if options.has_key?('body') @headers_pattern = HeadersPattern.new(options['headers']) if options.has_key?('headers') @uri_pattern.add_query_params(options['query']) if options.has_key?('query') end
create_uri_pattern(uri)
click to toggle source
# File lib/webmock/request_pattern.rb, line 78 def create_uri_pattern(uri) if uri.is_a?(Regexp) URIRegexpPattern.new(uri) elsif uri.is_a?(Addressable::Template) URIAddressablePattern.new(uri) else URIStringPattern.new(uri) end end
set_basic_auth_as_headers!(options)
click to toggle source
# File lib/webmock/request_pattern.rb, line 64 def set_basic_auth_as_headers!(options) if basic_auth = options.delete('basic_auth') validate_basic_auth!(basic_auth) options['headers'] ||= {} options['headers']['Authorization'] = WebMock::Util::Headers.basic_auth_header(basic_auth[0],basic_auth[1]) end end
validate_basic_auth!(basic_auth)
click to toggle source
# File lib/webmock/request_pattern.rb, line 72 def validate_basic_auth!(basic_auth) if !basic_auth.is_a?(Array) || basic_auth.map{|e| e.is_a?(String)}.uniq != [true] raise "The basic_auth option value should be an array which contains 2 strings: username and password" end end