rocketio 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: []