cells 3.11.3 → 4.0.0.beta1

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 (204) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.travis.yml +15 -13
  4. data/Appraisals +23 -0
  5. data/CHANGES.md +20 -3
  6. data/Gemfile +5 -7
  7. data/README.md +317 -236
  8. data/Rakefile +1 -1
  9. data/TODO.md +3 -0
  10. data/cells.gemspec +19 -28
  11. data/gemfiles/rails3.2.gemfile +14 -0
  12. data/gemfiles/rails4.0.gemfile +14 -0
  13. data/gemfiles/rails4.1.gemfile +15 -0
  14. data/gemfiles/rails4.2.gemfile +14 -0
  15. data/lib/cell.rb +28 -21
  16. data/lib/cell/caching.rb +10 -22
  17. data/lib/cell/caching/notification.rb +15 -0
  18. data/lib/cell/concept.rb +4 -69
  19. data/lib/cell/development.rb +11 -0
  20. data/lib/{cells → cell}/engines.rb +1 -1
  21. data/lib/cell/layout.rb +20 -0
  22. data/lib/cell/partial.rb +17 -0
  23. data/lib/cell/{base/prefixes.rb → prefixes.rb} +1 -1
  24. data/lib/cell/rails.rb +58 -50
  25. data/lib/cell/railtie.rb +60 -0
  26. data/lib/cell/{base/self_contained.rb → self_contained.rb} +1 -1
  27. data/lib/cell/templates.rb +60 -0
  28. data/lib/cell/test_case.rb +4 -162
  29. data/lib/cell/testing.rb +15 -0
  30. data/lib/cell/twin.rb +11 -29
  31. data/lib/cell/version.rb +10 -0
  32. data/lib/cell/view_model.rb +196 -88
  33. data/lib/cells.rb +1 -20
  34. data/lib/rails/generators/cell/cell_generator.rb +43 -0
  35. data/lib/rails/generators/cell/templates/cell.rb.erb +8 -0
  36. data/lib/{generators/templates/concept → rails/generators/cell/templates}/view.erb +0 -0
  37. data/lib/{generators/templates/concept → rails/generators/cell/templates}/view.haml +0 -0
  38. data/lib/rails/generators/cell/templates/view.slim +2 -0
  39. data/lib/rails/generators/concept/concept_generator.rb +38 -0
  40. data/lib/{generators/templates/concept/cell.rb → rails/generators/concept/templates/concept.rb.erb} +2 -2
  41. data/lib/{generators → rails/generators/concept}/templates/view.erb +0 -0
  42. data/lib/{generators → rails/generators/concept}/templates/view.haml +0 -0
  43. data/lib/rails/generators/concept/templates/view.slim +2 -0
  44. data/lib/rails/generators/test_unit/cell/cell_generator.rb +21 -0
  45. data/lib/{generators/templates/cell_test.rb → rails/generators/test_unit/cell/templates/unit_test.rb.erb} +3 -3
  46. data/lib/rails/generators/test_unit/concept/concept_generator.rb +21 -0
  47. data/lib/rails/generators/test_unit/concept/templates/unit_test.rb.erb +11 -0
  48. data/lib/{cells → tasks}/cells.rake +0 -0
  49. data/test/builder_test.rb +58 -0
  50. data/test/caching_test.rb +298 -0
  51. data/test/cell_benchmark.rb +32 -0
  52. data/test/cell_generator_test.rb +51 -82
  53. data/test/cell_test.rb +8 -23
  54. data/test/concept_generator_test.rb +22 -13
  55. data/test/concept_test.rb +41 -75
  56. data/test/dummy/app/views/musician/hamlet.html.erb +1 -0
  57. data/test/dummy/config/application.rb +21 -8
  58. data/test/{app/cells/bassist/play.html.erb → fixtures/bassist/play.erb} +0 -0
  59. data/test/fixtures/concepts/record/views/layout.erb +1 -0
  60. data/test/{app → fixtures}/concepts/record/views/show.erb +0 -0
  61. data/test/{app → fixtures}/concepts/record/views/song.erb +0 -0
  62. data/test/fixtures/inherit_views_test/popper/tap.erb +1 -0
  63. data/test/fixtures/inherit_views_test/tapper/play.erb +1 -0
  64. data/test/fixtures/inherit_views_test/tapper/tap.erb +1 -0
  65. data/test/fixtures/partial_test/with_partial/show.erb +1 -0
  66. data/test/fixtures/partials/_show.html.erb +1 -0
  67. data/test/fixtures/partials/_show.xml.erb +1 -0
  68. data/test/fixtures/song/ivar.erb +1 -0
  69. data/test/fixtures/song/show.erb +1 -0
  70. data/test/fixtures/song/with_erb.erb +4 -0
  71. data/test/fixtures/song/with_html.erb +1 -0
  72. data/test/fixtures/song/with_locals.erb +2 -0
  73. data/test/fixtures/song_with_layout/happy.erb +1 -0
  74. data/test/fixtures/song_with_layout/merry.erb +1 -0
  75. data/test/fixtures/song_with_layout/show.erb +1 -0
  76. data/test/fixtures/song_with_layout/show_with_layout.erb +1 -0
  77. data/test/fixtures/templates_caching_test/song/show.erb +1 -0
  78. data/test/fixtures/url_helper_test/song/edit.erb +8 -0
  79. data/test/fixtures/url_helper_test/song/with_block.erb +2 -0
  80. data/test/fixtures/url_helper_test/song/with_capture.erb +4 -0
  81. data/test/fixtures/url_helper_test/song/with_content_tag.erb +6 -0
  82. data/test/fixtures/url_helper_test/song/with_form_for_block.erb +3 -0
  83. data/test/fixtures/url_helper_test/song/with_link_to.erb +3 -0
  84. data/test/layout_test.rb +57 -0
  85. data/test/partial_test.rb +27 -0
  86. data/test/prefixes_test.rb +36 -10
  87. data/test/public_test.rb +42 -0
  88. data/test/rails_extensions_test.rb +51 -0
  89. data/test/render_test.rb +103 -0
  90. data/test/templates_test.rb +45 -0
  91. data/test/test_case_test.rb +21 -122
  92. data/test/test_helper.rb +37 -33
  93. data/test/twin_test.rb +3 -7
  94. data/test/url_helper_test.rb +89 -0
  95. metadata +92 -357
  96. data/gemfiles/Gemfile.rails3-0 +0 -7
  97. data/gemfiles/Gemfile.rails3-1 +0 -7
  98. data/gemfiles/Gemfile.rails3-2 +0 -7
  99. data/gemfiles/Gemfile.rails4-0 +0 -12
  100. data/gemfiles/Gemfile.rails4-1 +0 -12
  101. data/lib/cell/base.rb +0 -82
  102. data/lib/cell/base/view.rb +0 -15
  103. data/lib/cell/builder.rb +0 -71
  104. data/lib/cell/deprecations.rb +0 -41
  105. data/lib/cell/dsl.rb +0 -7
  106. data/lib/cell/rack.rb +0 -32
  107. data/lib/cell/rails/helper_api.rb +0 -37
  108. data/lib/cell/rails/view_model.rb +0 -159
  109. data/lib/cell/rails3_0_strategy.rb +0 -82
  110. data/lib/cell/rails3_1_strategy.rb +0 -40
  111. data/lib/cell/rails4_0_strategy.rb +0 -39
  112. data/lib/cell/rails4_1_strategy.rb +0 -40
  113. data/lib/cell/rendering.rb +0 -109
  114. data/lib/cells/rails.rb +0 -86
  115. data/lib/cells/railtie.rb +0 -38
  116. data/lib/cells/version.rb +0 -3
  117. data/lib/generators/USAGE +0 -30
  118. data/lib/generators/cells/base.rb +0 -22
  119. data/lib/generators/cells/cell_generator.rb +0 -15
  120. data/lib/generators/cells/view_generator.rb +0 -18
  121. data/lib/generators/erb/cell_generator.rb +0 -15
  122. data/lib/generators/erb/concept_generator.rb +0 -17
  123. data/lib/generators/haml/cell_generator.rb +0 -17
  124. data/lib/generators/haml/concept_generator.rb +0 -17
  125. data/lib/generators/rails/cell_generator.rb +0 -16
  126. data/lib/generators/rails/concept_generator.rb +0 -16
  127. data/lib/generators/slim/cell_generator.rb +0 -17
  128. data/lib/generators/templates/cell.rb +0 -9
  129. data/lib/generators/templates/view.slim +0 -4
  130. data/lib/generators/test_unit/cell_generator.rb +0 -14
  131. data/lib/generators/trailblazer/base.rb +0 -21
  132. data/lib/generators/trailblazer/view_generator.rb +0 -18
  133. data/test/app/cells/album/views/cover.haml +0 -1
  134. data/test/app/cells/bad_guitarist/_dii.html.erb +0 -1
  135. data/test/app/cells/bad_guitarist_cell.rb +0 -2
  136. data/test/app/cells/bassist/_dii.html.erb +0 -1
  137. data/test/app/cells/bassist/ahem.html.erb +0 -1
  138. data/test/app/cells/bassist/compose.html.erb +0 -1
  139. data/test/app/cells/bassist/contact_form.html.erb +0 -1
  140. data/test/app/cells/bassist/form_for.erb +0 -3
  141. data/test/app/cells/bassist/form_for_in_haml.haml +0 -2
  142. data/test/app/cells/bassist/jam.html.erb +0 -3
  143. data/test/app/cells/bassist/play.js.erb +0 -1
  144. data/test/app/cells/bassist/pose.html.erb +0 -1
  145. data/test/app/cells/bassist/promote.html.erb +0 -1
  146. data/test/app/cells/bassist/provoke.html.erb +0 -1
  147. data/test/app/cells/bassist/shout.html.erb +0 -1
  148. data/test/app/cells/bassist/sing.html.haml +0 -1
  149. data/test/app/cells/bassist/slap.html.erb +0 -1
  150. data/test/app/cells/bassist/yell.en.html.erb +0 -1
  151. data/test/app/cells/bassist_cell.rb +0 -25
  152. data/test/app/cells/club_security.rb +0 -2
  153. data/test/app/cells/club_security/guard/help.html.erb +0 -1
  154. data/test/app/cells/club_security/guard_cell.rb +0 -6
  155. data/test/app/cells/club_security/medic/help.html.erb +0 -1
  156. data/test/app/cells/club_security/medic_cell.rb +0 -8
  157. data/test/app/cells/layouts/b.erb +0 -1
  158. data/test/app/cells/layouts/metal.html.erb +0 -1
  159. data/test/app/cells/rails_helper_api_test/bassist/edit.html.erb +0 -5
  160. data/test/app/cells/shouter/sing.html.erb +0 -1
  161. data/test/app/cells/song/dashboard.haml +0 -7
  162. data/test/app/cells/song/details.html.haml +0 -1
  163. data/test/app/cells/song/info.html.haml +0 -1
  164. data/test/app/cells/song/lyrics.html.haml +0 -6
  165. data/test/app/cells/song/plays.haml +0 -1
  166. data/test/app/cells/song/scale.haml +0 -1
  167. data/test/app/cells/song/show.html.haml +0 -3
  168. data/test/app/cells/song/title.html.haml +0 -1
  169. data/test/app/cells/trumpeter/promote.html.erb +0 -1
  170. data/test/app/cells/trumpeter_cell.rb +0 -8
  171. data/test/app/cells/view_model_test/comments/show.haml +0 -7
  172. data/test/app/concepts/record/views/layout.haml +0 -2
  173. data/test/app/views/shared/_dong.html.erb +0 -1
  174. data/test/cell_module_test.rb +0 -170
  175. data/test/cells_module_test.rb +0 -27
  176. data/test/deprecations_test.rb +0 -101
  177. data/test/dummy/app/helpers/application_helper.rb +0 -2
  178. data/test/dummy/app/views/musician/hamlet.html.haml +0 -1
  179. data/test/dummy/config/environments/development.rb +0 -16
  180. data/test/dummy/config/environments/production.rb +0 -46
  181. data/test/dummy/config/environments/test.rb +0 -33
  182. data/test/dummy/db/test.sqlite3 +0 -0
  183. data/test/dummy/label/app/cells/label/show.erb +0 -1
  184. data/test/dummy/label/app/cells/label_cell.rb +0 -5
  185. data/test/dummy/label/label.gemspec +0 -20
  186. data/test/dummy/label/lib/label.rb +0 -4
  187. data/test/dummy/label/lib/label/version.rb +0 -3
  188. data/test/dummy/public/404.html +0 -26
  189. data/test/dummy/public/422.html +0 -26
  190. data/test/dummy/public/500.html +0 -26
  191. data/test/dummy/public/favicon.ico +0 -0
  192. data/test/dummy/public/stylesheets/.gitkeep +0 -0
  193. data/test/helper_test.rb +0 -81
  194. data/test/rack_test.rb +0 -32
  195. data/test/rails/asset_pipeline_test.rb +0 -20
  196. data/test/rails/caching_test.rb +0 -456
  197. data/test/rails/cells_test.rb +0 -119
  198. data/test/rails/forms_test.rb +0 -75
  199. data/test/rails/integration_test.rb +0 -299
  200. data/test/rails/render_test.rb +0 -189
  201. data/test/rails/view_model_test.rb +0 -226
  202. data/test/rails/view_test.rb +0 -49
  203. data/test/rails_helper_api_test.rb +0 -58
  204. data/test/self_contained_test.rb +0 -31
