sitehub 0.5.0.alpha10 → 0.5.0.alpha11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b127101beee3301abb96d447bcc5a89079edbc61
4
- data.tar.gz: bdb07a1212a2ddc317e90bb0f357aa710707b3d9
3
+ metadata.gz: 673473acf603cd4bb059ba39942acd23c298805a
4
+ data.tar.gz: d0ac444795bfd73878698d243f16718045b86e15
5
5
  SHA512:
6
- metadata.gz: 56bdcc1643bc86eb0a1f16aa06d6e0da5b21cfe7fc8edaab4801b96ae16fc859ffb986f4286c3e05e01c57ae4c608b94a1f94d8627d53de897516e5d7ded34ab
7
- data.tar.gz: a9e5fbe7fc778646af3de85e2061df64e2704292f7b7dd15f7ad43fe3bde2adf59cd4a8fc75d2bd10132e7ad4cc872fb3c48c21b9a4bae72280653589bfb68f1
6
+ metadata.gz: 79508cdd923756cea548c2c62fd7f94ff27046d30961dfe81c30e0f401037939ab83539a8ac44e6720a5c6e31b767675426bf7292781b9d793867ee651bb4776
7
+ data.tar.gz: 768aef4bbde59e3378a98197f01e37ad901314375359dbeb324c60b53de91bf263414037f72027c909910f827856b89b116be3050efe0b3474cba4a69ef92625
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sitehub (0.5.0.alpha10)
4
+ sitehub (0.5.0.alpha11)
5
5
  activesupport
6
6
  em-http-request
7
7
  em-synchrony
data/circle.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  machine:
2
2
  ruby:
3
- version: '2.2'
3
+ version: '2.3.0'
4
4
  test:
5
5
  override:
6
6
  - bundle exec rake
@@ -3,7 +3,7 @@ require 'sitehub/equality'
3
3
  require 'sitehub/nil_route'
4
4
  require 'sitehub/identifier'
5
5
  require 'sitehub/getter_setter_methods'
6
- require 'sitehub/candidate_routes/class_methods'
6
+ require 'sitehub/candidate_routes/from_json'
7
7
 
8
8
  require_relative 'collection/split_route_collection'
9
9
  require_relative 'rules'
@@ -29,14 +29,11 @@ class SiteHub
29
29
  IGNORING_URL_MSG = 'Block supplied, ignoring URL parameter'.freeze
30
30
  URL_REQUIRED_MSG = 'URL must be supplied for splits and routes'.freeze
31
31
 
32
- extend CollectionMethods, ClassMethods, GetterSetterMethods
33
- include Rules, Equality, Middleware
32
+ extend CollectionMethods, FromJson, GetterSetterMethods
33
+ include Rules, Equality, Middleware, CollectionMethods
34
34
 
35
35
  getter_setters :sitehub_cookie_path, :sitehub_cookie_name
36
- attr_reader :id, :calling_scope
37
- attr_accessor :mapped_path
38
-
39
- transient :calling_scope
36
+ attr_reader :id, :mapped_path
40
37
 
41
38
  def add(label:, rule: nil, percentage: nil, url: nil, &block)
42
39
  child_label = id.child_label(label)
@@ -88,30 +85,20 @@ class SiteHub
88
85
  end
89
86
  end
90
87
 
91
- def initialize(id: nil, sitehub_cookie_name:, sitehub_cookie_path: nil, mapped_path:, rule: nil, calling_scope: nil, &block)
88
+ # TODO: combine cookie name and path in to an : nobject
89
+ def initialize(id: nil, sitehub_cookie_name:, sitehub_cookie_path: nil, mapped_path:, rule: nil, &block)
92
90
  @id = Identifier.new(id)
93
- @calling_scope = calling_scope
94
91
 
95
- mapped_path = string_to_regexp(mapped_path) if string_containing_regexp?(mapped_path)
96
- @mapped_path = mapped_path
92
+ @mapped_path = sanitise_mapped_path(mapped_path)
97
93
  @sitehub_cookie_name = sitehub_cookie_name
