multipart-parser 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -12,6 +12,11 @@ Some things to note:
12
12
 
13
13
  * Does not depend on any other library.
14
14
 
15
+ Latest release: 0.1.1
16
+ * Fixes some issues with ruby 1.9
17
+
15
18
  Contributors:
16
19
  Daniel Abrahamsson
17
20
  Jérémy Bobbio
21
+ Aaron Patterson
22
+ Jeff Mancuso
@@ -0,0 +1,10 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << 'test'
5
+ t.test_files = FileList['test/**/*_test.rb']
6
+ t.verbose = true
7
+ t.warning = true
8
+ end
9
+
10
+ task :default => :test
@@ -22,7 +22,7 @@ module MultipartParser
22
22
 
23
23
  @boundary_chars = {}
24
24
  @boundary.each_byte do |b|
25
- @boundary_chars[b] = true
25
+ @boundary_chars[b.chr] = true
26
26
  end
27
27
  end
28
28
 
@@ -137,7 +137,7 @@ module MultipartParser
137
137
  # See http://debuggable.com/posts/parsing-file-uploads-at-500-
138
138
  # mb-s-with-node-js:4c03862e-351c-4faa-bb67-4365cbdd56cb
139
139
  while i + boundary_length <= buffer_length
140
- break if boundary_chars.has_key? buffer[i + boundary_end]
140
+ break if boundary_chars.has_key? buffer[i + boundary_end].chr
141
141
  i += boundary_length
142
142
  end
143
143
  c = buffer[i, 1]
@@ -1,4 +1,4 @@
1
- require File.expand_path('../parser', __FILE__)
1
+ require 'multipart_parser/parser'
2
2
 
3
3
  module MultipartParser
4
4
  class NotMultipartError < StandardError; end;
@@ -1,3 +1,3 @@
1
1
  module MultipartParser
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
@@ -10,7 +10,7 @@ module MultipartParser::Fixtures
10
10
  def boundary
11
11
  'AaB03x'
12
12
  end
13
-
13
+
14
14
  def expect_error
15
15
  false
16
16
  end
@@ -22,7 +22,7 @@ module MultipartParser::Fixtures
22
22
  part2[:headers] = {}
23
23
  part2[:headers]['content-disposition'] = 'form-data; name="pics"; ' +
24
24
  'filename="file1.txt"'
25
- part2[:headers]['Content-Type'] = 'text/plain'
25
+ part2[:headers]['Content-Type'] = 'text/plain'
26
26
  part2[:data] = "... contents of file1.txt ...\r"
27
27
  [part1, part2]
28
28
  end
@@ -59,11 +59,11 @@ module MultipartParser::Fixtures
59
59
  part2[:headers] = {}
60
60
  part2[:headers]['content-disposition'] = 'form-data; name="pics"; ' +
61
61
  'filename="file1.txt"'
62
- part2[:headers]['Content-Type'] = 'text/plain'
62
+ part2[:headers]['Content-Type'] = 'text/plain'
63
63
  part2[:data] = "... contents of file1.txt ...\r"
64
64
  [part1, part2]
65
65
  end
66
-
66
+
67
67
  def raw
