cells 2.3.0 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/CHANGES +3 -3
  2. data/MIT-LICENSE +22 -0
  3. data/README.rdoc +2 -2
  4. data/Rakefile +22 -25
  5. data/generators/cell/templates/cell.rb +1 -1
  6. data/generators/cells_install/USAGE +3 -0
  7. data/generators/cells_install/cells_install_generator.rb +12 -0
  8. data/generators/cells_install/templates/initializer.rb +9 -0
  9. data/lib/cell.rb +9 -0
  10. data/lib/cells.rb +68 -0
  11. data/lib/cells/cell.rb +15 -0
  12. data/lib/cells/cell/base.rb +461 -0
  13. data/lib/cells/cell/caching.rb +163 -0
  14. data/lib/cells/cell/view.rb +56 -0
  15. data/lib/cells/helpers.rb +7 -0
  16. data/lib/cells/helpers/capture_helper.rb +51 -0
  17. data/lib/cells/rails.rb +17 -0
  18. data/lib/cells/rails/action_controller.rb +37 -0
  19. data/lib/cells/rails/action_view.rb +37 -0
  20. data/lib/cells/version.rb +5 -0
  21. data/rails/init.rb +30 -0
  22. data/test/{cells → app/cells}/cells_test_one_cell.rb +2 -2
  23. data/test/{cells → app/cells}/cells_test_two_cell.rb +2 -0
  24. data/test/{cells → app/cells}/really_module/nested_cell.rb +1 -1
  25. data/test/app/cells/simple_cell.rb +7 -0
  26. data/test/{cells → app/cells}/test_cell.rb +3 -7
  27. data/test/app/controllers/cells_test_controller.rb +44 -0
  28. data/test/app/helpers/application_helper.rb +7 -0
  29. data/test/{helpers → app/helpers}/helper_using_cell_helper.rb +3 -1
  30. data/test/bugs_test.rb +10 -13
  31. data/test/caching_test.rb +169 -165
  32. data/test/capture_helper_test.rb +59 -0
  33. data/test/cells_test.rb +160 -158
  34. data/test/helper_test.rb +83 -104
  35. data/test/rails_test.rb +35 -0
  36. data/test/render_test.rb +163 -106
  37. data/test/support/assertions_helper.rb +60 -0
  38. data/test/test_helper.rb +67 -0
  39. metadata +35 -25
  40. data/README +0 -150
  41. data/VERSION +0 -1
  42. data/init.rb +0 -59
  43. data/lib/cell/base.rb +0 -454
  44. data/lib/cell/caching.rb +0 -151
  45. data/lib/cell/view.rb +0 -55
  46. data/lib/cells_helper.rb +0 -49
  47. data/lib/rails_extensions.rb +0 -75
  48. data/test/capture_test.rb +0 -56
  49. data/test/cell_view_test.rb +0 -9
  50. data/test/cells/simple_cell.rb +0 -5
  51. data/test/rails_extensions_test.rb +0 -25
  52. data/test/testing_helper.rb +0 -67
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ class SimpleCell < ::Cell::Base
4
+ def two_templates_state
5
+ render
6
+ end
7
+ end
@@ -1,7 +1,6 @@
1
- class TestCell < Cell::Base
2
-
3
-
1
+ # encoding: utf-8
4
2
 
3
+ class TestCell < ::Cell::Base
5
4
  def needs_view
6
5
  @instance_variable_one = "yeah"
7
6
  render
@@ -21,13 +20,10 @@ class TestCell < Cell::Base
21
20
  render
22
21
  end
23
22
 
24
-
25
-
26
23
  def state_with_not_included_helper_method
27
24
  render
28
25
  end
29
-
30
-
26
+
31
27
  def state_using_params
32
28
  params[:my_param].to_s
