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.
@@ -0,0 +1 @@
1
+ Autotest.add_discovery { "rspec2" }
data/Gemfile CHANGED
@@ -10,4 +10,5 @@ group :development do
10
10
  gem "bundler", "~> 1.0.0"
11
11
  gem "jeweler", "~> 1.5.2"
12
12
  gem "rcov", ">= 0"
13
+ gem "rack-test"
13
14
  end
@@ -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)
@@ -1,6 +1,16 @@
1
1
  = disabler_middleware
2
2
 
3
- Description goes here.
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
1
+ 0.0.2
@@ -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.1"
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-14}
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
 
@@ -3,13 +3,42 @@ module Rack
3
3
 
4
4
  class Disabler
5
5
 
6
- def initialize(app, options = {}, &block)
7
- @app, @store, @responses = app, options[:store], (options[:responses] || {})
8
- @extractor = block || lambda {|env| }
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
- @responses[@store.get(@extractor.call(env))] || @app.call(env)
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,{:store => store, :responses => {}})
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
- :store => store,
56
- :responses => {
57
- 'freeloader' => [402, {}, ['Payment Required']]
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,{:store => store}) {|env| "alloweddeveloperkey"}
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.1
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-14 00:00:00 Z
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: