disabler_middleware 0.0.1 → 0.0.2
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.
- data/.autotest +1 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +4 -0
- data/README.rdoc +11 -1
- data/VERSION +1 -1
- data/disabler_middleware.gemspec +6 -2
- data/lib/disabler_middleware.rb +33 -4
- data/spec/disabler_middleware_spec.rb +92 -8
- metadata +21 -7
data/.autotest
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Autotest.add_discovery { "rspec2" }
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -7,6 +7,9 @@ GEM
|
|
7
7
|
bundler (~> 1.0.0)
|
8
8
|
git (>= 1.2.5)
|
9
9
|
rake
|
10
|
+
rack (1.2.2)
|
11
|
+
rack-test (0.5.7)
|
12
|
+
rack (>= 1.0)
|
10
13
|
rake (0.8.7)
|
11
14
|
rcov (0.9.9)
|
12
15
|
rspec (2.3.0)
|
@@ -24,5 +27,6 @@ PLATFORMS
|
|
24
27
|
DEPENDENCIES
|
25
28
|
bundler (~> 1.0.0)
|
26
29
|
jeweler (~> 1.5.2)
|
30
|
+
rack-test
|
27
31
|
rcov
|
28
32
|
rspec (~> 2.3.0)
|
data/README.rdoc
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
= disabler_middleware
|
2
2
|
|
3
|
-
|
3
|
+
== Usage
|
4
|
+
|
5
|
+
Rack::Disabler.new(app) do |disabler|
|
6
|
+
disabler.store = Redis.new
|
7
|
+
disabler.extractor = {|env| Rack::Request.new(env).path}
|
8
|
+
disabler.responses = {'freeloader' => [402, {}, ["Payment Required"]],'douchebag' => [403, {}, ["Forbidden"]]}
|
9
|
+
end
|
10
|
+
|
11
|
+
this is an example (these are the defaults) but it should give you some idea of how it works.
|
12
|
+
|
13
|
+
Put simply; each request runs the extractor the resulting value is looked up in the data store (Redis or anything else that responds to #get(key)) if theres a return string it finds the matching response in the responses store and returns that otherwise it calls the app.
|
4
14
|
|
5
15
|
== Contributing to disabler_middleware
|
6
16
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/disabler_middleware.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{disabler_middleware}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Randall Potter"]
|
12
|
-
s.date = %q{2011-04-
|
12
|
+
s.date = %q{2011-04-29}
|
13
13
|
s.description = %q{disable developers and apis with a key/val lookup}
|
14
14
|
s.email = %q{rjspotter@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
"README.rdoc"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
|
+
".autotest",
|
20
21
|
".document",
|
21
22
|
".rspec",
|
22
23
|
"Gemfile",
|
@@ -48,17 +49,20 @@ Gem::Specification.new do |s|
|
|
48
49
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
49
50
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
50
51
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
52
|
+
s.add_development_dependency(%q<rack-test>, [">= 0"])
|
51
53
|
else
|
52
54
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
53
55
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
54
56
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
55
57
|
s.add_dependency(%q<rcov>, [">= 0"])
|
58
|
+
s.add_dependency(%q<rack-test>, [">= 0"])
|
56
59
|
end
|
57
60
|
else
|
58
61
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
59
62
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
60
63
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
61
64
|
s.add_dependency(%q<rcov>, [">= 0"])
|
65
|
+
s.add_dependency(%q<rack-test>, [">= 0"])
|
62
66
|
end
|
63
67
|
end
|
64
68
|
|
data/lib/disabler_middleware.rb
CHANGED
@@ -3,13 +3,42 @@ module Rack
|
|
3
3
|
|
4
4
|
class Disabler
|
5
5
|
|
6
|
-
def initialize(app,
|
7
|
-
@app
|
8
|
-
|
6
|
+
def initialize(app,store = nil)
|
7
|
+
@responses,@app,@store = {
|
8
|
+
'freeloader' => [402, {}, ["Payment Required"]],
|
9
|
+
'douchebag' => [403, {}, ["Forbidden"]]
|
10
|
+
},app,store
|
11
|
+
yield self if block_given?
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_accessor :store, :responses
|
15
|
+
|
16
|
+
def store
|
17
|
+
@store ||= Redis.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def add_response(key,val)
|
21
|
+
@responses[key.to_s] = val
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_responses(hsh)
|
25
|
+
@responses.merge!(hsh)
|
26
|
+
end
|
27
|
+
|
28
|
+
def response(key)
|
29
|
+
@responses[key]
|
30
|
+
end
|
31
|
+
|
32
|
+
def extractor(&block)
|
33
|
+
@extractor = block
|
34
|
+
end
|
35
|
+
|
36
|
+
def extract(env)
|
37
|
+
(@extractor || lambda {|env| Rack::Request.new(env).path}).call(env)
|
9
38
|
end
|
10
39
|
|
11
40
|
def call(env)
|
12
|
-
|
41
|
+
response(store.get(extract(env))) || @app.call(env)
|
13
42
|
end
|
14
43
|
|
15
44
|
end
|
@@ -18,10 +18,93 @@ describe "DisablerMiddleware" do
|
|
18
18
|
store.stub(:get)
|
19
19
|
end
|
20
20
|
|
21
|
+
context "accessors" do
|
22
|
+
|
23
|
+
before do
|
24
|
+
@disabler = Rack::Disabler.new(app) do |dis|
|
25
|
+
dis.store = store
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have the store be settable" do
|
30
|
+
expect {@disabler.store = "somthing else"}.should_not raise_error
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should retrieve set store" do
|
34
|
+
@disabler.store = foo = "something"
|
35
|
+
@disabler.store.should == foo
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should allow setting of additional responses" do
|
39
|
+
expect {@disabler.responses = {'foo' => 'bar'}}.should_not raise_error
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should make those additional responses available" do
|
43
|
+
@disabler.responses = {'foo' => 'bar'}
|
44
|
+
@disabler.response('foo').should == 'bar'
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should allow the adding of single responses" do
|
48
|
+
@disabler.should respond_to(:add_response)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should add that single response to the collection" do
|
52
|
+
@disabler.add_response('baz','cool')
|
53
|
+
@disabler.response('baz').should == 'cool'
|
54
|
+
end
|
55
|
+
|
56
|
+
context "defautl responses" do
|
57
|
+
it "should provide a default responses for non-payment" do
|
58
|
+
@disabler.response('freeloader').should == [402, {}, ["Payment Required"]]
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should provide a default responses for abuse" do
|
62
|
+
@disabler.response('douchebag').should == [403, {}, ["Forbidden"]]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should be able to bulk add respeonses" do
|
67
|
+
@disabler.add_responses({'white' => 'rabbit', 'red' => 'pill'})
|
68
|
+
%w[white red freeloader].inject(true) {|m,x| !! m && x}.should be_true
|
69
|
+
end
|
70
|
+
|
71
|
+
context "overwriting responses" do
|
72
|
+
|
73
|
+
it "should work with single" do
|
74
|
+
@disabler.add_response('douchebag',[418,{},"Tip me over and pour me out"])
|
75
|
+
@disabler.response('douchebag').should == [418,{},"Tip me over and pour me out"]
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should work with many" do
|
79
|
+
@disabler.add_responses({'douchebag' => [418,{},"Tip me over and pour me out"]})
|
80
|
+
@disabler.response('douchebag').should == [418,{},"Tip me over and pour me out"]
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
context "extractor" do
|
86
|
+
|
87
|
+
it "should allow setting of the extractor with a block" do
|
88
|
+
expect {@disabler.extractor {|req| "foo"} }.should_not raise_error
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should make the callable extractor availabe" do
|
92
|
+
@disabler.extractor {|foo| 'bar'}
|
93
|
+
@disabler.extract("something").should == "bar"
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
21
100
|
context "base setup" do
|
22
101
|
|
23
102
|
before do
|
24
|
-
@disabler = Rack::Disabler.new(app
|
103
|
+
@disabler = Rack::Disabler.new(app) do |dis|
|
104
|
+
dis.store = store
|
105
|
+
dis.responses = {}
|
106
|
+
dis.extractor {|env| "foo"}
|
107
|
+
end
|
25
108
|
end
|
26
109
|
|
27
110
|
it "should take an app and store it for later" do
|
@@ -51,12 +134,10 @@ describe "DisablerMiddleware" do
|
|
51
134
|
context "disabled developer" do
|
52
135
|
|
53
136
|
before do
|
54
|
-
@disabled = Rack::Disabler.new(app
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
}
|
59
|
-
}) {|env| "disableddeveloperkey"}
|
137
|
+
@disabled = Rack::Disabler.new(app) do |dis|
|
138
|
+
dis.store = store
|
139
|
+
dis.extractor {|env| "disableddeveloperkey"}
|
140
|
+
end
|
60
141
|
end
|
61
142
|
|
62
143
|
it "should call store with disableddeveloperkey" do
|
@@ -73,7 +154,10 @@ describe "DisablerMiddleware" do
|
|
73
154
|
|
74
155
|
context "allowed developer" do
|
75
156
|
before do
|
76
|
-
@allowed = Rack::Disabler.new(app
|
157
|
+
@allowed = Rack::Disabler.new(app) do |dis|
|
158
|
+
dis.store = store
|
159
|
+
dis.extractor {|env| "alloweddeveloperkey"}
|
160
|
+
end
|
77
161
|
end
|
78
162
|
|
79
163
|
it "should lookup developer" do
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: disabler_middleware
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Randall Potter
|
@@ -10,11 +10,10 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-04-
|
13
|
+
date: 2011-04-29 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
17
|
-
prerelease: false
|
18
17
|
requirement: &id001 !ruby/object:Gem::Requirement
|
19
18
|
none: false
|
20
19
|
requirements:
|
@@ -22,10 +21,10 @@ dependencies:
|
|
22
21
|
- !ruby/object:Gem::Version
|
23
22
|
version: 2.3.0
|
24
23
|
type: :development
|
24
|
+
prerelease: false
|
25
25
|
version_requirements: *id001
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: bundler
|
28
|
-
prerelease: false
|
29
28
|
requirement: &id002 !ruby/object:Gem::Requirement
|
30
29
|
none: false
|
31
30
|
requirements:
|
@@ -33,10 +32,10 @@ dependencies:
|
|
33
32
|
- !ruby/object:Gem::Version
|
34
33
|
version: 1.0.0
|
35
34
|
type: :development
|
35
|
+
prerelease: false
|
36
36
|
version_requirements: *id002
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: jeweler
|
39
|
-
prerelease: false
|
40
39
|
requirement: &id003 !ruby/object:Gem::Requirement
|
41
40
|
none: false
|
42
41
|
requirements:
|
@@ -44,10 +43,10 @@ dependencies:
|
|
44
43
|
- !ruby/object:Gem::Version
|
45
44
|
version: 1.5.2
|
46
45
|
type: :development
|
46
|
+
prerelease: false
|
47
47
|
version_requirements: *id003
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rcov
|
50
|
-
prerelease: false
|
51
50
|
requirement: &id004 !ruby/object:Gem::Requirement
|
52
51
|
none: false
|
53
52
|
requirements:
|
@@ -55,7 +54,19 @@ dependencies:
|
|
55
54
|
- !ruby/object:Gem::Version
|
56
55
|
version: "0"
|
57
56
|
type: :development
|
57
|
+
prerelease: false
|
58
58
|
version_requirements: *id004
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: rack-test
|
61
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *id005
|
59
70
|
description: disable developers and apis with a key/val lookup
|
60
71
|
email: rjspotter@gmail.com
|
61
72
|
executables: []
|
@@ -66,6 +77,7 @@ extra_rdoc_files:
|
|
66
77
|
- LICENSE.txt
|
67
78
|
- README.rdoc
|
68
79
|
files:
|
80
|
+
- .autotest
|
69
81
|
- .document
|
70
82
|
- .rspec
|
71
83
|
- Gemfile
|
@@ -91,6 +103,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
103
|
requirements:
|
92
104
|
- - ">="
|
93
105
|
- !ruby/object:Gem::Version
|
106
|
+
hash: -860710003
|
107
|
+
segments:
|
108
|
+
- 0
|
94
109
|
version: "0"
|
95
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
111
|
none: false
|
@@ -108,4 +123,3 @@ summary: disable developers and apis
|
|
108
123
|
test_files:
|
109
124
|
- spec/disabler_middleware_spec.rb
|
110
125
|
- spec/spec_helper.rb
|
111
|
-
has_rdoc:
|