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
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"