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
File without changes
@@ -8,7 +8,7 @@ spec :Views do
8
8
  }
9
9
  b = mock_controller(a) {
10
10
  }
11
- assert(b.initialize_controller.layout) == :master
11
+ assert(b.new.layout) == :master
12
12
  end
13
13
 
14
14
  it 'overrides layout inherited from superclass' do
@@ -18,7 +18,7 @@ spec :Views do
18
18
  b = mock_controller(a) {
19
19
  layout :baster
20
20
  }
21
- assert(b.initialize_controller.layout) == :baster
21
+ assert(b.new.layout) == :baster
22
22
  end
23
23
 
24
24
  it 'can use `inherit` to override layout inherited from superclass' do
@@ -31,12 +31,12 @@ spec :Views do
31
31
  c = mock_controller(a) {
32
32
  import :layout, from: b
33
33
  }
34
- assert(c.initialize_controller.layout) == :baster
34
+ assert(c.new.layout) == :baster
35
35
  end
36
36
 
37
37
  it 'renders without layout if no default layout set' do
38
38
  app mock_controller {
39
- def get; render; end
39
+ def index; render; end
40
40
  }
41
41
  get
42
42
  assert(last_response).is_ok_with_body('/')
@@ -45,7 +45,7 @@ spec :Views do
45
45
  it 'renders without layout if default layout set to false' do
46
46
  app mock_controller {
47
47
  layout false
48
- def get; render; end
48
+ def index; render; end
49
49
  }
50
50
  get
51
51
  assert(last_response).is_ok_with_body('/')
@@ -55,15 +55,17 @@ spec :Views do
55
55
  app mock_controller {
56
56
  layout :layout
57
57
  def var; @var end
58
- def get; render(layout: nil); end
59
- def post; @var = 'x'; render(layout: false); end
60
- def put; @var = 'y'; render; end
58
+ def index; render(layout: nil); end
59
+ def b; @var = 'x'; render(layout: false); end
60
+ def c; @var = 'y'; render; end
61
61
  }
62
62
  get
63
63
  assert(last_response).is_ok_with_body('/')
64
- post
64
+
65
+ get :b
65
66
  assert(last_response).is_ok_with_body('x')
66
- put
67
+
68
+ get :c
67
69
  assert(last_response).is_ok_with_body("=y=\n")
68
70
  end
69
71
 
@@ -71,7 +73,7 @@ spec :Views do
71
73
  app mock_controller {
72
74
  define_layout(:master) {'=<%= yield %>='}
73
75
  layout :master
74
- def get; render; end
76
+ def index; render; end
75
77
  }
76
78
  get
77
79
  assert(last_response).is_ok_with_body('=/=')
@@ -81,7 +83,7 @@ spec :Views do
81
83
  app mock_controller {
82
84
  define_layout(:layout) {'-<%= yield %>-'}
83
85
  layout :layout
84
- def get; render; end
86
+ def index; render; end
85
87
  }
86
88
  get
87
89
  assert(last_response).is_ok_with_body('-/-')
@@ -92,18 +94,20 @@ spec :Views do
92
94
  define_layout(:x) {'x<%= yield %>'}
93
95
  define_layout(:y) {'y<%= yield %>'}
94
96
  layout :x
95
- def get; render {''}; end
96
- def post; render(layout: :y) {''}; end
97
+ def index; render {''}; end
98
+ def b; render(layout: :y) {''}; end
97
99
  }
100
+
98
101
  get
99
102
  assert(last_response).is_ok_with_body('x')
100
- post
103
+
104
+ get :b
101
105
  assert(last_response).is_ok_with_body('y')
102
106
  end
103
107
 
104
108
  it 'accepts layout as :template option' do
105
109
  app mock_controller {
106
- def get; render_layout(template: '+<%= yield %>+') {'='}; end
110
+ def index; render_layout(template: '+<%= yield %>+') {'='}; end
107
111
  }
108
112
  get
109
113
  assert(last_response).is_ok_with_body('+=+')
@@ -111,7 +115,7 @@ spec :Views do
111
115
 
112
116
  it 'raises ArgumentError if both layout name and :template option given' do
