Class: Pact::MockService::RequestHandlers::Options

Inherits:
BaseRequestHandler show all
Defined in:
lib/pact/mock_service/request_handlers/options.rb

Constant Summary

Constants inherited from BaseRequestHandler

BaseRequestHandler::NOT_FOUND_RESPONSE

Constants included from Consumer::RackRequestHelper

Consumer::RackRequestHelper::REQUEST_KEYS

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from BaseRequestHandler

#call

Methods included from Consumer::RackRequestHelper

#params_hash, #request_as_hash_from

Constructor Details

#initialize(name, logger, cors_enabled) ⇒ Options

Returns a new instance of Options.



11
12
13
14
15
# File 'lib/pact/mock_service/request_handlers/options.rb', line 11

def initialize name, logger, cors_enabled
  @name = name
  @logger = logger
  @cors_enabled = cors_enabled
end

Instance Attribute Details

#cors_enabledObject (readonly)

Returns the value of attribute cors_enabled.



9
10
11
# File 'lib/pact/mock_service/request_handlers/options.rb', line 9

def cors_enabled
  @cors_enabled
end

#loggerObject (readonly)

Returns the value of attribute logger.



9
10
11
# File 'lib/pact/mock_service/request_handlers/options.rb', line 9

def logger
  @logger
end

#nameObject (readonly)

Returns the value of attribute name.



9
10
11
# File 'lib/pact/mock_service/request_handlers/options.rb', line 9

def name
  @name
end

Instance Method Details

#is_administration_request?(env) ⇒ Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/pact/mock_service/request_handlers/options.rb', line 35

def is_administration_request? env
  env["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"].match(/x-pact-mock-service/i)
end

#is_options_request?(env) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/pact/mock_service/request_handlers/options.rb', line 31

def is_options_request? env
  env['REQUEST_METHOD'] == 'OPTIONS'
end

#match?(env) ⇒ Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/pact/mock_service/request_handlers/options.rb', line 17

def match? env
   is_options_request?(env) && (cors_enabled || is_administration_request?(env))
end

#respond(env) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/pact/mock_service/request_handlers/options.rb', line 21

def respond env
  cors_headers = {
   'Access-Control-Allow-Origin' => env.fetch('HTTP_ORIGIN','*'),
   'Access-Control-Allow-Headers' => headers_from(env)["Access-Control-Request-Headers"],
   'Access-Control-Allow-Methods' => 'DELETE, POST, GET, HEAD, PUT, TRACE, CONNECT'
  }
  logger.info "Received OPTIONS request for mock service administration endpoint #{env['HTTP_ACCESS_CONTROL_REQUEST_METHOD']} #{env['PATH_INFO']}. Returning CORS headers: #{cors_headers.to_json}."
  [200, cors_headers, []]
end