33
29
  end
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ class CellsTestController < ActionController::Base
4
+ def rescue_action(e)
5
+ raise e
6
+ end
7
+
8
+ def render_cell_state
9
+ cell = params[:cell]
10
+ state = params[:state]
11
+
12
+ render :text => render_cell_to_string(cell, state)
13
+ end
14
+
15
+ def call_render_cell_with_strings
16
+ static = render_cell_to_string('my_test', 'direct_output')
17
+ render :text => static
18
+ end
19
+
20
+ def call_render_cell_with_syms
21
+ static = render_cell_to_string(:my_test, :direct_output)
22
+ render :text => static
23
+ end
24
+
25
+ def call_render_cell_with_state_view
26
+ render :text => render_cell_to_string(:my_test, :view_with_instance_var)
27
+ return
28
+ end
29
+
30
+ def render_view_with_render_cell_invocation
31
+ render :file => File.join(File.dirname(__FILE__), *%w[.. views view_with_render_cell_invocation.html.erb])
32
+ return
33
+ end
34
+
35
+ def render_just_one_view_cell
36
+ static = render_cell_to_string('just_one_view', 'some_state')
37
+ render :text => static
38
+ end
39
+
40
+ def render_state_with_link_to
41
+ static = render_cell_to_string('my_test', 'state_with_link_to')
42
+ render :text => static
43
+ end
44
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ module ApplicationHelper
4
+ def application_helper_method
5
+ 'global'
6
+ end
7
+ end
@@ -1,5 +1,7 @@
1
+ # encoding: utf-8
2
+
1
3
  module HelperUsingCellHelper
2
4
  def an_automatically_included_helper_method
3
- "automatic"
5
+ 'automatic'
4
6
  end
5
7
  end
data/test/bugs_test.rb CHANGED
@@ -1,26 +1,23 @@
1
- require File.dirname(__FILE__) + '/../../../../test/test_helper'
2
- require File.dirname(__FILE__) + '/testing_helper'
1
+ # encoding: utf-8
2
+ require File.join(File.dirname(__FILE__), 'test_helper')
3
3
 
4
-
5
- class MyTestCell < Cell::Base
4
+ class MyTestCell < ::Cell::Base
6
5
  def state_with_instance_var
7
- @my_ivar = "value from cell"
6
+ @my_ivar = 'value from cell'
8
7
  render
9
8
  end
10
9
  end
11
10
 
12
-
13
- class CellsTest < ActionController::TestCase
14
- include CellsTestMethods
15
-
11
+ class BugsTest < ActionController::TestCase
16
12
  def test_controller_overriding_cell_ivars
17
13
  @controller.class_eval do
18
14
  attr_accessor :my_ivar
19
15
  end
20
- @controller.my_ivar = "value from controller"
21
-
16
+ @controller.my_ivar = 'value from controller'
17
+
22
18
  cell = MyTestCell.new(@controller)
23
19
  c = cell.render_state(:state_with_instance_var)
24
- assert_equal "value from cell", c
20
+
21
+ assert_equal 'value from cell', c
25
22
  end
26
- end
23
+ end
data/test/caching_test.rb CHANGED
@@ -1,266 +1,270 @@
1
- require File.dirname(__FILE__) + '/../../../../test/test_helper'
2
- require File.dirname(__FILE__) + '/testing_helper'
1
+ # encoding: utf-8
2
+ require File.join(File.dirname(__FILE__), *%w[test_helper])
3
3
 