68
68
  ['--AaB03x',
69
69
  'content-disposition: form-data; name="field1"',
@@ -79,15 +79,41 @@ module MultipartParser::Fixtures
79
79
  end
80
80
  end
81
81
 
82
+ class LongBoundary
83
+ def boundary
84
+ '----------------------------5c4dc587f69f'
85
+ end
86
+
87
+ def expect_error
88
+ false
89
+ end
90
+
91
+ def parts
92
+ part1 = {}
93
+ part1[:headers] = {'content-disposition' => 'form-data; name="field1"'}
94
+ part1[:data] = "Joe Blow\r\nalmost tricked you!"
95
+ [part1]
96
+ end
97
+
98
+ def raw
99
+ ['----------------------------5c4dc587f69f',
100
+ 'content-disposition: form-data; name="field1"',
101
+ '',
102
+ "Joe Blow\r\nalmost tricked you!",
103
+ '----------------------------5c4dc587f69f--'
104
+ ].join("\r\n")
105
+ end
106
+ end
107
+
82
108
  class EmptyHeader
83
109
  def boundary
84
110
  'AaB03x'
85
111
  end
86
-
112
+
87
113
  def expect_error
88
114
  true
89
115
  end
90
-
116
+
91
117
  def parts
92
118
  [] # Should never be called
93
119
  end
@@ -1,6 +1,6 @@
1
1
  require 'test/unit'
2
- require File.dirname(__FILE__) + "/../../lib/multipart_parser/parser"
3
- require File.dirname(__FILE__) + "/../fixtures/multipart"
2
+ require "multipart_parser/parser"
3
+ require "fixtures/multipart"
4
4
 
5
5
  module MultipartParser
6
6
  class ParserTest < Test::Unit::TestCase
@@ -11,8 +11,7 @@ module MultipartParser
11
11
 
12
12
  parser.init_with_boundary("abc")
13
13
  assert_equal "\r\n--abc", parser.boundary
14
- expected_bc = {13 => true, 10 => true, 45 => true, 97 => true,
15
- 98 => true, 99 => true}
14
+ expected_bc = {"\r"=>true, "\n"=>true, "-"=>true, "a"=>true, "b"=>true, "c"=>true}
16
15
  assert_equal expected_bc, parser.boundary_chars
17
16
  end
18
17
 
@@ -85,7 +84,7 @@ module MultipartParser
85
84
  end
86
85
  end
87
86
  unless got_error
88
- assert true, end_called
87
+ assert_equal true, end_called
89
88
  assert_equal fixture.parts, parts
90
89
  else
91
90
  assert fixture.expect_error,
@@ -70,5 +70,40 @@ module MultipartParser
70
70
  assert_equal 'file1.txt', file[:part].filename
71
71
  assert_equal fixture.parts.last[:data], file[:data]
72
72
  end
73
+
74
+ def test_long
75
+ fixture = Fixtures::LongBoundary.new
76
+ reader = Reader.new(fixture.boundary)
77
+ on_error_called = false
78
+ parts = {}
79
+
80
+ reader.on_error do |err|
81
+ on_error_called = true
82
+ end
83
+
84
+ reader.on_part do |part|
85
+ part_entry = {:part => part, :data => '', :ended => false}
86
+ parts[part.name] = part_entry
87
+ part.on_data do |data|
88
+ part_entry[:data] << data
89
+ end
90
+ part.on_end do
91
+ part_entry[:ended] = true
92
+ end
93
+ end
94
+
95
+ reader.write(fixture.raw)
96
+
97
+ assert !on_error_called
98
+ assert reader.ended?
99
+
100
+ assert_equal parts.size, fixture.parts.size
101
+ assert parts.all? {|k, v| v[:ended]}
102
+
103
+ field = parts['field1']
104
+ assert !field.nil?
105
+ assert_equal 'field1', field[:part].name
106
+ assert_equal fixture.parts.first[:data], field[:data]
107
+ end
73
108
  end
74
109
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multipart-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-17 00:00:00.000000000 Z
12
+ date: 2012-08-22 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! 'multipart-parser is a simple parser for multipart MIME messages, written
15
15
  in
@@ -40,13 +40,14 @@ extra_rdoc_files: []
40
40
  files:
41
41
  - LICENSE
42
42
  - README
43
+ - Rakefile
43
44
  - lib/multipart_parser/parser.rb
44
45
  - lib/multipart_parser/reader.rb
45
46
  - lib/multipart_parser/version.rb
46
47
  - multipart-parser.gemspec
47
48
  - test/fixtures/multipart.rb
48
49
  - test/multipart_parser/parser_test.rb
49
- - test/multipart_parser/reader.rb
50
+ - test/multipart_parser/reader_test.rb
50
51
  homepage: https://github.com/danabr/multipart-parser
51
52
  licenses: []
52
53
  post_install_message:
@@ -67,11 +68,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
68
  version: '0'
68
69
  requirements: []
69
70
  rubyforge_project:
70
- rubygems_version: 1.8.19
71
+ rubygems_version: 1.8.24
71
72
  signing_key:
72
73
  specification_version: 3
73
74
  summary: simple parser for multipart MIME messages
74
- test_files:
75
- - test/fixtures/multipart.rb
76
- - test/multipart_parser/parser_test.rb
77
- - test/multipart_parser/reader.rb
75
+ test_files: []
76
+ has_rdoc: