Class: Spokes::Middleware::ServiceName

Inherits:
Object
  • Object
show all
Includes:
Concerns::BadRequest, Concerns::HeaderValidation
Defined in:
lib/spokes/middleware/service_name.rb

Overview

Validates inbound and sets outbound Service-Name HTTP headers.

Usage:

class Application < Rails::Application
  config.middleware.use Spokes::Middleware::ServiceName
end

Constant Summary collapse

PATTERN =
/^[\w\\-_\\.\d]+$/
HEADER_NAME =
'Service-Name'.freeze

Instance Method Summary collapse

Methods included from Concerns::HeaderValidation

#env_header_name, #validate_header_pattern, #validate_header_presence

Methods included from Concerns::BadRequest

#bad_request, #bad_request_body, #bad_request_headers

Constructor Details

#initialize(app, service_name:, exclude_paths: []) ⇒ ServiceName

Returns a new instance of ServiceName.



18
19
20
21
22
23
# File 'lib/spokes/middleware/service_name.rb', line 18

def initialize(app, service_name:, exclude_paths: [])
  raise "invalid name: #{service_name}" unless service_name =~ PATTERN
  @app          = app
  @service_name = service_name
  @exclude_paths = path_to_regex(exclude_paths)
end

Instance Method Details

#call(env) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/spokes/middleware/service_name.rb', line 25

def call(env)
  begin
    unless exclude?(env['PATH_INFO'].chomp('/'))
      validate_header_presence(env: env, header_name: HEADER_NAME)
      validate_header_pattern(env: env, header_name: HEADER_NAME, pattern: PATTERN)
    end
  rescue Middleware::Concerns::HeaderValidation::NotValid => e
    return bad_request(e.message)
  end

  status, headers, body = @app.call(env)
  headers[HEADER_NAME] = @service_name
  [status, headers, body]
end