4
- # usually done by rails' autoloading:
5
- require File.dirname(__FILE__) + '/cells/test_cell'
4
+ class CachingCell < ::Cell::Base
5
+ cache :cached_state
6
+
7
+ def cached_state
8
+ count = controller.session[:cache_count]
9
+ count ||= 0
10
+ count += 1
11
+ "#{count} should remain the same forever!"
12
+ end
13
+
14
+ def not_cached_state
15
+ "i'm really static"
16
+ end
17
+
18
+ cache :versioned_cached_state, Proc.new { |cell|
19
+ if (v = cell.session[:version]) > 0
20
+ {:version => v}
21
+ else
22
+ {:version => 0}
23
+ end
24
+ }
25
+ def versioned_cached_state
26
+ "#{session[:version].inspect} should change every third call!"
27
+ end
28
+
29
+ def my_version_proc
30
+ if (v = session[:version]) > 0
31
+ {:version => v}
32
+ else
33
+ {:version => 0}
34
+ end
35
+ end
36
+
37
+ # def cached_state_with_symbol_proc
38
+ # end
39
+
40
+ cache :cheers
41
+ def cheers
42
+ 'cheers!'
43
+ end
44
+
45
+ cache :another_state
46
+ def another_state
47
+ @opts[:str]
48
+ end
49
+ end
50
+
51
+ class AnotherCachingCell < ::Cell::Base
52
+ cache :cheers
53
+ def cheers
54
+ 'prost!'
55
+ end
6
56
 
7
- ### NOTE: add
8
- ### config.action_controller.cache_store = :memory_store
9
- ### config.action_controller.perform_caching = true
10
- ### to config/environments/test.rb to make this tests work.
57
+ def another_state
58
+ @opts[:str]
59
+ end
60
+ end
11
61
 
12
- class CellsCachingTest < Test::Unit::TestCase
13
- include CellsTestMethods
14
-
62
+ class CachingTest < ActiveSupport::TestCase
15
63
  def setup
16
64
  super
17
- @controller.session= {}
65
+ @controller.session = {}
18
66
  @cc = CachingCell.new(@controller)
19
67
  @c2 = AnotherCachingCell.new(@controller)
20
- end
68
+
69
+ @old_action_controller_cache_store = ::ActionController::Base.cache_store
70
+ @old_action_controller_perform_caching = ::ActionController::Base.perform_caching
71
+ ::ActionController::Base.cache_store = :memory_store
72
+ ::ActionController::Base.perform_caching = true
21
73
 
22
- #def self.path_to_test_views
23
- # RAILS_ROOT + "/vendor/plugins/cells/test/views/"
24
- #end
25
-
26
-
74
+ ### FIXME: sorry for that, but we need to force caching. avoid #alias_method_chain.
75
+ Cell::Base.alias_method_chain :render_state, :caching unless Cell::Base.method_defined? :render_state_without_caching
76
+ end
77
+
78
+ def teardown
79
+ ::ActionController::Base.cache_store = @old_action_controller_cache_store
80
+ ::ActionController::Base.perform_caching = @old_action_controller_perform_caching
81
+ end
82
+
27
83
  def test_state_cached?
28
84
  assert @cc.state_cached?(:cached_state)
29
- assert ! @cc.state_cached?(:not_cached_state)
85
+ assert_not @cc.state_cached?(:not_cached_state)
30
86
  end
31
-
87
+
32
88
  def test_cache_without_options
33
89
  # :cached_state is cached without any options:
34
- assert_nil @cc.version_procs[:cached_state]
35
- assert_nil @cc.version_procs[:not_cached_state]
36
-
90
+ assert_nil @cc.version_procs[:cached_state]
91
+ assert_nil @cc.version_procs[:not_cached_state]
92
+
37
93
  # cache_options must at least return an empty hash for a cached state:
38
- assert_equal( {}, @cc.cache_options[:cached_state])
39
- assert_nil @cc.cache_options[:not_cached_state]
94
+ assert_equal ({}), @cc.cache_options[:cached_state]
95
+ assert_nil @cc.cache_options[:not_cached_state]
40
96
  end
41
-
42
-
97
+
43
98
  def test_cache_with_proc_only
44
99
  CachingCell.class_eval do
45
100
  cache :my_state, Proc.new {}
46
101
  end
47
-
48
- assert_kind_of Proc, @cc.version_procs[:my_state]
49
- assert_equal( {}, @cc.cache_options[:my_state])
102
+
103
+ assert_kind_of Proc, @cc.version_procs[:my_state]
104
+ assert_equal ({}), @cc.cache_options[:my_state]
50
105
  end