98
94
  @sitehub_cookie_path = sitehub_cookie_path
99
- @splits = Collection::SplitRouteCollection.new
100
- @routes = Collection::RouteCollection.new
101
- rule(rule)
102
95
 
103
- return unless block_given?
96
+ rule(rule)
104
97
 
105
- instance_eval(&block)
106
- raise InvalidDefinitionError unless valid?
98
+ init(&block) if block_given?
107
99
  end
108
100
 
109
- def method_missing(method, *args, &block)
110
- super unless calling_scope
111
- calling_scope.send(method, *args, &block)
112
- rescue NoMethodError
113
- super
114
- end
101
+
115
102
 
116
103
  def resolve(id: nil, env:)
117
104
  id = Identifier.new(id)
@@ -123,19 +110,17 @@ class SiteHub
123
110
  end
124
111
 
125
112
  def route(url: nil, label:, rule: nil, &block)
113
+ @routes ||= Collection::RouteCollection.new
126
114
  candidates(@routes)
127
115
  add(label: label, rule: rule, url: url, &block)
128
116
  end
129
117
 
130
118
  def split(percentage:, url: nil, label:, &block)
119
+ @splits ||= Collection::SplitRouteCollection.new
131
120
  candidates(@splits)
132
121
  add(label: label, percentage: percentage, url: url, &block)
133
122
  end
134
123
 
135
- def splits?
136
- candidates.is_a?(Collection::SplitRouteCollection)
137
- end
138
-
139
124
  def valid?
140
125
  return true if default_route?
141
126
  candidates.valid?
@@ -181,6 +166,11 @@ class SiteHub
181
166
  splits? ? PERCENTAGE_NOT_SPECIFIED_MSG : RULE_NOT_SPECIFIED_MSG
182
167
  end
183
168
 
169
+ def init(&block)
170
+ instance_eval(&block)
171
+ raise InvalidDefinitionError unless valid?
172
+ end
173
+
184
174
  def new(id:, rule: nil, &block)
185
175
  inherited_middleware = middlewares
186
176
 
@@ -188,11 +178,18 @@ class SiteHub
188
178
  sitehub_cookie_name: sitehub_cookie_name,
189
179
  sitehub_cookie_path: sitehub_cookie_path,
190
180
  mapped_path: mapped_path,
191
- rule: rule,
192
- calling_scope: calling_scope) do
181
+ rule: rule) do
193
182
  middlewares.concat(inherited_middleware)
194
183
  instance_eval(&block)
195
184
  end
196
185
  end
186
+
187
+ def sanitise_mapped_path(mapped_path)
188
+ string_containing_regexp?(mapped_path) ? string_to_regexp(mapped_path) : mapped_path
189
+ end
190
+
191
+ def splits?
192
+ candidates.is_a?(Collection::SplitRouteCollection)
193
+ end
197
194
  end
198
195
  end
@@ -0,0 +1,55 @@
1
+ class SiteHub
2
+ class CandidateRoutes
3
+
4
+ module FromJson
5
+ extend CollectionMethods
6
+
7
+ def self.extended clazz
8
+ clazz.class_eval do
9
+ include InstanceMethods
10
+ end
11
+ end
12
+
13
+ # TODO: support nested routes, i.e. support rule name being passed in
14
+ def from_hash(hash, sitehub_cookie_name, sitehub_cookie_path)
15
+ cookie_path = hash[:sitehub_cookie_path] || sitehub_cookie_path
16
+ cookie_name = hash[:sitehub_cookie_name] || sitehub_cookie_name
17
+ new(sitehub_cookie_name: cookie_name,
18
+ sitehub_cookie_path: cookie_path,
19
+ mapped_path: hash[:path]) do
20
+ handle_routes(hash, self)
21
+ default url: hash[:default] if hash[:default]
22
+ end
23
+ end
24
+
25
+ module InstanceMethods
26
+ private
27
+ def handle_routes(hash, routes)
28
+ extract_splits(hash, routes)
29
+ extract_routes(hash, routes)
30
+ end
31
+
32
+ def extract_routes(hash, routes)
33
+ collection(hash, :routes).each do |route|
34
+ routes.route(url: route[:url], label: route[:label])
35
+ end
36
+ end
37
+
38
+ def extract_splits(hash, routes)
39
+ collection(hash, :splits).each do |split|
40
+ label = split[:label]
41
+ percentage = split[:percentage]
42
+ cookie_name = split[:sitehub_cookie_name] || sitehub_cookie_name
43
+
44
+ if split[:splits] || split[:routes]
45
+ routes.split(percentage: percentage, label: label) { handle_routes(split, self) }
46
+ else
47
+ routes.split(percentage: percentage, label: label, url: split[:url])
48
+ end
49
+ end
50
+ end
51
+
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,3 +1,4 @@
1
+ require 'json'
1
2
  class SiteHub