113
117
  app mock_controller {
114
- def get; render_layout(:x, template: '+<%= yield %>+') {'='}; end
118
+ def index; render_layout(:x, template: '+<%= yield %>+') {'='}; end
115
119
  }
116
120
  assert {get}.raise ArgumentError, /both/i
117
121
  end
@@ -7,7 +7,7 @@ spec :layouts do
7
7
  define_layout(:a) {'a'}
8
8
  }
9
9
  b = mock_controller(a) {
10
- }.initialize_controller
10
+ }.new
11
11
  assert(b.__send__ b.layouts[:a]) == 'a'
12
12
  end
13
13
 
@@ -17,7 +17,7 @@ spec :layouts do
17
17
  }
18
18
  b = mock_controller(a) {
19
19
  define_layout(:b) {'b'}
20
- }.initialize_controller
20
+ }.new
21
21
  assert(b.__send__ b.layouts[:a]) == 'a'
22
22
  assert(b.__send__ b.layouts[:b]) == 'b'
23
23
  end
@@ -28,7 +28,7 @@ spec :layouts do
28
28
  }
29
29
  b = mock_controller(a) {
30
30
  define_layout(:x) {'b'}
31
- }.initialize_controller
31
+ }.new
32
32
  assert(b.__send__ b.layouts[:x]) == 'b'
33
33
  end
34
34
 
@@ -41,7 +41,7 @@ spec :layouts do
41
41
  }
42
42
  c = mock_controller(a) {
43
43
  import :layouts, from: b
44
- }.initialize_controller
44
+ }.new
45
45
  assert(c.__send__ c.layouts[:x]) == 'b'
46
46
  end
47
47
 
@@ -54,7 +54,7 @@ spec :layouts do
54
54
  }
55
55
  c = mock_controller(a) {
56
56
  import :layouts, from: b
57
- }.initialize_controller
57
+ }.new
58
58
  assert(c.__send__ c.layouts[:a]) == 'a'
59
59
  assert(c.__send__ c.layouts[:b]) == 'b'
60
60
  end
@@ -66,7 +66,7 @@ spec :layouts do
66
66
  b = mock_controller {
67
67
  define_layout(:x) {'b'}
68
68
  import :layouts, from: a
69
- }.initialize_controller
69
+ }.new
70
70
  assert(b.__send__ b.layouts[:x]) == 'a'
71
71
  end
72
72
 
@@ -77,7 +77,7 @@ spec :layouts do
77
77
  b = mock_controller {
78
78
  define_layout(:b) {'b'}
79
79
  import :layouts, from: a
80
- }.initialize_controller
80
+ }.new
81
81
  assert(b.__send__ b.layouts[:a]) == 'a'
82
82
  assert(b.__send__ b.layouts[:b]) == 'b'
83
83
  end
@@ -89,7 +89,7 @@ spec :layouts do
89
89
  b = mock_controller {
90
90
  import :layouts, from: a
91
91
  define_layout(:x) {'b'}
92
- }.initialize_controller
92
+ }.new
93
93
  assert(b.__send__ b.layouts[:x]) == 'b'
94
94
  end
95
95
  end
@@ -98,7 +98,7 @@ spec :layouts do
98
98
  it 'uses a file with same name if only name given' do
99
99
  c = mock_controller {
100
100
  define_layout :master
101
- }.initialize_controller
101
+ }.new
102
102
  assert(c.render_layout(:master) {'yo'}) == "master yo layout\n"
103
103
  end
104
104
 
@@ -106,28 +106,28 @@ spec :layouts do
106
106
  layout = rand.to_s
107
107
  c = mock_controller {
108
108
  define_layout layout
109
- }.initialize_controller
109
+ }.new
110
110
  assert {c.render_layout(layout) {}}.raise RocketIO::TemplateError
111
111
  end
112
112
 
113
113
  it 'uses given file - file resides in controller dirname' do
114
114
  c = mock_controller {
115
115
  define_layout :master, file: :layout
116
- }.initialize_controller
116
+ }.new
117
117
  assert(c.render_layout(:master) {'yo'}) == "=yo=\n"
118
118
  end
119
119
 
120
120
  it 'uses given file - file resides outside controller dirname' do