51
-
52
-
106
+
53
107
  def test_cache_with_proc_and_cache_options
54
108
  CachingCell.class_eval do
55
109
  cache :my_state, Proc.new{}, {:expires_in => 10.seconds}
56
110
  end
57
-
58
- assert_kind_of Proc, @cc.version_procs[:my_state]
59
- assert_equal( {:expires_in => 10.seconds}, @cc.cache_options[:my_state])
111
+
112
+ assert_kind_of Proc, @cc.version_procs[:my_state]
113
+ assert_equal ({:expires_in => 10.seconds}), @cc.cache_options[:my_state]
60
114
  end
61
-
62
-
115
+
63
116
  def test_cache_with_cache_options_only
64
117
  CachingCell.class_eval do
65
118
  cache :my_state, :expires_in => 10.seconds
66
119
  end
67
-
68
- assert @cc.version_procs.has_key?(:my_state)
69
- assert_nil @cc.version_procs[:my_state]
70
- assert_equal( {:expires_in => 10.seconds}, @cc.cache_options[:my_state])
120
+
121
+ assert @cc.version_procs.has_key?(:my_state)
122
+ assert_nil @cc.version_procs[:my_state]
123
+ assert_equal ({:expires_in => 10.seconds}), @cc.cache_options[:my_state]
71
124
  end
72
-
73
-
74
-
125
+
75
126
  def test_if_caching_works
76
127
  c = @cc.render_state(:cached_state)
77
- assert_equal c, "1 should remain the same forever!"
78
-
128
+ assert_equal "1 should remain the same forever!", c
129
+
79
130
  c = @cc.render_state(:cached_state)
80
- assert_equal c, "1 should remain the same forever!", ":cached_state was invoked again"
131
+ assert_equal "1 should remain the same forever!", c, ":cached_state was invoked again"
81
132
  end
82
-
133
+
83
134
  def test_cache_key
84
135
  assert_equal "cells/caching/some_state", @cc.cache_key(:some_state)
85
- assert_equal @cc.cache_key(:some_state), Cell::Base.cache_key_for(:caching, :some_state)
136
+ assert_equal @cc.cache_key(:some_state), ::Cell::Base.cache_key_for(:caching, :some_state)
86
137
  assert_equal "cells/caching/some_state/param=9", @cc.cache_key(:some_state, :param => 9)
87
138
  assert_equal "cells/caching/some_state/a=1/b=2", @cc.cache_key(:some_state, :b => 2, :a => 1)
88
139
  end
89
-
140
+
90
141
  def test_render_state_without_caching
91
142
  c = @cc.render_state(:not_cached_state)
92
- assert_equal c, "i'm really static"
143
+ assert_equal "i'm really static", c
144
+
93
145
  c = @cc.render_state(:not_cached_state)
94
- assert_equal c, "i'm really static"
146
+ assert_equal "i'm really static", c
95
147
  end
96
-
148
+
97
149
  def test_caching_with_version_proc
98
150
  @controller.session[:version] = 0
99
151
  # render state, as it's not cached:
100
152
  c = @cc.render_state(:versioned_cached_state)
101
- assert_equal c, "0 should change every third call!"
102
-
153
+ assert_equal '0 should change every third call!', c
154
+
103
155
  @controller.session[:version] = -1
104
156
  c = @cc.render_state(:versioned_cached_state)
105
- assert_equal c, "0 should change every third call!"
106
-
107
-
157
+ assert_equal '0 should change every third call!', c
158
+
108
159
  @controller.session[:version] = 1
109
160
  c = @cc.render_state(:versioned_cached_state)
110
- assert_equal c, "1 should change every third call!"
111
-
112
-
161
+ assert_equal '1 should change every third call!', c
162
+
113
163
  @controller.session[:version] = 2
