sitehub 0.4.3 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +31 -0
  3. data/.gitignore +2 -1
  4. data/.reek +41 -0
  5. data/.simplecov +7 -0
  6. data/Gemfile.lock +61 -33
  7. data/README.md +4 -0
  8. data/Rakefile +1 -1
  9. data/circle.yml +1 -1
  10. data/lib/sitehub/builder.rb +19 -36
  11. data/lib/sitehub/collection/split_route_collection.rb +18 -13
  12. data/lib/sitehub/collection/split_route_collection/split.rb +6 -4
  13. data/lib/sitehub/constants.rb +2 -1
  14. data/lib/sitehub/constants/http_header_keys.rb +2 -0
  15. data/lib/sitehub/constants/rack_http_header_keys.rb +2 -0
  16. data/lib/sitehub/cookie.rb +4 -13
  17. data/lib/sitehub/cookie/attribute.rb +10 -9
  18. data/lib/sitehub/cookie/flag.rb +5 -8
  19. data/lib/sitehub/cookie_rewriting.rb +12 -5
  20. data/lib/sitehub/downstream_client.rb +37 -0
  21. data/lib/sitehub/equality.rb +28 -0
  22. data/lib/sitehub/forward_proxy.rb +19 -62
  23. data/lib/sitehub/forward_proxy_builder.rb +70 -49
  24. data/lib/sitehub/getter_setter_methods.rb +21 -0
  25. data/lib/sitehub/http_headers.rb +45 -48
  26. data/lib/sitehub/location_rewriter.rb +29 -0
  27. data/lib/sitehub/location_rewriters.rb +23 -0
  28. data/lib/sitehub/memoize.rb +25 -0
  29. data/lib/sitehub/middleware.rb +16 -6
  30. data/lib/sitehub/middleware/error_handling.rb +20 -0
  31. data/lib/sitehub/middleware/forward_proxies.rb +54 -0
  32. data/lib/sitehub/{logging.rb → middleware/logging.rb} +0 -0
  33. data/lib/sitehub/middleware/logging/access_logger.rb +36 -0
  34. data/lib/sitehub/middleware/logging/error_logger.rb +38 -0
  35. data/lib/sitehub/middleware/logging/log_entry.rb +16 -0
  36. data/lib/sitehub/middleware/logging/log_stash.rb +12 -0
  37. data/lib/sitehub/middleware/logging/log_wrapper.rb +24 -0
  38. data/lib/sitehub/middleware/logging/request_log.rb +74 -0
  39. data/lib/sitehub/middleware/reverse_proxy.rb +37 -0
  40. data/lib/sitehub/middleware/transaction_id.rb +18 -0
  41. data/lib/sitehub/nil_location_rewriter.rb +7 -0
  42. data/lib/sitehub/nil_proxy.rb +11 -0
  43. data/lib/sitehub/request.rb +101 -0
  44. data/lib/sitehub/request_mapping.rb +16 -18
  45. data/lib/sitehub/resolver.rb +1 -1
  46. data/lib/sitehub/response.rb +10 -0
  47. data/lib/sitehub/string_utils.rb +13 -0
  48. data/lib/sitehub/version.rb +1 -1
  49. data/sitehub.gemspec +4 -1
  50. data/spec/equality_spec.rb +32 -0
  51. data/spec/sitehub/builder_spec.rb +29 -22
  52. data/spec/sitehub/collection/route_collection_spec.rb +15 -14
  53. data/spec/sitehub/collection/split_route_collection/split_spec.rb +26 -0
  54. data/spec/sitehub/collection/split_route_collection_spec.rb +15 -3
  55. data/spec/sitehub/cookie/flag_spec.rb +1 -1
  56. data/spec/sitehub/cookie_rewriting_spec.rb +6 -10
  57. data/spec/sitehub/downstream_client_spec.rb +72 -0
  58. data/spec/sitehub/equality_spec.rb +32 -0
  59. data/spec/sitehub/forward_proxy_builder_spec.rb +92 -55
  60. data/spec/sitehub/forward_proxy_spec.rb +29 -97
  61. data/spec/sitehub/http_headers_spec.rb +32 -52
  62. data/spec/sitehub/integration_spec.rb +1 -1
  63. data/spec/sitehub/location_rewriter_spec.rb +46 -0
  64. data/spec/sitehub/{path_directives_spec.rb → location_rewriters_spec.rb} +8 -8
  65. data/spec/sitehub/memoize_spec.rb +56 -0
  66. data/spec/sitehub/middleware/error_handling_spec.rb +34 -0
  67. data/spec/sitehub/middleware/forward_proxies_spec.rb +105 -0
  68. data/spec/sitehub/middleware/logging/access_logger_spec.rb +51 -0
  69. data/spec/sitehub/middleware/logging/error_logger_spec.rb +84 -0
  70. data/spec/sitehub/middleware/logging/log_entry_spec.rb +33 -0
  71. data/spec/sitehub/middleware/logging/log_stash_spec.rb +21 -0
  72. data/spec/sitehub/middleware/logging/log_wrapper_spec.rb +31 -0
  73. data/spec/sitehub/middleware/logging/request_log_spec.rb +108 -0
  74. data/spec/sitehub/middleware/reverse_proxy_spec.rb +113 -0
  75. data/spec/sitehub/middleware/transaction_id_spec.rb +30 -0
  76. data/spec/sitehub/middleware_spec.rb +23 -13
  77. data/spec/sitehub/nil_location_rewriter_spec.rb +10 -0
  78. data/spec/sitehub/nil_proxy_spec.rb +14 -0
  79. data/spec/sitehub/request_mapping_spec.rb +21 -23
  80. data/spec/sitehub/request_spec.rb +228 -0
  81. data/spec/sitehub/resolver_spec.rb +2 -5
  82. data/spec/sitehub/response_spec.rb +30 -0
  83. data/spec/spec_helper.rb +12 -6
  84. data/spec/support/async/middleware.rb +1 -0
  85. data/spec/support/patch/rack/response.rb +7 -5
  86. data/spec/support/shared_contexts.rb +3 -0
  87. data/spec/support/shared_contexts/http_proxy_rules_context.rb +36 -0
  88. data/spec/support/shared_contexts/middleware_context.rb +6 -6
  89. data/spec/support/shared_contexts/module_spec_context.rb +7 -0
  90. data/spec/support/shared_contexts/rack_request_context.rb +18 -0
  91. data/spec/support/shared_contexts/rack_test_context.rb +0 -1
  92. data/spec/support/shared_examples.rb +3 -0
  93. data/spec/support/shared_examples/memoized_helpers.rb +7 -0
  94. data/spec/support/shared_examples/prohibited_http_header_filter.rb +16 -0
  95. data/spec/support/silent_warnings.rb +1 -1
  96. data/tasks/code_quality.rake +6 -0
  97. metadata +99 -29
  98. data/lib/sitehub/forward_proxies.rb +0 -49
  99. data/lib/sitehub/logging/access_logger.rb +0 -78
  100. data/lib/sitehub/logging/error_logger.rb +0 -36
  101. data/lib/sitehub/logging/log_entry.rb +0 -15
  102. data/lib/sitehub/logging/log_stash.rb +0 -10
  103. data/lib/sitehub/logging/log_wrapper.rb +0 -23
  104. data/lib/sitehub/path_directive.rb +0 -32
  105. data/lib/sitehub/path_directives.rb +0 -22
  106. data/lib/sitehub/reverse_proxy.rb +0 -57
  107. data/lib/sitehub/string_sanitiser.rb +0 -7
  108. data/lib/sitehub/transaction_id.rb +0 -16
  109. data/spec/sitehub/error_handling_spec.rb +0 -20
  110. data/spec/sitehub/forward_proxies_spec.rb +0 -103
  111. data/spec/sitehub/logging/access_logger_spec.rb +0 -128
  112. data/spec/sitehub/logging/error_logger_spec.rb +0 -78
  113. data/spec/sitehub/logging/log_entry_spec.rb +0 -31
  114. data/spec/sitehub/logging/log_stash_spec.rb +0 -19
  115. data/spec/sitehub/logging/log_wrapper_spec.rb +0 -29
  116. data/spec/sitehub/path_directive_spec.rb +0 -47
  117. data/spec/sitehub/reverse_proxy_spec.rb +0 -111
  118. data/spec/sitehub/transaction_id_spec.rb +0 -28
  119. data/spec/support/async/response_handler.rb +0 -16
  120. data/spec/support/shared_contexts/async_context.rb +0 -14
