cells 3.6.7 → 3.7.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.
- data/CHANGES.textile +14 -0
- data/README.rdoc +1 -1
- data/lib/cell.rb +21 -28
- data/lib/cell/caching.rb +15 -17
- data/lib/cell/deprecations.rb +42 -0
- data/lib/cell/rails.rb +2 -12
- data/lib/cell/test_case.rb +8 -7
- data/lib/cells.rb +1 -0
- data/lib/cells/version.rb +1 -1
- data/test/cell_module_test.rb +11 -54
- data/test/deprecations_test.rb +95 -0
- data/test/rails/caching_test.rb +34 -26
- data/test/rails/cells_test.rb +2 -16
- data/test/test_case_test.rb +18 -13
- data/test/test_helper.rb +4 -0
- metadata +5 -3
data/CHANGES.textile
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
h2. 3.7.0
|
2
|
+
|
3
|
+
h3. Changes
|
4
|
+
* Cache settings using @Base.cache@ are now inherited.
|
5
|
+
* Removed <code>@opts</code>.
|
6
|
+
* Removed @#options@ in favor of state-args. If you still want the old behaviour, include the @Deprecations@ module in your cell.
|
7
|
+
* The build process is now instantly delegated to Base.build_for on the concrete cell class.
|
8
|
+
|
9
|
+
h2. 3.6.8
|
10
|
+
|
11
|
+
h3. Changes
|
12
|
+
* Removed <code>@opts</code>.
|
13
|
+
* Deprecated @#options@ in favour of state-args.
|
14
|
+
|
1
15
|
h2. 3.6.7
|
2
16
|
|
3
17
|
h3. Changes
|
data/README.rdoc
CHANGED
data/lib/cell.rb
CHANGED
@@ -3,28 +3,31 @@ module Cell
|
|
3
3
|
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
|
-
DEFAULT_VIEW_PATHS = [
|
7
|
-
|
8
|
-
]
|
9
|
-
|
6
|
+
DEFAULT_VIEW_PATHS = [File.join('app', 'cells')]
|
7
|
+
|
10
8
|
module ClassMethods
|
11
9
|
# Called in Railtie at initialization time.
|
12
10
|
def setup_view_paths!
|
13
11
|
self.view_paths = self::DEFAULT_VIEW_PATHS
|
14
12
|
end
|
15
13
|
|
14
|
+
# Main entry point for #render_cell.
|
16
15
|
def render_cell_for(controller, name, state, *args)
|
17
|
-
cell = create_cell_for(controller, name, *args)
|
18
|
-
yield cell if block_given?
|
16
|
+
cell = create_cell_for(controller, name, *args)
|
17
|
+
yield cell if block_given?
|
19
18
|
|
20
|
-
cell.
|
19
|
+
cell.render_state(state, *args)
|
21
20
|
end
|
22
21
|
|
23
22
|
# Creates a cell instance. Note that this method calls builders which were attached to the
|
24
23
|
# class with Cell::Base.build - this might lead to a different cell being returned.
|
25
24
|
def create_cell_for(controller, name, *args)
|
26
|
-
|
27
|
-
|
25
|
+
class_from_cell_name(name).build_for(controller, *args)
|
26
|
+
end
|
27
|
+
|
28
|
+
def build_for(controller, *args)
|
29
|
+
build_class_for(controller, *args).
|
30
|
+
new(controller)
|
28
31
|
end
|
29
32
|
|
30
33
|
# Adds a builder to the cell class. Builders are used in #render_cell to find out the concrete
|
@@ -57,31 +60,21 @@ module Cell
|
|
57
60
|
builders << block
|
58
61
|
end
|
59
62
|
|
60
|
-
def build_class_for(controller, target_class, *args)
|
61
|
-
target_class.builders.each do |blk|
|
62
|
-
res = controller.instance_exec(*args, &blk) and return res
|
63
|
-
end
|
64
|
-
target_class
|
65
|
-
end
|
66
|
-
|
67
|
-
def builders
|
68
|
-
@builders ||= []
|
69
|
-
end
|
70
|
-
|
71
63
|
# The cell class constant for +cell_name+.
|
72
64
|
def class_from_cell_name(cell_name)
|
73
65
|
"#{cell_name}_cell".classify.constantize
|
74
66
|
end
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
67
|
+
|
68
|
+
protected
|
69
|
+
def build_class_for(controller, *args)
|
70
|
+
builders.each do |blk|
|
71
|
+
klass = controller.instance_exec(*args, &blk) and return klass
|
72
|
+
end
|
73
|
+
self
|
81
74
|
end
|
82
75
|
|
83
|
-
def
|
84
|
-
|
76
|
+
def builders
|
77
|
+
@builders ||= []
|
85
78
|
end
|
86
79
|
end
|
87
80
|
end
|
data/lib/cell/caching.rb
CHANGED
@@ -5,6 +5,13 @@ module Cell
|
|
5
5
|
module Caching
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
|
+
included do
|
9
|
+
class_attribute :version_procs, :conditional_procs, :cache_options
|
10
|
+
self.version_procs = {}
|
11
|
+
self.conditional_procs = {}
|
12
|
+
self.cache_options = {}
|
13
|
+
end
|
14
|
+
|
8
15
|
module ClassMethods
|
9
16
|
# Caches the rendered view of +state+.
|
10
17
|
#
|
@@ -41,25 +48,16 @@ module Cell
|
|
41
48
|
#
|
42
49
|
# Two things to mention here.
|
43
50
|
# * The return value of the method/block is <em>appended</em> to the state cache key.
|
44
|
-
# * You may return a string, a hash, an array, ActiveSupport::Caching will compile it.
|
51
|
+
# * You may return a string, a hash, an array, ActiveSupport::Caching will compile it.
|
52
|
+
#
|
53
|
+
# == Inheritance
|
54
|
+
# Please note that cache configuration is inherited to derived cells.
|
45
55
|
def cache(state, *args, &block)
|
46
56
|
options = args.extract_options!
|
47
|
-
|
48
|
-
conditional_procs[state] = options.delete(:if)
|
49
|
-
version_procs[state] = args.first || block
|
50
|
-
cache_options[state] = options
|
51
|
-
end
|
52
|
-
|
53
|
-
def version_procs
|
54
|
-
@version_procs ||= {}
|
55
|
-
end
|
56
|
-
|
57
|
-
def conditional_procs
|
58
|
-
@conditional_procs ||= {}
|
59
|
-
end
|
60
57
|
|
61
|
-
|
62
|
-
|
58
|
+
self.conditional_procs = conditional_procs.merge(state => options.delete(:if))
|
59
|
+
self.version_procs = version_procs.merge(state => (args.first || block))
|
60
|
+
self.cache_options = cache_options.merge(state => options)
|
63
61
|
end
|
64
62
|
|
65
63
|
def cache_store
|
@@ -112,7 +110,7 @@ module Cell
|
|
112
110
|
protected
|
113
111
|
def call_proc_or_method(state, method, *args)
|
114
112
|
return method.call(self, *args) if method.kind_of?(Proc)
|
115
|
-
|
113
|
+
send(method, *args)
|
116
114
|
end
|
117
115
|
|
118
116
|
def call_state_versioner(state, *args)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Cell
|
2
|
+
# Makes #options available in Cells 3.7, which was removed in favor of state-args.
|
3
|
+
module Deprecations
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
attr_reader :options
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
def build_for(controller, *args)
|
13
|
+
build_class_for(controller, *args).
|
14
|
+
new(controller, *args)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
module InstanceMethods
|
20
|
+
def initialize(parent_controller, *args)
|
21
|
+
super(parent_controller) # the real Base.new.
|
22
|
+
setup_backwardibility(*args)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Some people still like #options and assume it's a hash.
|
26
|
+
def setup_backwardibility(*args)
|
27
|
+
@_options = (args.first.is_a?(Hash) and args.size == 1) ? args.first : args
|
28
|
+
@options = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(@_options, "#options is deprecated and was removed in Cells 3.7. Please use state-args.")
|
29
|
+
end
|
30
|
+
|
31
|
+
def render_state(state, *args)
|
32
|
+
return super(state, *args) if state_accepts_args?(state)
|
33
|
+
super(state) # backward-compat.
|
34
|
+
end
|
35
|
+
|
36
|
+
def state_accepts_args?(state)
|
37
|
+
method(state).arity != 0
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
data/lib/cell/rails.rb
CHANGED
@@ -42,23 +42,13 @@ module Cell
|
|
42
42
|
include Rendering
|
43
43
|
include Caching
|
44
44
|
|
45
|
-
|
46
45
|
attr_reader :parent_controller
|
47
|
-
attr_accessor :options
|
48
|
-
|
49
46
|
abstract!
|
50
47
|
|
51
48
|
|
52
|
-
def initialize(parent_controller
|
49
|
+
def initialize(parent_controller)
|
53
50
|
super()
|
54
|
-
@parent_controller
|
55
|
-
setup_backwardibility(*args)
|
56
|
-
end
|
57
|
-
|
58
|
-
# Some people still like #options and assume it's a hash.
|
59
|
-
def setup_backwardibility(*args)
|
60
|
-
@options = (args.first.is_a?(Hash) and args.size == 1) ? args.first : args
|
61
|
-
@opts = ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new(self, :options)
|
51
|
+
@parent_controller = parent_controller
|
62
52
|
end
|
63
53
|
|
64
54
|
def self.controller_path
|
data/lib/cell/test_case.rb
CHANGED
@@ -98,7 +98,7 @@ module Cell
|
|
98
98
|
# DISCUSS: should we allow passing a block here, just as in controllers?
|
99
99
|
@subject_cell = ::Cell::Base.create_cell_for(@controller, name, *args)
|
100
100
|
@view_assigns = extract_state_ivars_for(@subject_cell) do
|
101
|
-
@last_invoke = @subject_cell.
|
101
|
+
@last_invoke = @subject_cell.render_state(state, *args)
|
102
102
|
end
|
103
103
|
|
104
104
|
@last_invoke
|
@@ -108,10 +108,11 @@ module Cell
|
|
108
108
|
# Passes the optional block to <tt>cell.instance_eval</tt>.
|
109
109
|
#
|
110
110
|
# Example:
|
111
|
-
# assert_equal "
|
111
|
+
# assert_equal "Doo Dumm Dumm..." cell(:bassist).play
|
112
112
|
def cell(name, *args, &block)
|
113
113
|
cell = ::Cell::Base.create_cell_for(@controller, name, *args)
|
114
114
|
cell.instance_eval &block if block_given?
|
115
|
+
ActiveSupport::Deprecation.warn("Passing options to TestCase#cell is deprecated, please use state-args in #render_cell.", caller) if args.present?
|
115
116
|
cell
|
116
117
|
end
|
117
118
|
|
@@ -122,16 +123,16 @@ module Cell
|
|
122
123
|
#
|
123
124
|
# assert_equal("<h1>Modularity rocks.</h1>", in_view do content_tag(:h1, "Modularity rocks."))
|
124
125
|
def in_view(cell_class, &block)
|
125
|
-
subject = cell(cell_class
|
126
|
+
subject = cell(cell_class)
|
126
127
|
setup_test_states_in(subject) # add #in_view to subject cell.
|
127
|
-
subject.render_state(:in_view)
|
128
|
+
subject.render_state(:in_view, block)
|
128
129
|
end
|
129
130
|
|
130
131
|
protected
|
131
132
|
def setup_test_states_in(cell)
|
132
133
|
cell.instance_eval do
|
133
|
-
def in_view
|
134
|
-
render :inline => "<%= instance_exec(&block) %>", :locals => {:block =>
|
134
|
+
def in_view(block=nil)
|
135
|
+
render :inline => "<%= instance_exec(&block) %>", :locals => {:block => block}
|
135
136
|
end
|
136
137
|
end
|
137
138
|
end
|
@@ -147,7 +148,7 @@ module Cell
|
|
147
148
|
|
148
149
|
|
149
150
|
def invoke(state, *args)
|
150
|
-
@last_invoke = self.class.controller_class.new(@controller
|
151
|
+
@last_invoke = self.class.controller_class.new(@controller).render_state(state, *args)
|
151
152
|
end
|
152
153
|
end
|
153
154
|
end
|
data/lib/cells.rb
CHANGED
data/lib/cells/version.rb
CHANGED
data/test/cell_module_test.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class MusicianCell < Cell::Base
|
4
|
-
|
5
4
|
end
|
6
5
|
|
7
6
|
class PianistCell < MusicianCell
|
@@ -32,24 +31,6 @@ class CellModuleTest < ActiveSupport::TestCase
|
|
32
31
|
assert_equal "Doo", html
|
33
32
|
assert flag
|
34
33
|
end
|
35
|
-
|
36
|
-
should "make options available in #options if not receiving state-args" do
|
37
|
-
BassistCell.class_eval do
|
38
|
-
def listen
|
39
|
-
render :text => options[:note]
|
40
|
-
end
|
41
|
-
end
|
42
|
-
assert_equal "C-minor", Cell::Base.render_cell_for(@controller, :bassist, :listen, :note => "C-minor")
|
43
|
-
end
|
44
|
-
|
45
|
-
should "pass options as state-args and still set #options otherwise" do
|
46
|
-
BassistCell.class_eval do
|
47
|
-
def listen(args)
|
48
|
-
render :text => args[:note] + options[:note].to_s
|
49
|
-
end
|
50
|
-
end
|
51
|
-
assert_equal "C-minorC-minor", Cell::Base.render_cell_for(@controller, :bassist, :listen, :note => "C-minor")
|
52
|
-
end
|
53
34
|
end
|
54
35
|
|
55
36
|
context "create_cell_for" do
|
@@ -64,7 +45,7 @@ class CellModuleTest < ActiveSupport::TestCase
|
|
64
45
|
end
|
65
46
|
end
|
66
47
|
|
67
|
-
context "
|
48
|
+
context "#create_cell_for with #build" do
|
68
49
|
setup do
|
69
50
|
@controller.class_eval do
|
70
51
|
attr_accessor :bassist
|
@@ -86,13 +67,13 @@ class CellModuleTest < ActiveSupport::TestCase
|
|
86
67
|
|
87
68
|
should "execute the block in controller context" do
|
88
69
|
@controller.bassist = true
|
89
|
-
|
70
|
+
assert_is_a BassistCell, Cell::Base.create_cell_for(@controller, :musician, {})
|
90
71
|
end
|
91
72
|
|
92
73
|
should "limit the builder to the receiving class" do
|
93
|
-
|
74
|
+
assert_is_a PianistCell, Cell::Base.create_cell_for(@controller, :pianist, {}) # don't inherit anything.
|
94
75
|
@controller.bassist = true
|
95
|
-
|
76
|
+
assert_is_a BassistCell, Cell::Base.create_cell_for(@controller, :musician, {})
|
96
77
|
end
|
97
78
|
|
98
79
|
should "chain build blocks and execute them by ORing them in the same order" do
|
@@ -104,13 +85,13 @@ class CellModuleTest < ActiveSupport::TestCase
|
|
104
85
|
UnknownCell # should never be executed.
|
105
86
|
end
|
106
87
|
|
107
|
-
|
88
|
+
assert_is_a PianistCell, Cell::Base.create_cell_for(@controller, :musician, {}) # bassist is false.
|
108
89
|
@controller.bassist = true
|
109
|
-
|
90
|
+
assert_is_a BassistCell, Cell::Base.create_cell_for(@controller, :musician, {})
|
110
91
|
end
|
111
92
|
|
112
93
|
should "use the original cell if no builder matches" do
|
113
|
-
|
94
|
+
assert_is_a MusicianCell, Cell::Base.create_cell_for(@controller, :musician, {}) # bassist is false.
|
114
95
|
end
|
115
96
|
|
116
97
|
should "stop at the first builder returning a valid cell" do
|
@@ -121,16 +102,16 @@ class CellModuleTest < ActiveSupport::TestCase
|
|
121
102
|
BassistCell.build do |opts|
|
122
103
|
SingerCell if opts[:sing_the_song]
|
123
104
|
end
|
124
|
-
|
125
|
-
|
105
|
+
assert_kind_of BassistCell, Cell::Base.create_cell_for(@controller, :bassist, {})
|
106
|
+
assert_kind_of SingerCell, Cell::Base.create_cell_for(@controller, :bassist, {:sing_the_song => true})
|
126
107
|
end
|
127
108
|
|
128
109
|
should "create the original target class if no block matches" do
|
129
|
-
|
110
|
+
assert_kind_of PianistCell, Cell::Base.create_cell_for(@controller, :pianist, {})
|
130
111
|
end
|
131
112
|
|
132
113
|
should "builders should return an empty array per default" do
|
133
|
-
assert_equal [], PianistCell.builders
|
114
|
+
assert_equal [], PianistCell.send(:builders)
|
134
115
|
end
|
135
116
|
end
|
136
117
|
|
@@ -154,29 +135,5 @@ class CellModuleTest < ActiveSupport::TestCase
|
|
154
135
|
assert_equal "cell_module_test/singer", CellModuleTest::SingerCell.cell_name
|
155
136
|
end
|
156
137
|
end
|
157
|
-
|
158
|
-
context "#state_accepts_args?" do
|
159
|
-
should "be false if state doesn't want args" do
|
160
|
-
assert_not cell(:bassist).state_accepts_args?(:play)
|
161
|
-
end
|
162
|
-
|
163
|
-
should "be true for one arg" do
|
164
|
-
assert(cell(:bassist) do
|
165
|
-
def listen(args) end
|
166
|
-
end.state_accepts_args?(:listen))
|
167
|
-
end
|
168
|
-
|
169
|
-
should "be true for multiple arg" do
|
170
|
-
assert(cell(:bassist) do
|
171
|
-
def listen(what, where) end
|
172
|
-
end.state_accepts_args?(:listen))
|
173
|
-
end
|
174
|
-
|
175
|
-
should "be true for multiple arg with defaults" do
|
176
|
-
assert(cell(:bassist) do
|
177
|
-
def listen(what, where="") end
|
178
|
-
end.state_accepts_args?(:listen))
|
179
|
-
end
|
180
|
-
end
|
181
138
|
end
|
182
139
|
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class SongwriterCell < BassistCell
|
4
|
+
include Cell::Deprecations
|
5
|
+
end
|
6
|
+
|
7
|
+
|
8
|
+
class DeprecationsTest < ActiveSupport::TestCase
|
9
|
+
include Cell::TestCase::TestMethods
|
10
|
+
|
11
|
+
context "#render_state" do
|
12
|
+
should "work without args and provide #options" do
|
13
|
+
SongwriterCell.class_eval do
|
14
|
+
def listen
|
15
|
+
render :text => options[:note]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
assert_equal "D", cell(:songwriter, :note => "D").render_state(:listen)
|
19
|
+
end
|
20
|
+
|
21
|
+
include ActiveSupport::Testing::Deprecation
|
22
|
+
should "mark @options as deprecated, but still work" do
|
23
|
+
res = nil
|
24
|
+
assert_deprecated do
|
25
|
+
res = cell(:songwriter, :song => "Lockdown").instance_eval do
|
26
|
+
options[:song]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
assert_equal "Lockdown", res
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "render_cell_for" do
|
34
|
+
should "make options available in #options if not receiving state-args" do
|
35
|
+
SongwriterCell.class_eval do
|
36
|
+
def listen
|
37
|
+
render :text => options[:note]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
assert_equal "C-minor", Cell::Base.render_cell_for(@controller, :songwriter, :listen, :note => "C-minor")
|
41
|
+
end
|
42
|
+
|
43
|
+
should "pass options as state-args and still set #options otherwise" do
|
44
|
+
SongwriterCell.class_eval do
|
45
|
+
def listen(args)
|
46
|
+
render :text => args[:note] + options[:note].to_s
|
47
|
+
end
|
48
|
+
end
|
49
|
+
assert_equal "C-minorC-minor", Cell::Base.render_cell_for(@controller, :songwriter, :listen, :note => "C-minor")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "#state_accepts_args?" do
|
54
|
+
should "be false if state doesn't want args" do
|
55
|
+
assert_not cell(:songwriter).state_accepts_args?(:play)
|
56
|
+
end
|
57
|
+
|
58
|
+
should "be true for one arg" do
|
59
|
+
assert(cell(:songwriter) do
|
60
|
+
def listen(args) end
|
61
|
+
end.state_accepts_args?(:listen))
|
62
|
+
end
|
63
|
+
|
64
|
+
should "be true for multiple arg" do
|
65
|
+
assert(cell(:songwriter) do
|
66
|
+
def listen(what, where) end
|
67
|
+
end.state_accepts_args?(:listen))
|
68
|
+
end
|
69
|
+
|
70
|
+
should "be true for multiple arg with defaults" do
|
71
|
+
assert(cell(:songwriter) do
|
72
|
+
def listen(what, where="") end
|
73
|
+
end.state_accepts_args?(:listen))
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context ".cache" do
|
78
|
+
should "still be able to use options in the block" do
|
79
|
+
SongwriterCell.class_eval do
|
80
|
+
def count(args)
|
81
|
+
render :text => args[:int]
|
82
|
+
end
|
83
|
+
|
84
|
+
cache :count do |cell, i|
|
85
|
+
(cell.options[:int] % 2)==0 ? {:count => "even"} : {:count => "odd"}
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
assert_equal "1", render_cell(:songwriter, :count, :int => 1)
|
90
|
+
assert_equal "2", render_cell(:songwriter, :count, :int => 2)
|
91
|
+
assert_equal "1", render_cell(:songwriter, :count, :int => 3)
|
92
|
+
assert_equal "2", render_cell(:songwriter, :count, :int => 4)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
data/test/rails/caching_test.rb
CHANGED
@@ -128,6 +128,10 @@ class CachingUnitTest < ActiveSupport::TestCase
|
|
128
128
|
context ".cache" do
|
129
129
|
setup do
|
130
130
|
@proc = Proc.new{}
|
131
|
+
|
132
|
+
@parent = Class.new(@class)
|
133
|
+
@child = Class.new(@parent)
|
134
|
+
@sibbling = Class.new(@parent)
|
131
135
|
end
|
132
136
|
|
133
137
|
should "accept a state name, only" do
|
@@ -164,14 +168,34 @@ class CachingUnitTest < ActiveSupport::TestCase
|
|
164
168
|
assert_kind_of Proc, @class.version_procs[:count]
|
165
169
|
assert_equal({}, @class.cache_options[:count])
|
166
170
|
end
|
167
|
-
|
168
|
-
should "
|
169
|
-
@
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
171
|
+
|
172
|
+
should "inherit caching configuration" do
|
173
|
+
@parent.cache :inherited_cache_configuration
|
174
|
+
|
175
|
+
assert @parent.version_procs.has_key?(:inherited_cache_configuration)
|
176
|
+
assert @child.version_procs.has_key?(:inherited_cache_configuration)
|
177
|
+
end
|
178
|
+
|
179
|
+
should "not overwrite caching configuration in the parent class" do
|
180
|
+
@child.cache :inherited_cache_configuration
|
181
|
+
|
182
|
+
assert_not @parent.version_procs.has_key?(:inherited_cache_configuration)
|
183
|
+
assert @child.version_procs.has_key?(:inherited_cache_configuration)
|
184
|
+
end
|
185
|
+
|
186
|
+
should "not overwrite caching configuration in a sibbling class" do
|
187
|
+
@sibbling.cache :inherited_cache_configuration
|
188
|
+
|
189
|
+
assert_not @child.version_procs.has_key?(:inherited_cache_configuration)
|
190
|
+
assert @sibbling.version_procs.has_key?(:inherited_cache_configuration)
|
191
|
+
end
|
192
|
+
|
193
|
+
should "overwrite caching configuration in a child class" do
|
194
|
+
@class.cache :inherited_cache_configuration
|
195
|
+
@child.cache :inherited_cache_configuration, @proc
|
196
|
+
|
197
|
+
assert_not @parent.version_procs[:inherited_cache_configuration]
|
198
|
+
assert_equal @proc, @child.version_procs[:inherited_cache_configuration]
|
175
199
|
end
|
176
200
|
end
|
177
201
|
end
|
@@ -230,7 +254,7 @@ class CachingFunctionalTest < ActiveSupport::TestCase
|
|
230
254
|
end
|
231
255
|
end
|
232
256
|
|
233
|
-
should "compute the key with a block" do
|
257
|
+
should "compute the key with a block receiving state-args" do
|
234
258
|
@class.cache :count do |cell, int|
|
235
259
|
(int % 2)==0 ? {:count => "even"} : {:count => "odd"}
|
236
260
|
end
|
@@ -242,26 +266,10 @@ class CachingFunctionalTest < ActiveSupport::TestCase
|
|
242
266
|
assert_equal "2", render_cell(:director, :count, 4)
|
243
267
|
end
|
244
268
|
|
245
|
-
should "still be able to use options in the block" do
|
246
|
-
@class.class_eval do
|
247
|
-
def count(args)
|
248
|
-
render :text => args[:int]
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
@class.cache :count do |cell, i|
|
253
|
-
(cell.options[:int] % 2)==0 ? {:count => "even"} : {:count => "odd"}
|
254
|
-
end
|
255
|
-
|
256
|
-
assert_equal "1", render_cell(:director, :count, :int => 1)
|
257
|
-
assert_equal "2", render_cell(:director, :count, :int => 2)
|
258
|
-
assert_equal "1", render_cell(:director, :count, :int => 3)
|
259
|
-
assert_equal "2", render_cell(:director, :count, :int => 4)
|
260
|
-
end
|
261
|
-
|
262
269
|
should "compute the key with an instance method" do
|
263
270
|
@class.cache :count, :version
|
264
271
|
@class.class_eval do
|
272
|
+
private
|
265
273
|
def version(int)
|
266
274
|
(int % 2)==0 ? {:count => "even"} : {:count => "odd"}
|
267
275
|
end
|
data/test/rails/cells_test.rb
CHANGED
@@ -20,10 +20,10 @@ class RailsCellsTest < ActiveSupport::TestCase
|
|
20
20
|
should "work without args" do
|
21
21
|
BassistCell.class_eval do
|
22
22
|
def listen
|
23
|
-
render :text =>
|
23
|
+
render :text => "That's a D!"
|
24
24
|
end
|
25
25
|
end
|
26
|
-
assert_equal "D", cell(:bassist
|
26
|
+
assert_equal "That's a D!", cell(:bassist).render_state(:listen)
|
27
27
|
end
|
28
28
|
|
29
29
|
should "accept state-args" do
|
@@ -76,20 +76,6 @@ class RailsCellsTest < ActiveSupport::TestCase
|
|
76
76
|
assert_equal({}, cell(:bassist).config)
|
77
77
|
end
|
78
78
|
|
79
|
-
include ActiveSupport::Testing::Deprecation
|
80
|
-
should "mark @opts as deprecated, but still works" do
|
81
|
-
res = nil
|
82
|
-
assert_deprecated do
|
83
|
-
res = cell(:bassist, :song => "Lockdown").instance_eval do
|
84
|
-
@opts[:song]
|
85
|
-
end
|
86
|
-
end
|
87
|
-
assert_equal "Lockdown", res
|
88
|
-
end
|
89
|
-
|
90
|
-
should "respond to #options and return the cell options" do
|
91
|
-
assert_equal({:song => "Lockdown"}, cell(:bassist, :song => "Lockdown").options)
|
92
|
-
end
|
93
79
|
|
94
80
|
if Cells.rails3_0?
|
95
81
|
puts "rails-3.0"
|
data/test/test_case_test.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class TestCaseTest < Cell::TestCase
|
4
|
-
|
4
|
+
include ActiveSupport::Testing::Deprecation
|
5
|
+
|
5
6
|
context "A TestCase" do
|
6
7
|
setup do
|
7
8
|
@test = Cell::TestCase.new(:cell_test)
|
@@ -19,16 +20,20 @@ class TestCaseTest < Cell::TestCase
|
|
19
20
|
assert_selector "p", "Doo", "<p>Doo</p>y"
|
20
21
|
end
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
23
|
+
context "#cell" do
|
24
|
+
should "create a cell" do
|
25
|
+
assert_kind_of BassistCell, cell(:bassist)
|
26
|
+
end
|
27
|
+
|
28
|
+
should "accept a block" do
|
29
|
+
assert_respond_to cell(:bassist){ def whatever; end }, :whatever
|
30
|
+
end
|
31
|
+
|
32
|
+
should "mark options as deprecated" do
|
33
|
+
assert_deprecated do
|
34
|
+
res = cell(:bassist, :song => "Lockdown")
|
35
|
+
end
|
36
|
+
end
|
32
37
|
end
|
33
38
|
|
34
39
|
context "#subject_cell" do
|
@@ -103,11 +108,11 @@ class TestCaseTest < Cell::TestCase
|
|
103
108
|
|
104
109
|
context "#setup_test_states_in" do
|
105
110
|
should "add the :in_view state" do
|
106
|
-
c = cell(:bassist
|
111
|
+
c = cell(:bassist)
|
107
112
|
assert_not c.respond_to?(:in_view)
|
108
113
|
|
109
114
|
setup_test_states_in(c)
|
110
|
-
assert_equal "Cells rock.", c.render_state(:in_view)
|
115
|
+
assert_equal "Cells rock.", c.render_state(:in_view, lambda{"Cells rock."})
|
111
116
|
end
|
112
117
|
end
|
113
118
|
|
data/test/test_helper.rb
CHANGED
@@ -28,6 +28,10 @@ ActiveSupport::TestCase.class_eval do
|
|
28
28
|
def assert_not(assertion)
|
29
29
|
assert !assertion
|
30
30
|
end
|
31
|
+
|
32
|
+
def assert_is_a(klass, object)
|
33
|
+
assert object.is_a?(klass)
|
34
|
+
end
|
31
35
|
end
|
32
36
|
|
33
37
|
# Enable dynamic states so we can do Cell.class_eval { def ... } at runtime.
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 3
|
7
|
-
- 6
|
8
7
|
- 7
|
9
|
-
|
8
|
+
- 0
|
9
|
+
version: 3.7.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Nick Sutterer
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-10-13 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -130,6 +130,7 @@ files:
|
|
130
130
|
- cells.gemspec
|
131
131
|
- lib/cell.rb
|
132
132
|
- lib/cell/caching.rb
|
133
|
+
- lib/cell/deprecations.rb
|
133
134
|
- lib/cell/rails.rb
|
134
135
|
- lib/cell/rails3_0_strategy.rb
|
135
136
|
- lib/cell/rails3_1_strategy.rb
|
@@ -185,6 +186,7 @@ files:
|
|
185
186
|
- test/cell_generator_test.rb
|
186
187
|
- test/cell_module_test.rb
|
187
188
|
- test/cells_module_test.rb
|
189
|
+
- test/deprecations_test.rb
|
188
190
|
- test/dummy/Rakefile
|
189
191
|
- test/dummy/app/controllers/application_controller.rb
|
190
192
|
- test/dummy/app/controllers/musician_controller.rb
|