114
164
  c = @cc.render_state(:versioned_cached_state)
115
- assert_equal c, "2 should change every third call!"
116
-
165
+ assert_equal '2 should change every third call!', c
166
+
117
167
  @controller.session[:version] = 3
118
168
  c = @cc.render_state(:versioned_cached_state)
119
- assert_equal c, "3 should change every third call!"
169
+ assert_equal '3 should change every third call!', c
120
170
  end
121
-
171
+
122
172
  def test_caching_with_instance_version_proc
123
173
  CachingCell.class_eval do
124
174
  cache :versioned_cached_state, :my_version_proc
125
175
  end
176
+
126
177
  @controller.session[:version] = 0
127
178
  c = @cc.render_state(:versioned_cached_state)
128
- assert_equal c, "0 should change every third call!"
129
-
179
+ assert_equal '0 should change every third call!', c
180
+
130
181
  @controller.session[:version] = 1
131
182
  c = @cc.render_state(:versioned_cached_state)
132
- assert_equal c, "1 should change every third call!"
183
+ assert_equal '1 should change every third call!', c
133
184
  end
134
-
185
+
135
186
  def test_caching_with_two_same_named_states
136
187
  c = @cc.render_state(:cheers)
137
- assert_equal c, "cheers!"
188
+ assert_equal 'cheers!', c
189
+
138
190
  c = @c2.render_state(:cheers)
139
- assert_equal c, "prost!"
191
+ assert_equal 'prost!', c
192
+
140
193
  c = @cc.render_state(:cheers)
141
- assert_equal c, "cheers!"
194
+ assert_equal 'cheers!', c
195
+
142
196
  c = @c2.render_state(:cheers)
143
- assert_equal c, "prost!"
197
+ assert_equal 'prost!', c
144
198
  end
145
199
 
146
200
  def test_caching_one_of_two_same_named_states
147
201
  ### DISCUSS with drogus: the problem was that CachingCell and AnotherCachingCell keep
148
202
  ### overwriting their version_procs, wasn't it? why don't we test that with different
149
203
  ### version_procs in each cell?
150
- @cc = CachingCell.new(@controller, :str => "foo1")
204
+ @cc = CachingCell.new(@controller, :str => 'foo1')
151
205
  c = @cc.render_state(:another_state)
152
- assert_equal c, "foo1"
206
+ assert_equal 'foo1',c
153
207
 
154
- @c2 = AnotherCachingCell.new(@controller, :str => "foo2")
208
+ @c2 = AnotherCachingCell.new(@controller, :str => 'foo2')
155
209
  c = @c2.render_state(:another_state)
156
- assert_equal c, "foo2"
210
+ assert_equal 'foo2', c
157
211
 
158
- @cc = CachingCell.new(@controller, :str => "bar1")
212
+ @cc = CachingCell.new(@controller, :str => 'bar1')
159
213
  c = @cc.render_state(:another_state)
160
- assert_equal c, "foo1"
214
+ assert_equal 'foo1', c
161
215
 
162
- @c2 = AnotherCachingCell.new(@controller, :str => "bar2")
216
+ @c2 = AnotherCachingCell.new(@controller, :str => 'bar2')
163
217
  c = @c2.render_state(:another_state)
164
- assert_equal c, "bar2"
218
+ assert_equal 'bar2', c
165
219
  end
166
-
220
+
167
221
  def test_expire_cache_key
168
- k = @cc.cache_key(:cached_state)
222
+ key = @cc.cache_key(:cached_state)
169
223
  @cc.render_state(:cached_state)
170
- assert Cell::Base.cache_store.read(k)
171
- Cell::Base.expire_cache_key(k)
172
- assert ! Cell::Base.cache_store.read(k)
173
-
224
+ assert ::Cell::Base.cache_store.read(key)
225
+
226
+ ::Cell::Base.expire_cache_key(key)
227
+ assert_not ::Cell::Base.cache_store.read(key)
228
+
174
229
  # test via ActionController::expire_cell_state, which is called from Sweepers.
