strelka 0.6.0 → 0.7.0

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.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/ChangeLog +156 -9
  4. data/History.rdoc +15 -0
  5. data/IDEAS.rdoc +17 -1
  6. data/MILESTONES.rdoc +1 -1
  7. data/Manifest.txt +10 -2
  8. data/Plugins.rdoc +4 -4
  9. data/README.rdoc +3 -3
  10. data/Rakefile +5 -4
  11. data/bin/strelka +19 -10
  12. data/contrib/hoetemplate/data/project/apps/file_name_app +1 -0
  13. data/contrib/hoetemplate/lib/file_name.rb.erb +3 -2
  14. data/examples/apps/hello-world +1 -0
  15. data/examples/apps/ws-chat +69 -0
  16. data/examples/apps/ws-echo +61 -0
  17. data/examples/gen-config.rb +6 -5
  18. data/lib/strelka/app/auth.rb +2 -2
  19. data/lib/strelka/app/errors.rb +1 -1
  20. data/lib/strelka/app/filters.rb +3 -2
  21. data/lib/strelka/app/negotiation.rb +2 -2
  22. data/lib/strelka/app/parameters.rb +1 -2
  23. data/lib/strelka/app/restresources.rb +3 -2
  24. data/lib/strelka/app/routing.rb +1 -1
  25. data/lib/strelka/app/sessions.rb +2 -2
  26. data/lib/strelka/app/templating.rb +7 -3
  27. data/lib/strelka/app.rb +5 -145
  28. data/lib/strelka/behavior/plugin.rb +4 -4
  29. data/lib/strelka/discovery.rb +211 -0
  30. data/lib/strelka/httprequest.rb +1 -0
  31. data/lib/strelka/httpresponse/negotiation.rb +7 -1
  32. data/lib/strelka/mixins.rb +4 -1
  33. data/lib/strelka/paramvalidator.rb +1 -1
  34. data/lib/strelka/plugins.rb +8 -6
  35. data/lib/strelka/websocketserver/routing.rb +116 -0
  36. data/lib/strelka/websocketserver.rb +147 -0
  37. data/lib/strelka.rb +5 -4
  38. data/spec/{lib/constants.rb → constants.rb} +3 -2
  39. data/spec/{lib/helpers.rb → helpers.rb} +15 -14
  40. data/spec/strelka/app/auth_spec.rb +145 -142
  41. data/spec/strelka/app/errors_spec.rb +20 -26
  42. data/spec/strelka/app/filters_spec.rb +67 -54
  43. data/spec/strelka/app/negotiation_spec.rb +8 -14
  44. data/spec/strelka/app/parameters_spec.rb +23 -29
  45. data/spec/strelka/app/restresources_spec.rb +98 -100
  46. data/spec/strelka/app/routing_spec.rb +57 -57
  47. data/spec/strelka/app/sessions_spec.rb +11 -17
  48. data/spec/strelka/app/templating_spec.rb +36 -40
  49. data/spec/strelka/app_spec.rb +48 -147
  50. data/spec/strelka/authprovider/basic_spec.rb +5 -11
  51. data/spec/strelka/authprovider/hostaccess_spec.rb +9 -15
  52. data/spec/strelka/authprovider_spec.rb +3 -9
  53. data/spec/strelka/cookie_spec.rb +32 -38
  54. data/spec/strelka/cookieset_spec.rb +31 -37
  55. data/spec/strelka/discovery_spec.rb +144 -0
  56. data/spec/strelka/exceptions_spec.rb +2 -8
  57. data/spec/strelka/httprequest/acceptparams_spec.rb +74 -83
  58. data/spec/strelka/httprequest/auth_spec.rb +5 -15
  59. data/spec/strelka/httprequest/negotiation_spec.rb +93 -103
  60. data/spec/strelka/httprequest/session_spec.rb +12 -22
  61. data/spec/strelka/httprequest_spec.rb +1 -7
  62. data/spec/strelka/httpresponse/negotiation_spec.rb +84 -76
  63. data/spec/strelka/httpresponse/session_spec.rb +25 -35
  64. data/spec/strelka/httpresponse_spec.rb +20 -26
  65. data/spec/strelka/mixins_spec.rb +66 -61
  66. data/spec/strelka/multipartparser_spec.rb +31 -37
  67. data/spec/strelka/paramvalidator_spec.rb +389 -373
  68. data/spec/strelka/plugins_spec.rb +17 -23
  69. data/spec/strelka/router/default_spec.rb +32 -38
  70. data/spec/strelka/router/exclusive_spec.rb +28 -34
  71. data/spec/strelka/router_spec.rb +2 -8
  72. data/spec/strelka/session/db_spec.rb +17 -15
  73. data/spec/strelka/session/default_spec.rb +22 -28
  74. data/spec/strelka/session_spec.rb +3 -9
  75. data/spec/strelka/websocketserver/routing_spec.rb +119 -0
  76. data/spec/strelka/websocketserver_spec.rb +149 -0
  77. data/spec/strelka_spec.rb +11 -13
  78. data.tar.gz.sig +3 -3
  79. metadata +22 -14
  80. metadata.gz.sig +0 -0