@@ -1,189 +0,0 @@
1
- require 'test_helper'
2
-
3
- class RailsRenderTest < MiniTest::Spec
4
- include Cell::TestCase::TestMethods
5
-
6
- let (:bassist) { cell(:bassist) }
7
-
8
- describe "Invoking render" do
9
- it "render a plain view" do
10
- bassist.instance_eval do
11
- def play; render; end
12
- end
13
- assert_equal "Doo", bassist.render_state(:play)
14
- end
15
-
16
- it "accept :format" do
17
- bassist.instance_eval do
18
- def play; render :format => :js; end
19
- end
20
- assert_equal "alert(\"Doo\");\n", bassist.render_state(:play)
21
- end
22
-
23
- it "accept :format without messing up following render calls" do
24
- skip
25
- bassist.instance_eval do
26
- def play; render(:format => :js) + render; end
27
- end
28
- assert_equal "alert(\"Doo\");\nDoo\n", bassist.render_state(:play)
29
- end
30
-
31
- it "also render alternative engines, like haml" do
32
- BassistCell.class_eval do
33
- def sing; render; end
34
- end
35
- assert_equal "<h1>Laaa</h1>\n", render_cell(:bassist, :sing)
36
- end
37
-
38
- it "accept the :nothing option" do
39
- BassistCell.class_eval do
40
- def sleep; render :nothing => true; end
41
- end
42
- assert_equal "", render_cell(:bassist, :sleep)
43
- end
44
-
45
-
46
- it "accept the :view option" do
47
- BassistCell.class_eval do
48
- def solo; render :view => :play; end
49
- end
50
- assert_equal "Doo", render_cell(:bassist, :solo)
51
- end
52
-
53
- it "accept the :text options" do
54
- BassistCell.class_eval do
55
- def sing; render :text => "Shoobie"; end
56
- end
57
- assert_equal "Shoobie", render_cell(:bassist, :sing)
58
- assert render_cell(:bassist, :sing).html_safe?
59
- end
60
-
61
- it "accept the :inline option" do
62
- BassistCell.class_eval do
63
- def sleep; render :inline => "<%= 'Snooore' %>"; end
64
- end
65
- assert_equal "Snooore", render_cell(:bassist, :sleep)
66
- end
67
-
68
- it "accept the :state option with state-args" do
69
- BassistCell.class_eval do
70
- def listen(band, song)
71
- render :text => "Listening to #{band}: #{song}"
72
- end
73
- def groove; render({:state => :listen}, "Thin Lizzy", "Southbound"); end
74
- end
75
- assert_equal "Listening to Thin Lizzy: Southbound", render_cell(:bassist, :groove)
76
-
77
- BassistCell.class_eval do
78
- def listen(args)
79
- render :text => "Listening to #{args[:band]}"
80
- end
81
- def groove; render({:state => :listen}, :band => "Belvedere"); end
82
- end
83
- assert_equal "Listening to Belvedere", render_cell(:bassist, :groove)
84
- end
85
-
86
- it "accept the :state option" do
87
- BassistCell.class_eval do
88
- def play; render; end
89
- def groove; render :state => :play; end
90
- end
91
- assert_equal "Doo", render_cell(:bassist, :groove)
92
- end
93
-
94
- it "accept the :locals option" do
95
- BassistCell.class_eval do
96
- def ahem; render :locals => {:times => 2}; end
97
- end
98
- assert_equal "AhemAhem", render_cell(:bassist, :ahem)
99
- end
100
-
101
-
102
- # layout
103
- it "accept the :layout option" do
104
- bassist.instance_eval do
105
- def play; render :layout => 'b'; end
106
- end
107
- assert_equal "<b>Doo</b>", bassist.render_state(:play)
108
- end
109
-
110
- it "respect the #layout class method" do
111
- puts
112
- class VanHalenBassistCell < BassistCell
113
- layout 'b'
114
- def play; render; end
115
- end
116
- assert_equal "<b>Doo</b>", render_cell("rails_render_test/van_halen_bassist", :play)
117
- end
118
-
119
- it "raise an error for a non-existent template" do
120
- BassistCell.class_eval do
121
- def groove; render; end
122
- end
123
-
124
- exception = ActionView::MissingTemplate
125
- exception = Cell::VersionStrategy::MissingTemplate if Cell.rails_version.~("3.0")
126
-
127
- assert_raises exception do
128
- render_cell(:bassist, :groove)
129
- end
130
- end
131
-
132
- it "raise an error for a non-existent template" do
133
- BadGuitaristCell.class_eval do
134
- def groove; render; end
135
- end
136
-
137
- if Cell.rails_version.~("3.0")
138
- e = assert_raises Cell::Rails::MissingTemplate do
139
- render_cell(:bad_guitarist, :groove)
140
- end
141
-
142
- assert_includes e.message, "Missing template bassist/groove with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml, :haml], :formats=>[:html, :text, :js, :css, :ics, :csv, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json], :locale=>[:en, :en]} in view paths"
143
- else # >= 3.1
144
- e = assert_raises ActionView::MissingTemplate do
145
- render_cell(:bad_guitarist, :groove)
146
- end
147
-
148
- assert_includes e.message, "Missing template bad_guitarist/groove, bassist/groove with"
149
- end
150
- end
151
-
152
- it "render instance variables from the cell" do
153
- assert_equal "Boing in D", render_cell(:bassist, :slap)
154
- end
155
-
156
- it "allow subsequent calls to render in the rendered view" do
157
- BassistCell.class_eval do
158
- def jam; @chords = [:a, :c]; render; end
159
- def sing; render; end
160
- end
161
- assert_equal "<h1>Laaa</h1>\n\n<h1>Laaa</h1>\n\n", render_cell(:bassist, :jam)
162
- end
163
-
164
- it "allow multiple calls to render" do
165
- BassistCell.class_eval do
166
- def sing; render + render + render; end
167
- end
168
- assert_equal "<h1>Laaa</h1>\n<h1>Laaa</h1>\n<h1>Laaa</h1>\n", render_cell(:bassist, :sing)
169
- end
170
- end
171
-
172
- describe "A cell view" do
173
- # rails view api
174
- it "allow calls to params/response/..." do
175
- BassistCell.class_eval do
176
- def pose; render; end
177
- end
178
-
179
- @request.env["action_dispatch.request.request_parameters"] = {:what => 'get'} # FIXME: duplicated in cells_test.rb.
180
- @controller = Class.new(ActionController::Base).new
181
- @controller.request = @request
182
- @cell = cell(:bassist)
183
-
184
- assert_equal "Come and get me!", @cell.render_state(:pose)
185
- end
186
-
187
-
188
- end
189
- end
@@ -1,226 +0,0 @@
1
- require 'test_helper'
2
-
3
- if Cell.rails_version >= 3.1
4
-
5
- class Song < OpenStruct
6
- extend ActiveModel::Naming
7
-
8
- def persisted?
9
- true
10
- end
11
-
12
- def to_param
13
- id
14
- end
15
- end
16
-
17
-
18
-
19
- class SongCell < Cell::ViewModel
20
- def show
21
- render
22
- end
23
-
24
- def title
25
- song.title.upcase
26
- end
27
-
28
- def self_url
29
- url_for(song)
30
- end
31
-
32
- def details
33
- render
34
- end
35
-
36
- def stats
37
- render :details
38
- end
39
-
40
- def info
41
- render :info
42
- end
43
-
44
- def dashboard
45
- render :dashboard
46
- end
47
-
48
- def scale
49
- render :layout => 'b'
50
- end
51
-
52
- class Lyrics < self
53
- def show
54
- render :lyrics
55
- end
56
- end
57
-
58
- class PlaysCell < self
59
- def show
60
- render :plays
61
- end
62
- end
63
- end
64
-
65
- class ViewModelTest < MiniTest::Spec
66
- # views :show, :create #=> wrap in render_state(:show, *)
67
- let (:cell) { SongCell.new(nil, :title => "Shades Of Truth") }
68
-
69
- it { cell.title.must_equal "Shades Of Truth" }
70
-
71
- class HitCell < Cell::ViewModel
72
- property :title, :artist
73
-
74
- def show
75
- "Great!"
76
- end
77
-
78
- def rate
79
- "Fantastic!"
80
- end
81
-
82
- attr_accessor :count
83
- cache :count
84
-
85
- def title
86
- super.upcase
87
- end
88
- end
89
-
90
- let (:song) { Song.new(:title => "Sixtyfive", artist: "Boss") }
91
-
92
- # ::property creates accessor.
93
- it { HitCell.new(nil, song).artist.must_equal "Boss" }
94
-
95
- # ::property accessor can be overridden and call super.
96
- it { HitCell.new(nil, song).title.must_equal "SIXTYFIVE" }
97
-
98
-
99
- describe "#call" do
100
- let (:cell) { HitCell.new(nil, song) }
101
-
102
- it { cell.call.must_equal "Great!" }
103
- it { cell.call(:rate).must_equal "Fantastic!" }
104
-
105
- it "no caching" do
106
- cell.instance_eval do
107
- def cache_configured?
108
- false
109
- end
110
- end
111
-
112
- cell.count = 1
113
- cell.call(:count).must_equal "1"
114
- cell.count = 2
115
- cell.call(:count).must_equal "2"
116
- end
117
-
118
- it "with caching" do
119
- cell.instance_eval do
120
- self.cache_store = ActiveSupport::Cache::MemoryStore.new
121
- self.cache_configured = true
122
- end
123
-
124
- cell.count = 1
125
- cell.call(:count).must_equal "1"
126
- cell.count = 2
127
- cell.call(:count).must_equal "1"
128
- end
129
-
130
- # call(:show) do .. end
131
- it do
132
- cell.call(:show) do |c|
133
- c.instance_variable_set(:@volume, 9)
134
- end.must_equal "Great!"
135
-
136
- cell.instance_variable_get(:@volume).must_equal 9
137
- end
138
- end
139
-
140
-
141
- # describe "::helper" do
142
- # it { assert_raises { HitCell.helper Module.new } }
143
- # end
144
- end
145
-
146
-
147
- if Cell.rails_version >= "3.2"
148
- class ViewModelIntegrationTest < ActionController::TestCase
149
- tests MusicianController
150
-
151
- #let (:song) { Song.new(:title => "Blindfold", :id => 1) }
152
- #let (:html) { %{<h1>Shades Of Truth</h1>\n} }
153
- #let (:cell) { }
154
-
155
- setup do
156
- @cell = SongCell.new(@controller, :song => Song.new(:title => "Blindfold", :id => "1"))
157
-
158
- @url = "/songs/1"
159
- @url = "http://test.host/songs/1" if Cell.rails_version.>=("4.0")
160
- end
161
-
162
-
163
- # test "instantiating without model, but call to ::property" do
164
- # assert_raises do
165
- # @controller.cell("view_model_test/piano_song")
166
- # end
167
- # end
168
-
169
-
170
- test "URL helpers in view" do
171
- @cell.show.must_equal %{<h1>BLINDFOLD</h1>
172
- <a href=\"#{@url}\">Permalink</a>
173
- } end
174
-
175
- test "URL helper in instance" do
176
- @cell.self_url.must_equal @url
177
- end
178
-
179
- test "implicit #render" do
180
- @cell.details.must_equal "<h3>BLINDFOLD</h3>\n"
181
- SongCell.new(@controller, :song => Song.new(:title => "Blindfold", :id => 1)).details
182
- end
183
-
184
- test "explicit #render with one arg" do
185
- @cell = SongCell.new(@controller, :song => Song.new(:title => "Blindfold", :id => 1))
186
- @cell.stats.must_equal "<h3>BLINDFOLD</h3>\n"
187
- end
188
-
189
- test "nested render" do
190
- @cell.info.must_equal "<li>BLINDFOLD\n</li>\n"
191
- end
192
-
193
- test "nested rendering method" do
194
- @cell.dashboard.must_equal "<h1>Dashboard</h1>\n<h3>Lyrics for BLINDFOLD</h3>\n<li>\nIn the Mirror\n</li>\n<li>\nI can see\n</li>\n\nPlays: 99\n\nPlays: 99\n\n"
195
- end
196
-
197
- test( "layout") { @cell.scale.must_equal "<b>A Minor!\n</b>" }
198
-
199
- # TODO: when we don't pass :song into Lyrics
200
- end
201
- end
202
-
203
- class CollectionTest < MiniTest::Spec
204
- class ReleasePartyCell < Cell::ViewModel
205
- def show
206
- "Party on, #{model}!"
207
- end
208
-
209
- def show_more
210
- "Go nuts, #{model}!"
211
- end
212
- end
213
-
214
-
215
- describe "::collection" do
216
- it { Cell::ViewModel.collection("collection_test/release_party", @controller, %w{Garth Wayne}).must_equal "Party on, Garth!\nParty on, Wayne!" }
217
- it { Cell::ViewModel.collection("collection_test/release_party", @controller, %w{Garth Wayne}, :show_more).must_equal "Go nuts, Garth!\nGo nuts, Wayne!" }
218
- end
219
- # TODO: test with builders ("polymorphic collections") and document that.
220
-
221
- describe "::cell" do
222
- it { Cell::ViewModel.cell("collection_test/release_party", @controller, "Garth").call.must_equal "Party on, Garth!" }
223
- end
224
- end
225
-
226
- end
@@ -1,49 +0,0 @@
1
- require 'test_helper'
2
-
3
- class RailsViewTest < MiniTest::Spec
4
- include Cell::TestCase::TestMethods
5
-
6
- describe "A cell view" do
7
- # DISCUSS: it we allow :partial from a state, too?
8
- describe "calling render :partial" do
9
- it "render the local cell partial in bassist/dii" do
10
- assert_equal("Dii", in_view(:bassist) do
11
- render :partial => 'dii'
12
- end)
13
- end
14
-
15
- it "render the foreign cell partial in bad_guitarist/dii" do
16
- assert_equal("Dooom", in_view(:bassist) do
17
- render :partial => "bad_guitarist/dii"
18
- end)
19
- end
20
-
21
-
22
- it "render the global partial app/views/shared/dong" do
23
- class PercussionistCell < BassistCell
24
- append_view_path("test/app/views")
25
- end
26
- assert_equal("Dong!", in_view("rails_view_test/percussionist") do
27
- render :partial => "shared/dong"
28
- end)
29
- end
30
- end
31
-
32
- it "respond to render :state" do
33
- assert_equal("Doo", in_view(:bassist) do
34
- render :state => :play
35
- end)
36
- end
37
-
38
- it "respond to render :state with options" do
39
- BassistCell.class_eval do
40
- def listen(*args)
41
- render :text => "Listening to #{args.join(' ')}"
42
- end
43
- end
44
- assert_equal("Listening to Much the Same", in_view(:bassist) do
45
- render({:state => :listen}, "Much", "the", "Same")
46
- end)
47
- end
48
- end
49
- end