rocketio 0.1.0 → 0.2.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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rocketio.rb +6 -3
  3. data/lib/rocketio/application.rb +3 -7
  4. data/lib/rocketio/controller.rb +62 -90
  5. data/lib/rocketio/controller/authentication.rb +38 -44
  6. data/lib/rocketio/controller/authorization.rb +8 -4
  7. data/lib/rocketio/controller/error_handlers.rb +12 -8
  8. data/lib/rocketio/controller/filters.rb +14 -19
  9. data/lib/rocketio/controller/helpers.rb +1 -1
  10. data/lib/rocketio/controller/middleware.rb +1 -1
  11. data/lib/rocketio/controller/render/engine.rb +3 -3
  12. data/lib/rocketio/controller/render/layout.rb +1 -1
  13. data/lib/rocketio/controller/render/layouts.rb +6 -6
  14. data/lib/rocketio/controller/render/template_vars.rb +3 -3
  15. data/lib/rocketio/controller/render/templates.rb +6 -6
  16. data/lib/rocketio/controller/sessions.rb +1 -1
  17. data/lib/rocketio/error_templates/409.html +11 -7
  18. data/lib/rocketio/error_templates/501.html +4 -4
  19. data/lib/rocketio/router.rb +35 -21
  20. data/lib/rocketio/version.rb +1 -1
  21. data/rocketio.gemspec +2 -0
  22. data/test/aliases_test.rb +2 -2
  23. data/test/api_test.rb +24 -117
  24. data/test/authentication_test.rb +96 -60
  25. data/test/authorization_test.rb +28 -17
  26. data/test/cache_control_test.rb +12 -12
  27. data/test/content_type_test.rb +7 -7
  28. data/test/cookies_test.rb +4 -4
  29. data/test/error_handlers_test.rb +14 -12
  30. data/test/etag_test.rb +32 -32
  31. data/test/filters_test.rb +96 -79
  32. data/test/halt_test.rb +1 -1
  33. data/test/helpers_test.rb +6 -6
  34. data/test/middleware_test.rb +4 -4
  35. data/test/redirect_test.rb +6 -7
  36. data/test/render/{post.erb → b.erb} +0 -0
  37. data/test/render/{put.erb → c.erb} +0 -0
  38. data/test/render/engine_test.rb +5 -5
  39. data/test/render/{get.erb → index.erb} +0 -0
  40. data/test/render/layout_test.rb +21 -17
  41. data/test/render/layouts_test.rb +14 -14
  42. data/test/render/render_test.rb +17 -14
  43. data/test/render/template_vars_test.rb +9 -9
  44. data/test/render/templates_test.rb +16 -16
  45. data/test/response_test.rb +4 -4
  46. data/test/routes_test.rb +21 -42
  47. data/test/sendfile_test.rb +8 -8
  48. data/test/sessions_test.rb +27 -27
  49. data/test/setup.rb +2 -0
  50. metadata +34 -6
@@ -79,7 +79,7 @@ spec RocketIO::Response do
79
79
 
80
80
  it "sets response.body when result is a String" do
81
81
  app mock_controller {
82
- def get; 'Hello World' end
82
+ def index; 'Hello World' end
83
83
  }
84
84
 
85
85
  get
@@ -88,7 +88,7 @@ spec RocketIO::Response do
88
88
 
89
89
  it "sets response.body when result is an Array of Strings" do
90
90
  app mock_controller {
91
- def get; ['Hello', 'World'] end
91
+ def index; ['Hello', 'World'] end
92
92
  }
93
93
 
94
94
  get
@@ -97,7 +97,7 @@ spec RocketIO::Response do
97
97
 
98
98
  it "sets response.body when result responds to #each" do