175
230
  @cc.render_state(:cached_state)
176
- assert Cell::Base.cache_store.read(k)
231
+ assert ::Cell::Base.cache_store.read(key)
232
+
177
233
  @controller.expire_cell_state(:caching, :cached_state)
178
- assert ! Cell::Base.cache_store.read(k)
179
-
234
+ assert_not ::Cell::Base.cache_store.read(key)
235
+
180
236
  # ..and additionally test if passing cache key args works:
181
- k = @cc.cache_key(:cached_state, :more => :yes)
182
- assert Cell::Base.cache_store.write(k, "test content")
237
+ key = @cc.cache_key(:cached_state, :more => :yes)
238
+ assert ::Cell::Base.cache_store.write(key, 'test content')
239
+
183
240
  @controller.expire_cell_state(:caching, :cached_state, :more => :yes)
184
- assert ! Cell::Base.cache_store.read(k)
241
+ assert_not ::Cell::Base.cache_store.read(key)
185
242
  end
186
-
187
-
243
+
188
244
  def test_find_family_view_for_state_with_caching
189
245
  # test environment: --------------------------------------
190
- assert_equal({}, ACell.state2view_cache)
191
-
192
- a = ACell.new(@controller)
193
- a.class.instance_eval do
194
- def cache_configured?; false; end
246
+ assert_equal ({}), ACell.state2view_cache
247
+
248
+ cell = ACell.new(@controller)
249
+ cell.class.instance_eval do
250
+ def cache_configured?
251
+ false
252
+ end
195
253
  end
196
- a.render_state :existing_view
197
- # in development/test environment, no view name caching should happen,
254
+ cell.render_state :existing_view
255
+ # in development/test environment, no view name caching should happen,
198
256
  # if perform_caching is false.
199
- assert_equal({}, ACell.state2view_cache)
200
-
257
+ assert_equal ({}), ACell.state2view_cache
258
+
201
259
  # production environment: --------------------------------
202
- a = ACell.new(@controller)
203
- a.class.instance_eval do
204
- def cache_configured?; true; end
260
+ cell = ACell.new(@controller)
261
+ cell.class.instance_eval do
262
+ def cache_configured?
263
+ true
264
+ end
205
265
  end
206
- a.render_state :existing_view
266
+
267
+ cell.render_state :existing_view
207
268
  assert ACell.state2view_cache.has_key?("existing_view/html")
208
269
  end
209
270
  end
210
-
211
- class CachingCell < Cell::Base
212
-
213
- cache :cached_state
214
-
215
- def cached_state
216
- cnt = controller.session[:cache_count]
217
- cnt ||= 0
218
- cnt += 1
219
- "#{cnt} should remain the same forever!"
220
- end
221
-
222
- def not_cached_state
223
- "i'm really static"
224
- end
225
-
226
- cache :versioned_cached_state, Proc.new { |cell|
227
- if (v = cell.session[:version]) > 0
228
- {:version=>v}
229
- else
230
- {:version=>0}; end
231
- }
232
- def versioned_cached_state
233
- "#{session[:version].inspect} should change every third call!"
234
- end
235
-
236
-
237
- def my_version_proc
238
- if (v = session[:version]) > 0
239
- {:version=>v}
240
- else
241
- {:version=>0}; end
242
- end
243
- #def cached_state_with_symbol_proc
244
- #
245
- #end
246
- cache :cheers
247
- def cheers
248
- "cheers!"
249
- end
250
-
251
- cache :another_state
252
- def another_state
253
- @opts[:str]
254
- end
255
- end
256
-
257
- class AnotherCachingCell < Cell::Base
258
- cache :cheers
259
- def cheers
260
- "prost!"
261
- end
262
-
263
- def another_state
264
- @opts[:str]
265
- end
266
- end