2
3
  class ConfigServer
3
4
  BAD_JSON_MSG = 'Illegal JSON returned from config server: %s'.freeze
@@ -7,6 +7,7 @@ class SiteHub
7
7
  RESPONSE = 'sitehub.response'.freeze
8
8
  ASYNC_CALLBACK = 'async.callback'.freeze
9
9
  RECORDED_ROUTES_COOKIE = 'sitehub.recorded_route'.freeze
10
+ RECORDED_ROUTE_COOKIE_PATH = '/'.freeze
10
11
  ERRORS = 'sitehub.errors'.freeze
11
12
  TIME_STAMP_FORMAT = '%d/%b/%Y:%H:%M:%S %z'.freeze
12
13
  EMPTY_STRING = ''.freeze
@@ -16,9 +16,10 @@ class SiteHub
16
16
  new do
17
17
  extend CollectionMethods
18
18
  sitehub_cookie_name config[:sitehub_cookie_name] if config[:sitehub_cookie_name]
19
+ sitehub_cookie_path config[:sitehub_cookie_path] if config[:sitehub_cookie_path]
19
20
 
20
21
  collection!(config, :proxies).each do |proxy|
21
- mappings.add_route route_builder: CandidateRoutes.from_hash(proxy, sitehub_cookie_name)
22
+ mappings.add_route candidate_routes: CandidateRoutes.from_hash(proxy, sitehub_cookie_name, sitehub_cookie_path )
22
23
  end
23
24
 
24
25
  collection(config, :reverse_proxies).each do |proxy|
@@ -33,6 +34,7 @@ class SiteHub
33
34
 
34
35
  attr_reader :mappings, :reverse_proxies
35
36
  def_delegator :mappings, :sitehub_cookie_name
37
+ def_delegator :mappings, :sitehub_cookie_path
36
38
 
37
39
  def initialize(&block)
38
40
  @reverse_proxies = {}
@@ -14,6 +14,7 @@ class SiteHub
14
14
  include Equality
15
15
 
16
16
  extend GetterSetterMethods
17
+ getter_setter :sitehub_cookie_path, RECORDED_ROUTE_COOKIE_PATH
17
18
  getter_setter :sitehub_cookie_name, RECORDED_ROUTES_COOKIE
18
19
 
19
20
  def initialize
@@ -33,16 +34,16 @@ class SiteHub
33
34
  self
34
35
  end
35
36
 
36
- def add_route(url: nil, mapped_path: nil, route_builder: nil, &block)
37
- unless route_builder
38
- route_builder = CandidateRoutes.new(sitehub_cookie_name: sitehub_cookie_name,
39
- mapped_path: mapped_path,
40
- &block).tap do |builder|
37
+ def add_route(url: nil, mapped_path: nil, candidate_routes: nil, &block)
38
+ unless candidate_routes
39
+ candidate_routes = CandidateRoutes.new(sitehub_cookie_name: sitehub_cookie_name,
40
+ mapped_path: mapped_path,
41
+ &block).tap do |builder|
41
42
  builder.default(url: url) if url
42
43
  end
43
44
  end
44
45
 
45
- self[route_builder.mapped_path] = route_builder
46
+ self[candidate_routes.mapped_path] = candidate_routes
46
47
  end
