rack-multipart_related 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/README.md +94 -1
- data/lib/rack/multipart_related/version.rb +3 -3
- metadata +3 -3
data/README.md
CHANGED
@@ -1,3 +1,96 @@
|
|
1
1
|
# Rack multipart/related middleware
|
2
2
|
|
3
|
-
Rack::MultipartRelated it's a rack middleware to parse multipart/related requests and rebuild a simple/merged parameters hash.
|
3
|
+
Rack::MultipartRelated it's a **rack middleware** to parse **multipart/related** requests and rebuild a simple/merged parameters hash.
|
4
|
+
|
5
|
+
## What does it do?
|
6
|
+
|
7
|
+
When a ruby webserver receives a multipart/related request:
|
8
|
+
|
9
|
+
POST /users HTTP/1.1
|
10
|
+
Content-Type: multipart/related; boundary="the_boundary"; type="application/json"; start="json"
|
11
|
+
|
12
|
+
--the_boundary
|
13
|
+
Content-Type: application/json; charset=UTF-8
|
14
|
+
Content-Disposition: inline; name="json"\r
|
15
|
+
|
16
|
+
{"user":{"name": "Jhon", "avatar": "cid:avatar_image" }}
|
17
|
+
--the_boundary
|
18
|
+
Content-Type: image/png
|
19
|
+
Content-Disposition: inline; name="avatar_image"; filename="avatar.png"
|
20
|
+
|
21
|
+
<the binary content of image comes here>
|
22
|
+
--the_boundary--
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
The parameters hash arrives like this:
|
27
|
+
|
28
|
+
{
|
29
|
+
"json" => {
|
30
|
+
:type => "application/json; charset=UTF-8",
|
31
|
+
:tempfile => <File:/var/folders/Iu/IuwHUNlZE8OaYMACfwiapE+++TI/-Tmp-/RackMultipart20101217-30578-l17vkd-0>, # The json content
|
32
|
+
:head => "Content-Type: application/json; charset=UTF-8\r\nContent-Disposition: inline; name=\"json\"\r\n",
|
33
|
+
:name => "json"
|
34
|
+
},
|
35
|
+
"avatar_image" => {
|
36
|
+
:type => "image/png",
|
37
|
+
:filename =>"image.png",
|
38
|
+
:tempfile => <File:/var/folders/Iu/IuwHUNlZE8OaYMACfwiapE+++TI/-Tmp-/RackMultipart20101217-30578-bt18q9-0>, # The binary content of image
|
39
|
+
:head => "Content-Type: image/gif\r\nContent-Disposition: inline; name=\"avatar_image\"; filename=\"image.png\"\r\n",
|
40
|
+
:name =>"avatar_image"
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
Pay attention that the second part of the 'request' (in our example, "avatar\_image") needs to be referenced in the first part (in the example, "json") as "cid:REFERENCE\_NAME\_OF\_THE\_SECOND\_PART"
|
45
|
+
|
46
|
+
Using this middleware, the hash above is parsed and rebuilt like the code below:
|
47
|
+
|
48
|
+
{
|
49
|
+
"user" => {
|
50
|
+
"name" => "Jhon",
|
51
|
+
"avatar" => <File:/var/folders/Iu/IuwHUNlZE8OaYMACfwiapE+++TI/-Tmp-/RackMultipart20101217-30578-bt18q9-0>, # The binary content of image
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
## Usage
|
56
|
+
|
57
|
+
### Rails apps
|
58
|
+
|
59
|
+
In your Gemfile:
|
60
|
+
|
61
|
+
gem 'rack-multipart_related'
|
62
|
+
In your environment.rb:
|
63
|
+
|
64
|
+
require 'rack/multipart_related'
|
65
|
+
config.middleware.use Rack::MultipartRelated
|
66
|
+
|
67
|
+
### Non-Rails apps
|
68
|
+
|
69
|
+
Just 'use Rack::MultipartRelated' as any other middleware
|
70
|
+
|
71
|
+
## Restrictions
|
72
|
+
|
73
|
+
At this moment, this middleware only supports JSON in the start part.
|
74
|
+
|
75
|
+
## TODO
|
76
|
+
|
77
|
+
* Support other formats to start part, like XML.
|
78
|
+
|
79
|
+
## Report bugs and suggestions
|
80
|
+
|
81
|
+
* [Issue Tracker](https://github.com/lucasfais/rack-multipart_related/issues)
|
82
|
+
|
83
|
+
## Authors
|
84
|
+
|
85
|
+
* [Lucas Fais](https://github.com/lucasfais)
|
86
|
+
* [Marcelo Manzan](https://github.com/kawamanza)
|
87
|
+
|
88
|
+
## Contributors
|
89
|
+
|
90
|
+
* [Eric Fer](https://github.com/ericfer)
|
91
|
+
|
92
|
+
## References
|
93
|
+
|
94
|
+
* [RFC 2387](http://www.faqs.org/rfcs/rfc2387.html)
|
95
|
+
* [Rails on rack](http://guides.rubyonrails.org/rails_on_rack.html)
|
96
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Rack
|
2
2
|
class MultipartRelated
|
3
|
-
path = File.expand_path('../../..', __FILE__)
|
3
|
+
path = ::File.expand_path('../../..', __FILE__)
|
4
4
|
v = nil
|
5
5
|
v = $1 if path =~ /\/rack-multipart_related-([\w\.\-]+)/
|
6
6
|
if v.nil?
|
@@ -12,8 +12,8 @@ module Rack
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
if v.nil?
|
15
|
-
path = File.expand_path('../../../../.git', __FILE__)
|
16
|
-
if File.exists?(path)
|
15
|
+
path = ::File.expand_path('../../../../.git', __FILE__)
|
16
|
+
if ::File.exists?(path)
|
17
17
|
require "step-up"
|
18
18
|
v = StepUp::Driver::Git.last_version
|
19
19
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-multipart_related
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Lucas Fais
|