floodgate 0.0.1 → 0.0.2

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: 1402c149274f8d0297db286e7f0dc758b0c816e7
4
- data.tar.gz: 2a60053ed24d35c7755495cb78508da5afec715e
3
+ metadata.gz: 8ae4c9182d4f9b6938b6d4abac5bbde71f2bda85
4
+ data.tar.gz: c6b0255e7ee3be470608a02d735c67817fcaa63c
5
5
  SHA512:
6
- metadata.gz: c617701dffad5e2b9b621cc7b8d89b811ed87551252b400a291ffe87cea08a0f3e85a165d317361f5805c826c335ebf824d8fdc77d87e25cf087488890cf6550
7
- data.tar.gz: bbe1b22c2edaa4bf64ac28b211755761e3b8cc9f1e53920d99cee20e59afc74630cf8180aecdb748cf4e89bda37ac723d505bd8272d64554618cdf7b52899200
6
+ metadata.gz: 6a9cb226da8d6176737b87d83bef67274c7f7c5609ad29f2ad9d6c856aa88c43d6d9fd2bb850aaf4872b3da8c0a14f585e588eb60bb711cf50bb3f33a1f2ce44
7
+ data.tar.gz: 31e187612db38471718a985823429a73289b5eba08f3229778d61cc8589203ae0198ceb69d8a2e532421690da712b69681da5d20de665c001e55771492c53843
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ floodgate
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.0.0-p353
data/Rakefile CHANGED
@@ -1 +1,6 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
data/floodgate.gemspec CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency 'bundler', '~> 1.3'
22
21
  spec.add_development_dependency 'rake'
22
+ spec.add_development_dependency 'rspec', '~> 2.14'
23
+ spec.add_development_dependency 'simplecov', '~> 0.8'
23
24
  end
@@ -1,3 +1,3 @@
1
1
  module Floodgate
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/floodgate.rb CHANGED
@@ -1,5 +1,20 @@
1
- require "floodgate/version"
1
+ require 'floodgate/version'
2
2
 
3
3
  module Floodgate
4
- # Your code goes here...
4
+ class Control
5
+ def initialize(app, filter_traffic=false)
6
+ @filter_traffic = filter_traffic
7
+ @app = app
8
+ end
9
+
10
+ def call(env)
11
+ return @app.call(env) unless @filter_traffic
12
+
13
+ if maintenance_url = env['MAINTENANCE_PAGE_URL']
14
+ [307, { 'Location' => maintenance_url }, []]
15
+ else
16
+ [503, {}, ['Application Unavailable']]
17
+ end
18
+ end
19
+ end
5
20
  end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ module Floodgate
4
+ describe Control do
5
+ let(:app) { double().as_null_object }
6
+ let(:control) { described_class.new(app) }
7
+ let(:env) { Hash.new }
8
+
9
+ describe '#call' do
10
+ it 'sends :call to the app with the specified environment' do
11
+ expect(app).to receive(:call).with(env)
12
+ control.call(env)
13
+ end
14
+
15
+ context 'when the floodgate is closed' do
16
+ let(:filter_traffic) { true }
17
+ let(:control) { described_class.new(app, filter_traffic) }
18
+
19
+ it 'does not send :call to the app' do
20
+ expect(app).not_to receive(:call).with(env)
21
+ control.call(env)
22
+ end
23
+
24
+ context 'when a maintenance page is specified in the environment' do
25
+ before { env['MAINTENANCE_PAGE_URL'] = 'someurl' }
26
+
27
+ it 'redirects with a temporary redirect status' do
28
+ expect(control.call(env)[0]).to eq(307)
29
+ end
30
+
31
+ it 'has a location set to the maintenance page' do
32
+ expect(control.call(env)[1]['Location']).to eq('someurl')
33
+ end
34
+ end
35
+
36
+ context 'when no maintenance page is specified in the environment' do
37
+ it 'responds with a status of service unavailable' do
38
+ expect(control.call(env)[0]).to eq(503)
39
+ end
40
+
41
+ it 'has an appropriate message in the response' do
42
+ expect(control.call(env)[2]).to eq(['Application Unavailable'])
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,17 @@
1
+ require 'simplecov'
2
+
3
+ SimpleCov.start do
4
+ add_filter '/spec/'
5
+ end
6
+
7
+ require 'rspec'
8
+
9
+ require 'floodgate'
10
+
11
+ RSpec.configure do |config|
12
+ config.treat_symbols_as_metadata_keys_with_true_values = true
13
+ config.filter_run focused: true
14
+ config.alias_example_to :fit, focused: true
15
+ config.alias_example_to :pit, pending: true
16
+ config.run_all_when_everything_filtered = true
17
+ 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.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark McEahern
@@ -12,33 +12,47 @@ cert_chain: []
12
12
  date: 2014-02-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: bundler
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rspec
16
30
  requirement: !ruby/object:Gem::Requirement
17
31
  requirements:
18
32
  - - ~>
19
33
  - !ruby/object:Gem::Version
20
- version: '1.3'
34
+ version: '2.14'
21
35
  type: :development
22
36
  prerelease: false
23
37
  version_requirements: !ruby/object:Gem::Requirement
24
38
  requirements:
25
39
  - - ~>
26
40
  - !ruby/object:Gem::Version
27
- version: '1.3'
41
+ version: '2.14'
28
42
  - !ruby/object:Gem::Dependency
29
- name: rake
43
+ name: simplecov
30
44
  requirement: !ruby/object:Gem::Requirement
31
45
  requirements:
32
- - - '>='
46
+ - - ~>
33
47
  - !ruby/object:Gem::Version
34
- version: '0'
48
+ version: '0.8'
35
49
  type: :development
36
50
  prerelease: false
37
51
  version_requirements: !ruby/object:Gem::Requirement
38
52
  requirements:
39
- - - '>='
53
+ - - ~>
40
54
  - !ruby/object:Gem::Version
41
- version: '0'
55
+ version: '0.8'
42
56
  description: floodgate helps you control access to your app
43
57
  email:
44
58
  - mark@adorable.io
@@ -48,6 +62,8 @@ extensions: []
48
62
  extra_rdoc_files: []
49
63
  files:
50
64
  - .gitignore
65
+ - .ruby-gemset
66
+ - .ruby-version
51
67
  - Gemfile
52
68
  - LICENSE.txt
53
69
  - README.md
@@ -55,6 +71,8 @@ files:
55
71
  - floodgate.gemspec
56
72
  - lib/floodgate.rb
57
73
  - lib/floodgate/version.rb
74
+ - spec/floodgate_spec.rb
75
+ - spec/spec_helper.rb
58
76
  homepage: http://github.com/adorableio/floodgate
59
77
  licenses:
60
78
  - MIT
@@ -79,4 +97,6 @@ rubygems_version: 2.1.11
79
97
  signing_key:
80
98
  specification_version: 4
81
99
  summary: floodgate helps you control access to your app
82
- test_files: []
100
+ test_files:
101
+ - spec/floodgate_spec.rb
102
+ - spec/spec_helper.rb