47
48
 
48
49
  def mapped_route(path:, request:)
@@ -1,3 +1,3 @@
1
1
  class SiteHub
2
- VERSION = '0.5.0.alpha10'.freeze
2
+ VERSION = '0.5.0.alpha11'.freeze
3
3
  end
@@ -3,12 +3,16 @@ describe 'config server' do
3
3
  include_context :sitehub_json
4
4
 
5
5
  let(:config) do
6
- { proxies: [
7
- {
8
- path: '%r{/regex(.*)}',
9
- default: DOWNSTREAM_URL
10
- }
11
- ] }
6
+ {
7
+ proxies: [
8
+ {
9
+ sitehub_cookie_name: 'custom_name',
10
+ sitehub_cookie_path: '/custom/path',
11
+ path: '%r{/regex(.*)}',
12
+ default: DOWNSTREAM_URL
13
+ }
14
+ ]
15
+ }
12
16
  end
13
17
 
14
18
  let(:downstream_response) { 'downstream response' }
@@ -20,12 +24,20 @@ describe 'config server' do
20
24
 
21
25
  let(:app) do
22
26
  sitehub = sitehub do
23
- config_server(CONFIG_SERVER_URL, caching_options: { expires_in: 1 })
27
+ config_server(CONFIG_SERVER_URL, caching_options: {expires_in: 1})
24
28
  end
25
29
 
26
30
  Async::Middleware.new(sitehub)
27
31
  end
28
32
 
33
+ context 'from_json' do
34
+ it 'reads cookie path from config' do
35
+ get('/regex123')
36
+
37
+ expect(app.last_response.cookies['custom_name'][:path]).to eq('/custom/path')
38
+ end
39
+ end
40
+
29
41
  it 'path as regex' do
30
42
  get('/regex123')
31
43
 
