rack-test 0.6.3 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -26,10 +26,12 @@ module Rack
26
26
  @content_type = content_type
27
27
  @original_filename = ::File.basename(path)
28
28
 
29
- @tempfile = Tempfile.new(@original_filename)
29
+ @tempfile = Tempfile.new([@original_filename, ::File.extname(path)])
30
30
  @tempfile.set_encoding(Encoding::BINARY) if @tempfile.respond_to?(:set_encoding)
31
31
  @tempfile.binmode if binary
32
32
 
33
+ ObjectSpace.define_finalizer(self, self.class.finalize(@tempfile))
34
+
33
35
  FileUtils.copy_file(path, @tempfile.path)
34
36
  end
35
37
 
@@ -47,6 +49,15 @@ module Rack
47
49
  @tempfile.respond_to?(method_name, include_private) || super
48
50
  end
49
51
 
52
+ def self.finalize(file)
53
+ proc { actually_finalize file }
54
+ end
55
+
56
+ def self.actually_finalize(file)
57
+ file.close
58
+ file.unlink
59
+ end
60
+
50
61
  end
51
62
 
52
63
  end
@@ -3,16 +3,21 @@ module Rack
3
3
 
4
4
  module Utils # :nodoc:
5
5
  include Rack::Utils
6
+ extend Rack::Utils
6
7
 
7
8
  def build_nested_query(value, prefix = nil)
8
9
  case value
9
10
  when Array
10
- value.map do |v|
11
- unless unescape(prefix) =~ /\[\]$/
12
- prefix = "#{prefix}[]"
13
- end
14
- build_nested_query(v, "#{prefix}")
15
- end.join("&")
11
+ if value.empty?
12
+ "#{prefix}[]="
13
+ else
14
+ value.map do |v|
15
+ unless unescape(prefix) =~ /\[\]$/
16
+ prefix = "#{prefix}[]"
17
+ end
18
+ build_nested_query(v, "#{prefix}")
19
+ end.join("&")
20
+ end
16
21
  when Hash
17
22
  value.map do |k, v|
