rocketio 0.0.0.pre.alpha → 0.0.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.
- 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
|