121
121
  c = mock_controller {
122
122
  define_layout :master, file: './layouts/master'
123
- }.initialize_controller
123
+ }.new
124
124
  assert(c.render_layout(:master) {'yo'}) == "outside yo layout\n"
125
125
  end
126
126
 
127
127
  it 'accepts a block for given file' do
128
128
  c = mock_controller {
129
129
  define_layout :master, file: -> {@outside ? './layouts/master' : :master}
130
- }.initialize_controller
130
+ }.new
131
131
  assert(c.render_layout(:master) {'yo'}) == "master yo layout\n"
132
132
  c.instance_variable_set(:@outside, true)
133
133
  assert(c.render_layout(:master) {'yo'}) == "outside yo layout\n"
@@ -136,7 +136,7 @@ spec :layouts do
136
136
  it 'accepts a block and uses returned value as layout without searching for file' do
137
137
  c = mock_controller {
138
138
  define_layout(:master) {@admin ? ':<%= yield %>:' : '|<%= yield %>|'}
139
- }.initialize_controller
139
+ }.new
140
140
  assert(c.render_layout(:master) {'yo'}) == "|yo|"
141
141
  c.instance_variable_set(:@admin, true)
142
142
  assert(c.render_layout(:master) {'yo'}) == ":yo:"
@@ -2,11 +2,12 @@ require 'setup'
2
2
 
3
3
  spec :Views do
4
4
  context :cache do
5
+
5
6
  engine = Tilt::ERBTemplate
6
7
  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__}
8
+ define_method(:file) {mock_controller(:a).new.send(:find_template, path, 'get', engine)}
9
+ define_method(:read) {mock_controller(:a).new.send(:read_template, file).__id__}
10
+ define_method(:compile) {|tpl| mock_controller(:a).new.send(:compile_template, tpl, engine).__id__}
10
11
 
11
12
  it 'resolves template path only once' do
12
13
  cache_id = file.__id__
@@ -28,23 +29,25 @@ spec :Views do
28
29
  end
29
30
 
30
31
  context :scope do
32
+
31
33
  it 'uses controller instance for scope' do
32
34
  app mock_controller {
33
35
  before {@var = :val}
34
- def post; render; end
36
+ def b; render; end
35
37
  }
36
- post
38
+ get :b
37
39
  assert(last_response).is_ok_with_body('val')
38
40
  end
41
+
39
42
  it 'uses custom scope' do
40
43
  app mock_controller {
41
44
  before {@var = :val}
42
- def post
45
+ def b
43
46
  scope = Class.new {def initialize; @var = :vax; end}.new
44
47
  render(scope: scope)
45
48
  end
46
49
  }
47
- post
50
+ get :b
48
51
  assert(last_response).is_ok_with_body('vax')
49
52
  end
50
53
  end
@@ -52,9 +55,9 @@ spec :Views do
52
55
  context :locals do
53
56
  it 'makes :locals accessible via attributes' do
54
57
  app mock_controller {
55
- def put; render(locals: {var: :val}); end
58
+ def c; render(locals: {var: :val}); end
56
59
  }
57
- put
60
+ get :c
58
61
  assert(last_response).is_ok_with_body('val')
59
62
  end
60
63
  end
@@ -62,7 +65,7 @@ spec :Views do
62
65
  context 'implicit templates' do
63
66
  it 'uses the folder controller resides in as default path' do
64
67
  app controller = mock_controller(:a) {
65
- def get; render end
68
+ def index; render end
66
69
  }
67
70
  get
68
71
  assert(last_response).is_ok_with_body '/a'
@@ -72,8 +75,8 @@ spec :Views do
72
75
  context 'defined templates' do
73
76
  it 'prefers defined templates over files' do
74
77
  app mock_controller {
75
- define_template(:get) {'x'}
76
- def get; render end
78
+ define_template(:index) {'x'}
79
+ def index; render end
77
80
  }
78
81
  get
79
82
  assert(last_response).is_ok_with_body 'x'
@@ -84,7 +87,7 @@ spec :Views do
84
87
  define_template(:t) {'t'}
85
88
  define_layout(:x) {'x<%= yield %>x'}
86
89
  layout(:x)
87
- def get; render(:t) end
90
+ def index; render(:t) end
88
91
  }
