rack-stubs 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/.gitignore ADDED
@@ -0,0 +1 @@
1
+ Gemfile.lock
@@ -5,65 +5,64 @@ Feature: Stub Responses
5
5
 
6
6
  Background:
7
7
  Given GET /foo returns 404 with the body "Not Found"
8
- And GET /bar returns 404 with the body "Not Found"
9
- And POST /foo returns 404 with the body "Not Found"
10
- And POST /bar returns 404 with the body "Not Found"
8
+ And GET /bar returns 404 with the body "Not Found"
9
+ And POST /foo returns 404 with the body "Not Found"
10
+ And POST /bar returns 404 with the body "Not Found"
11
11
 
12
12
  Scenario: Stub GET response
13
- When I POST "application/json+rack-stub" to /foo with the body:
13
+ When I POST "application/json+rack-stub" to /foo with the body:
14
14
  """
15
15
  {
16
16
  "GET" : [200, { "header": "value" }, ["jazz"]]
17
17
  }
18
18
  """
19
- Then GET /foo should return 200 with the body "jazz"
20
- And POST /foo should return 404 with the body "Not Found"
19
+ Then GET /foo should return 200 with the body "jazz"
20
+ And POST /foo should return 404 with the body "Not Found"
21
21
 
22
22
  Scenario: Stub POST response
23
- When I POST "application/json+rack-stub" to /bar with the body:
23
+ When I POST "application/json+rack-stub" to /bar with the body:
24
24
  """
25
25
  {
26
26
  "POST" : [200, { "header": "value" }, ["funk"]]
27
27
  }
28
28
  """
29
- Then POST /bar should return 200 with the body "funk"
30
- And GET /foo should return 404 with the body "Not Found"
29
+ Then POST /bar should return 200 with the body "funk"
30
+ And GET /foo should return 404 with the body "Not Found"
31
31
 
32
32
  Scenario: Clear all stub responses
33
- When I POST "application/json+rack-stub" to /foo with the body:
33
+ When I POST "application/json+rack-stub" to /foo with the body:
34
34
  """
35
35
  {
36
36
  "GET" : [200, { "header": "value" }, ["soul"]]
37
37
  }
38
38
  """
39
- And I POST "application/json+rack-stub" to /bar with the body:
39
+ And I POST "application/json+rack-stub" to /bar with the body:
40
40
  """
41
41
  {
42
42
  "POST" : [200, { "header": "value" }, ["brother"]]
43
43
  }
44
44
  """
45
- When I POST "application/json+rack-stub" to /rack_stubs/clear with the body:
45
+ When I POST "application/json+rack-stub" to /rack_stubs/clear with the body:
46
46
  """
47
47
  """
48
- Then GET /foo should return 404 with the body "Not Found"
49
- And POST /bar should return 404 with the body "Not Found"
48
+ Then GET /foo should return 404 with the body "Not Found"
49
+ And POST /bar should return 404 with the body "Not Found"
50
50
 
51
51
  Scenario: List all stub responses
52
- Then GET /rack_stubs/list should return 200 with the body "{}"
53
- When I POST "application/json+rack-stub" to /foo with the body:
52
+ Then GET /rack_stubs/list should return 200 with the body "{}"
53
+ When I POST "application/json+rack-stub" to /foo with the body:
54
54
  """
55
55
  {
56
56
  "GET" : [200, { "header": "value" }, ["salsa"]]
57
57
  }
58
58
  """
59
- And I POST "application/json+rack-stub" to /bar with the body:
59
+ And I POST "application/json+rack-stub" to /bar with the body:
60
60
  """
61
61
  {
62
62
  "POST" : [200, { "header": "value" }, ["chicken"]]
63
63
  }
64
64
  """