@@ -0,0 +1,197 @@
1
+ class SiteHub
2
+ class CandidateRoutes
3
+ describe FromJson do
4
+ describe '::from_hash' do
5
+ include_context :sitehub_json
6
+
7
+ let(:described_class) { CandidateRoutes }
8
+
9
+ context 'cookie configuration' do
10
+
11
+ subject do
12
+ described_class.from_hash(proxy_config_hash, :top_level_cookie_name, :top_level_cookie_path)
13
+ end
14
+
15
+ let(:cookie_name) { 'custom_name' }
16
+ let(:cookie_path) { 'custom_path' }
17
+
18
+ context 'no config defined on proxy' do
19
+
20
+ let(:proxy_config_hash) do
21
+ {
22
+ path: '/',
23
+ default: 'url'
24
+ }
25
+ end
26
+
27
+ it 'uses the config passed in to the method' do
28
+ expect(subject.default_route.sitehub_cookie_name).to eq(:top_level_cookie_name)
29
+ expect(subject.default_route.sitehub_cookie_path).to eq(:top_level_cookie_path)
30
+ end
31
+ end
32
+ context 'defined on proxy' do
33
+
34
+ let(:proxy_config_hash) do
35
+ {
36
+ path: '/',
37
+ sitehub_cookie_name: cookie_name,
38
+ sitehub_cookie_path: cookie_path,
39
+ default: 'url'
40
+ }
41
+ end
42
+ it 'uses the configuration' do
43
+ expect(subject.default_route.sitehub_cookie_name).to eq(cookie_name)
44
+ expect(subject.default_route.sitehub_cookie_path).to eq(cookie_path)
45
+ end
46
+
47
+ #TODO - support cookie config within split
48
+ # context 'config defined on split' do
49
+ # let(:proxy_config_hash) do
50
+ # {
51
+ # path: '/',
52
+ # splits: [
53
+ # {sitehub_cookie_path: cookie_path,
54
+ # sitehub_cookie_name: cookie_name,
55
+ # percentage: 100,
56
+ # url: 'url',
57
+ # label: 'route_label'}
58
+ # ]
59
+ # }
60
+ # end
61
+ # it 'is overidden by the config on the route' do
62
+ # expect(subject.sitehub_cookie_name).to eq(cookie_name)
63
+ # expect(subject.sitehub_cookie_path).to eq(cookie_path)
64
+ # end
65
+ # end
66
+ end
67
+
68
+ #TODO - support cookie config within split
69
+ context 'defined on route' do
70
+ it 'uses the configuration' do
71
+
72
+ end
73
+ end
74
+ end
75
+
76
+
77
+ context 'splits' do
78
+ subject do
79
+ described_class.from_hash(split_proxy, :expected, :top_level_cookie_path)
80
+ end
81
+ context 'sitehub_cookie_name' do
82
+ it 'sets it' do
83
+ expect(subject.sitehub_cookie_name).to eq(:expected)
84
+ end
85
+ end
86
+
87
+ context 'sitehub_cookie_path' do
88
+ it 'sets it' do
89
+ expect(subject.sitehub_cookie_path).to eq(split_proxy[:sitehub_cookie_path])
90
+ end
91
+ end
92
+
93
+ it 'returns core with splits' do
94
+ split_1 = split_1()
95
+ split_2 = split_2()
96
+ expected = described_class.new(sitehub_cookie_name: :expected,
97
+ sitehub_cookie_path: subject.sitehub_cookie_path,
98
+ mapped_path: subject.mapped_path) do
99
+ split percentage: split_1[:percentage], label: split_1[:label], url: split_1[:url]
100
+ split percentage: split_2[:percentage], label: split_2[:label], url: split_2[:url]
101
+ end
102
+ expect(subject.candidates).to eq(expected.candidates)
103
+ end
104
+
105
+ context 'default' do
106
+ it 'sets it' do
107
+ expect(subject.default_route.app.mapped_url).to eq(split_proxy[:default])
108
+ end
109
+ end
110
+ end
111
+
112
+ context 'routes' do
113
+ subject do
114
+ described_class.from_hash(routes_proxy, :expected, :top_level_cookie_path)
115
+ end
116
+ context 'sitehub_cookie_name' do
117
+ it 'sets it' do
118
+ expect(subject.sitehub_cookie_name).to eq(:expected)
119
+ end
120
+ end
121
+
122
+ context 'sitehub_cookie_path' do
123
+ it 'sets it' do
124
+ expect(subject.sitehub_cookie_path).to eq(routes_proxy[:sitehub_cookie_path])
125
+ end
126
+ end
127
+
128
+ it 'returns core with routes' do
129
+ route_1 = route_1()
130
+ expected = described_class.new(sitehub_cookie_name: :expected,
131
+ sitehub_cookie_path: subject.sitehub_cookie_path,
132
+ mapped_path: subject.mapped_path) do
133
+ route label: route_1[:label], url: route_1[:url]
134
+ end
135
+ expect(subject.candidates).to eq(expected.candidates)
136
+ end
137
+
138
+ context 'default' do
139
+ it 'sets it' do
140
+ expect(subject.default_route.app.mapped_url).to eq(routes_proxy[:default])
141
+ end
142
+ end
143
+ end
144
+
145
+ context 'nested routes' do
146
+ context 'routes inside a split' do
147
+ subject do
148
+ described_class.from_hash(nested_route_proxy, :expected, :top_level_cookie_path)
149
+ end
150
+
151
+ it 'creates them' do
152
+ route_1 = route_1()
153
+ nested_route = nested_route()
154
+
155
+ expected = described_class.new(sitehub_cookie_name: :expected,
156
+ sitehub_cookie_path: subject.sitehub_cookie_path,
157
+ mapped_path: subject.mapped_path) do
158
+ split(percentage: nested_route[:percentage], label: nested_route[:label]) do
159
+ route label: route_1[:label], url: route_1[:url]
160
+ end
161
+ end
162
+ expect(subject).to eq(expected)
163
+ end
164
+ end
165
+
166
+ context 'splits in a split' do
167
+ subject do
168
+ described_class.from_hash(nested_split_proxy, :expected, :top_level_cookie_path)
169
+ end
170
+
171
+ it 'creates them' do
172
+ split_1 = split_1()
173
+ split_2 = split_2()
174
+ nested_split = nested_split()
175
+
176
+ expected = described_class.new(sitehub_cookie_name: :expected,
177
+ sitehub_cookie_path: subject.sitehub_cookie_path,
178
+ mapped_path: subject.mapped_path) do
179
+ split(percentage: nested_split[:percentage], label: nested_split[:label]) do
180
+ split percentage: split_1[:percentage], label: split_1[:label], url: split_1[:url]
181
+ split percentage: split_2[:percentage], label: split_2[:label], url: split_2[:url]
182
+ end
183
+ end
184
+ expect(subject).to eq(expected)
185
+ end
186
+ end
187
+ end
188
+
189
+ context 'default' do
190
+ #TODO - implement me
191
+ it 'sets the default' do
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
197
+ end
@@ -5,126 +5,6 @@ class SiteHub
5
5
  describe CandidateRoutes do