@@ -1,15 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
  #encoding: utf-8
3
3
 
4
- BEGIN {
5
- require 'pathname'
6
- basedir = Pathname.new( __FILE__ ).dirname.parent.parent
7
-
8
- $LOAD_PATH.unshift( basedir ) unless $LOAD_PATH.include?( basedir )
9
- }
4
+ require_relative '../helpers'
10
5
 
11
6
  require 'rspec'
12
- require 'spec/lib/helpers'
13
7
  require 'strelka/httpresponse'
14
8
 
15
9
 
@@ -38,15 +32,15 @@ describe Strelka::HTTPResponse do
38
32
  @res.content_type = 'text/html'
39
33
  @res.charset = Encoding::UTF_8
40
34
 
41
- @res.header_data.should =~ %r{Content-type: text/html; charset=UTF-8}i
35
+ expect( @res.header_data ).to match( %r{Content-type: text/html; charset=UTF-8}i )
42
36
  end
43
37
 
44
38
  it "replaces the existing content-type header charset if it's text/* and one is explicitly set" do
45
39
  @res.content_type = 'text/html; charset=iso-8859-1'
46
40
  @res.charset = Encoding::UTF_8
47
41
 
48
- @res.header_data.should =~ /charset=UTF-8/i
49
- @res.header_data.should_not =~ /charset=iso-8859-1/
42
+ expect( @res.header_data ).to match( /charset=UTF-8/i )
43
+ expect( @res.header_data ).to_not match( /charset=iso-8859-1/ )
50
44
  end
51
45
 
52
46
  it "adds a charset to the response's content-type header based on the entity body's encoding " +
@@ -54,7 +48,7 @@ describe Strelka::HTTPResponse do
54
48
  @res.body = "Стрелке".encode( 'koi8-r' )
55
49
  @res.content_type = 'text/plain'
56
50
 
57
- @res.header_data.should =~ /charset=koi8-r/i
51
+ expect( @res.header_data ).to match( /charset=koi8-r/i )
58
52
  end
59
53
 
60
54
  it "adds a charset to the response's content-type header based on the entity body's " +
@@ -62,15 +56,15 @@ describe Strelka::HTTPResponse do
62
56
  @res.body = File.open( __FILE__, 'r:iso-8859-5' )
63
57
  @res.content_type = 'text/plain'
64
58
 
65
- @res.header_data.should =~ /charset=iso-8859-5/i
59
+ expect( @res.header_data ).to match( /charset=iso-8859-5/i )
66
60
  end
67
61
 
68
62
  it "doesn't replace a charset in a text/* content-type header with one based on the entity body" do
69
63
  @res.body = "Стрелке".encode( 'iso-8859-5' )
70
64
  @res.content_type = 'text/plain; charset=utf-8'
71
65
 
72
- @res.header_data.should_not =~ /charset=iso-8859-5/i
73
- @res.header_data.should =~ /charset=utf-8/i
66
+ expect( @res.header_data ).to_not match( /charset=iso-8859-5/i )
67
+ expect( @res.header_data ).to match( /charset=utf-8/i )
74
68
  end
75
69
 
76
70
  it "doesn't add a charset to the response's content-type header if it's explicitly set " +
@@ -78,12 +72,12 @@ describe Strelka::HTTPResponse do
78
72
  @res.content_type = 'text/plain'
79
73
  @res.charset = Encoding::ASCII_8BIT
80
74
 
81
- @res.header_data.should_not =~ /charset/i
75
+ expect( @res.header_data ).to_not match( /charset/i )
82
76
  end
83
77
 