89
92
  get
90
93
  assert(last_response).is_ok_with_body 'xtx'
@@ -93,7 +96,7 @@ spec :Views do
93
96
 
94
97
  it 'uses given block for template' do
95
98
  app mock_controller {
96
- def get; render {'x'} end
99
+ def index; render {'x'} end
97
100
  }
98
101
  get
99
102
  assert(last_response).is_ok_with_body 'x'
@@ -6,7 +6,7 @@ spec :template_vars do
6
6
  a = mock_controller {
7
7
  define_template_var(:a, 'a')
8
8
  }
9
- b = mock_controller(a) {}.initialize_controller
9
+ b = mock_controller(a) {}.new
10
10
  assert(b.template_vars[:a]) == 'a'
11
11
  end
12
12
 
@@ -16,7 +16,7 @@ spec :template_vars do
16
16
  }
17
17
  b = mock_controller(a) {
18
18
  define_template_var(:b, 'b')
19
- }.initialize_controller
19
+ }.new
20
20
  assert(b.template_vars[:a]) == 'a'
21
21
  assert(b.template_vars[:b]) == 'b'
22
22
  end
@@ -27,7 +27,7 @@ spec :template_vars do
27
27
  }
28
28
  b = mock_controller(a) {
29
29
  define_template_var(:a, 'b')
30
- }.initialize_controller
30
+ }.new
31
31
  assert(b.template_vars[:a]) == 'b'
32
32
  end
33
33
 
@@ -40,7 +40,7 @@ spec :template_vars do
40
40
  }
41
41
  c = mock_controller(a) {
42
42
  import :template_vars, from: b
43
- }.initialize_controller
43
+ }.new
44
44
  assert(c.template_vars[:a]) == 'b'
45
45
  end
46
46
 
@@ -53,7 +53,7 @@ spec :template_vars do
53
53
  }
54
54
  c = mock_controller(a) {
55
55
  import :template_vars, from: b
56
- }.initialize_controller
56
+ }.new
57
57
  assert(c.template_vars[:a]) == 'a'
58
58
  assert(c.template_vars[:b]) == 'b'
59
59
  end
@@ -65,7 +65,7 @@ spec :template_vars do
65
65
  b = mock_controller {
66
66
  define_template_var(:a, 'b')
67
67
  import :template_vars, from: a
68
- }.initialize_controller
68
+ }.new
69
69
  assert(b.template_vars[:a]) == 'a'
70
70
  end
71
71
  end
@@ -76,7 +76,7 @@ spec :template_vars do
76
76
  c = mock_controller {
77
77
  define_template(:get) {'<%= x %>'}
78
78
  define_template_var(:x, 'y')
79
- }.initialize_controller
79
+ }.new
80
80
  assert(c.render(:get)) == 'y'
81
81
  end
82
82
 
@@ -84,7 +84,7 @@ spec :template_vars do
84
84
  c = mock_controller {
85
85
  define_template(:get) {'<%= x %>'}
86
86
  define_template_var(:x, -> {'y'})
87
- }.initialize_controller
87
+ }.new
88
88
  assert(c.render(:get)) == 'y'
89
89
  end
90
90
 
@@ -92,7 +92,7 @@ spec :template_vars do
92
92
  c = mock_controller {
93
93
  define_template(:get) {'<%= x %>'}
94
94
  define_template_var(:x) {'y'}
95
- }.initialize_controller
95
+ }.new
96
96
  assert(c.render(:get)) == 'y'
97
97
  end
98
98
 
@@ -7,7 +7,7 @@ spec :templates do
7
7
  define_template(:a) {'a'}
8
8
  }
9
9
  b = mock_controller(a) {
10
- }.initialize_controller
10
+ }.new
11
11
  assert(b.__send__ b.templates[:a]) == 'a'
12
12
  end
13
13
 
@@ -17,7 +17,7 @@ spec :templates do
17
17
  }
18
18
  b = mock_controller(a) {
19
19
  define_template(:b) {'b'}
20
- }.initialize_controller
20
+ }.new
21
21
  assert(b.__send__ b.templates[:a]) == 'a'
22
22
  assert(b.__send__ b.templates[:b]) == 'b'
23
23
  end