6
6
  include_context :middleware_test
7
7
 
8
- describe '::from_hash' do
9
- include_context :sitehub_json
10
-
11
- context 'splits' do
12
- subject do
13
- described_class.from_hash(split_proxy, :expected)
14
- end
15
- context 'sitehub_cookie_name' do
16
- it 'sets it' do
17
- expect(subject.sitehub_cookie_name).to eq(:expected)
18
- end
19
- end
20
-
21
- context 'sitehub_cookie_path' do
22
- it 'sets it' do
23
- expect(subject.sitehub_cookie_path).to eq(split_proxy[:sitehub_cookie_path])
24
- end
25
- end
26
-
27
- it 'returns core with splits' do
28
- split_1 = split_1()
29
- split_2 = split_2()
30
- expected = described_class.new(sitehub_cookie_name: :expected,
31
- sitehub_cookie_path: subject.sitehub_cookie_path,
32
- mapped_path: subject.mapped_path) do
33
- split percentage: split_1[:percentage], label: split_1[:label], url: split_1[:url]
34
- split percentage: split_2[:percentage], label: split_2[:label], url: split_2[:url]
35
- end
36
- expect(subject.candidates).to eq(expected.candidates)
37
- end
38
-
39
- context 'default' do
40
- it 'sets it' do
41
- expect(subject.default_route.app.mapped_url).to eq(split_proxy[:default])
42
- end
43
- end
44
- end
45
-
46
- context 'routes' do
47
- subject do
48
- described_class.from_hash(routes_proxy, :expected)
49
- end
50
- context 'sitehub_cookie_name' do
51
- it 'sets it' do
52
- expect(subject.sitehub_cookie_name).to eq(:expected)
53
- end
54
- end
55
-
56
- context 'sitehub_cookie_path' do
57
- it 'sets it' do
58
- expect(subject.sitehub_cookie_path).to eq(routes_proxy[:sitehub_cookie_path])
59
- end
60
- end
61
-
62
- it 'returns core with routes' do
63
- route_1 = route_1()
64
- expected = described_class.new(sitehub_cookie_name: :expected,
65
- sitehub_cookie_path: subject.sitehub_cookie_path,
66
- mapped_path: subject.mapped_path) do
67
- route label: route_1[:label], url: route_1[:url]
68
- end
69
- expect(subject.candidates).to eq(expected.candidates)
70
- end
71
-
72
- context 'default' do
73
- it 'sets it' do
74
- expect(subject.default_route.app.mapped_url).to eq(routes_proxy[:default])
75
- end
76
- end
77
- end
78
-
79
- context 'nested routes' do
80
- context 'routes inside a split' do
81
- subject do
82
- described_class.from_hash(nested_route_proxy, :expected)
83
- end
84
-
85
- it 'creates them' do
86
- route_1 = route_1()
87
- nested_route = nested_route()
88
-
89
- expected = described_class.new(sitehub_cookie_name: :expected,
90
- sitehub_cookie_path: subject.sitehub_cookie_path,
91
- mapped_path: subject.mapped_path) do
92
- split(percentage: nested_route[:percentage], label: nested_route[:label]) do
93
- route label: route_1[:label], url: route_1[:url]
94
- end
95
- end
96
- expect(subject).to eq(expected)
97
- end
98
- end
99
-
100
- context 'splits in a split' do
101
- subject do
102
- described_class.from_hash(nested_split_proxy, :expected)
103
- end
104
-
105
- it 'creates them' do
106
- split_1 = split_1()
107
- split_2 = split_2()
108
- nested_split = nested_split()
109
-
110
- expected = described_class.new(sitehub_cookie_name: :expected,
111
- sitehub_cookie_path: subject.sitehub_cookie_path,
112
- mapped_path: subject.mapped_path) do
113
- split(percentage: nested_split[:percentage], label: nested_split[:label]) do
114
- split percentage: split_1[:percentage], label: split_1[:label], url: split_1[:url]
115
- split percentage: split_2[:percentage], label: split_2[:label], url: split_2[:url]
116
- end
117
- end
118
- expect(subject).to eq(expected)
119
- end
120
- end
121
- end
122
-
123
- context 'default' do
124
- it 'sets the default' do
125
- end
126
- end
127
- end
128
8
 
