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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -2
  3. data/LICENSE.txt +22 -0
  4. data/README.md +5 -22
  5. data/Rakefile +1 -7
  6. data/lib/rocketio.rb +3 -131
  7. data/lib/rocketio/version.rb +2 -2
  8. data/rocketio.gemspec +17 -21
  9. metadata +11 -146
  10. data/.travis.yml +0 -3
  11. data/bin/console +0 -14
  12. data/bin/setup +0 -7
  13. data/lib/rocketio/application.rb +0 -31
  14. data/lib/rocketio/controller.rb +0 -288
  15. data/lib/rocketio/controller/authentication.rb +0 -141
  16. data/lib/rocketio/controller/authorization.rb +0 -53
  17. data/lib/rocketio/controller/cookies.rb +0 -59
  18. data/lib/rocketio/controller/error_handlers.rb +0 -89
  19. data/lib/rocketio/controller/filters.rb +0 -119
  20. data/lib/rocketio/controller/flash.rb +0 -21
  21. data/lib/rocketio/controller/helpers.rb +0 -438
  22. data/lib/rocketio/controller/middleware.rb +0 -32
  23. data/lib/rocketio/controller/render.rb +0 -148
  24. data/lib/rocketio/controller/render/engine.rb +0 -76
  25. data/lib/rocketio/controller/render/layout.rb +0 -27
  26. data/lib/rocketio/controller/render/layouts.rb +0 -85
  27. data/lib/rocketio/controller/render/templates.rb +0 -83
  28. data/lib/rocketio/controller/request.rb +0 -115
  29. data/lib/rocketio/controller/response.rb +0 -84
  30. data/lib/rocketio/controller/sessions.rb +0 -64
  31. data/lib/rocketio/controller/token_auth.rb +0 -118
  32. data/lib/rocketio/controller/websocket.rb +0 -21
  33. data/lib/rocketio/error_templates/404.html +0 -3
  34. data/lib/rocketio/error_templates/409.html +0 -7
  35. data/lib/rocketio/error_templates/500.html +0 -3
  36. data/lib/rocketio/error_templates/501.html +0 -6
  37. data/lib/rocketio/error_templates/layout.html +0 -1
  38. data/lib/rocketio/exceptions.rb +0 -4
  39. data/lib/rocketio/router.rb +0 -65
  40. data/lib/rocketio/util.rb +0 -122
  41. data/test/aliases_test.rb +0 -54
  42. data/test/authentication_test.rb +0 -307
  43. data/test/authorization_test.rb +0 -91
  44. data/test/cache_control_test.rb +0 -268
  45. data/test/content_type_test.rb +0 -124
  46. data/test/cookies_test.rb +0 -49
  47. data/test/error_handlers_test.rb +0 -125
  48. data/test/etag_test.rb +0 -445
  49. data/test/filters_test.rb +0 -177
  50. data/test/halt_test.rb +0 -73
  51. data/test/helpers_test.rb +0 -171
  52. data/test/middleware_test.rb +0 -57
  53. data/test/redirect_test.rb +0 -135
  54. data/test/render/engine_test.rb +0 -71
  55. data/test/render/get.erb +0 -1
  56. data/test/render/items.erb +0 -1
  57. data/test/render/layout.erb +0 -1
  58. data/test/render/layout_test.rb +0 -104
  59. data/test/render/layouts/master.erb +0 -1
  60. data/test/render/layouts_test.rb +0 -145
  61. data/test/render/master.erb +0 -1
  62. data/test/render/post.erb +0 -1
  63. data/test/render/put.erb +0 -1
  64. data/test/render/render_test.rb +0 -101
  65. data/test/render/setup.rb +0 -14
  66. data/test/render/templates/a/get.erb +0 -1
  67. data/test/render/templates/master.erb +0 -1
  68. data/test/render/templates_test.rb +0 -146
  69. data/test/request_test.rb +0 -105
  70. data/test/response_test.rb +0 -119
  71. data/test/routes_test.rb +0 -70
  72. data/test/sendfile_test.rb +0 -209
  73. data/test/sessions_test.rb +0 -176
  74. data/test/setup.rb +0 -59
@@ -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 %>
@@ -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
@@ -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