@@ -0,0 +1,24 @@
1
+ require 'sitehub/equality'
2
+ class SiteHub
3
+ module Middleware
4
+ module Logging
5
+ class LogWrapper
6
+ include Equality
7
+
8
+ attr_reader :logger
9
+
10
+ def initialize(logger)
11
+ @logger = logger
12
+ end
13
+
14
+ def write(msg)
15
+ if logger.respond_to?(:<<)
16
+ logger << msg
17
+ elsif logger.respond_to?(:write)
18
+ logger.write(msg)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,74 @@
1
+ class SiteHub
2
+ module Middleware
3
+ module Logging
4
+ class RequestLog
5
+ FORMAT = %(%s - %s [%s] transaction_id:%s: "%s %s%s => %s %s" %d %s %0.4f\n).freeze
6
+ ZERO_STRING = '0'.freeze
7
+
8
+ attr_reader :request, :response
9
+ def initialize(request, response)
10
+ @request = request
11
+ @response = response
12
+ end
13
+
14
+ def to_s
15
+ format(FORMAT, *data)
16
+ end
17
+
18
+ def extract_content_length
19
+ (value = response.headers[Constants::HttpHeaderKeys::CONTENT_LENGTH]) || (return HYPHEN)
20
+ value.to_s == ZERO_STRING ? HYPHEN : value
21
+ end
22
+
23
+ private
24
+
25
+ def data
26
+ [source_address, remote_user,
27
+ response_time,
28
+ request.transaction_id,
29
+ request_method,
30
+ request.path,
31
+ query_string,
32
+ mapped_url,
33
+ request.http_version,
34
+ status,
35
+ extract_content_length,
36
+ time_taken]
37
+ end
38
+
39
+ def time_taken
40
+ response.time - request.time
41
+ end
42
+
43
+ def response_time
44
+ response.time.strftime(TIME_STAMP_FORMAT)
45
+ end
46
+
47
+ def request_method
48
+ request.request_method.upcase
49
+ end
50
+
51
+ def status
52
+ response.status
53
+ end
54
+
55
+ def remote_user
56
+ request.remote_user || HYPHEN
57
+ end
58
+
59
+ def source_address
60
+ request.source_address || HYPHEN
61
+ end
62
+
63
+ def mapped_url
64
+ request.mapped? ? request.mapping.mapped_url.to_s : EMPTY_STRING
65
+ end
66
+
67
+ def query_string
68
+ query_string = request.query_string
69
+ query_string.empty? ? EMPTY_STRING : QUESTION_MARK + query_string
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,37 @@
1
+ require 'sitehub/cookie_rewriting'
2
+ require 'sitehub/location_rewriters'
3
+ require 'sitehub/request_mapping'
4
+ require 'sitehub/constants'
5
+
6
+ class SiteHub
7
+ module Middleware
8
+ class ReverseProxy
9
+ include CookieRewriting, Constants::HttpHeaderKeys
10
+
11
+ attr_reader :path_directives
12
+
13
+ def initialize(app, directives)
14
+ @app = app
15
+ @path_directives = LocationRewriters.new(directives)
16
+ end
17
+
18
+ def call(env)
19
+ status, headers, body = @app.call(env).to_a
20
+ mapping = env[REQUEST].mapping
21
+
22
+ headers[LOCATION_HEADER] = location(headers, mapping.source_url) if headers[LOCATION_HEADER]
23
+
24
+ rewrite_cookies(headers, substitute_domain: mapping.host) if headers[SET_COOKIE]
25
+
26
+ [status, HttpHeaders.new(headers), body]
27
+ end
28
+
29
+ private
30
+
31
+ def location(headers, source_url)
32
+ location_header = headers[LOCATION_HEADER]
33
+ path_directives.find(location_header).apply(location_header, source_url)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,18 @@
1
+ require 'uuid'
2
+ require 'sitehub/constants'
3
+ class SiteHub
4
+ module Middleware
5
+ class TransactionId
6
+ include Constants
7
+
8
+ def initialize(app)
9
+ @app = app
10
+ end
11
+
12
+ def call(env)
13
+ env[RackHttpHeaderKeys::TRANSACTION_ID] ||= UUID.generate(:compact)
14
+ @app.call env
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ class SiteHub
2
+ class NilLocationRewriter
3
+ def apply(url, _source_url)
4
+ url
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ require 'sitehub/resolver'
2
+ class SiteHub
3
+ class NilProxy
4
+ include Resolver
5
+ NOT_FOUND = Rack::Response.new(['page not found'], 404, {})
6
+
7
+ def call(_env)
8
+ NOT_FOUND
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,101 @@
1
+ require 'rack/request'
2
+ require 'sitehub/string_utils'
3
+ require 'sitehub/http_headers'
4
+ require 'sitehub/memoize'
5
+ require 'forwardable'
6
+ class SiteHub
7
+ class Request
8
+ include Constants, Constants::HttpHeaderKeys
9
+
10
+ extend Forwardable, Memoize
11
+
12
+ def_delegator :@rack_request, :params
13
+ def_delegator :@rack_request, :url
14
+ def_delegator :@rack_request, :path
15
+ def_delegator :@rack_request, :query_string
16
+
17
+ attr_reader :env, :rack_request, :mapped_path, :mapped_url, :time
18
+
19
+ def initialize(env:)
20
+ @rack_request = Rack::Request.new(env)
21
+ @env = HttpHeaders.from_rack_env(env)
22
+ @time = Time.now
23
+ end
24
+
25
+ def map(path, url)
26
+ @mapped_path = path
27
+ @mapped_url = url
28
+ end
29
+
30
+ def request_method
31
+ rack_request.request_method.downcase.to_sym
32
+ end
33
+
34
+ def body
35
+ rack_request.body.read
36
+ end
37
+
38
+ def headers
39
+ @env.tap do |headers|
40
+ headers[X_FORWARDED_FOR_HEADER] = x_forwarded_for
41
+
42
+ headers[X_FORWARDED_HOST_HEADER] = x_forwarded_host
43
+
44
+ headers[HOST_HEADER] = if mapped?
45
+ mapped_uri = URI(mapped_url)
46
+ "#{mapped_uri.host}:#{mapped_uri.port}"
47
+ end
48
+ end
49
+ end
50
+
51
+ def mapping
52
+ RequestMapping.new(source_url: rack_request.url, mapped_url: mapped_url.to_s, mapped_path: mapped_path)
53
+ end
54
+
55
+ def mapped?
56
+ mapped_path.is_a?(String)
57
+ end
58
+
59
+ def remote_user
60
+ rack_request.env[RackHttpHeaderKeys::REMOTE_USER]
61
+ end
62
+
63
+ def transaction_id
64
+ env[HttpHeaderKeys::TRANSACTION_ID]
65
+ end
66
+
67
+ def http_version
68
+ rack_env[RackHttpHeaderKeys::HTTP_VERSION]
69
+ end
70
+
71
+ def source_address
72
+ rack_env[RackHttpHeaderKeys::X_FORWARDED_FOR] || rack_env[RackHttpHeaderKeys::REMOTE_ADDR]
73
+ end
74
+
75
+ def uri
76
+ mapping.computed_uri
77
+ end
78
+
79
+ memoize :url, :path, :uri, :mapped?, :mapping, :headers, :body, :request_method
80
+
81
+ private
82
+
83
+ def rack_env
84
+ rack_request.env
85
+ end
86
+
87
+ def remote_address
88
+ rack_request.env[RackHttpHeaderKeys::REMOTE_ADDRESS_ENV_KEY]
89
+ end
90
+
91
+ def x_forwarded_host
92
+ StringUtils.split(env[HttpHeaderKeys::X_FORWARDED_HOST_HEADER])
93
+ .push(env[HttpHeaderKeys::HOST_HEADER])
94
+ .join(COMMA)
95
+ end
96
+
97
+ def x_forwarded_for
98
+ StringUtils.split(env[HttpHeaderKeys::X_FORWARDED_FOR_HEADER]).push(remote_address).join(COMMA)
99
+ end
100
+ end
101
+ end
@@ -1,40 +1,38 @@
1
1
  require 'sitehub/constants'