65
- Then GET /rack_stubs/list should return 200 with the body:
65
+ Then GET /rack_stubs/list should return 200 with the body:
66
66
  """
67
67
  {"/foo":{"GET":[200,{"header":"value"},["salsa"]]},"/bar":{"POST":[200,{"header":"value"},["chicken"]]}}
68
- """
69
-
68
+ """
@@ -19,6 +19,11 @@ module RackStubs
19
19
  def post(path)
20
20
  PathSpecification.new(service_url(path), 'POST', @rest_client)
21
21
  end
22
+
23
+ def clear_all!
24
+ @rest_client.post(service_url("rack_stubs/clear"), "", {"Content-Type" => "application/json+rack-stub"})
25
+ end
26
+
22
27
  end
23
28
 
24
29
  class PathSpecification
@@ -11,12 +11,12 @@ module RackStubs
11
11
  def call(env)
12
12
  request = Rack::Request.new(env)
13
13
  if request.path =~ /\/rack_stubs\/clear$/
14
- @stubs = {}
14
+ clear_all!
15
15
  ok
16
16
  elsif request.path =~ /\/rack_stubs\/list$/
17
17
  [200, {"Content-Type" => "text/plain"}, [@stubs.to_json]]
18
18
  elsif request.content_type == "application/json+rack-stub"
19
- setup_stub(request.path, JSON.parse(request.body.read.to_s))
19
+ @stubs[request.path] = JSON.parse(request.body.read.to_s)
20
20
  ok
21
21
  elsif @stubs.include?(request.path) &&
22
22
  @stubs[request.path].include?(request.request_method)
@@ -25,30 +25,30 @@ module RackStubs
25
25
  @app.call(env)
26
26
  end
27
27
  end
28
-
29
- def setup_stub(path, http_verb_behaviours_hash)
30
- @stubs[path] = http_verb_behaviours_hash
31
- end
32
28
 
33
29
  def get(path)
34
- PathSpecification.new(path, "GET", self)
30
+ PathSpecification.new(@stubs, path, 'GET')
35
31
  end
36
32
 
37
33
  def post(path)
38
- PathSpecification.new(path, "POST", self)
34
+ PathSpecification.new(@stubs, path, 'POST')
35
+ end
36
+
37
+ def clear_all!
38
+ @stubs = {}
39
39
  end
40
-
41
- private
42
40
 
43
41
  class PathSpecification
44
- def initialize(path, http_verb, middleware)
45
- @path, @http_verb, @middleware = path, http_verb, middleware
42
+ def initialize(stubs, path, verb)
43
+ @stubs, @path, @verb = stubs, path, verb
46
44
  end
47
45
 
48
46
  def returns(status, headers, body)
49
- @middleware.setup_stub(@path, { @http_verb => [status, headers, body] })
47
+ (@stubs[@path] ||= {})[@verb] = [status, headers, body]
50
48
  end
51
49
  end
50
+
51
+ private
52
52
 
53
53
  def ok
54
54
  [200, {"Content-Type" => "text/plain"}, ["OK"]]
data/lib/rack_stubs.rb CHANGED
@@ -2,7 +2,7 @@ lib = File.dirname(__FILE__)
2
2
  $:.unshift(lib) unless $:.include?(lib) || $:.include?(File.expand_path(lib))
3
3
 
4
4
  module RackStubs
5
- VERSION = '0.0.1'
5
+ VERSION = '0.0.2'
6
6
  end
7
7
 
8
8
  require 'rack_stubs/middleware'
data/rack-stubs.gemspec CHANGED
@@ -15,9 +15,12 @@ Gem::Specification.new do |s|
15
15
  s.add_dependency 'rack', '~> 1.2.1'
16
16
  s.add_dependency 'rest-client', '~> 1.4.2'
17
17
 
18
+ s.add_development_dependency 'rspec', '~> 2.2.0'
19
+ s.add_development_dependency 'cucumber', '~> 0.10.0'
20
+
18
21
  s.rubygems_version = "1.3.7"
19
22
  s.files = `git ls-files`.split("\n")
20
- s.test_files = `git ls-files -- {features,spec}/*`.split("\n")
23
+ s.test_files = `git ls-files -- {features}/*`.split("\n")
21
24
  s.extra_rdoc_files = ["README.rdoc"]
22
25
  s.require_path = "lib"
23
26
  end
@@ -67,5 +67,10 @@ module RackStubs
67
67
  Client.new("http://path/with/a/trailing/slash/", @rest_client).get("anything").returns(200, { }, "")
68
68
  end
69
69
 
70
+ it "clears all stubs" do
71
+ @rest_client.should_receive(:post).with("http://path/to/service/rack_stubs/clear", '', {"Content-Type" => "application/json+rack-stub"})
72
+ @client.clear_all!
73
+ end
74
+
70
75
  end
71
76
  end
@@ -17,5 +17,19 @@ module RackStubs
17
17
  middleware.post("/bar").returns(200, {}, "OK!")
18
18
  middleware.call(env).should == [200, {}, "OK!"]
19
19
  end
20
+
21
+ it "clears all stubs" do
22
+ app = mock("app")
23
+ middleware = Middleware.new(app)
24
+ middleware.get("/foo").returns(200, {}, "found!")
25
+ middleware.post("/bar").returns(200, {}, "OK!")
26
+ middleware.clear_all!
27
+ get_env = Rack::MockRequest.env_for("/foo")
28
+ post_env = Rack::MockRequest.env_for("/bar")
29
+ app.should_receive('call').with(get_env)
30
+ app.should_receive('call').with(post_env)
31
+ middleware.call(get_env)
32
+ middleware.call(post_env)
33
+ end
20
34
  end
21
35
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-stubs
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Josh Chisholm
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-10 00:00:00 +00:00
18
+ date: 2011-03-30 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -66,6 +66,38 @@ dependencies:
66
66
  version: 1.4.2
67
67
  type: :runtime
68
68
  version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ hash: 7
78
+ segments:
79
+ - 2
80
+ - 2
81
+ - 0
82
+ version: 2.2.0
83
+ type: :development
84
+ version_requirements: *id004
85
+ - !ruby/object:Gem::Dependency
86
+ name: cucumber
87
+ prerelease: false
88
+ requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ hash: 55
94
+ segments:
95
+ - 0
96
+ - 10
97
+ - 0
98
+ version: 0.10.0
99
+ type: :development
100
+ version_requirements: *id005
69
101
  description: Makes rack apps deliver stub responses
70
102
  email: joshuachisholm@gmail.com
71
103
  executables: []
@@ -75,6 +107,7 @@ extensions: []
75
107
  extra_rdoc_files:
76
108
  - README.rdoc
77
109
  files:
110
+ - .gitignore
78
111
  - Gemfile
79
112
  - README.rdoc
80
113
  - features/step_definitions/steps.rb
@@ -122,12 +155,6 @@ rubyforge_project:
122
155
  rubygems_version: 1.4.1
123
156
  signing_key:
124
157
  specification_version: 3
125
- summary: rack-stubs-0.0.1
126
- test_files:
127
- - features/step_definitions/steps.rb
128
- - features/stub_responses.feature
129
- - features/support/env.rb
130
- - features/support/web_server.rb
131
- - spec/rack_stubs/client_spec.rb
132
- - spec/rack_stubs/middleware_spec.rb
133
- - spec/spec_helper.rb
158
+ summary: rack-stubs-0.0.2
159
+ test_files: []
160
+