129
9
  subject do
130
10
  described_class.new(sitehub_cookie_name: :cookie_name,
@@ -528,33 +408,5 @@ class SiteHub
528
408
  end
529
409
  end
530
410
  end
531
-
532
- describe '#method_missing' do
533
- context 'calling scope set' do
534
- subject do
535
- calling_scope = double(:calling_scope, parent_method: :called)
536
- described_class.new(sitehub_cookie_name: :cookie_name,
537
- mapped_path: '/path',
538
- calling_scope: calling_scope)
539
- end
540
- context 'method on calling_context' do
541
- it 'delegates to it' do
542
- expect(subject.parent_method).to eq(:called)
543
- end
544
- end
545
-
546
- context 'method on calling_context' do
547
- it 'delegates to it' do
548
- expect(subject.parent_method).to eq(:called)
549
- end
550
- end
551
- end
552
-
553
- context 'calling scope not set' do
554
- it 'raises an error' do
555
- expect { subject.parent_method }.to raise_error(NoMethodError)
556
- end
557
- end
558
- end
559
411
  end
560
412
  end
@@ -33,13 +33,19 @@ class SiteHub
33
33
  end
34
34
  end
35
35
 
36
- context 'sitehub_cookie_name' do
37
- it 'sets it' do
38
- sitehub_json[:sitehub_cookie_name] = 'custom_name'
39
-
40
- expect(core.sitehub_cookie_name).to eq(expected.sitehub_cookie_name)
41
- expect(core.mappings['/route_1'].sitehub_cookie_name).to eq(expected.sitehub_cookie_name)
36
+ context 'cookie configuration' do
37
+ context 'defined at top level' do
38
+ it 'sets it' do
39
+ sitehub_json[:sitehub_cookie_name] = 'custom_name'
40
+ sitehub_json[:sitehub_cookie_path] = 'custom_path'
41
+ sitehub_json[:proxies].first.delete(:sitehub_cookie_path)
42
+
43
+ expect(core.sitehub_cookie_name).to eq(expected.sitehub_cookie_name)
44
+ expect(core.mappings['/route_1'].sitehub_cookie_name).to eq(sitehub_json[:sitehub_cookie_name])
45
+ expect(core.mappings['/route_1'].sitehub_cookie_path).to eq(sitehub_json[:sitehub_cookie_path])
46
+ end
42
47
  end
48
+
43
49
  end
44
50
 
45
51
  context 'reverse_proxies' do
@@ -4,7 +4,6 @@ class SiteHub
4
4
  module Middleware
5
5
  describe CandidateRouteMappings do
6
6
  let(:base_url) { 'http://google.com' }
7
- let(:mapped_path) { '/app' }
8
7
  let(:mapped_path) { '/application_url' }
9
8
 
10
9
  let(:forward_proxy_builder) do
@@ -20,9 +19,25 @@ class SiteHub
20
19
  end.init
21
20
  end
22
21
 
23
- before do
24
- # subject.init
25
- end
22
+ # describe 'sitehub_cookie_path' do
23
+ # pending 'defaults to CONSTANT' do
24
+ #
25
+ # end
26
+ #
27
+ # pending 'can be set' do
28
+ #
29
+ # end
30
+ # end
31
+ #
32
+ # describe 'sitehub_cookie_name' do
33
+ # pending 'defaults to CONSTANT' do
34
+ #
35
+ # end
36
+ #
37
+ # pending 'can be set' do
38
+ #
39
+ # end
40
+ # end
26
41
 
27
42
  describe '#add_route' do
28
43
  def route(app, id:)
@@ -32,12 +47,12 @@ class SiteHub
32
47
  sitehub_cookie_path: nil)