2
+ require 'sitehub/memoize'
2
3
  class SiteHub
3
4
  class RequestMapping
5
+ extend Memoize
6
+ include Equality
7
+
4
8
  attr_reader :source_url, :mapped_url, :mapped_path
5
9
 
6
10
  BASE_URL_MATCHER = %r{^\w+://[\w+\.-]+(:\d+)?}
7
11
  CAPTURE_GROUP_REFERENCE = '$%s'.freeze
8
12
  USER_SUPPLIED_CAPTURE = 1..-1
9
13
 
10
- def initialize(source_url:, downstream_url: EMPTY_STRING, mapped_url: EMPTY_STRING, mapped_path:)
14
+ def initialize(source_url:, mapped_url: EMPTY_STRING, mapped_path:)
11
15
  @source_url = source_url
12
- @mapped_url = mapped_url.dup
16
+ @mapped_url = mapped_url.to_s.dup
17
+ mapped_path = mapped_path.to_s.dup
13
18
  @mapped_path = mapped_path.is_a?(Regexp) ? mapped_path : Regexp.new(mapped_path)
14
- @downstream_url = downstream_url
15
- end
16
-
17
- def cookie_path
18
- mapped_path.source[/^(.*)?\(/, 1].gsub(%r{/$}, '') if mapped_path.is_a?(Regexp)
19
19
  end
20
20
 
21
21
  def computed_uri
22
- @computed_uri ||= begin
23
- url_components = url_scanner_regex.match(source_url).captures[USER_SUPPLIED_CAPTURE]
24
- mapped_url.tap do |url|
25
- url_components.each_with_index do |match, index|
26
- url.gsub!(CAPTURE_GROUP_REFERENCE % (index + 1), match)
27
- end
22
+ url_components = url_scanner_regex.match(source_url).captures[USER_SUPPLIED_CAPTURE]
23
+ mapped_url.tap do |url|
24
+ url_components.each_with_index do |match, index|
25
+ url.gsub!(CAPTURE_GROUP_REFERENCE % (index + 1), match)
28
26
  end
29
27
  end
28
+ URI(mapped_url)
30
29
  end
30
+ memoize :computed_uri
31
31
 
32
- def ==(other)
33
- other.is_a?(RequestMapping) &&
34
- source_url == other.source_url &&
35
- mapped_url == other.mapped_url &&
36
- mapped_path == other.mapped_path
32
+ def host
33
+ URI(source_url).host
37
34
  end
35
+ memoize :host
38
36
 
39
37
  private
40
38
 
@@ -1,4 +1,4 @@
1
- # TODO: - this helper module is for the benefit of middleware that may not otherwse respond to resolve.
1
+ # this helper module is for the benefit of middleware that may not otherwse respond to resolve.
2
2
  # THis is to ensure that middleware wrapping the core forward proxy apps had the resolve method also.
3
3
  #
4
4
  class SiteHub
@@ -0,0 +1,10 @@
1
+ class SiteHub
2
+ class Response < Rack::Response
3
+ attr_reader :status, :headers, :body, :time
4
+ def initialize(body, status, headers)
5
+ super
6
+ @time = Time.now
7
+ end
8
+ alias headers header
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ class SiteHub
2
+ module StringUtils
3
+ class << self
4
+ def split(header_value)
5
+ header_value.to_s.split(COMMA)
6
+ end
7
+
8
+ def sanitise(string)
9
+ string.to_s.chomp.strip
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  class SiteHub
2
- VERSION = '0.4.3'.freeze
2
+ VERSION = '0.4.6'.freeze
3
3
  end
data/sitehub.gemspec CHANGED
@@ -29,13 +29,16 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_development_dependency 'bundler', '~> 1.5'
31
31
  spec.add_development_dependency 'rake'
32
- spec.add_development_dependency 'rspec', '~> 3.2.0'
32
+ spec.add_development_dependency 'rspec', '~> 3.4.0'
33
33
  spec.add_development_dependency 'webmock'
34
34
  spec.add_development_dependency 'rack-test'
35
35
  spec.add_development_dependency 'geminabox'
36
36
  spec.add_development_dependency 'simplecov'
37
37
  spec.add_development_dependency 'rubocop'
38
38
  spec.add_development_dependency 'memory_profiler'
39
+ spec.add_development_dependency 'codeclimate-test-reporter'
40
+ spec.add_development_dependency 'reek'
41
+ spec.add_development_dependency 'timecop'
39
42
 
40
43
  spec.add_development_dependency 'ruby-prof'
41
44
  end
@@ -0,0 +1,32 @@
1
+ class SiteHub
2
+ describe Equality do
3
+ subject(:test_class) do
4
+ Class.new do
5
+ include Equality
6
+
7
+ def initialize(first_attribute, second_attribute)
8
+ @first_attribute = first_attribute
9
+ @second_attribute = second_attribute
10
+ end
11
+ end
12
+ end
13
+ subject do
14
+ test_class.new(:foo, :bar)
15
+ end
16
+
17
+ describe '#==' do
18
+ context 'match' do
19
+ it 'returns true' do
20
+ match = test_class.new(:foo, :bar)
21
+ expect(subject).to eq(match)
22
+ end
23
+ end
24
+ context 'mismatch' do
25
+ it 'returns false' do
26
+ match = test_class.new(:wrong, :bar)
27
+ expect(subject).to_not eq(match)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -24,7 +24,8 @@ class SiteHub
24
24
  end
25
25
 
26
26
  it 'the defined route is used 100% of the time' do
27
- expected_proxy = ForwardProxyBuilder.new(mapped_path: '/path').tap do |route|
27
+ expected_proxy = ForwardProxyBuilder.new(mapped_path: '/app1',
28
+ sitehub_cookie_name: RECORDED_ROUTES_COOKIE).tap do |route|
28
29
  route.default(url: :endpoint)
29
30
  end
30
31
  expect(subject.forward_proxies.forward_proxies['/app1']).to eq(expected_proxy)
@@ -41,7 +42,8 @@ class SiteHub
41
42
  end
42
43
 
43
44
  it 'passes the block to the route constructor' do
44
- expected_route = ForwardProxyBuilder.new(mapped_path: '/path').tap do |route|
45
+ expected_route = ForwardProxyBuilder.new(mapped_path: '/app',
46
+ sitehub_cookie_name: RECORDED_ROUTES_COOKIE).tap do |route|
45
47
  route.split url: :endpoint, percentage: 100, label: :label
46
48
  end
47
49
 
@@ -54,16 +56,16 @@ class SiteHub
54
56
  it ' sets the logger' do
55
57
  subject.access_logger :access_logger
56
58
  sitehub = subject.build
57
- logger_middleware = find_middleware(sitehub, Logging::AccessLogger)
58
- expect(logger_middleware.logger).to eq(Logging::LogWrapper.new(:access_logger))
59
+ logger_middleware = find_middleware(sitehub, Middleware::Logging::AccessLogger)
60
+ expect(logger_middleware.logger).to eq(Middleware::Logging::LogWrapper.new(:access_logger))
59
61
  end
60
62
 
61
63
  it 'defaults to STDOUT' do
62
64
  allow(::Logger).to receive(:new).and_return(:a_logger)
63
65
  expect(::Logger).to receive(:new).with(STDOUT).and_return(:stdout_logger)
64
66
  sitehub = subject.build
65
- logger_middleware = find_middleware(sitehub, Logging::AccessLogger)
66
- expect(logger_middleware.logger).to eq(Logging::LogWrapper.new(:stdout_logger))
67
+ logger_middleware = find_middleware(sitehub, Middleware::Logging::AccessLogger)
68
+ expect(logger_middleware.logger).to eq(Middleware::Logging::LogWrapper.new(:stdout_logger))
67
69
  end
68
70
  end
69
71
 
@@ -90,16 +92,16 @@ class SiteHub
90
92
  it 'sets the logger' do
91
93
  subject.error_logger :error_logger
92
94
  sitehub = subject.build
93
- logger_middleware = find_middleware(sitehub, SiteHub::Logging::ErrorLogger)
94
- expect(logger_middleware.logger).to eq(Logging::LogWrapper.new(:error_logger))
95
+ logger_middleware = find_middleware(sitehub, Middleware::Logging::ErrorLogger)
96
+ expect(logger_middleware.logger).to eq(Middleware::Logging::LogWrapper.new(:error_logger))
95
97
  end
96
98
 
97
99
  it 'defaults to STDERR' do
98
100
  allow(::Logger).to receive(:new).and_return(:a_logger)
99
101
  expect(::Logger).to receive(:new).with(STDERR).and_return(:stderr_logger)
100
102
  sitehub = subject.build
101
- logger_middleware = find_middleware(sitehub, SiteHub::Logging::ErrorLogger)
102
- expect(logger_middleware.logger).to eq(Logging::LogWrapper.new(:stderr_logger))
103
+ logger_middleware = find_middleware(sitehub, Middleware::Logging::ErrorLogger)
104
+ expect(logger_middleware.logger).to eq(Middleware::Logging::LogWrapper.new(:stderr_logger))
103
105
  end
104
106
  end
105
107
 
@@ -111,34 +113,38 @@ class SiteHub
111
113
 
112
114
  context 'default middleware' do
113
115
  it 'adds TransactionId middleware to the sitehub' do
114
- expect(subject.build).to be_using(TransactionId)
116
+ expect(subject.build).to be_using(Middleware::TransactionId)
115
117
  end
116
118
 
117
119
  it 'adds a forward proxies' do
118
- expect(subject.build).to be_using(ForwardProxies)
120
+ expect(subject.build).to be_using(Middleware::ForwardProxies)
119
121
  end
120
122
 
121
123
  it 'adds a AccessLogger' do
122
- expect(subject.build).to be_using(Logging::AccessLogger)
124
+ expect(subject.build).to be_using(Middleware::Logging::AccessLogger)
123
125
  end
124
126
 
125
127
  it 'adds a ErrorLogger' do
126
- expect(subject.build).to be_using(Logging::ErrorLogger)
128
+ expect(subject.build).to be_using(Middleware::Logging::ErrorLogger)
127
129
  end
128
130
  it 'adds a Rack FiberPool' do
129
131
  expect(subject.build).to be_using(Rack::FiberPool)
130
132
  end
131
133
 
134
+ it 'adds a ErrorHandler' do
135
+ expect(subject.build).to be_using(Middleware::ErrorHandling)
136
+ end
137
+
132
138
  context 'reverse proxy' do
133
139
  it 'adds a reverse proxy' do
134
- expect(subject.build).to be_using(ReverseProxy)
140
+ expect(subject.build).to be_using(Middleware::ReverseProxy)
135
141
  end
136
142
 
137
143
  it 'uses configured reverse proxy directives' do
138
144
  subject.reverse_proxy(downstream_url: :upstream_path.to_s)
139
- reverse_proxy = find_middleware(subject.build, ReverseProxy)
145
+ reverse_proxy = find_middleware(subject.build, Middleware::ReverseProxy)
140
146
 
141
- expect(reverse_proxy.path_directives).to eq(PathDirectives.new(downstream_url: :upstream_path.to_s))
147
+ expect(reverse_proxy.path_directives).to eq(LocationRewriters.new(downstream_url: :upstream_path.to_s))
142
148
  end
143
149
  end
144
150
 
@@ -146,11 +152,12 @@ class SiteHub
146
152
  middleware_stack = collect_middleware(subject.build).collect(&:class)
147
153
 
148
154
  expected_middleware = [Rack::FiberPool,
149
- Logging::ErrorLogger,
150
- Logging::AccessLogger,
151
- TransactionId,
152
- ReverseProxy,
153
- ForwardProxies]
155
+ Middleware::Logging::ErrorLogger,
156
+ Middleware::Logging::AccessLogger,
157
+ Middleware::ErrorHandling,
158
+ Middleware::TransactionId,
159
+ Middleware::ReverseProxy,
160
+ Middleware::ForwardProxies]
154
161
 
155
162
  expect(middleware_stack).to eq(expected_middleware)
156
163
  end