floodgate 0.0.3 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd92ed8bca5cd54cc2257216a08d972fb94fac97
4
- data.tar.gz: ef4911f7b3b5157311858f53b3d467257aef4839
3
+ metadata.gz: dfa3da66938d40caf0237a7ea2c66e092948332c
4
+ data.tar.gz: 00a92131edb02b28a8ed0f6d2a6858f56bdc8320
5
5
  SHA512:
6
- metadata.gz: 7fc5ed1de91f72b9fa1cc0f9d23d9ba1cf963d243749f8810120c0704c4c33d20be13b811e50741e9397202d1b362d1bfaff6fdc3bb40cc63d837975973b8b07
7
- data.tar.gz: 2f43f2f36d0a0829900349c5ea2f36a1d9fdbab3d477afead0d2cb1b4ad329cee9999a0a46b8d3978a5eada4267ace8184e1974e4b8de232931456193504b908
6
+ metadata.gz: d0665c1e13d70a8ae8e253509d366ab835fdf143736d03a4ffabfc63c02f9c260470b42a4b7d63db958bacbe8091c0107764e389245bb2f36bf1463e394fb1a7
7
+ data.tar.gz: 5385f21d8fdeb1e9fc0c11333dbc9437e214a6c1576f42592b4f2cdf9871326f71de4ba91c3e584671471a6605d6517ba21894d508bc346998fc3b82bfdfabe6
@@ -1,3 +1,3 @@
1
1
  module Floodgate
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.7"
3
3
  end
data/lib/floodgate.rb CHANGED
@@ -6,18 +6,27 @@ module Floodgate
6
6
  @app = app
7
7
  end
8
8
 
9
- def filter_traffic?(env)
10
- !env['FLOODGATE_FILTER_TRAFFIC'].nil?
11
- end
12
-
13
9
  def call(env)
14
- return @app.call(env) unless filter_traffic?(env)
10
+ return @app.call(env) unless filter_traffic?
15
11
 
16
- if maintenance_url = env['MAINTENANCE_PAGE_URL']
17
- [307, { 'Location' => maintenance_url }, []]
12
+ if redirect?
13
+ [307, { 'Location' => redirect_url }, []]
18
14
  else
19
15
  [503, {}, ['Application Unavailable']]
20
16
  end
21
17
  end
18
+
19
+ def filter_traffic?
20
+ !(ENV['FLOODGATE_FILTER_TRAFFIC'].nil? || ENV['FLOODGATE_FILTER_TRAFFIC'] == '')
21
+ end
22
+
23
+ def redirect?
24
+ !(redirect_url.nil? || redirect_url == '')
25
+ end
26
+
27
+ def redirect_url
28
+ ENV['MAINTENANCE_PAGE_URL']
29
+ end
30
+
22
31
  end
23
32
  end
@@ -6,6 +6,16 @@ module Floodgate
6
6
  let(:control) { described_class.new(app) }
7
7
  let(:env) { Hash.new }
8
8
 
9
+ before do
10
+ ENV['FLOODGATE_FILTER_TRAFFIC'] = ''
11
+ ENV['MAINTENANCE_PAGE_URL'] = ''
12
+ end
13
+
14
+ after do
15
+ ENV['FLOODGATE_FILTER_TRAFFIC'] = ''
16
+ ENV['MAINTENANCE_PAGE_URL'] = ''
17
+ end
18
+
9
19
  describe '#call' do
10
20
  it 'sends :call to the app with the specified environment' do
11
21
  expect(app).to receive(:call).with(env)
@@ -13,7 +23,7 @@ module Floodgate
13
23
  end
14
24
 
15
25
  context 'when the floodgate is closed' do
16
- before { env['FLOODGATE_FILTER_TRAFFIC'] = 'closed' }
26
+ before { ENV['FLOODGATE_FILTER_TRAFFIC'] = 'closed' }
17
27
 
18
28
  let(:control) { described_class.new(app) }
19
29
 
@@ -22,8 +32,20 @@ module Floodgate
22
32
  control.call(env)
23
33
  end
24
34
 
35
+ context 'when no maintenance page is specified in the environment' do
36
+ before { ENV['MAINTENANCE_PAGE_URL'] = '' }
37
+
38
+ it 'responds with a status of service unavailable' do
39
+ expect(control.call(env)[0]).to eq(503)
40
+ end
41
+
42
+ it 'has an appropriate message in the response' do
43
+ expect(control.call(env)[2]).to eq(['Application Unavailable'])
44
+ end
45
+ end
46
+
25
47
  context 'when a maintenance page is specified in the environment' do
26
- before { env['MAINTENANCE_PAGE_URL'] = 'someurl' }
48
+ before { ENV['MAINTENANCE_PAGE_URL'] = 'someurl' }
27
49
 
28
50
  it 'redirects with a temporary redirect status' do
29
51
  expect(control.call(env)[0]).to eq(307)
@@ -33,17 +55,57 @@ module Floodgate
33
55
  expect(control.call(env)[1]['Location']).to eq('someurl')
34
56
  end
35
57
  end
58
+ end
59
+ end
36
60
 
37
- context 'when no maintenance page is specified in the environment' do
38
- it 'responds with a status of service unavailable' do
39
- expect(control.call(env)[0]).to eq(503)
40
- end
61
+ describe '#filter_traffic?' do
62
+ it 'returns false by default' do
63
+ expect(control.filter_traffic?).to eq(false)
64
+ end
41
65
 
42
- it 'has an appropriate message in the response' do
43
- expect(control.call(env)[2]).to eq(['Application Unavailable'])
44
- end
66
+ context 'when traffic filtering is enabled in the environment' do
67
+ before { ENV['FLOODGATE_FILTER_TRAFFIC'] = 'closed' }
68
+
69
+ it 'returns true' do
70
+ expect(control.filter_traffic?).to eq(true)
71
+ end
72
+
73
+ after { ENV['FLOODGATE_FILTER_TRAFFIC'] = nil }
74
+ end
75
+ end
76
+
77
+ describe '#redirect?' do
78
+ it 'is false by default' do
79
+ expect(control.redirect?).to eq(false)
80
+ end
81
+
82
+ context 'when the redirect url is an empty string' do
83
+ before { control.stub(:redirect_url).and_return '' }
84
+
85
+ it 'is false' do
86
+ expect(control.redirect?).to eq(false)
87
+ end
88
+ end
89
+
90
+ context 'when the redirect url is a string' do
91
+ before { control.stub(:redirect_url).and_return 'someurl' }
92
+
93
+ it 'is true' do
94
+ expect(control.redirect?).to eq(true)
45
95
  end
46
96
  end
47
97
  end
98
+
99
+ describe '#redirect_url' do
100
+ context 'when a maintenance page is specified in the environment' do
101
+ before { ENV['MAINTENANCE_PAGE_URL'] = 'someurl' }
102
+
103
+ it 'returns the maintenance page url' do
104
+ expect(control.redirect_url).to eq('someurl')
105
+ end
106
+
107
+ after { ENV['MAINTENANCE_PAGE_URL'] = '' }
108
+ end
109
+ end
48
110
  end
49
111
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: floodgate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark McEahern
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-14 00:00:00.000000000 Z
12
+ date: 2014-02-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake