rack-test 0.6.3 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/History.md +243 -0
- data/README.md +148 -0
- data/lib/rack/mock_session.rb +6 -9
- data/lib/rack/test/cookie_jar.rb +39 -27
- data/lib/rack/test/methods.rb +22 -22
- data/lib/rack/test/mock_digest_request.rb +1 -5
- data/lib/rack/test/uploaded_file.rb +51 -19
- data/lib/rack/test/utils.rb +37 -43
- data/lib/rack/test/version.rb +5 -0
- data/lib/rack/test.rb +94 -85
- metadata +139 -60
- data/.document +0 -4
- data/.gitignore +0 -6
- data/Gemfile +0 -8
- data/Gemfile.lock +0 -41
- data/History.txt +0 -179
- data/README.rdoc +0 -85
- data/Rakefile +0 -33
- data/Thorfile +0 -114
- data/rack-test.gemspec +0 -77
- data/spec/fixtures/bar.txt +0 -1
- data/spec/fixtures/config.ru +0 -3
- data/spec/fixtures/fake_app.rb +0 -143
- data/spec/fixtures/foo.txt +0 -1
- data/spec/rack/test/cookie_spec.rb +0 -219
- data/spec/rack/test/digest_auth_spec.rb +0 -46
- data/spec/rack/test/multipart_spec.rb +0 -145
- data/spec/rack/test/uploaded_file_spec.rb +0 -24
- data/spec/rack/test/utils_spec.rb +0 -193
- data/spec/rack/test_spec.rb +0 -550
- data/spec/spec_helper.rb +0 -69
- data/spec/support/matchers/body.rb +0 -9
- data/spec/support/matchers/challenge.rb +0 -11
data/lib/rack/test.rb
CHANGED
@@ -1,18 +1,17 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
1
|
+
require 'uri'
|
2
|
+
require 'rack'
|
3
|
+
require 'rack/mock_session'
|
4
|
+
require 'rack/test/cookie_jar'
|
5
|
+
require 'rack/test/mock_digest_request'
|
6
|
+
require 'rack/test/utils'
|
7
|
+
require 'rack/test/methods'
|
8
|
+
require 'rack/test/uploaded_file'
|
9
|
+
require 'rack/test/version'
|
9
10
|
|
10
11
|
module Rack
|
11
12
|
module Test
|
12
|
-
|
13
|
-
|
14
|
-
DEFAULT_HOST = "example.org"
|
15
|
-
MULTIPART_BOUNDARY = "----------XnJLe9ZIbbGUYtzPQJ16u1"
|
13
|
+
DEFAULT_HOST = 'example.org'.freeze
|
14
|
+
MULTIPART_BOUNDARY = '----------XnJLe9ZIbbGUYtzPQJ16u1'.freeze
|
16
15
|
|
17
16
|
# The common base class for exceptions raised by Rack::Test
|
18
17
|
class Error < StandardError; end
|
@@ -36,11 +35,13 @@ module Rack
|
|
36
35
|
def initialize(mock_session)
|
37
36
|
@headers = {}
|
38
37
|
@env = {}
|
38
|
+
@digest_username = nil
|
39
|
+
@digest_password = nil
|
39
40
|
|
40
|
-
if mock_session.is_a?(MockSession)
|
41
|
-
|
41
|
+
@rack_mock_session = if mock_session.is_a?(MockSession)
|
42
|
+
mock_session
|
42
43
|
else
|
43
|
-
|
44
|
+
MockSession.new(mock_session)
|
44
45
|
end
|
45
46
|
|
46
47
|
@default_host = @rack_mock_session.default_host
|
@@ -54,8 +55,7 @@ module Rack
|
|
54
55
|
# Example:
|
55
56
|
# get "/"
|
56
57
|
def get(uri, params = {}, env = {}, &block)
|
57
|
-
|
58
|
-
process_request(uri, env, &block)
|
58
|
+
custom_request('GET', uri, params, env, &block)
|
59
59
|
end
|
60
60
|
|
61
61
|
# Issue a POST request for the given URI. See #get
|
@@ -63,8 +63,7 @@ module Rack
|
|
63
63
|
# Example:
|
64
64
|
# post "/signup", "name" => "Bryan"
|
65
65
|
def post(uri, params = {}, env = {}, &block)
|
66
|
-
|
67
|
-
process_request(uri, env, &block)
|
66
|
+
custom_request('POST', uri, params, env, &block)
|
68
67
|
end
|
69
68
|
|
70
69
|
# Issue a PUT request for the given URI. See #get
|
@@ -72,8 +71,7 @@ module Rack
|
|
72
71
|
# Example:
|
73
72
|
# put "/"
|
74
73
|
def put(uri, params = {}, env = {}, &block)
|
75
|
-
|
76
|
-
process_request(uri, env, &block)
|
74
|
+
custom_request('PUT', uri, params, env, &block)
|
77
75
|
end
|
78
76
|
|
79
77
|
# Issue a PATCH request for the given URI. See #get
|
@@ -81,8 +79,7 @@ module Rack
|
|
81
79
|
# Example:
|
82
80
|
# patch "/"
|
83
81
|
def patch(uri, params = {}, env = {}, &block)
|
84
|
-
|
85
|
-
process_request(uri, env, &block)
|
82
|
+
custom_request('PATCH', uri, params, env, &block)
|
86
83
|
end
|
87
84
|
|
88
85
|
# Issue a DELETE request for the given URI. See #get
|
@@ -90,8 +87,7 @@ module Rack
|
|
90
87
|
# Example:
|
91
88
|
# delete "/"
|
92
89
|
def delete(uri, params = {}, env = {}, &block)
|
93
|
-
|
94
|
-
process_request(uri, env, &block)
|
90
|
+
custom_request('DELETE', uri, params, env, &block)
|
95
91
|
end
|
96
92
|
|
97
93
|
# Issue an OPTIONS request for the given URI. See #get
|
@@ -99,8 +95,7 @@ module Rack
|
|
99
95
|
# Example:
|
100
96
|
# options "/"
|
101
97
|
def options(uri, params = {}, env = {}, &block)
|
102
|
-
|
103
|
-
process_request(uri, env, &block)
|
98
|
+
custom_request('OPTIONS', uri, params, env, &block)
|
104
99
|
end
|
105
100
|
|
106
101
|
# Issue a HEAD request for the given URI. See #get
|
@@ -108,8 +103,7 @@ module Rack
|
|
108
103
|
# Example:
|
109
104
|
# head "/"
|
110
105
|
def head(uri, params = {}, env = {}, &block)
|
111
|
-
|
112
|
-
process_request(uri, env, &block)
|
106
|
+
custom_request('HEAD', uri, params, env, &block)
|
113
107
|
end
|
114
108
|
|
115
109
|
# Issue a request to the Rack app for the given URI and optional Rack
|
@@ -120,10 +114,21 @@ module Rack
|
|
120
114
|
# Example:
|
121
115
|
# request "/"
|
122
116
|
def request(uri, env = {}, &block)
|
117
|
+
uri = parse_uri(uri, env)
|
123
118
|
env = env_for(uri, env)
|
124
119
|
process_request(uri, env, &block)
|
125
120
|
end
|
126
121
|
|
122
|
+
# Issue a request using the given verb for the given URI. See #get
|
123
|
+
#
|
124
|
+
# Example:
|
125
|
+
# custom_request "LINK", "/"
|
126
|
+
def custom_request(verb, uri, params = {}, env = {}, &block)
|
127
|
+
uri = parse_uri(uri, env)
|
128
|
+
env = env_for(uri, env.merge(method: verb.to_s.upcase, params: params))
|
129
|
+
process_request(uri, env, &block)
|
130
|
+
end
|
131
|
+
|
127
132
|
# Set a header to be included on all subsequent requests through the
|
128
133
|
# session. Use a value of nil to remove a previously configured header.
|
129
134
|
#
|
@@ -159,11 +164,11 @@ module Rack
|
|
159
164
|
# Example:
|
160
165
|
# basic_authorize "bryan", "secret"
|
161
166
|
def basic_authorize(username, password)
|
162
|
-
encoded_login = ["#{username}:#{password}"].pack(
|
167
|
+
encoded_login = ["#{username}:#{password}"].pack('m0')
|
163
168
|
header('Authorization', "Basic #{encoded_login}")
|
164
169
|
end
|
165
170
|
|
166
|
-
|
171
|
+
alias authorize basic_authorize
|
167
172
|
|
168
173
|
# Set the username and password for HTTP Digest authorization, to be
|
169
174
|
# included in subsequent requests in the HTTP_AUTHORIZATION header.
|
@@ -181,73 +186,81 @@ module Rack
|
|
181
186
|
# a redirect, an error will be raised.
|
182
187
|
def follow_redirect!
|
183
188
|
unless last_response.redirect?
|
184
|
-
raise Error
|
189
|
+
raise Error, 'Last response was not a redirect. Cannot follow_redirect!'
|
185
190
|
end
|
186
|
-
|
187
|
-
|
191
|
+
request_method, params =
|
192
|
+
if last_response.status == 307
|
193
|
+
[last_request.request_method.downcase.to_sym, last_request.params]
|
194
|
+
else
|
195
|
+
[:get, {}]
|
196
|
+
end
|
197
|
+
send(
|
198
|
+
request_method, last_response['Location'], params,
|
199
|
+
'HTTP_REFERER' => last_request.url,
|
200
|
+
'rack.session' => last_request.session
|
201
|
+
)
|
188
202
|
end
|
189
203
|
|
190
|
-
|
204
|
+
private
|
191
205
|
|
192
|
-
def
|
193
|
-
|
194
|
-
|
195
|
-
|
206
|
+
def parse_uri(path, env)
|
207
|
+
URI.parse(path).tap do |uri|
|
208
|
+
uri.path = "/#{uri.path}" unless uri.path[0] == '/'
|
209
|
+
uri.host ||= @default_host
|
210
|
+
uri.scheme ||= 'https' if env['HTTPS'] == 'on'
|
211
|
+
end
|
212
|
+
end
|
196
213
|
|
214
|
+
def env_for(uri, env)
|
197
215
|
env = default_env.merge(env)
|
198
216
|
|
199
|
-
env[
|
217
|
+
env['HTTP_HOST'] ||= [uri.host, (uri.port if uri.port != uri.default_port)].compact.join(':')
|
200
218
|
|
201
|
-
env.update(
|
202
|
-
env[
|
219
|
+
env.update('HTTPS' => 'on') if URI::HTTPS === uri
|
220
|
+
env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest' if env[:xhr]
|
203
221
|
|
204
222
|
# TODO: Remove this after Rack 1.1 has been released.
|
205
223
|
# Stringifying and upcasing methods has be commit upstream
|
206
|
-
env[
|
224
|
+
env['REQUEST_METHOD'] ||= env[:method] ? env[:method].to_s.upcase : 'GET'
|
225
|
+
|
226
|
+
params = env.delete(:params) do {} end
|
207
227
|
|
208
|
-
if env[
|
228
|
+
if env['REQUEST_METHOD'] == 'GET'
|
209
229
|
# merge :params with the query string
|
210
|
-
if params
|
230
|
+
if params
|
211
231
|
params = parse_nested_query(params) if params.is_a?(String)
|
212
|
-
|
213
|
-
uri.query = build_nested_query(params)
|
232
|
+
|
233
|
+
uri.query = [uri.query, build_nested_query(params)].compact.reject { |v| v == '' }.join('&')
|
214
234
|
end
|
215
|
-
elsif !env.
|
216
|
-
env[
|
235
|
+
elsif !env.key?(:input)
|
236
|
+
env['CONTENT_TYPE'] ||= 'application/x-www-form-urlencoded'
|
217
237
|
|
218
|
-
if
|
219
|
-
if data = build_multipart(
|
238
|
+
if params.is_a?(Hash)
|
239
|
+
if data = build_multipart(params)
|
220
240
|
env[:input] = data
|
221
|
-
env[
|
222
|
-
env[
|
241
|
+
env['CONTENT_LENGTH'] ||= data.length.to_s
|
242
|
+
env['CONTENT_TYPE'] = "multipart/form-data; boundary=#{MULTIPART_BOUNDARY}"
|
223
243
|
else
|
224
|
-
|
244
|
+
# NB: We do not need to set CONTENT_LENGTH here;
|
245
|
+
# Rack::ContentLength will determine it automatically.
|
246
|
+
env[:input] = params_to_string(params)
|
225
247
|
end
|
226
248
|
else
|
227
|
-
env[:input] =
|
249
|
+
env[:input] = params
|
228
250
|
end
|
229
251
|
end
|
230
252
|
|
231
|
-
env.delete(:
|
232
|
-
|
233
|
-
if env.has_key?(:cookie)
|
234
|
-
set_cookie(env.delete(:cookie), uri)
|
235
|
-
end
|
253
|
+
set_cookie(env.delete(:cookie), uri) if env.key?(:cookie)
|
236
254
|
|
237
255
|
Rack::MockRequest.env_for(uri.to_s, env)
|
238
256
|
end
|
239
257
|
|
240
258
|
def process_request(uri, env)
|
241
|
-
uri = URI.parse(uri)
|
242
|
-
uri.host ||= @default_host
|
243
|
-
|
244
259
|
@rack_mock_session.request(uri, env)
|
245
260
|
|
246
261
|
if retry_with_digest_auth?(env)
|
247
|
-
auth_env = env.merge(
|
248
|
-
|
249
|
-
"rack-test.digest_auth_retry" => true
|
250
|
-
})
|
262
|
+
auth_env = env.merge('HTTP_AUTHORIZATION' => digest_auth_header,
|
263
|
+
'rack-test.digest_auth_retry' => true)
|
251
264
|
auth_env.delete('rack.request')
|
252
265
|
process_request(uri.path, auth_env)
|
253
266
|
else
|
@@ -258,26 +271,24 @@ module Rack
|
|
258
271
|
end
|
259
272
|
|
260
273
|
def digest_auth_header
|
261
|
-
challenge = last_response[
|
274
|
+
challenge = last_response['WWW-Authenticate'].split(' ', 2).last
|
262
275
|
params = Rack::Auth::Digest::Params.parse(challenge)
|
263
276
|
|
264
|
-
params.merge!(
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
"method" => last_request.env["REQUEST_METHOD"],
|
270
|
-
})
|
277
|
+
params.merge!('username' => @digest_username,
|
278
|
+
'nc' => '00000001',
|
279
|
+
'cnonce' => 'nonsensenonce',
|
280
|
+
'uri' => last_request.fullpath,
|
281
|
+
'method' => last_request.env['REQUEST_METHOD'])
|
271
282
|
|
272
|
-
params[
|
283
|
+
params['response'] = MockDigestRequest.new(params).response(@digest_password)
|
273
284
|
|
274
285
|
"Digest #{params}"
|
275
286
|
end
|
276
287
|
|
277
288
|
def retry_with_digest_auth?(env)
|
278
289
|
last_response.status == 401 &&
|
279
|
-
|
280
|
-
|
290
|
+
digest_auth_configured? &&
|
291
|
+
!env['rack-test.digest_auth_retry']
|
281
292
|
end
|
282
293
|
|
283
294
|
def digest_auth_configured?
|
@@ -285,15 +296,15 @@ module Rack
|
|
285
296
|
end
|
286
297
|
|
287
298
|
def default_env
|
288
|
-
{
|
299
|
+
{ 'rack.test' => true, 'REMOTE_ADDR' => '127.0.0.1' }.merge(@env).merge(headers_for_env)
|
289
300
|
end
|
290
301
|
|
291
302
|
def headers_for_env
|
292
303
|
converted_headers = {}
|
293
304
|
|
294
305
|
@headers.each do |name, value|
|
295
|
-
env_key = name.upcase.
|
296
|
-
env_key =
|
306
|
+
env_key = name.upcase.tr('-', '_')
|
307
|
+
env_key = 'HTTP_' + env_key unless env_key == 'CONTENT_TYPE'
|
297
308
|
converted_headers[env_key] = value
|
298
309
|
end
|
299
310
|
|
@@ -303,16 +314,14 @@ module Rack
|
|
303
314
|
def params_to_string(params)
|
304
315
|
case params
|
305
316
|
when Hash then build_nested_query(params)
|
306
|
-
when nil then
|
317
|
+
when nil then ''
|
307
318
|
else params
|
308
319
|
end
|
309
320
|
end
|
310
|
-
|
311
321
|
end
|
312
322
|
|
313
323
|
def self.encoding_aware_strings?
|
314
|
-
defined?(Encoding) &&
|
324
|
+
defined?(Encoding) && ''.respond_to?(:encode)
|
315
325
|
end
|
316
|
-
|
317
326
|
end
|
318
327
|
end
|
metadata
CHANGED
@@ -1,56 +1,158 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-test
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Bryan Helmkamp
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2018-03-27 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rack
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '1.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3'
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
25
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '1.0'
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rake
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '12.0'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '12.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.6'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '3.6'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: sinatra
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.0'
|
68
|
+
- - "<"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '3'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.0'
|
78
|
+
- - "<"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '3'
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rdoc
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '5.1'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '5.1'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: rubocop
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0.49'
|
102
|
+
- - "<"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0.50'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0.49'
|
112
|
+
- - "<"
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0.50'
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: codeclimate-test-reporter
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - "~>"
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0.6'
|
122
|
+
type: :development
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - "~>"
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0.6'
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: thor
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - "~>"
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0.19'
|
136
|
+
type: :development
|
137
|
+
prerelease: false
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - "~>"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0.19'
|
143
|
+
description: |-
|
144
|
+
Rack::Test is a small, simple testing API for Rack apps. It can be used on its
|
33
145
|
own or as a reusable starting point for Web frameworks and testing libraries
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
request helpers feature.'
|
146
|
+
to build on. Most of its initial functionality is an extraction of Merb 1.0's
|
147
|
+
request helpers feature.
|
38
148
|
email: bryan@brynary.com
|
39
149
|
executables: []
|
40
150
|
extensions: []
|
41
|
-
extra_rdoc_files:
|
42
|
-
- README.rdoc
|
43
|
-
- MIT-LICENSE.txt
|
151
|
+
extra_rdoc_files: []
|
44
152
|
files:
|
45
|
-
- .
|
46
|
-
- .gitignore
|
47
|
-
- Gemfile
|
48
|
-
- Gemfile.lock
|
49
|
-
- History.txt
|
153
|
+
- History.md
|
50
154
|
- MIT-LICENSE.txt
|
51
|
-
- README.
|
52
|
-
- Rakefile
|
53
|
-
- Thorfile
|
155
|
+
- README.md
|
54
156
|
- lib/rack/mock_session.rb
|
55
157
|
- lib/rack/test.rb
|
56
158
|
- lib/rack/test/cookie_jar.rb
|
@@ -58,52 +160,29 @@ files:
|
|
58
160
|
- lib/rack/test/mock_digest_request.rb
|
59
161
|
- lib/rack/test/uploaded_file.rb
|
60
162
|
- lib/rack/test/utils.rb
|
61
|
-
- rack
|
62
|
-
|
63
|
-
|
64
|
-
-
|
65
|
-
|
66
|
-
- spec/rack/test/cookie_spec.rb
|
67
|
-
- spec/rack/test/digest_auth_spec.rb
|
68
|
-
- spec/rack/test/multipart_spec.rb
|
69
|
-
- spec/rack/test/uploaded_file_spec.rb
|
70
|
-
- spec/rack/test/utils_spec.rb
|
71
|
-
- spec/rack/test_spec.rb
|
72
|
-
- spec/spec_helper.rb
|
73
|
-
- spec/support/matchers/body.rb
|
74
|
-
- spec/support/matchers/challenge.rb
|
75
|
-
homepage: http://github.com/brynary/rack-test
|
76
|
-
licenses: []
|
163
|
+
- lib/rack/test/version.rb
|
164
|
+
homepage: http://github.com/rack-test/rack-test
|
165
|
+
licenses:
|
166
|
+
- MIT
|
167
|
+
metadata: {}
|
77
168
|
post_install_message:
|
78
169
|
rdoc_options: []
|
79
170
|
require_paths:
|
80
171
|
- lib
|
81
172
|
required_ruby_version: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
173
|
requirements:
|
84
|
-
- -
|
174
|
+
- - ">="
|
85
175
|
- !ruby/object:Gem::Version
|
86
|
-
version:
|
176
|
+
version: 2.2.2
|
87
177
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
-
none: false
|
89
178
|
requirements:
|
90
|
-
- -
|
179
|
+
- - ">="
|
91
180
|
- !ruby/object:Gem::Version
|
92
181
|
version: '0'
|
93
182
|
requirements: []
|
94
|
-
rubyforge_project:
|
95
|
-
rubygems_version:
|
183
|
+
rubyforge_project:
|
184
|
+
rubygems_version: 2.7.6
|
96
185
|
signing_key:
|
97
|
-
specification_version:
|
186
|
+
specification_version: 4
|
98
187
|
summary: Simple testing API built on Rack
|
99
|
-
test_files:
|
100
|
-
- spec/fixtures/fake_app.rb
|
101
|
-
- spec/rack/test/cookie_spec.rb
|
102
|
-
- spec/rack/test/digest_auth_spec.rb
|
103
|
-
- spec/rack/test/multipart_spec.rb
|
104
|
-
- spec/rack/test/uploaded_file_spec.rb
|
105
|
-
- spec/rack/test/utils_spec.rb
|
106
|
-
- spec/rack/test_spec.rb
|
107
|
-
- spec/spec_helper.rb
|
108
|
-
- spec/support/matchers/body.rb
|
109
|
-
- spec/support/matchers/challenge.rb
|
188
|
+
test_files: []
|