18
23
  build_nested_query(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
@@ -23,16 +28,14 @@ module Rack
23
28
  "#{prefix}=#{escape(value)}"
24
29
  end
25
30
  end
26
-
27
31
  module_function :build_nested_query
28
32
 
29
- def build_multipart(params, first = true)
33
+ def build_multipart(params, first = true, multipart = false)
30
34
  if first
31
35
  unless params.is_a?(Hash)
32
36
  raise ArgumentError, "value must be a Hash"
33
37
  end
34
38
 
35
- multipart = false
36
39
  query = lambda { |value|
37
40
  case value
38
41
  when Array
@@ -83,13 +86,13 @@ module Rack
83
86
  flattened_params
84
87
  end
85
88
  end
86
-
87
89
  module_function :build_multipart
88
90
 
89
- private
91
+ private
90
92
  def build_parts(parameters)
91
93
  get_parts(parameters).join + "--#{MULTIPART_BOUNDARY}--\r"
92
94
  end
95
+ module_function :build_parts
93
96
 
94
97
  def get_parts(parameters)
95
98
  parameters.map { |name, value|
@@ -115,13 +118,14 @@ module Rack
115
118
  end
116
119
  }
117
120
  end
121
+ module_function :get_parts
118
122
 
119
123
  def build_primitive_part(parameter_name, value)
120
124
  unless value.is_a? Array
121
125
  value = [value]
122
126
  end
123
127
  value.map do |v|
124
- <<-EOF
128
+ <<-EOF
125
129
  --#{MULTIPART_BOUNDARY}\r
126
130
  Content-Disposition: form-data; name="#{parameter_name}"\r
127
131
  \r
@@ -129,11 +133,12 @@ Content-Disposition: form-data; name="#{parameter_name}"\r
129
133
  EOF
130
134
  end.join
131
135
  end
136
+ module_function :build_primitive_part
132
137
 
133
138
  def build_file_part(parameter_name, uploaded_file)
134
139
  ::File.open(uploaded_file.path, "rb") do |physical_file|
135
140
  physical_file.set_encoding(Encoding::BINARY) if physical_file.respond_to?(:set_encoding)
136
- <<-EOF
141
+ <<-EOF
137
142
  --#{MULTIPART_BOUNDARY}\r
138
143
  Content-Disposition: form-data; name="#{parameter_name}"; filename="#{escape(uploaded_file.original_filename)}"\r
139
144
  Content-Type: #{uploaded_file.content_type}\r
@@ -143,6 +148,7 @@ Content-Length: #{::File.stat(uploaded_file.path).size}\r
143
148
  EOF
144
149
  end
145
150
  end
151
+ module_function :build_file_part
146
152
 
147
153
  end
148
154
 
@@ -0,0 +1,5 @@
1
+ module Rack
2
+ module Test
3
+ VERSION = '0.7.0'.freeze
4
+ end
5
+ 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.6.3
5
- prerelease:
4
+ version: 0.7.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: 2015-01-09 00:00:00.000000000 Z
11
+ date: 2017-07-10 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
- description: ! 'Rack::Test is a small, simple testing API for Rack apps. It can be
31
- used on its
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
- to build on. Most of its initial functionality is an extraction of Merb 1.0''s
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
- - .document
46
- - .gitignore
47
- - Gemfile
48
- - Gemfile.lock
49
- - History.txt
153
+ - History.md
50
154
  - MIT-LICENSE.txt
51
- - README.rdoc
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-test.gemspec
62
- - spec/fixtures/bar.txt
63
- - spec/fixtures/config.ru
64
- - spec/fixtures/fake_app.rb
65
- - spec/fixtures/foo.txt
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
176
  version: '0'
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: rack-test
95
- rubygems_version: 1.8.23.2
183
+ rubyforge_project:
184
+ rubygems_version: 2.6.11
96
185
  signing_key:
97
- specification_version: 3
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: []
data/.document DELETED
@@ -1,4 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- History.txt
4
- MIT-LICENSE.txt
data/.gitignore DELETED
@@ -1,6 +0,0 @@
1
- pkg
2
- doc
3
- coverage
4
- VERSION
5
- *.rbc
6
- .bundle
data/Gemfile DELETED
@@ -1,8 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rspec'
4
- gem "rack"
5
- gem "sinatra"
6
- gem 'rake'
7
-
8
- gem "codeclimate-test-reporter", group: :test, require: nil
@@ -1,41 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- codeclimate-test-reporter (0.3.0)
5
- simplecov (>= 0.7.1, < 1.0.0)
6
- diff-lcs (1.2.3)
7
- docile (1.1.3)
8
- multi_json (1.9.0)
9
- rack (1.5.2)
10
- rack-protection (1.5.0)
11
- rack
12
- rake (10.0.4)
13
- rspec (2.13.0)
14
- rspec-core (~> 2.13.0)
15
- rspec-expectations (~> 2.13.0)
16
- rspec-mocks (~> 2.13.0)
17
- rspec-core (2.13.1)
18
- rspec-expectations (2.13.0)
19
- diff-lcs (>= 1.1.3, < 2.0)
20
- rspec-mocks (2.13.1)
21
- simplecov (0.8.2)
22
- docile (~> 1.1.0)
23
- multi_json
24
- simplecov-html (~> 0.8.0)
25
- simplecov-html (0.8.0)
26
- sinatra (1.4.2)
27
- rack (~> 1.5, >= 1.5.2)
28
- rack-protection (~> 1.4)
29
- tilt (~> 1.3, >= 1.3.4)
30
- tilt (1.3.7)
31
-
32
- PLATFORMS
33
- java
34
- ruby
35
-
36
- DEPENDENCIES
37
- codeclimate-test-reporter
38
- rack
39
- rake
40
- rspec
41
- sinatra
@@ -1,85 +0,0 @@
1
- = Rack::Test {<img src="https://codeclimate.com/github/brynary/rack-test.png" />}[https://codeclimate.com/github/brynary/rack-test] {<img src="https://codeclimate.com/github/brynary/rack-test/coverage.png" />}[https://codeclimate.com/github/brynary/rack-test]
2
-
3
- - Code: http://github.com/brynary/rack-test
4
-
5
- == Description
6
-
7
- Rack::Test is a small, simple testing API for Rack apps. It can be used on its
8
- own or as a reusable starting point for Web frameworks and testing libraries
9
- to build on. Most of its initial functionality is an extraction of Merb 1.0's
10
- request helpers feature.
11
-
12
- == Features
13
-
14
- * Maintains a cookie jar across requests
15
- * Easily follow redirects when desired
16
- * Set request headers to be used by all subsequent requests
17
- * Small footprint. Approximately 200 LOC
18
-
19
- == Examples
20
-
21
- require "rack/test"
22
-
23
- class HomepageTest < Test::Unit::TestCase
24
- include Rack::Test::Methods
25
-
26
- def app
27
- MyApp.new
28
- end
29
-
30
- def test_redirect_logged_in_users_to_dashboard
31
- authorize "bryan", "secret"
32
- get "/"
33
- follow_redirect!
34
-
35
- assert_equal "http://example.org/redirected", last_request.url
36
- assert last_response.ok?
37
- end
38
-
39
- end
40
-
41
-
42
- If you want to test one app in isolation, you just return that app as shown above. But if you want to test the entire app stack, including middlewares, cascades etc. you need to parse the app defined in config.ru.
43
-
44
- OUTER_APP = Rack::Builder.parse_file('config.ru').first
45
-
46
- class TestApp < Test::Unit::TestCase
47
- include Rack::Test::Methods
48
-
49
- def app
50
- OUTER_APP
51
- end
52
-
53
- def test_root
54
- get '/'
55
- assert last_response.ok?
56
- end
57
- end
58
-
59
-
60
- == Install
61
-
62
- To install the latest release as a gem:
63
-
64
- sudo gem install rack-test
65
-
66
- Or via Bundler:
67
-
68
- gem "rack-test", require: "rack/test"
69
-
70
- == Authors
71
-
72
- - Maintained by {Bryan Helmkamp}[mailto:bryan@brynary.com]
73
- - Contributions from Simon Rozet, Pat Nakajima and others
74
- - Much of the original code was extracted from Merb 1.0's request helper
75
-
76
- == License
77
-
78
- Copyright (c) 2008-2009 Bryan Helmkamp, Engine Yard Inc.
79
- See MIT-LICENSE.txt in this directory.
80
-
81
- == Releasing
82
-
83
- * Ensure History.txt is up-to-date
84
- * Bump VERSION in lib/rack/test.rb
85
- * thor :release