84
78
  it "doesn't add a charset to the response's content-type header if it's not text/*" do
85
79
  @res.content_type = 'application/octet-stream'
86
- @res.header_data.should_not =~ /charset/i
80
+ expect( @res.header_data ).to_not match( /charset/i )
87
81
  end
88
82
 
89
83
  it "strips an existing charset from the response's content-type header if it's explicitly " +
@@ -91,51 +85,51 @@ describe Strelka::HTTPResponse do
91
85
  @res.content_type = 'text/plain; charset=ISO-8859-15'
92
86
  @res.charset = Encoding::ASCII_8BIT
93
87
 
94
- @res.header_data.should_not =~ /charset/i
88
+ expect( @res.header_data ).to_not match( /charset/i )
95
89
  end
96
90
 
97
91
  it "doesn't try to add an encoding to a response that doesn't have a content type" do
98
92
  @res.content_type = nil
99
- @res.header_data.should_not =~ /charset/
93
+ expect( @res.header_data ).to_not match( /charset/ )
100
94
  end
101
95
 
102
96
  it "adds a Content-encoding header if there is one encoding" do
103
97
  @res.encodings << 'gzip'
104
- @res.header_data.should =~ /content-encoding: gzip\s*$/i
98
+ expect( @res.header_data ).to match( /content-encoding: gzip\s*$/i )
105
99
  end
106
100
 
107
101
  it "adds a Content-encoding header if there is more than one encoding" do
108
102
  @res.encodings << 'gzip' << 'compress'
109
- @res.header_data.should =~ /content-encoding: gzip, compress\s*$/i
103
+ expect( @res.header_data ).to match( /content-encoding: gzip, compress\s*$/i )
110
104
  end
111
105
 
112
106
 
113
107
  it "adds a Content-language header if there is one language" do
114
108
  @res.languages << 'de'
115
- @res.header_data.should =~ /content-language: de\s*$/i
109
+ expect( @res.header_data ).to match( /content-language: de\s*$/i )
116
110
  end
117
111
 
118
112
  it "adds a Content-language header if there is more than one language" do
119
113
  @res.languages << 'en' << 'sv-chef'
120
- @res.header_data.should =~ /content-language: en, sv-chef\s*$/i
114
+ expect( @res.header_data ).to match( /content-language: en, sv-chef\s*$/i )
121
115
  end
122
116
 
123
117
 
124
118
  it "allows cookies to be set via a Hash-like interface" do
125
119
  @res.cookies[:foom] = 'chuckUfarly'
126
- @res.header_data.should =~ /set-cookie: foom=chuckufarly/i
120
+ expect( @res.header_data ).to match( /set-cookie: foom=chuckufarly/i )
127
121
  end
128
122
 
129
123
  it "allows cookies to be appended" do
130
124
  @res.cookies << Strelka::Cookie.new( 'session', '64a3a92eb7403a8199301e03e8b83810' )
131
125
  @res.cookies << Strelka::Cookie.new( 'cn', '18', :expires => '+1d' )
132
- @res.header_data.should =~ /set-cookie: session=64a3a92eb7403a8199301e03e8b83810/i
133
- @res.header_data.should =~ /set-cookie: cn=18; expires=/i
126
+ expect( @res.header_data ).to match( /set-cookie: session=64a3a92eb7403a8199301e03e8b83810/i )
127
+ expect( @res.header_data ).to match( /set-cookie: cn=18; expires=/i )
134
128
  end
135
129
 
136
130
 
137
131
  it "shares a 'notes' Hash with its associated request" do
138
- @res.notes.should be( @req.notes )
132
+ expect( @res.notes ).to be( @req.notes )
139
133
  end
140
134
 
141
135
  end
@@ -2,15 +2,10 @@
2
2
  # vim: set nosta noet ts=4 sw=4:
3
3
  # encoding: utf-8
4
4
 
5
- BEGIN {
6
- require 'pathname'
7
- basedir = Pathname.new( __FILE__ ).dirname.parent.parent
8
- $LOAD_PATH.unshift( basedir ) unless $LOAD_PATH.include?( basedir )
9
- }
5
+ require_relative '../helpers'
10
6
 
11
7
  require 'set'
12
8
  require 'rspec'
13
- require 'spec/lib/helpers'
14
9
  require 'strelka/mixins'
15
10
 
16
11
 