33
48
  end
34
49
 
35
- context 'RouteBuilder as parameter' do
50
+ context 'candidate_routes as parameter' do
36
51
  it 'sets it' do
37
52
  another_mapping = '/mapping'
38
- route = CandidateRoutes.new(sitehub_cookie_name: :sitehub_cookie_name, mapped_path: another_mapping)
39
- subject.add_route route_builder: route
40
- expect(subject[another_mapping]).to be(route)
53
+ candidate_routes = CandidateRoutes.new(sitehub_cookie_name: :sitehub_cookie_name, mapped_path: another_mapping)
54
+ subject.add_route candidate_routes: candidate_routes
55
+ expect(subject[another_mapping]).to be(candidate_routes)
41
56
  end
42
57
  end
43
58
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sitehub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0.alpha10
4
+ version: 0.5.0.alpha11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ladtech
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-08 00:00:00.000000000 Z
11
+ date: 2016-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -340,7 +340,7 @@ files:
340
340
  - lib/sitehub.rb
341
341
  - lib/sitehub/builder.rb
342
342
  - lib/sitehub/candidate_routes.rb
343
- - lib/sitehub/candidate_routes/class_methods.rb
343
+ - lib/sitehub/candidate_routes/from_json.rb
344
344
  - lib/sitehub/collection.rb
345
345
  - lib/sitehub/collection/route_collection.rb
346
346
  - lib/sitehub/collection/split_route_collection.rb
@@ -396,6 +396,7 @@ files:
396
396
  - spec/integration/middleware_spec.rb
397
397
  - spec/integration/version_affinity_spec.rb
398
398
  - spec/sitehub/builder_spec.rb
399
+ - spec/sitehub/candidate_routes/from_json_spec.rb
399
400
  - spec/sitehub/candidate_routes_spec.rb
400
401
  - spec/sitehub/collection/route_collection_spec.rb
401
402
  - spec/sitehub/collection/split_route_collection/split_spec.rb
@@ -1,42 +0,0 @@
1
- class SiteHub
2
- class CandidateRoutes
3
- module ClassMethods
4
- extend CollectionMethods
5
-
6
- # TODO: support nested routes, i.e. support rule name being passed in
7
- def from_hash(hash, sitehub_cookie_name)
8
- new(sitehub_cookie_name: sitehub_cookie_name,
9
- sitehub_cookie_path: hash[:sitehub_cookie_path],
10
- mapped_path: hash[:path], calling_scope: self) do
11
- handle_routes(hash, self)
12
- default url: hash[:default] if hash[:default]
13
- end
14
- end
15
-
16
- private
17
-
18
- def handle_routes(hash, routes)
19
- extract_splits(hash, routes)
20
- extract_routes(hash, routes)
21
- end
22
-
23
- def extract_routes(hash, routes)
24
- collection(hash, :routes).each do |route|
25
- routes.route(url: route[:url], label: route[:label])
26
- end
27
- end
28
-
29
- def extract_splits(hash, routes)
30
- collection(hash, :splits).each do |split|
31
- if split[:splits] || split[:routes]
32
- routes.split(percentage: split[:percentage], label: split[:label]) do
33
- handle_routes(split, self)
34
- end
35
- else
36
- routes.split(percentage: split[:percentage], label: split[:label], url: split[:url])
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end