99
99
  app mock_controller {
100
- def get
100
+ def index
101
101
  res = lambda { 'Hello World' }
102
102
  def res.each ; yield call ; end
103
103
  res
@@ -110,7 +110,7 @@ spec RocketIO::Response do
110
110
 
111
111
  it "sets response.body to [] when result is nil" do
112
112
  app mock_controller {
113
- def get; end
113
+ def index; end
114
114
  }
115
115
 
116
116
  get
data/test/routes_test.rb CHANGED
@@ -1,70 +1,49 @@
1
1
  require 'setup'
2
2
 
3
3
  class A < RocketIO::Controller
4
- def get(x); [:a, x]*':' end
5
- def post; url end
4
+ def index; 'a' end
5
+ alias main index
6
6
 
7
- class B <self
8
- def get(x = nil); [:b, x]*':' end
7
+ def b; raise 'should never call this as it is shadowed by A::B controller' end
8
+
9
+ class B < self
10
+ def index; 'b' end
11
+
12
+ def c; raise 'should never call this as it is shadowed by A::B::C controller' end
9
13
 
10
14
  class C < self
11
- def get(x = nil); [:c, x]*':' end
15
+ def index; 'c' end
12
16
  end
13
17
  end
14
18
  end
15
19
 
16
- class D < RocketIO::Controller
17
- end
18
-
19
20
  spec :Routes do
20
- test 'paths' do
21
+
22
+ test :paths do
21
23
  assert(A.url) == '/a'
22
24
  assert(A::B.url) == '/a/b'
23
25
  assert(A::B::C.url) == '/a/b/c'
24
26
  end
25
27
 
26
- it 'overrides inherited REST methods' do
27
- app(A)
28
- post
29
- assert(last_response).is_ok
30
-
31
- app(D)
32
- post
33
- assert(last_response).is_unimplemented
34
- end
35
-
36
- it 'inherits REST methods from supercontroller' do
37
- app(A::B)
38
- get
39
- assert(last_response).is_ok_with_body 'b:'
40
-
41
- post
42
- assert(last_response).is_ok_with_body '/a/b'
43
- end
44
-
45
28
  context :router do
46
29
  before {app mock_app(A, A::B, A::B::C)}
47
30
 
48
- test '"a" does not serve /a/b' do
49
- get '/a/x'
50
- assert(last_response).is_ok_with_body 'a:x'
51
-
52
- get '/a/b'
53
- assert(last_response).is_ok_with_body 'b:'
31
+ it 'uses :index as default method' do
32
+ get '/a'
33
+ assert(last_response).is_ok_with_body 'a'
34
+ end
54
35
 
55
- get '/a/b/x'
56
- assert(last_response).is_ok_with_body 'b:x'
36
+ it 'use alias to set a canonical route' do
37
+ get '/a/main'
38
+ assert(last_response).is_ok_with_body 'a'
57
39
  end
58
40
 
59
- test '"b" does not serve /a/b/c' do
41
+ it 'prefers controllers over methods' do
60
42
  get '/a/b'
61
- assert(last_response).is_ok_with_body 'b:'
43
+ assert(last_response).is_ok_with_body 'b'
62
44
 
63
45
  get '/a/b/c'
64
- assert(last_response).is_ok_with_body 'c:'
65
-
66
- get '/a/b/c/x'
67
- assert(last_response).is_ok_with_body 'c:x'
46
+ assert(last_response).is_ok_with_body 'c'
68
47
  end
69
48
  end
70
49
  end
@@ -29,7 +29,7 @@ spec 'attachment' do
29
29
 
30
30
  def attachment_app(filename=nil)
31
31
  app mock_controller('/attachment') {
32
- define_method :get do
32
+ define_method :index do
33
33
  attachment filename
34
34
  response.write("<html></html>")
35
35
  end
@@ -52,7 +52,7 @@ spec 'attachment' do
52
52
 
53
53
  it 'sets the Content-Type response header with extname' do
54
54
  app mock_controller('/attachment') {
55
- def get
55
+ def index
56
56
  content_type :atom
57
57
  attachment 'test.xml'
58
58
  response.write("<html></html>")
@@ -79,7 +79,7 @@ spec 'send_file' do
79
79
  def send_file_app(opts={})
80
80
  path = @file
81
81
  app mock_controller('/file.txt') {
82
- define_method(:get) {send_file(path, opts)}
82
+ define_method(:index) {send_file(path, opts)}
83
83
  }
84
84
  get('/file.txt')
85
85
  end
@@ -123,7 +123,7 @@ spec 'send_file' do
123
123
 
124
124
  it "returns a 404 when not found" do
125
125
  app mock_controller {
126
- def get; send_file 'this-file-does-not-exist.txt'; end
126
+ def index; send_file 'this-file-does-not-exist.txt'; end
127
127
  }
128
128
  get
129
129
  assert(last_response).not_found?
@@ -164,7 +164,7 @@ spec 'send_file' do
164
164
  File.open(file, 'wb') { |io| io.write('Hello World') }
165
165
 
166
166
  app mock_controller('/file.txt') {
167
- define_method(:get) {send_file(file)}
167
+ define_method(:index) {send_file(file)}
168
168
  }
169
169
  get('/file.txt')
170
170
  File.unlink(file)
@@ -175,7 +175,7 @@ spec 'send_file' do
175
175
  it "does not override Content-Type if already set and no explicit type is given" do
176
176
  path = @file
177
177
  app mock_controller {
178
- define_method :get do
178
+ define_method :index do
179
179
  content_type :png
180
180
  send_file path
181
181
  end
@@ -187,7 +187,7 @@ spec 'send_file' do
187
187
  it "does override Content-Type even if already set, if explicit type is given" do
188
188
  path = @file
189
189
  app mock_controller {
190
- define_method :get do
190
+ define_method :index do
191
191
  content_type :png
192
192
  send_file path, :type => :gif
193
193
  end
@@ -199,7 +199,7 @@ spec 'send_file' do
199
199
  it 'can have :status option as a string' do
200
200
  path = @file
201
201
  app mock_controller {
202
- define_method :post do
202
+ define_method :index do
203
203
  send_file path, :status => '422'
204
204
  end
205
205
  }
@@ -35,12 +35,12 @@ spec :Sessions do
35
35
  sessions :cookies
36
36
  }
37
37
  b = mock_controller(:b, a) {
38
- def get(y); session[:x] = y end
39
- def post; session[:x] end
38
+ def set(y); session[:x] = y end
39
+ def get; session[:x] end
40
40
  }
41
41
  app mock_app(a, b)
42
- get :b, :y
43
- post :b
42
+ get '/b/set', :y
43
+ post '/b/get'
44
44
  assert(last_response.body) == 'y'
45
45
  end
46
46
 
@@ -50,12 +50,12 @@ spec :Sessions do
50
50
  }
51
51
  b = mock_controller(:b) {
52
52
  import :sessions, from: a
53
- def get(y); session[:x] = y end
54
- def post; session[:x] end
53
+ def set(y); session[:x] = y end
54
+ def get; session[:x] end
55
55
  }
56
56
  app mock_app(a, b)
57
- get :b, :y
58
- post :b
57
+ get '/b/set', :y
58
+ post '/b/get'
59
59
  assert(last_response.body) == 'y'
60
60
  end
61
61
 
@@ -65,39 +65,39 @@ spec :Sessions do
65
65
  }
66
66
  b = mock_controller(:b, a) {
67
67
  sessions nil
68
- def get(y); session[:x] = y end
69
- def post; session[:x] end
68
+ def set(y); session[:x] = y end
69
+ def get; session[:x] end
70
70
  }
71
71
  app mock_app(a, b)
72
- get :b, :y
73
- post :b
72
+ get '/b/set', :y
73
+ post '/b/get'
74
74
  assert(last_response.body) == ''
75
75
  end
76
76
 
77
- it 'uses `inherit` to override sessions setup inherited from superclass' do
77
+ it 'uses `import` to override sessions setup inherited from superclass' do
78
78
  a = mock_controller {
79
79
  sessions :cookies
80
80
  }
81
81
  b = mock_controller(:b, a) {
82
82
  sessions false
83
- def get(y); session[:x] = y end
84
- def post; session[:x] end
83
+ def set(y); session[:x] = y end
84
+ def get; session[:x] end
85
85
  }
86
- c = mock_controller(a) {
86
+ c = mock_controller(:c, a) {
87
87
  import :sessions, from: b
88
- def get(y); session[:x] = y end
89
- def post; session[:x] end
88
+ def set(y); session[:x] = y end
89
+ def get; session[:x] end
90
90
  }
91
- app mock_app(a, b)
92
- get :b, :y
93
- post :b
91
+ app mock_app(a, b, c)
92
+ get '/c/set', :y
93
+ post '/c/get'
94
94
  assert(last_response.body) == ''
95
95
  end
96
96
 
97
97
  it 'uses the existing rack.session' do
98
98
  app mock_app(mock_controller {
99
99
  sessions :cookies
100
- define_method(:get) {session[:foo]}
100
+ define_method(:index) {session[:foo]}
101
101
  })
102
102
 
103
103
  env['rack.session'] = { :foo => 'bar' }
@@ -109,7 +109,7 @@ spec :Sessions do
109
109
  a = mock_controller {
110
110
  sessions :cookies, secret: 'svss'
111
111
 
112
- define_method :get do
112
+ define_method :index do
113
113
  fail('session[:foo] already set') unless session[:foo].nil?
114
114
  session[:foo] = 'bar'
115
115
  redirect '/hi'
@@ -117,7 +117,7 @@ spec :Sessions do
117
117
  }
118
118
  b = mock_controller('hi') {
119
119
  sessions :cookies, secret: 'svss'
120
- define_method(:get) {"hi #{session[:foo]}"}
120
+ define_method(:index) {"hi #{session[:foo]}"}
121
121
  }
122
122
  app mock_app(a, b)
123
123
 
@@ -130,7 +130,7 @@ spec :Sessions do
130
130
  app mock_app(mock_controller {
131
131
  sessions :cookies
132
132
 
133
- define_method :get do
133
+ define_method :index do
134
134
  unless env['rack.session'] && env['rack.session.options']
135
135
  fail('session middleware not inserted')
136
136
  end
@@ -146,7 +146,7 @@ spec :Sessions do
146
146
  app mock_app(mock_controller {
147
147
  sessions :cookies
148
148
 
149
- define_method :get do
149
+ define_method :index do
150
150
  unless env['rack.session.options'][:secret]
151
151
  fail('default session secret not set')
152
152
  end
@@ -162,7 +162,7 @@ spec :Sessions do
162
162
  app mock_app(mock_controller {
163
163
  sessions :cookies, secret: 'svss'
164
164
 
165
- define_method :get do
165
+ define_method :index do
166
166
  unless env['rack.session.options'][:secret]
167
167
  fail('looks like option hash not set/used')
168
168
  end
data/test/setup.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  ENV['RACK_ENV'] = 'testing'
2
2
  require 'rack/radar'
3
+ require 'pry'
4
+ require 'pry-byebug'
3
5
  $:.unshift(File.expand_path('../../lib', __FILE__))
4
6
  require 'rocketio'
5
7
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rocketio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Slee Woo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-02 00:00:00.000000000 Z
11
+ date: 2016-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -108,6 +108,34 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry-byebug
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3'
111
139
  description: Simple, fast, scalable web framework for Ruby
112
140
  email:
113
141
  - mail@sleewoo.com
@@ -168,16 +196,16 @@ files:
168
196
  - test/helpers_test.rb
169
197
  - test/middleware_test.rb
170
198
  - test/redirect_test.rb
199
+ - test/render/b.erb
200
+ - test/render/c.erb
171
201
  - test/render/engine_test.rb
172
- - test/render/get.erb
202
+ - test/render/index.erb
173
203
  - test/render/items.erb
174
204
  - test/render/layout.erb
175
205
  - test/render/layout_test.rb
176
206
  - test/render/layouts/master.erb
177
207
  - test/render/layouts_test.rb
178
208
  - test/render/master.erb
179
- - test/render/post.erb
180
- - test/render/put.erb
181
209
  - test/render/render_test.rb
182
210
  - test/render/setup.rb
183
211
  - test/render/template_vars_test.rb
@@ -213,5 +241,5 @@ rubyforge_project:
213
241
  rubygems_version: 2.5.1
214
242
  signing_key:
215
243
  specification_version: 4
216
- summary: '["rocketio-0.1.0", "Simple, fast, scalable web framework for Ruby"]'
244
+ summary: '["rocketio-0.2.0", "Simple, fast, scalable web framework for Ruby"]'
217
245
  test_files: []