@@ -92,35 +87,35 @@ describe Strelka, "mixins" do
92
87
  end
93
88
 
94
89
  before( :each ) do
95
- @subobj = mock( "delegate" )
90
+ @subobj = double( "delegate" )
96
91
  @obj = @testclass.new( @subobj )
97
92
  end
98
93
 
99
94
 
100
95
  it "can be used to set up delegation through a method" do
101
- @subobj.should_receive( :delegated_method )
96
+ expect( @subobj ).to receive( :delegated_method )
102
97
  @obj.delegated_method
103
98
  end
104
99
 
105
100
  it "passes any arguments through to the delegate object's method" do
106
- @subobj.should_receive( :delegated_method ).with( :arg1, :arg2 )
101
+ expect( @subobj ).to receive( :delegated_method ).with( :arg1, :arg2 )
107
102
  @obj.delegated_method( :arg1, :arg2 )
108
103
  end
109
104
 
110
105
  it "allows delegation to the delegate object's method with a block" do
111
- @subobj.should_receive( :delegated_method ).with( :arg1 ).
106
+ expect( @subobj ).to receive( :delegated_method ).with( :arg1 ).
112
107
  and_yield( :the_block_argument )
113
108
  blockarg = nil
114
109
  @obj.delegated_method( :arg1 ) {|arg| blockarg = arg }
115
- blockarg.should == :the_block_argument
110
+ expect( blockarg ).to eq( :the_block_argument )
116
111
  end
117
112
 
118
113
  it "reports errors from its caller's perspective", :ruby_1_8_only => true do
119
114
  begin
120
115
  @obj.erroring_delegated_method
121
116
  rescue NoMethodError => err
