rocketio 0.0.0.pre.alpha → 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -2
- data/LICENSE.txt +22 -0
- data/README.md +5 -22
- data/Rakefile +1 -7
- data/lib/rocketio.rb +3 -131
- data/lib/rocketio/version.rb +2 -2
- data/rocketio.gemspec +17 -21
- metadata +11 -146
- data/.travis.yml +0 -3
- data/bin/console +0 -14
- data/bin/setup +0 -7
- data/lib/rocketio/application.rb +0 -31
- data/lib/rocketio/controller.rb +0 -288
- data/lib/rocketio/controller/authentication.rb +0 -141
- data/lib/rocketio/controller/authorization.rb +0 -53
- data/lib/rocketio/controller/cookies.rb +0 -59
- data/lib/rocketio/controller/error_handlers.rb +0 -89
- data/lib/rocketio/controller/filters.rb +0 -119
- data/lib/rocketio/controller/flash.rb +0 -21
- data/lib/rocketio/controller/helpers.rb +0 -438
- data/lib/rocketio/controller/middleware.rb +0 -32
- data/lib/rocketio/controller/render.rb +0 -148
- data/lib/rocketio/controller/render/engine.rb +0 -76
- data/lib/rocketio/controller/render/layout.rb +0 -27
- data/lib/rocketio/controller/render/layouts.rb +0 -85
- data/lib/rocketio/controller/render/templates.rb +0 -83
- data/lib/rocketio/controller/request.rb +0 -115
- data/lib/rocketio/controller/response.rb +0 -84
- data/lib/rocketio/controller/sessions.rb +0 -64
- data/lib/rocketio/controller/token_auth.rb +0 -118
- data/lib/rocketio/controller/websocket.rb +0 -21
- data/lib/rocketio/error_templates/404.html +0 -3
- data/lib/rocketio/error_templates/409.html +0 -7
- data/lib/rocketio/error_templates/500.html +0 -3
- data/lib/rocketio/error_templates/501.html +0 -6
- data/lib/rocketio/error_templates/layout.html +0 -1
- data/lib/rocketio/exceptions.rb +0 -4
- data/lib/rocketio/router.rb +0 -65
- data/lib/rocketio/util.rb +0 -122
- data/test/aliases_test.rb +0 -54
- data/test/authentication_test.rb +0 -307
- data/test/authorization_test.rb +0 -91
- data/test/cache_control_test.rb +0 -268
- data/test/content_type_test.rb +0 -124
- data/test/cookies_test.rb +0 -49
- data/test/error_handlers_test.rb +0 -125
- data/test/etag_test.rb +0 -445
- data/test/filters_test.rb +0 -177
- data/test/halt_test.rb +0 -73
- data/test/helpers_test.rb +0 -171
- data/test/middleware_test.rb +0 -57
- data/test/redirect_test.rb +0 -135
- data/test/render/engine_test.rb +0 -71
- data/test/render/get.erb +0 -1
- data/test/render/items.erb +0 -1
- data/test/render/layout.erb +0 -1
- data/test/render/layout_test.rb +0 -104
- data/test/render/layouts/master.erb +0 -1
- data/test/render/layouts_test.rb +0 -145
- data/test/render/master.erb +0 -1
- data/test/render/post.erb +0 -1
- data/test/render/put.erb +0 -1
- data/test/render/render_test.rb +0 -101
- data/test/render/setup.rb +0 -14
- data/test/render/templates/a/get.erb +0 -1
- data/test/render/templates/master.erb +0 -1
- data/test/render/templates_test.rb +0 -146
- data/test/request_test.rb +0 -105
- data/test/response_test.rb +0 -119
- data/test/routes_test.rb +0 -70
- data/test/sendfile_test.rb +0 -209
- data/test/sessions_test.rb +0 -176
- data/test/setup.rb +0 -59
data/test/render/master.erb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
master <%= yield %> layout
|
data/test/render/post.erb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
<%= @var %>
|
data/test/render/put.erb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
<%= var %>
|
data/test/render/render_test.rb
DELETED
@@ -1,101 +0,0 @@
|
|
1
|
-
require 'setup'
|
2
|
-
|
3
|
-
spec :Views do
|
4
|
-
context :cache do
|
5
|
-
engine = Tilt::ERBTemplate
|
6
|
-
path = File.expand_path('../templates/a', __FILE__)
|
7
|
-
define_method(:file) {mock_controller(:a).initialize_controller.send(:find_template, path, 'get', engine)}
|
8
|
-
define_method(:read) {mock_controller(:a).initialize_controller.send(:read_template, file).__id__}
|
9
|
-
define_method(:compile) {|tpl| mock_controller(:a).initialize_controller.send(:compile_template, tpl, engine).__id__}
|
10
|
-
|
11
|
-
it 'resolves template path only once' do
|
12
|
-
cache_id = file.__id__
|
13
|
-
assert(file.__id__) == cache_id
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'rereads templates only when template file modified' do
|
17
|
-
cache_id = read
|
18
|
-
assert(read) == cache_id
|
19
|
-
FileUtils.touch(file)
|
20
|
-
refute(read) == cache_id
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'recompiles template only if it was modified' do
|
24
|
-
cache_id = compile('')
|
25
|
-
assert(compile('')) == cache_id
|
26
|
-
refute(compile('changed')) == cache_id
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context :scope do
|
31
|
-
it 'uses controller instance for scope' do
|
32
|
-
app mock_controller {
|
33
|
-
before {@var = :val}
|
34
|
-
def post; render; end
|
35
|
-
}
|
36
|
-
post
|
37
|
-
assert(last_response).is_ok_with_body('val')
|
38
|
-
end
|
39
|
-
it 'uses custom scope' do
|
40
|
-
app mock_controller {
|
41
|
-
before {@var = :val}
|
42
|
-
def post
|
43
|
-
scope = Class.new {def initialize; @var = :vax; end}.new
|
44
|
-
render(scope: scope)
|
45
|
-
end
|
46
|
-
}
|
47
|
-
post
|
48
|
-
assert(last_response).is_ok_with_body('vax')
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context :locals do
|
53
|
-
it 'makes :locals accessible via attributes' do
|
54
|
-
app mock_controller {
|
55
|
-
def put; render(locals: {var: :val}); end
|
56
|
-
}
|
57
|
-
put
|
58
|
-
assert(last_response).is_ok_with_body('val')
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
context 'implicit templates' do
|
63
|
-
it 'uses the folder controller resides in as default path' do
|
64
|
-
app controller = mock_controller(:a) {
|
65
|
-
def get; render end
|
66
|
-
}
|
67
|
-
get
|
68
|
-
assert(last_response).is_ok_with_body '/a'
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context 'defined templates' do
|
73
|
-
it 'prefers defined templates over files' do
|
74
|
-
app mock_controller {
|
75
|
-
define_template(:get) {'x'}
|
76
|
-
def get; render end
|
77
|
-
}
|
78
|
-
get
|
79
|
-
assert(last_response).is_ok_with_body 'x'
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'renders defined template with defined layout' do
|
83
|
-
app mock_controller {
|
84
|
-
define_template(:t) {'t'}
|
85
|
-
define_layout(:x) {'x<%= yield %>x'}
|
86
|
-
layout(:x)
|
87
|
-
def get; render(:t) end
|
88
|
-
}
|
89
|
-
get
|
90
|
-
assert(last_response).is_ok_with_body 'xtx'
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'uses given block for template' do
|
95
|
-
app mock_controller {
|
96
|
-
def get; render {'x'} end
|
97
|
-
}
|
98
|
-
get
|
99
|
-
assert(last_response).is_ok_with_body 'x'
|
100
|
-
end
|
101
|
-
end
|
data/test/render/setup.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'test/setup'
|
2
|
-
|
3
|
-
spec do
|
4
|
-
# overriding mock_controller cause when defining a controller
|
5
|
-
# caller used to set controller's dirname
|
6
|
-
# and we do not want to clobber test/ dir with template files
|
7
|
-
def mock_controller path = :/, superclass = nil, &block
|
8
|
-
path, superclass = :/, path if path.is_a?(Class)
|
9
|
-
controller = Class.new(superclass || RocketIO::Controller)
|
10
|
-
controller.map(path)
|
11
|
-
controller.class_exec(&block) if block
|
12
|
-
controller
|
13
|
-
end
|
14
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
hi
|
@@ -1 +0,0 @@
|
|
1
|
-
-<%= yield %>-
|
@@ -1,146 +0,0 @@
|
|
1
|
-
require 'setup'
|
2
|
-
|
3
|
-
spec :templates do
|
4
|
-
context :compositing do
|
5
|
-
it 'inherits templates from superclass' do
|
6
|
-
a = mock_controller {
|
7
|
-
define_template(:a) {'a'}
|
8
|
-
}
|
9
|
-
b = mock_controller(a) {
|
10
|
-
}.initialize_controller
|
11
|
-
assert(b.__send__ b.templates[:a]) == 'a'
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'complements templates inherited from superclass' do
|
15
|
-
a = mock_controller {
|
16
|
-
define_template(:a) {'a'}
|
17
|
-
}
|
18
|
-
b = mock_controller(a) {
|
19
|
-
define_template(:b) {'b'}
|
20
|
-
}.initialize_controller
|
21
|
-
assert(b.__send__ b.templates[:a]) == 'a'
|
22
|
-
assert(b.__send__ b.templates[:b]) == 'b'
|
23
|
-
end
|
24
|
-
#
|
25
|
-
it 'overrides templates inherited from superclass' do
|
26
|
-
a = mock_controller {
|
27
|
-
define_template(:x) {'a'}
|
28
|
-
}
|
29
|
-
b = mock_controller(a) {
|
30
|
-
define_template(:x) {'b'}
|
31
|
-
}.initialize_controller
|
32
|
-
assert(b.__send__ b.templates[:x]) == 'b'
|
33
|
-
end
|
34
|
-
|
35
|
-
test '`inherit` overrides templates inherited from superclass' do
|
36
|
-
a = mock_controller {
|
37
|
-
define_template(:x) {'a'}
|
38
|
-
}
|
39
|
-
b = mock_controller(a) {
|
40
|
-
define_template(:x) {'b'}
|
41
|
-
}
|
42
|
-
c = mock_controller(a) {
|
43
|
-
inherit :templates, from: b
|
44
|
-
}.initialize_controller
|
45
|
-
assert(c.__send__ c.templates[:x]) == 'b'
|
46
|
-
end
|
47
|
-
|
48
|
-
test '`inherit` complements templates inherited from superclass' do
|
49
|
-
a = mock_controller {
|
50
|
-
define_template(:a) {'a'}
|
51
|
-
}
|
52
|
-
b = mock_controller(a) {
|
53
|
-
define_template(:b) {'b'}
|
54
|
-
}
|
55
|
-
c = mock_controller(a) {
|
56
|
-
inherit :templates, from: b
|
57
|
-
}.initialize_controller
|
58
|
-
assert(c.__send__ c.templates[:a]) == 'a'
|
59
|
-
assert(c.__send__ c.templates[:b]) == 'b'
|
60
|
-
end
|
61
|
-
|
62
|
-
test '`inherit` overrides defined templates' do
|
63
|
-
a = mock_controller {
|
64
|
-
define_template(:x) {'a'}
|
65
|
-
}
|
66
|
-
b = mock_controller {
|
67
|
-
define_template(:x) {'b'}
|
68
|
-
inherit :templates, from: a
|
69
|
-
}.initialize_controller
|
70
|
-
assert(b.__send__ b.templates[:x]) == 'a'
|
71
|
-
end
|
72
|
-
|
73
|
-
test '`inherit` complements defined templates' do
|
74
|
-
a = mock_controller {
|
75
|
-
define_template(:a) {'a'}
|
76
|
-
}
|
77
|
-
b = mock_controller {
|
78
|
-
define_template(:b) {'b'}
|
79
|
-
inherit :templates, from: a
|
80
|
-
}.initialize_controller
|
81
|
-
assert(b.__send__ b.templates[:a]) == 'a'
|
82
|
-
assert(b.__send__ b.templates[:b]) == 'b'
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'overrides templates inherited via `inherit`' do
|
86
|
-
a = mock_controller {
|
87
|
-
define_template(:x) {'a'}
|
88
|
-
}
|
89
|
-
b = mock_controller {
|
90
|
-
inherit :templates, from: a
|
91
|
-
define_template(:x) {'b'}
|
92
|
-
}.initialize_controller
|
93
|
-
assert(b.__send__ b.templates[:x]) == 'b'
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context :rendering do
|
98
|
-
|
99
|
-
it 'uses a file with same name if only name given' do
|
100
|
-
c = mock_controller {
|
101
|
-
define_template :get
|
102
|
-
}.initialize_controller
|
103
|
-
assert(c.render(:get)) == "/"
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'raises a TemplateError if there is no file with same name' do
|
107
|
-
template = rand.to_s
|
108
|
-
c = mock_controller {
|
109
|
-
define_template template
|
110
|
-
}.initialize_controller
|
111
|
-
assert {c.render(template)}.raise RocketIO::TemplateError
|
112
|
-
end
|
113
|
-
|
114
|
-
it 'uses given file - file resides in controller dirname' do
|
115
|
-
c = mock_controller {
|
116
|
-
define_template :get, file: :items
|
117
|
-
}.initialize_controller
|
118
|
-
assert(c.render(:get)) == "items\n"
|
119
|
-
end
|
120
|
-
|
121
|
-
it 'uses given file - file resides outside controller dirname' do
|
122
|
-
c = mock_controller {
|
123
|
-
define_template :get, file: './templates/a/get'
|
124
|
-
}.initialize_controller
|
125
|
-
assert(c.render(:get)) == "hi\n"
|
126
|
-
end
|
127
|
-
|
128
|
-
it 'accepts a block for given file' do
|
129
|
-
c = mock_controller {
|
130
|
-
define_template :master, file: -> {@outside ? './templates/a/get' : :items}
|
131
|
-
}.initialize_controller
|
132
|
-
assert(c.render(:master)) == "items\n"
|
133
|
-
c.instance_variable_set(:@outside, true)
|
134
|
-
assert(c.render(:master)) == "hi\n"
|
135
|
-
end
|
136
|
-
|
137
|
-
it 'accepts a block and uses returned value as template without searching for file' do
|
138
|
-
c = mock_controller {
|
139
|
-
define_template(:master) {@admin ? 'admin' : 'user'}
|
140
|
-
}.initialize_controller
|
141
|
-
assert(c.render(:master)) == "user"
|
142
|
-
c.instance_variable_set(:@admin, true)
|
143
|
-
assert(c.render(:master)) == "admin"
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|
data/test/request_test.rb
DELETED
@@ -1,105 +0,0 @@
|
|
1
|
-
require 'setup'
|
2
|
-
require 'stringio'
|
3
|
-
|
4
|
-
# tests stolen from github.com/sinatra/sinatra
|
5
|
-
# Copyright (c) 2007, 2008, 2009 Blake Mizerany
|
6
|
-
# Copyright (c) 2010, 2011, 2012, 2013, 2014 Konstantin Haase
|
7
|
-
# Copyright (c) 2015 Slee Woo
|
8
|
-
|
9
|
-
spec RocketIO::Request do
|
10
|
-
|
11
|
-
it 'responds to #user_agent' do
|
12
|
-
request = RocketIO::Request.new({'HTTP_USER_AGENT' => 'Test'})
|
13
|
-
assert(request).respond_to?(:user_agent)
|
14
|
-
assert('Test') == request.user_agent
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'parses POST params when Content-Type is form-dataish' do
|
18
|
-
request = RocketIO::Request.new(
|
19
|
-
'REQUEST_METHOD' => 'PUT',
|
20
|
-
'CONTENT_TYPE' => 'application/x-www-form-urlencoded',
|
21
|
-
'rack.input' => StringIO.new('foo=bar')
|
22
|
-
)
|
23
|
-
assert('bar') == request.params['foo']
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'is secure when the url scheme is https' do
|
27
|
-
request = RocketIO::Request.new('rack.url_scheme' => 'https')
|
28
|
-
assert(request).secure?
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'is not secure when the url scheme is http' do
|
32
|
-
request = RocketIO::Request.new('rack.url_scheme' => 'http')
|
33
|
-
refute(request).secure?
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'respects X-Forwarded-Proto header for proxied SSL' do
|
37
|
-
request = RocketIO::Request.new('HTTP_X_FORWARDED_PROTO' => 'https')
|
38
|
-
assert(request).secure?
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'is possible to marshal params' do
|
42
|
-
request = RocketIO::Request.new(
|
43
|
-
'REQUEST_METHOD' => 'PUT',
|
44
|
-
'CONTENT_TYPE' => 'application/x-www-form-urlencoded',
|
45
|
-
'rack.input' => StringIO.new('foo=bar')
|
46
|
-
)
|
47
|
-
dumped = Marshal.dump(request.params)
|
48
|
-
assert('bar') == Marshal.load(dumped)['foo']
|
49
|
-
end
|
50
|
-
|
51
|
-
it "exposes the preferred type's parameters" do
|
52
|
-
request = RocketIO::Request.new(
|
53
|
-
'HTTP_ACCEPT' => 'image/jpeg; compress=0.25'
|
54
|
-
)
|
55
|
-
assert({ 'compress' => '0.25' }) == request.preferred_type.params
|
56
|
-
end
|
57
|
-
|
58
|
-
it "makes accept types behave like strings" do
|
59
|
-
request = RocketIO::Request.new('HTTP_ACCEPT' => 'image/jpeg; compress=0.25')
|
60
|
-
assert(request).accept?('image/jpeg')
|
61
|
-
assert('image/jpeg') == request.preferred_type.to_s
|
62
|
-
assert('image/jpeg; compress=0.25') == request.preferred_type.to_s(true)
|
63
|
-
assert('image/jpeg') == request.preferred_type.to_str
|
64
|
-
assert('image') == request.preferred_type.split('/').first
|
65
|
-
|
66
|
-
String.instance_methods.each do |method|
|
67
|
-
next unless "".respond_to? method
|
68
|
-
assert(request.preferred_type).respond_to?(method)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
it "accepts types when wildcards are requested" do
|
73
|
-
request = RocketIO::Request.new('HTTP_ACCEPT' => 'image/*')
|
74
|
-
assert(request).accept?('image/jpeg')
|
75
|
-
end
|
76
|
-
|
77
|
-
it "properly decodes MIME type parameters" do
|
78
|
-
request = RocketIO::Request.new(
|
79
|
-
'HTTP_ACCEPT' => 'image/jpeg;unquoted=0.25;quoted="0.25";chartest="\";,\x"'
|
80
|
-
)
|
81
|
-
expected = { 'unquoted' => '0.25', 'quoted' => '0.25', 'chartest' => '";,x' }
|
82
|
-
assert(expected) == request.preferred_type.params
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'accepts */* when HTTP_ACCEPT is not present in the request' do
|
86
|
-
request = RocketIO::Request.new Hash.new
|
87
|
-
assert(1) == request.accept.size
|
88
|
-
assert(request).accept?('text/html')
|
89
|
-
assert('*/*') == request.preferred_type.to_s
|
90
|
-
assert('*/*') == request.preferred_type.to_s(true)
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'accepts */* when HTTP_ACCEPT is blank in the request' do
|
94
|
-
request = RocketIO::Request.new 'HTTP_ACCEPT' => ''
|
95
|
-
assert(1) == request.accept.size
|
96
|
-
assert(request).accept?('text/html')
|
97
|
-
assert('*/*') == request.preferred_type.to_s
|
98
|
-
assert('*/*') == request.preferred_type.to_s(true)
|
99
|
-
end
|
100
|
-
|
101
|
-
it 'will not accept types not specified in HTTP_ACCEPT when HTTP_ACCEPT is provided' do
|
102
|
-
request = RocketIO::Request.new 'HTTP_ACCEPT' => 'application/json'
|
103
|
-
refute(request).accept?('text/html')
|
104
|
-
end
|
105
|
-
end
|
data/test/response_test.rb
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
# Copyright (c) 2007, 2008, 2009 Blake Mizerany
|
2
|
-
# Copyright (c) 2010, 2011, 2012, 2013, 2014 Konstantin Haase
|
3
|
-
# Copyright (c) 2015 Slee Woo
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person
|
6
|
-
# obtaining a copy of this software and associated documentation
|
7
|
-
# files (the "Software"), to deal in the Software without
|
8
|
-
# restriction, including without limitation the rights to use,
|
9
|
-
# copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the
|
11
|
-
# Software is furnished to do so, subject to the following
|
12
|
-
# conditions:
|
13
|
-
#
|
14
|
-
# The above copyright notice and this permission notice shall be
|
15
|
-
# included in all copies or substantial portions of the Software.
|
16
|
-
#
|
17
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
18
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
19
|
-
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
20
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
21
|
-
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
22
|
-
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
23
|
-
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
24
|
-
# OTHER DEALINGS IN THE SOFTWARE.
|
25
|
-
|
26
|
-
require 'setup'
|
27
|
-
|
28
|
-
spec RocketIO::Response do
|
29
|
-
before { @response = RocketIO::Response.new }
|
30
|
-
|
31
|
-
assert :identical_to? do |a,b|
|
32
|
-
a.to_enum(:each).to_a == b.to_enum(:each).to_a
|
33
|
-
end
|
34
|
-
|
35
|
-
it "initializes with 200 status code, empty body and nil content type" do
|
36
|
-
assert(@response.status) == 200
|
37
|
-
assert(@response['Content-Type']).nil?
|
38
|
-
assert(@response.body) == []
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'uses case insensitive headers' do
|
42
|
-
@response['content-type'] = 'application/foo'
|
43
|
-
assert('application/foo') == @response['Content-Type']
|
44
|
-
assert('application/foo') == @response['CONTENT-TYPE']
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'writes to body' do
|
48
|
-
@response.body = 'Hello'
|
49
|
-
@response.write ' World'
|
50
|
-
assert('Hello World') == @response.body.join
|
51
|
-
end
|
52
|
-
|
53
|
-
[204, 304].each do |status_code|
|
54
|
-
it "removes the Content-Type header and body when response status is #{status_code}" do
|
55
|
-
@response.status = status_code
|
56
|
-
@response.body = ['Hello World']
|
57
|
-
assert([status_code, {}, []]) == @response.finish
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'does not call #to_ary or #inject on the body' do
|
62
|
-
object = Object.new
|
63
|
-
def object.inject(*) fail 'called' end
|
64
|
-
def object.to_ary(*) fail 'called' end
|
65
|
-
def object.each(*) end
|
66
|
-
@response.body = object
|
67
|
-
refute(@response.finish).nil?
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'does not nest a RocketIO::Response' do
|
71
|
-
@response.body = RocketIO::Response.new ["foo"]
|
72
|
-
assert(@response.body).identical_to? ["foo"]
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'does not nest a Rack::Response' do
|
76
|
-
@response.body = Rack::Response.new ["foo"]
|
77
|
-
assert(@response.body).identical_to? ["foo"]
|
78
|
-
end
|
79
|
-
|
80
|
-
it "sets response.body when result is a String" do
|
81
|
-
app mock_controller {
|
82
|
-
def get; 'Hello World' end
|
83
|
-
}
|
84
|
-
|
85
|
-
get
|
86
|
-
assert(last_response).is_ok_with_body 'Hello World'
|
87
|
-
end
|
88
|
-
|
89
|
-
it "sets response.body when result is an Array of Strings" do
|
90
|
-
app mock_controller {
|
91
|
-
def get; ['Hello', 'World'] end
|
92
|
-
}
|
93
|
-
|
94
|
-
get
|
95
|
-
assert(last_response).is_ok_with_body 'HelloWorld'
|
96
|
-
end
|
97
|
-
|
98
|
-
it "sets response.body when result responds to #each" do
|
99
|
-
app mock_controller {
|
100
|
-
def get
|
101
|
-
res = lambda { 'Hello World' }
|
102
|
-
def res.each ; yield call ; end
|
103
|
-
res
|
104
|
-
end
|
105
|
-
}
|
106
|
-
|
107
|
-
get
|
108
|
-
assert(last_response).is_ok_with_body 'Hello World'
|
109
|
-
end
|
110
|
-
|
111
|
-
it "sets response.body to [] when result is nil" do
|
112
|
-
app mock_controller {
|
113
|
-
def get; end
|
114
|
-
}
|
115
|
-
|
116
|
-
get
|
117
|
-
assert(last_response).is_ok_with_body ''
|
118
|
-
end
|
119
|
-
end
|