@@ -28,7 +28,7 @@ spec :templates do
28
28
  }
29
29
  b = mock_controller(a) {
30
30
  define_template(:x) {'b'}
31
- }.initialize_controller
31
+ }.new
32
32
  assert(b.__send__ b.templates[:x]) == 'b'
33
33
  end
34
34
 
@@ -41,7 +41,7 @@ spec :templates do
41
41
  }
42
42
  c = mock_controller(a) {
43
43
  import :templates, from: b
44
- }.initialize_controller
44
+ }.new
45
45
  assert(c.__send__ c.templates[:x]) == 'b'
46
46
  end
47
47
 
@@ -54,7 +54,7 @@ spec :templates do
54
54
  }
55
55
  c = mock_controller(a) {
56
56
  import :templates, from: b
57
- }.initialize_controller
57
+ }.new
58
58
  assert(c.__send__ c.templates[:a]) == 'a'
59
59
  assert(c.__send__ c.templates[:b]) == 'b'
60
60
  end
@@ -66,7 +66,7 @@ spec :templates do
66
66
  b = mock_controller {
67
67
  define_template(:x) {'b'}
68
68
  import :templates, from: a
69
- }.initialize_controller
69
+ }.new
70
70
  assert(b.__send__ b.templates[:x]) == 'a'
71
71
  end
72
72
 
@@ -77,7 +77,7 @@ spec :templates do
77
77
  b = mock_controller {
78
78
  define_template(:b) {'b'}
79
79
  import :templates, from: a
80
- }.initialize_controller
80
+ }.new
81
81
  assert(b.__send__ b.templates[:a]) == 'a'
82
82
  assert(b.__send__ b.templates[:b]) == 'b'
83
83
  end
@@ -89,7 +89,7 @@ spec :templates do
89
89
  b = mock_controller {
90
90
  import :templates, from: a
91
91
  define_template(:x) {'b'}
92
- }.initialize_controller
92
+ }.new
93
93
  assert(b.__send__ b.templates[:x]) == 'b'
94
94
  end
95
95
  end
@@ -98,37 +98,37 @@ spec :templates do
98
98
 
99
99
  it 'uses a file with same name if only name given' do
100
100
  c = mock_controller {
101
- define_template :get
102
- }.initialize_controller
103
- assert(c.render(:get)) == "/"
101
+ define_template :index
102
+ }.new
103
+ assert(c.render(:index)) == "/"
104
104
  end
105
105
 
106
106
  it 'raises a TemplateError if there is no file with same name' do
107
107
  template = rand.to_s
108
108
  c = mock_controller {
109
109
  define_template template
110
- }.initialize_controller
110
+ }.new
111
111
  assert {c.render(template)}.raise RocketIO::TemplateError
112
112
  end
113
113
 
114
114
  it 'uses given file - file resides in controller dirname' do
115
115
  c = mock_controller {
116
116
  define_template :get, file: :items
117
- }.initialize_controller
117
+ }.new
118
118
  assert(c.render(:get)) == "items\n"
119
119
  end
120
120
 
121
121
  it 'uses given file - file resides outside controller dirname' do
122
122
  c = mock_controller {
123
123
  define_template :get, file: './templates/a/get'
124
- }.initialize_controller
124
+ }.new
125
125
  assert(c.render(:get)) == "hi\n"
126
126
  end
127
127
 
128
128
  it 'accepts a block for given file' do
129
129
  c = mock_controller {
130
130
  define_template :master, file: -> {@outside ? './templates/a/get' : :items}
131
- }.initialize_controller
131
+ }.new
132
132
  assert(c.render(:master)) == "items\n"
133
133
  c.instance_variable_set(:@outside, true)
134
134
  assert(c.render(:master)) == "hi\n"
@@ -137,7 +137,7 @@ spec :templates do
137
137
  it 'accepts a block and uses returned value as template without searching for file' do
138
138
  c = mock_controller {
139
139
  define_template(:master) {@admin ? 'admin' : 'user'}
140
- }.initialize_controller
140
+ }.new
141
141
  assert(c.render(:master)) == "user"
142
142
  c.instance_variable_set(:@admin, true)
143
143
  assert(c.render(:master)) == "admin"