122
- err.message.should =~ /nonexistant_method/
123
- err.backtrace.first.should =~ /#{__FILE__}/
117
+ expect( err.message ).to match( /nonexistant_method/ )
118
+ expect( err.backtrace.first ).to match( /#{__FILE__}/ )
124
119
  rescue ::Exception => err
125
120
  fail "Expected a NoMethodError, but got a %p (%s)" % [ err.class, err.message ]
126
121
  else
@@ -146,35 +141,35 @@ describe Strelka, "mixins" do
146
141
  end
147
142
 
148
143
  before( :each ) do
149
- @subobj = mock( "delegate" )
144
+ @subobj = double( "delegate" )
150
145
  @obj = @testclass.new( @subobj )
151
146
  end
152
147
 
153
148
 
154
149
  it "can be used to set up delegation through a method" do
155
- @subobj.should_receive( :delegated_method )
150
+ expect( @subobj ).to receive( :delegated_method )
156
151
  @obj.delegated_method
157
152
  end
158
153
 
159
154
  it "passes any arguments through to the delegate's method" do
160
- @subobj.should_receive( :delegated_method ).with( :arg1, :arg2 )
155
+ expect( @subobj ).to receive( :delegated_method ).with( :arg1, :arg2 )
161
156
  @obj.delegated_method( :arg1, :arg2 )
162
157
  end
163
158
 
164
159
  it "allows delegation to the delegate's method with a block" do
165
- @subobj.should_receive( :delegated_method ).with( :arg1 ).
160
+ expect( @subobj ).to receive( :delegated_method ).with( :arg1 ).
166
161
  and_yield( :the_block_argument )
167
162
  blockarg = nil
168
163
  @obj.delegated_method( :arg1 ) {|arg| blockarg = arg }
169
- blockarg.should == :the_block_argument
164
+ expect( blockarg ).to eq( :the_block_argument )
170
165
  end
171
166
 
172
167
  it "reports errors from its caller's perspective", :ruby_1_8_only => true do
173
168
  begin
174
169
  @obj.erroring_delegated_method
175
170
  rescue NoMethodError => err
176
- err.message.should =~ /`erroring_delegated_method' for nil/
177
- err.backtrace.first.should =~ /#{__FILE__}/
171
+ expect( err.message ).to match( /`erroring_delegated_method' for nil/ )
172
+ expect( err.backtrace.first ).to match( /#{__FILE__}/ )
178
173
  rescue ::Exception => err
179
174
  fail "Expected a NoMethodError, but got a %p (%s)" % [ err.class, err.message ]
180
175
  else
@@ -190,16 +185,26 @@ describe Strelka, "mixins" do
190
185
  describe Strelka::DataUtilities do
191
186
 
192
187
  it "doesn't try to dup immediate objects" do
193
- Strelka::DataUtilities.deep_copy( nil ).should be( nil )
194
- Strelka::DataUtilities.deep_copy( 112 ).should be( 112 )
195
- Strelka::DataUtilities.deep_copy( true ).should be( true )
196
- Strelka::DataUtilities.deep_copy( false ).should be( false )
197
- Strelka::DataUtilities.deep_copy( :a_symbol ).should be( :a_symbol )
188
+ expect( Strelka::DataUtilities.deep_copy( nil ) ).to be( nil )
189
+ expect( Strelka::DataUtilities.deep_copy( 112 ) ).to be( 112 )
190
+ expect( Strelka::DataUtilities.deep_copy( true ) ).to be( true )
191
+ expect( Strelka::DataUtilities.deep_copy( false ) ).to be( false )
192
+ expect( Strelka::DataUtilities.deep_copy( :a_symbol ) ).to be( :a_symbol )
198
193
  end
199
194
 
200
195
  it "doesn't try to dup modules/classes" do
201
196
  klass = Class.new
202
- Strelka::DataUtilities.deep_copy( klass ).should be( klass )
197
+ expect( Strelka::DataUtilities.deep_copy( klass ) ).to be( klass )
198
+ end
199
+
200
+ it "doesn't try to dup IOs" do
201
+ data = [ $stdin ]
202
+ expect( Strelka::DataUtilities.deep_copy( data[0] ) ).to be( $stdin )
203
+ end
204
+
205
+ it "doesn't try to dup Tempfiles" do
206
+ data = Tempfile.new( 'strelka_deepcopy.XXXXX' )
207
+ expect( Strelka::DataUtilities.deep_copy( data ) ).to be( data )
203
208
  end
204
209
 
205
210
  it "makes distinct copies of arrays and their members" do
@@ -207,14 +212,14 @@ describe Strelka, "mixins" do
207
212
 
208
213
  copy = Strelka::DataUtilities.deep_copy( original )
209
214
 
210
- copy.should == original
211
- copy.should_not be( original )
212
- copy[0].should == original[0]
213
- copy[0].should_not be( original[0] )
214
- copy[1].should == original[1]
215
- copy[1].should_not be( original[1] )
216
- copy[2].should == original[2]
217
- copy[2].should be( original[2] ) # Immediate
215
+ expect( copy ).to eq( original )
216
+ expect( copy ).to_not be( original )
217
+ expect( copy[0] ).to eq( original[0] )
218
+ expect( copy[0] ).to_not be( original[0] )
219
+ expect( copy[1] ).to eq( original[1] )
220
+ expect( copy[1] ).to_not be( original[1] )
221
+ expect( copy[2] ).to eq( original[2] )
222
+ expect( copy[2] ).to be( original[2] ) # Immediate
218
223
  end
219
224
 
220
225
  it "makes recursive copies of deeply-nested Arrays" do
@@ -222,12 +227,12 @@ describe Strelka, "mixins" do
222
227
 
223
228
  copy = Strelka::DataUtilities.deep_copy( original )
224
229
 
225
- copy.should == original
226
- copy.should_not be( original )
227
- copy[1].should_not be( original[1] )
228
- copy[1][2].should_not be( original[1][2] )
229
- copy[3].should_not be( original[3] )
230
- copy[3][1].should_not be( original[3][1] )
230
+ expect( copy ).to eq( original )
231
+ expect( copy ).to_not be( original )
232
+ expect( copy[1] ).to_not be( original[1] )
233
+ expect( copy[1][2] ).to_not be( original[1][2] )
234
+ expect( copy[3] ).to_not be( original[3] )
235
+ expect( copy[3][1] ).to_not be( original[3][1] )
231
236
  end
232
237
 
233
238
  it "makes distinct copies of Hashes and their members" do
@@ -239,13 +244,13 @@ describe Strelka, "mixins" do
239
244
 
240
245
  copy = Strelka::DataUtilities.deep_copy( original )
241
246
 
242
- copy.should == original
243
- copy.should_not be( original )
244
- copy[:a].should == 1
245
- copy.key( 2 ).should == 'b'
246
- copy.key( 2 ).should_not be( original.key(2) )
247
- copy[3].should == 'c'
248
- copy[3].should_not be( original[3] )
247
+ expect( copy ).to eq( original )
248
+ expect( copy ).to_not be( original )
249
+ expect( copy[:a] ).to eq( 1 )
250
+ expect( copy.key( 2 ) ).to eq( 'b' )
251
+ expect( copy.key( 2 ) ).to_not be( original.key(2) )
252
+ expect( copy[3] ).to eq( 'c' )
253
+ expect( copy[3] ).to_not be( original[3] )
249
254
  end
250
255
 
251
256
  it "makes distinct copies of deeply-nested Hashes" do
@@ -262,15 +267,15 @@ describe Strelka, "mixins" do
262
267
 
263
268
  copy = Strelka::DataUtilities.deep_copy( original )
264
269
 
265
- copy.should == original
266
- copy[:a][:b][:c].should == 'd'
267
- copy[:a][:b][:c].should_not be( original[:a][:b][:c] )
268
- copy[:a][:b][:e].should == 'f'
269
- copy[:a][:b][:e].should_not be( original[:a][:b][:e] )
270
- copy[:a][:g].should == 'h'
271
- copy[:a][:g].should_not be( original[:a][:g] )
272
- copy[:i].should == 'j'
273
- copy[:i].should_not be( original[:i] )
270
+ expect( copy ).to eq( original )
271
+ expect( copy[:a][:b][:c] ).to eq( 'd' )
272
+ expect( copy[:a][:b][:c] ).to_not be( original[:a][:b][:c] )
273
+ expect( copy[:a][:b][:e] ).to eq( 'f' )
274
+ expect( copy[:a][:b][:e] ).to_not be( original[:a][:b][:e] )
275
+ expect( copy[:a][:g] ).to eq( 'h' )
276
+ expect( copy[:a][:g] ).to_not be( original[:a][:g] )
277
+ expect( copy[:i] ).to eq( 'j' )
278
+ expect( copy[:i] ).to_not be( original[:i] )
274
279
  end
275
280
 
276
281
  it "copies the default proc of copied Hashes" do
@@ -278,7 +283,7 @@ describe Strelka, "mixins" do
278
283
 
279
284
  copy = Strelka::DataUtilities.deep_copy( original )
280
285
 
281
- copy.default_proc.should == original.default_proc
286
+ expect( copy.default_proc ).to eq( original.default_proc )
282
287
  end
283
288
 
284
289
  it "preserves taintedness of copied objects" do
@@ -287,8 +292,8 @@ describe Strelka, "mixins" do
287
292
 
288
293
  copy = Strelka::DataUtilities.deep_copy( original )
289
294
 
290
- copy.should_not be( original )
291
- copy.should be_tainted()
295
+ expect( copy ).to_not be( original )
296
+ expect( copy ).to be_tainted()
292
297
  end
293
298
 
294
299
  it "preserves frozen-ness of copied objects" do
@@ -297,8 +302,8 @@ describe Strelka, "mixins" do
297
302
 
298
303
  copy = Strelka::DataUtilities.deep_copy( original )
299
304
 
300
- copy.should_not be( original )
301
- copy.should be_frozen()
305
+ expect( copy ).to_not be( original )
306
+ expect( copy ).to be_frozen()
302
307
  end
303
308
 
304
309
  end
@@ -1,17 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
  #encoding: utf-8
3
3
 
4
- BEGIN {
5
- require 'pathname'
6
- basedir = Pathname.new( __FILE__ ).dirname.parent.parent
7
- $LOAD_PATH.unshift( basedir ) unless $LOAD_PATH.include?( basedir )
8
- }
4
+ require_relative '../helpers'
9
5
 
10
6
  require 'date'
11
7
  require 'rspec'
12
8
 
13
- require 'spec/lib/helpers'
14
-
15
9
  require 'strelka'
16
10
  require 'strelka/multipartparser'
17
11
 
@@ -83,9 +77,9 @@ describe Strelka::MultipartParser do
83
77
 
84
78
  params = parser.parse
85
79
 
86
- params.should have( 5 ).keys
87
- params.keys.should include( 'x-livejournal-entry' )
88
- params['velour-fog'].should =~ /Sweet, sweet canday/i
80
+ expect( params ).to have( 5 ).keys
81
+ expect( params.keys ).to include( 'x-livejournal-entry' )
82
+ expect( params['velour-fog'] ).to match( /Sweet, sweet canday/i )
89
83
  end
90
84
 
91
85
 
@@ -96,13 +90,13 @@ describe Strelka::MultipartParser do
96
90
 
97
91
  file = params['upload']
98
92
 
99
- file.should be_a( Tempfile )
100
- file.filename.should == 'testfile.rtf'
101
- file.content_length.should == 480
102
- file.content_type.should == 'application/rtf'
93
+ expect( file ).to be_a( Tempfile )
94
+ expect( file.filename ).to eq( 'testfile.rtf' )
95
+ expect( file.content_length ).to eq( 480 )
96
+ expect( file.content_type ).to eq( 'application/rtf' )
103
97
 
104
98
  file.open
105
- file.read.should =~ /screaming.+anguish.+sirens/
99
+ expect( file.read ).to match( /screaming.+anguish.+sirens/ )
106
100
  end
107
101
 
108
102
  it "strips full paths from upload filenames (e.g., from MSIE)" do
@@ -112,13 +106,13 @@ describe Strelka::MultipartParser do
112
106
 
113
107
  file = params['upload']
114
108
 
115
- file.should be_a( Tempfile )
116
- file.filename.should == 'testfile.rtf'
117
- file.content_length.should == 480
118
- file.content_type.should == 'application/rtf'
109
+ expect( file ).to be_a( Tempfile )
110
+ expect( file.filename ).to eq( 'testfile.rtf' )
111
+ expect( file.content_length ).to eq( 480 )
112
+ expect( file.content_type ).to eq( 'application/rtf' )
119
113
 
120
114
  file.open
121
- file.read.should =~ /screaming.+anguish.+sirens/
115
+ expect( file.read ).to match( /screaming.+anguish.+sirens/ )
122
116
  end
123
117
 
124
118
  it "parses a mix of uploaded files and form data" do
@@ -126,23 +120,23 @@ describe Strelka::MultipartParser do
126
120
  parser = described_class.new( socket, BOUNDARY )
127
121
  params = parser.parse
128
122
 
129
- params['pork'].should be_an_instance_of( Array )
130
- params['pork'].should have( 2 ).members
131
- params['pork'].should include( 'zoot' )
132
- params['pork'].should include( 'fornk' )
123
+ expect( params['pork'] ).to be_an_instance_of( Array )
124
+ expect( params['pork'] ).to have( 2 ).members
125
+ expect( params['pork'] ).to include( 'zoot' )
126
+ expect( params['pork'] ).to include( 'fornk' )
133
127
 
134
- params['namespace'].should == 'testing'
135
- params['rating'].should == '5'
128
+ expect( params['namespace'] ).to eq( 'testing' )
129
+ expect( params['rating'] ).to eq( '5' )
136
130
 
137
131
  file = params['upload']
138
132
 
139
- file.should be_an_instance_of( Tempfile )
140
- file.filename.should == 'testfile.rtf'
141
- file.content_length.should == 480
142
- file.content_type.should == 'application/rtf'
133
+ expect( file ).to be_an_instance_of( Tempfile )
134
+ expect( file.filename ).to eq( 'testfile.rtf' )
135
+ expect( file.content_length ).to eq( 480 )
136
+ expect( file.content_type ).to eq( 'application/rtf' )
143
137
 
144
138
  file.open
145
- file.read.should =~ /screaming.+anguish.+sirens/
139
+ expect( file.read ).to match( /screaming.+anguish.+sirens/ )
146
140
  end
147
141
 
148
142
 
@@ -155,14 +149,14 @@ describe Strelka::MultipartParser do
155
149
 
156
150
  file1, file2 = params['thingfish-upload']
157
151
 
158
- file1.filename.should == 'Photo 3.jpg'
159
- file2.filename.should == 'grass2.jpg'
152
+ expect( file1.filename ).to eq( 'Photo 3.jpg' )
153
+ expect( file2.filename ).to eq( 'grass2.jpg' )
160
154
 
161
- file1.content_type.should == 'image/jpeg'
162
- file2.content_type.should == 'image/jpeg'
155
+ expect( file1.content_type ).to eq( 'image/jpeg' )
156
+ expect( file2.content_type ).to eq( 'image/jpeg' )
163
157
 
164
- file1.content_length.should == 82143
165
- file2.content_length.should == 439257
158
+ expect( file1.content_length ).to eq( 82143 )
159
+ expect( file2.content_length ).to eq( 439257 )
166
160
  end
167
161
 
168
162
  end