rack-test 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,19 @@
1
+ == 0.4.0 / 2009-06-25
2
+
3
+ * Minor enhancements
4
+
5
+ * Expose hook for building Rack::MockSessions for frameworks that need
6
+ to configure them before use
7
+ * Support passing in arrays of raw cookies in addition to a newline
8
+ separated string
9
+ * Support after_request callbacks in MockSession for things like running
10
+ background jobs
11
+ * Allow multiple named sessions using with_session
12
+ * Initialize Rack::Test::Sessions with Rack::MockSessions instead of apps.
13
+ This change should help integration with other Ruby web frameworks
14
+ (like Merb).
15
+ * Support sending bodies for PUT requests (Larry Diehl)
16
+
1
17
  == 0.3.0 / 2009-05-17
2
18
 
3
19
  * Major enhancements
@@ -3,12 +3,18 @@ module Rack
3
3
  class MockSession
4
4
  attr_writer :cookie_jar
5
5
  attr_reader :last_response
6
+ attr_reader :default_host
6
7
 
7
8
  def initialize(app, default_host = Rack::Test::DEFAULT_HOST)
8
9
  @app = app
10
+ @after_request = []
9
11
  @default_host = default_host
10
12
  end
11
13
 
14
+ def after_request(&block)
15
+ @after_request << block
16
+ end
17
+
12
18
  def clear_cookies
13
19
  @cookie_jar = Rack::Test::CookieJar.new([], @default_host)
14
20
  end
@@ -24,6 +30,7 @@ module Rack
24
30
  @last_response = MockResponse.new(status, headers, body, env["rack.errors"].flush)
25
31
  cookie_jar.merge(last_response.headers["Set-Cookie"], uri)
26
32
 
33
+ @after_request.each { |hook| hook.call }
27
34
  @last_response
28
35
  end
29
36
 
@@ -14,7 +14,7 @@ require "rack/test/uploaded_file"
14
14
  module Rack
15
15
  module Test
16
16
 
17
- VERSION = "0.3.0"
17
+ VERSION = "0.4.0"
18
18
 
19
19
  DEFAULT_HOST = "example.org"
20
20
  MULTIPART_BOUNDARY = "----------XnJLe9ZIbbGUYtzPQJ16u1"
@@ -29,10 +29,10 @@ module Rack
29
29
  def_delegators :@rack_mock_session, :clear_cookies, :set_cookie, :last_response, :last_request
30
30
 
31
31
  # Initialize a new session for the given Rack app
32
- def initialize(app, default_host = DEFAULT_HOST)
32
+ def initialize(mock_session)
33
33
  @headers = {}
34
- @default_host = default_host
35
- @rack_mock_session = Rack::MockSession.new(app, default_host)
34
+ @rack_mock_session = mock_session
35
+ @default_host = mock_session.default_host
36
36
  end
37
37
 
38
38
  # Issue a GET request for the given URI with the given params and Rack
@@ -147,7 +147,8 @@ module Rack
147
147
  env.update("HTTPS" => "on") if URI::HTTPS === uri
148
148
  env["X-Requested-With"] = "XMLHttpRequest" if env[:xhr]
149
149
 
150
- if (env[:method] == "POST" || env["REQUEST_METHOD"] == "POST") && !env.has_key?(:input)
150
+ if (env[:method] == "POST" || env["REQUEST_METHOD"] == "POST" ||
151
+ env[:method] == "PUT" || env["REQUEST_METHOD"] == "PUT") && !env.has_key?(:input)
151
152
  env["CONTENT_TYPE"] = "application/x-www-form-urlencoded"
152
153
 
153
154
  multipart = (Hash === env[:params]) &&
@@ -116,7 +116,7 @@ module Rack
116
116
  def merge(raw_cookies, uri = nil)
117
117
  return unless raw_cookies
118
118
 
119
- raw_cookies.each_line do |raw_cookie|
119
+ Array(raw_cookies).join("\n").split("\n").each do |raw_cookie|
120
120
  cookie = Cookie.new(raw_cookie, uri, @default_host)
121
121
  self << cookie if cookie.valid?(uri)
122
122
  end
@@ -5,12 +5,40 @@ module Rack
5
5
  module Methods
6
6
  extend Forwardable
7
7
 
8
- def rack_test_session
9
- @_rack_test_session ||= Rack::Test::Session.new(app)
8
+ def rack_mock_session(name = :default)
9
+ return build_rack_mock_session unless name
10
+
11
+ @_rack_mock_sessions ||= {}
12
+ @_rack_mock_sessions[name] ||= build_rack_mock_session
13
+ end
14
+
15
+ def build_rack_mock_session
16
+ Rack::MockSession.new(app)
17
+ end
18
+
19
+ def rack_test_session(name = :default)
20
+ return build_rack_test_session(name) unless name
21
+
22
+ @_rack_test_sessions ||= {}
23
+ @_rack_test_sessions[name] ||= build_rack_test_session(name)
24
+ end
25
+
26
+ def build_rack_test_session(name)
27
+ Rack::Test::Session.new(rack_mock_session(name))
28
+ end
29
+
30
+ def current_session
31
+ rack_test_session(_current_session_names.last)
32
+ end
33
+
34
+ def with_session(name)
35
+ _current_session_names.push(name)
36
+ yield rack_test_session(name)
37
+ _current_session_names.pop
10
38
  end
11
39
 
12
- def rack_mock_session
13
- @_rack_mock_session ||= Rack::MockSession.new(app)
40
+ def _current_session_names
41
+ @_current_session_names ||= [:default]
14
42
  end
15
43
 
16
44
  METHODS = [
@@ -39,7 +67,7 @@ module Rack
39
67
  :last_request
40
68
  ]
41
69
 
42
- def_delegators :rack_test_session, *METHODS
70
+ def_delegators :current_session, *METHODS
43
71
  end
44
72
  end
45
73
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-test
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Helmkamp
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-17 00:00:00 -04:00
12
+ date: 2009-06-25 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -58,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
58
  requirements: []
59
59
 
60
60
  rubyforge_project:
61
- rubygems_version: 1.3.3
61
+ rubygems_version: 1.3.4
62
62
  signing_key:
63
63
  specification_version: 3
64
64
  summary: Simple testing API built on Rack