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

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

Constant Summary collapse

HTTP_ACCESS_CONTROL_REQUEST_METHOD =
"HTTP_ACCESS_CONTROL_REQUEST_METHOD".freeze
HTTP_ACCESS_CONTROL_REQUEST_HEADERS =
"HTTP_ACCESS_CONTROL_REQUEST_HEADERS".freeze
ACCESS_CONTROL_ALLOW_ORIGIN =
"Access-Control-Allow-Origin".freeze
ACCESS_CONTROL_ALLOW_METHODS =
"Access-Control-Allow-Methods".freeze
ACCESS_CONTROL_ALLOW_HEADERS =
"Access-Control-Allow-Headers".freeze
HTTP_ORIGIN =
"HTTP_ORIGIN".freeze
ALL_METHODS =
"DELETE, POST, GET, HEAD, PUT, TRACE, CONNECT, PATCH".freeze
REQUEST_METHOD =
"REQUEST_METHOD".freeze
OPTIONS =
"OPTIONS".freeze
X_PACT_MOCK_SERVICE_REGEXP =
/x-pact-mock-service/i

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, #json_response, #text_response

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.



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

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.



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

def cors_enabled
  @cors_enabled
end

#loggerObject (readonly)

Returns the value of attribute logger.



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

def logger
  @logger
end

#nameObject (readonly)

Returns the value of attribute name.



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

def name
  @name
end

Instance Method Details

#is_administration_request?(env) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/pact/mock_service/request_handlers/options.rb', line 46

def is_administration_request? env
  (env[HTTP_ACCESS_CONTROL_REQUEST_HEADERS] || '').match(X_PACT_MOCK_SERVICE_REGEXP)
end

#is_options_request?(env) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/pact/mock_service/request_handlers/options.rb', line 42

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

#match?(env) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/pact/mock_service/request_handlers/options.rb', line 27

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

#respond(env) ⇒ Object



31
32
33
34
35
36
37
38
39
40
# File 'lib/pact/mock_service/request_handlers/options.rb', line 31

def respond env
  cors_headers = {
    ACCESS_CONTROL_ALLOW_ORIGIN => env.fetch(HTTP_ORIGIN,'*'),
    ACCESS_CONTROL_ALLOW_HEADERS => env.fetch(HTTP_ACCESS_CONTROL_REQUEST_HEADERS, '*'),
    ACCESS_CONTROL_ALLOW_METHODS => ALL_METHODS
  }

  logger.info "Received OPTIONS request for mock service administration endpoint #{env[HTTP_ACCESS_CONTROL_REQUEST_METHOD]} #{env['PATH_INFO']}. Returning CORS headers: #{cors_headers}."
  [200, cors_headers, []]
end