rack-raw-upload 1.1.0 → 1.1.1

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/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source :rubygems
2
2
 
3
- gem 'json'
3
+ gem 'multi_json'
4
4
 
5
5
  group :development, :test do
6
6
  gem 'rake'
@@ -1,8 +1,7 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- json (1.4.6)
5
- json (1.4.6-java)
4
+ multi_json (1.3.2)
6
5
  rack (1.2.1)
7
6
  rack-test (0.5.6)
8
7
  rack (>= 1.0)
@@ -15,7 +14,7 @@ PLATFORMS
15
14
  ruby
16
15
 
17
16
  DEPENDENCIES
18
- json
17
+ multi_json
19
18
  rack-test
20
19
  rake
21
20
  rr
@@ -1,9 +1,10 @@
1
1
  require 'tmpdir' # Needed in 1.8.7 to access Dir::tmpdir
2
+ require 'multi_json'
2
3
 
3
4
  module Rack
4
5
  class RawUpload
5
6
 
6
- VERSION = '1.1.0'
7
+ VERSION = '1.1.1'
7
8
 
8
9
  def initialize(app, opts = {})
9
10
  @app = app
@@ -43,6 +44,7 @@ module Rack
43
44
  tempfile << chunk
44
45
  end
45
46
  end
47
+ env['rack.input'].rewind
46
48
 
47
49
  tempfile.flush
48
50
  tempfile.rewind
@@ -107,8 +109,7 @@ module Rack
107
109
  end
108
110
 
109
111
  def inject_json_params!(env, params)
110
- require 'json'
111
- hsh = JSON.parse(params)
112
+ hsh = MultiJson.load(params)
112
113
  env['rack.request.form_hash'].merge!(hsh)
113
114
  env['rack.request.query_hash'].merge!(hsh)
114
115
  end
@@ -1,17 +1,44 @@
1
1
  require 'pp'
2
2
  require 'sinatra/base'
3
+ require 'multi_json'
3
4
 
4
5
  class SimpleApp < Sinatra::Base
5
6
 
6
7
  set :root, APP_ROOT
7
8
  set :static, true
9
+ set :public_folder, Proc.new{ File.join(root, 'public') }
10
+ set :upload_dir, Proc.new{ File.join(public_folder, 'uploads') }
11
+
12
+ configure do
13
+ FileUtils.mkdir_p(settings.upload_dir)
14
+ end
8
15
 
9
16
  get '/' do
10
17
  erb :index
11
18
  end
12
19
 
13
20
  post '/' do
14
- Rack::Utils.escape_html(PP.pp(params, ''))
21
+ content_type :json
22
+ dump = Rack::Utils.escape_html(PP.pp(params, ''))
23
+ download_url = file_url(store_file(params[:file]))
24
+ MultiJson.dump({
25
+ :dump => dump,
26
+ :download_url => download_url,
27
+ })
28
+ end
29
+
30
+
31
+ private
32
+
33
+ def store_file(file_param)
34
+ dirpath = Dir.mktmpdir(nil, settings.upload_dir)
35
+ filepath = File.join(dirpath, file_param[:filename])
36
+ FileUtils.mv(file_param[:tempfile], filepath)
37
+ filepath
38
+ end
39
+
40
+ def file_url(path)
41
+ path.gsub(Regexp.new('^' + settings.public_folder), '').tap{|x| pp x}
15
42
  end
16
43
 
17
44
  end
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rack/test'
3
3
  require 'shoulda'
4
4
  require 'rack-raw-upload'
5
- require 'json'
5
+ require 'multi_json'
6
6
  require 'digest'
7
7
  require 'rr'
8
8
 
@@ -120,6 +120,11 @@ class RawUploadTest < Test::Unit::TestCase
120
120
  assert_successful_non_upload
121
121
  end
122
122
 
123
+ should "leave rack.input in a state readable by other middlewares" do
124
+ upload
125
+ assert !last_request.env['rack.input'].eof?, "rack.input should be rewind'd"
126
+ end
127
+
123
128
  context "when garbage collection runs (Ruby 1.9)" do
124
129
  context "and the file is received as a Tempfile" do
125
130
  should "ensure that the uploaded file remains" do
@@ -198,7 +203,7 @@ class RawUploadTest < Test::Unit::TestCase
198
203
 
199
204
  context "with JSON parameters" do
200
205
  setup do
201
- upload('HTTP_X_JSON_PARAMS' => JSON.generate({
206
+ upload('HTTP_X_JSON_PARAMS' => MultiJson.dump({
202
207
  :argument => 'value1',
203
208
  'argument with spaces' => 'value 2'
204
209
  }))
@@ -223,7 +228,7 @@ class RawUploadTest < Test::Unit::TestCase
223
228
 
224
229
  context "with query parameters, deprecated style" do
225
230
  setup do
226
- json_params = JSON.generate({
231
+ json_params = MultiJson.dump({
227
232
  :argument => 'value1',
228
233
  'argument with spaces' => 'value 2'
229
234
  })
metadata CHANGED
@@ -1,70 +1,72 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-raw-upload
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 1
8
- - 0
9
- version: 1.1.0
4
+ prerelease:
5
+ version: 1.1.1
10
6
  platform: ruby
11
7
  authors:
12
- - Pablo Brasero
8
+ - Pablo Brasero
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2012-04-24 00:00:00 +01:00
18
- default_executable:
13
+ date: 2013-01-06 00:00:00 Z
19
14
  dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: json
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
30
- type: :runtime
31
- version_requirements: *id001
32
- - !ruby/object:Gem::Dependency
33
- name: rake
34
- prerelease: false
35
- requirement: &id002 !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- segments:
40
- - 0
41
- version: "0"
42
- type: :development
43
- version_requirements: *id002
44
- - !ruby/object:Gem::Dependency
45
- name: rack-test
46
- prerelease: false
47
- requirement: &id003 !ruby/object:Gem::Requirement
48
- requirements:
49
- - - ">="
50
- - !ruby/object:Gem::Version
51
- segments:
52
- - 0
53
- version: "0"
54
- type: :development
55
- version_requirements: *id003
56
- - !ruby/object:Gem::Dependency
57
- name: shoulda
58
- prerelease: false
59
- requirement: &id004 !ruby/object:Gem::Requirement
60
- requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- segments:
64
- - 0
65
- version: "0"
66
- type: :development
67
- version_requirements: *id004
15
+ - !ruby/object:Gem::Dependency
16
+ name: multi_json
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ type: :runtime
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0"
35
+ type: :development
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: rack-test
39
+ prerelease: false
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ type: :development
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: shoulda
50
+ prerelease: false
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ type: :development
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
60
+ name: rr
61
+ prerelease: false
62
+ requirement: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ type: :development
69
+ version_requirements: *id005
68
70
  description: Middleware that converts files uploaded with mimetype application/octet-stream into normal form input, so Rack applications can read these as normal, rather than as raw input.
69
71
  email: pablobm@gmail.com
70
72
  executables: []
@@ -72,70 +74,66 @@ executables: []
72
74
  extensions: []
73
75
 
74
76
  extra_rdoc_files:
75
- - LICENSE
76
- - README.md
77
+ - LICENSE
78
+ - README.md
77
79
  files:
78
- - lib/rack/raw_upload.rb
79
- - lib/rack-raw-upload.rb
80
- - test/apps/example/app.rb
81
- - test/apps/example/lib/simple_app.rb
82
- - test/apps/example/lib/tfl_countdown.rb
83
- - test/apps/undefined_conversion_error/app/controllers/application_controller.rb
84
- - test/apps/undefined_conversion_error/app/controllers/test_controller.rb
85
- - test/apps/undefined_conversion_error/app/helpers/application_helper.rb
86
- - test/apps/undefined_conversion_error/config/application.rb
87
- - test/apps/undefined_conversion_error/config/boot.rb
88
- - test/apps/undefined_conversion_error/config/environment.rb
89
- - test/apps/undefined_conversion_error/config/environments/development.rb
90
- - test/apps/undefined_conversion_error/config/environments/production.rb
91
- - test/apps/undefined_conversion_error/config/environments/test.rb
92
- - test/apps/undefined_conversion_error/config/initializers/backtrace_silencers.rb
93
- - test/apps/undefined_conversion_error/config/initializers/inflections.rb
94
- - test/apps/undefined_conversion_error/config/initializers/mime_types.rb
95
- - test/apps/undefined_conversion_error/config/initializers/secret_token.rb
96
- - test/apps/undefined_conversion_error/config/initializers/session_store.rb
97
- - test/apps/undefined_conversion_error/config/initializers/wrap_parameters.rb
98
- - test/apps/undefined_conversion_error/config/routes.rb
99
- - test/apps/undefined_conversion_error/db/seeds.rb
100
- - test/apps/undefined_conversion_error/test/performance/browsing_test.rb
101
- - test/apps/undefined_conversion_error/test/test_helper.rb
102
- - test/raw_upload_test.rb
103
- - LICENSE
104
- - README.md
105
- - Gemfile
106
- - Gemfile.lock
107
- has_rdoc: true
80
+ - lib/rack-raw-upload.rb
81
+ - lib/rack/raw_upload.rb
82
+ - test/raw_upload_test.rb
83
+ - test/apps/example/app.rb
84
+ - test/apps/example/lib/simple_app.rb
85
+ - test/apps/undefined_conversion_error/app/controllers/application_controller.rb
86
+ - test/apps/undefined_conversion_error/app/controllers/test_controller.rb
87
+ - test/apps/undefined_conversion_error/app/helpers/application_helper.rb
88
+ - test/apps/undefined_conversion_error/config/application.rb
89
+ - test/apps/undefined_conversion_error/config/boot.rb
90
+ - test/apps/undefined_conversion_error/config/environment.rb
91
+ - test/apps/undefined_conversion_error/config/routes.rb
92
+ - test/apps/undefined_conversion_error/config/environments/development.rb
93
+ - test/apps/undefined_conversion_error/config/environments/production.rb
94
+ - test/apps/undefined_conversion_error/config/environments/test.rb
95
+ - test/apps/undefined_conversion_error/config/initializers/backtrace_silencers.rb
96
+ - test/apps/undefined_conversion_error/config/initializers/inflections.rb
97
+ - test/apps/undefined_conversion_error/config/initializers/mime_types.rb
98
+ - test/apps/undefined_conversion_error/config/initializers/secret_token.rb
99
+ - test/apps/undefined_conversion_error/config/initializers/session_store.rb
100
+ - test/apps/undefined_conversion_error/config/initializers/wrap_parameters.rb
101
+ - test/apps/undefined_conversion_error/db/seeds.rb
102
+ - test/apps/undefined_conversion_error/test/test_helper.rb
103
+ - test/apps/undefined_conversion_error/test/performance/browsing_test.rb
104
+ - LICENSE
105
+ - README.md
106
+ - Gemfile
107
+ - Gemfile.lock
108
108
  homepage: https://github.com/newbamboo/rack-raw-upload
109
109
  licenses: []
110
110
 
111
111
  post_install_message:
112
112
  rdoc_options:
113
- - --charset=UTF-8
114
- - --main
115
- - README.rdoc
113
+ - --charset=UTF-8
114
+ - --main
115
+ - README.rdoc
116
116
  require_paths:
117
- - lib
117
+ - lib
118
118
  required_ruby_version: !ruby/object:Gem::Requirement
119
+ none: false
119
120
  requirements:
120
- - - ">="
121
- - !ruby/object:Gem::Version
122
- segments:
123
- - 0
124
- version: "0"
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: "0"
125
124
  required_rubygems_version: !ruby/object:Gem::Requirement
125
+ none: false
126
126
  requirements:
127
- - - ">="
128
- - !ruby/object:Gem::Version
129
- segments:
130
- - 0
131
- version: "0"
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: "0"
132
130
  requirements: []
133
131
 
134
132
  rubyforge_project:
135
- rubygems_version: 1.3.6
133
+ rubygems_version: 1.8.15
136
134
  signing_key:
137
135
  specification_version: 3
138
136
  summary: Rack Raw Upload middleware
139
137
  test_files:
140
- - test/apps/undefined_conversion_error/app/controllers/test_controller.rb
141
- - test/apps/undefined_conversion_error/test/test_helper.rb
138
+ - test/apps/undefined_conversion_error/app/controllers/test_controller.rb
139
+ - test/apps/undefined_conversion_error/test/test_helper.rb
@@ -1,44 +0,0 @@
1
- require 'httparty'
2
-
3
- class TflCountdown
4
- include HTTParty
5
- base_uri 'http://countdown.tfl.gov.uk'
6
-
7
- def initialize(status = {})
8
- @cookies = status['cookies'] if status['cookies']
9
- end
10
-
11
- def search(q)
12
- get_json('/search', 'searchTerm' => q)
13
- end
14
-
15
- def markers(swlat, swlng, nelat, nelng)
16
- path = "/markers/swLat/#{swlat}/swLng/#{swlng}/neLat/#{nelat}/neLng/#{nelng}/"
17
- get_json(path)
18
- end
19
-
20
-
21
- def get_json(path, query = {})
22
- query_params = {
23
- '_dc' => Time.now.to_i,
24
- }.merge(query)
25
-
26
- headers = {
27
- 'X-Requested-With' => 'XMLHttpRequest',
28
- 'Referer' => 'http://countdown.tfl.gov.uk/',
29
- 'User-Agent' => 'Pablito\'s own',
30
- }
31
- headers['Cookie'] = @cookies if @cookies
32
-
33
- res = self.class.get(path, :query => query_params, :headers => headers, :format => :json)
34
- @cookies = res.headers['set-cookie']
35
- res.body
36
- end
37
-
38
- def to_hash
39
- ret = {}
40
- ret['cookies'] = @cookies if @cookies
41
- ret
42
- end
43
-
44
- end