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,22 +0,0 @@
1
- require 'rails/generators'
2
- require 'rails/generators/named_base'
3
-
4
- module Cells
5
- module Generators
6
- class Base < ::Rails::Generators::NamedBase
7
- class_option :template_engine
8
- class_option :test_framework
9
- class_option :base_cell_class, :type => :string, :default => "Cell::Rails"
10
- class_option :base_cell_path
11
-
12
- argument :actions, :type => :array, :default => [], :banner => "action action"
13
- check_class_collision :suffix => "Cell"
14
-
15
- private
16
- def base_path
17
- path = (options[:base_cell_path] || 'app/cells').to_s
18
- File.join(path, class_path, file_name)
19
- end
20
- end
21
- end
22
- end
@@ -1,15 +0,0 @@
1
- require 'generators/rails/cell_generator'
2
-
3
- module Cells
4
- module Generators
5
- class CellGenerator < ::Rails::Generators::CellGenerator
6
- source_root File.expand_path('../../templates', __FILE__)
7
-
8
- def say_deprecated
9
- say "====> This generator is now DEPRECATED. <====", :red
10
- say "Please use:"
11
- say " rails g cell #{class_name} #{actions.join(' ')}"
12
- end
13
- end
14
- end
15
- end
@@ -1,18 +0,0 @@
1
- module Cells
2
- module Generators
3
- class ViewGenerator < Base
4
- def create_views
5
- for state in actions do
6
- @state = state
7
- @path = File.join(base_path, "#{state}.html.#{handler}") #base_path defined in Cells::Generators::Base.
8
- template "view.#{handler}", @path
9
- end
10
- end
11
-
12
- private
13
- def handler
14
- raise "Please implement #handler in your view generator and return something like `:erb`."
15
- end
16
- end
17
- end
18
- end
@@ -1,15 +0,0 @@
1
- require 'generators/cells/view_generator'
2
-
3
- module Erb
4
- module Generators
5
- class CellGenerator < ::Cells::Generators::ViewGenerator
6
-
7
- source_root File.expand_path('../../templates', __FILE__)
8
-
9
- private
10
- def handler
11
- :erb
12
- end
13
- end
14
- end
15
- end
@@ -1,17 +0,0 @@
1
- require 'generators/trailblazer/view_generator'
2
-
3
- module Erb
4
- module Generators
5
- class ConceptGenerator < ::Trailblazer::Generators::ViewGenerator
6
-
7
- source_root File.expand_path('../../templates/concept', __FILE__)
8
-
9
- private
10
- def handler
11
- :erb
12
- end
13
- end
14
- end
15
- end
16
-
17
-
@@ -1,17 +0,0 @@
1
- require 'generators/cells/view_generator'
2
-
3
- module Haml
4
- module Generators
5
- class CellGenerator < ::Cells::Generators::ViewGenerator
6
-
7
- source_root File.expand_path('../../templates', __FILE__)
8
-
9
- private
10
- def handler
11
- :haml
12
- end
13
- end
14
- end
15
- end
16
-
17
-
@@ -1,17 +0,0 @@
1
- require 'generators/trailblazer/view_generator'
2
-
3
- module Haml
4
- module Generators
5
- class ConceptGenerator < ::Trailblazer::Generators::ViewGenerator
6
-
7
- source_root File.expand_path('../../templates/concept', __FILE__)
8
-
9
- private
10
- def handler
11
- :haml
12
- end
13
- end
14
- end
15
- end
16
-
17
-
@@ -1,16 +0,0 @@
1
- require 'generators/cells/base'
2
-
3
- module Rails
4
- module Generators
5
- class CellGenerator < ::Cells::Generators::Base
6
- source_root File.expand_path('../../templates', __FILE__)
7
-
8
- def create_cell_file
9
- template 'cell.rb', "#{base_path}_cell.rb"
10
- end
11
-
12
- hook_for(:template_engine)
13
- hook_for(:test_framework)
14
- end
15
- end
16
- end
@@ -1,16 +0,0 @@
1
- require 'generators/trailblazer/base'
2
-
3
- module Rails
4
- module Generators
5
- class ConceptGenerator < ::Trailblazer::Generators::Cell
6
- source_root File.expand_path('../../templates/concept', __FILE__)
7
-
8
- def create_cell_file
9
- template 'cell.rb', "#{base_path}/cell.rb"
10
- end
11
-
12
- hook_for(:template_engine)
13
- hook_for(:test_framework)
14
- end
15
- end
16
- end
@@ -1,17 +0,0 @@
1
- require 'generators/cells/view_generator'
2
-
3
- module Slim
4
- module Generators
5
- class CellGenerator < ::Cells::Generators::ViewGenerator
6
-
7
- source_root File.expand_path('../../templates', __FILE__)
8
-
9
- private
10
- def handler
11
- :slim
12
- end
13
- end
14
- end
15
- end
16
-
17
-
@@ -1,9 +0,0 @@
1
- class <%= class_name %>Cell < <%= options.base_cell_class %>
2
-
3
- <% for action in actions -%>
4
- def <%= action %>
5
- render
6
- end
7
-
8
- <% end -%>
9
- end
@@ -1,4 +0,0 @@
1
- h1
2
- |<%= class_name %>#<%= @state %>
3
- p
4
- |Find me in <%= @path %>
@@ -1,14 +0,0 @@
1
- require 'generators/cells/base'
2
-
3
- module TestUnit
4
- module Generators
5
- class CellGenerator < ::Cells::Generators::Base
6
- source_root File.expand_path('../../templates', __FILE__)
7
-
8
- def create_test
9
- @states = actions
10
- template 'cell_test.rb', File.join('test/cells/', class_path, "#{file_name}_cell_test.rb")
11
- end
12
- end
13
- end
14
- end
@@ -1,21 +0,0 @@
1
- require 'rails/generators'
2
- require 'rails/generators/named_base'
3
-
4
- module Trailblazer
5
- module Generators
6
- class Cell < ::Rails::Generators::NamedBase
7
- class_option :template_engine
8
- class_option :test_framework
9
- class_option :base_cell_class, :type => :string, :default => "Cell::Rails"
10
- class_option :base_cell_path
11
-
12
- argument :actions, :type => :array, :default => [:show], :banner => "action action"
13
-
14
- private
15
- def base_path
16
- path = (options[:base_cell_path] || 'app/concepts').to_s
17
- File.join(path, class_path, file_name)
18
- end
19
- end
20
- end
21
- end
@@ -1,18 +0,0 @@
1
- module Trailblazer
2
- module Generators
3
- class ViewGenerator < Cell # Trailblazer::Generators::Cell
4
- def create_views
5
- for state in actions do
6
- @state = state
7
- @path = File.join(base_path, "views/#{state}.#{handler}") #base_path defined in Cells::Generators::Base.
8
- template "view.#{handler}", @path
9
- end
10
- end
11
-
12
- private
13
- def handler
14
- raise "Please implement #handler in your view generator and return something like `:erb`."
15
- end
16
- end
17
- end
18
- end
@@ -1 +0,0 @@
1
- %h3= @title
@@ -1,2 +0,0 @@
1
- class BadGuitaristCell < BassistCell
2
- end
@@ -1 +0,0 @@
1
- <%= "Ahem" * times %>
@@ -1 +0,0 @@
1
- Dumm <%= render :partial => @partial %>
@@ -1 +0,0 @@
1
- <%= form_tag "musician/index" %>
@@ -1,3 +0,0 @@
1
- <%= form_for FormsTest::Song.new, :url => "/songs" do |f| %>
2
- <%= f.text_field :name %>
3
- <% end %>
@@ -1,2 +0,0 @@
1
- = form_for FormsTest::Song.new, :url => "/songs" do |f|
2
- = f.text_field :name
@@ -1,3 +0,0 @@
1
- <% @chords.each do |chord| %>
2
- <%= render :state => :sing %>
3
- <% end %>
@@ -1 +0,0 @@
1
- alert("Doo");
@@ -1 +0,0 @@
1
- Come and <%= params[:what] %> me!
@@ -1 +0,0 @@
1
- Find me at <%= link_to "vd.com", musicians_path %>
@@ -1 +0,0 @@
1
- That's me, naked <%= image_tag "me.png" %>
@@ -1 +0,0 @@
1
- *shouts* <%= @words %>
@@ -1 +0,0 @@
1
- %h1 Laaa
@@ -1 +0,0 @@
1
- Boing in <%= @note %>
@@ -1,25 +0,0 @@
1
- class BassistCell < Cell::Rails
2
- def play
3
- render
4
- end
5
-
6
- def shout(args)
7
- @words = args[:words]
8
- render
9
- end
10
-
11
- def provoke
12
- controller.config.relative_url_root = "" if Cell.rails_version.~ 3.0
13
-
14
- render
15
- end
16
-
17
- def promote
18
- render
19
- end
20
-
21
- def slap
22
- @note = "D"
23
- render
24
- end
25
- end
@@ -1,2 +0,0 @@
1
- module ClubSecurity
2
- end
@@ -1 +0,0 @@
1
- <%= respond_to?(:irritate) %> <%= respond_to?(:smile) %>
@@ -1,6 +0,0 @@
1
- class ClubSecurity::GuardCell < Cell::Rails
2
- helper do
3
- def irritate; end
4
- end
5
- def help; render; end
6
- end
@@ -1 +0,0 @@
1
- <%= respond_to?(:irritate) %> <%= respond_to?(:smile) %>
@@ -1,8 +0,0 @@
1
- class ClubSecurity::MedicCell < Cell::Rails
2
- module NiceGuy
3
- def smile; end
4
- end
5
-
6
- helper NiceGuy
7
- def help; render; end
8
- end
@@ -1 +0,0 @@
1
- <b><%= yield %></b>
@@ -1 +0,0 @@
1
- Metal:<%= @content_for_layout %>
@@ -1,5 +0,0 @@
1
- <%= form_for @fruit do |f| %>
2
- <%= f.text_field :title %>
3
- <%= f.button :submit %>
4
- <% end %>
5
- <%= url_for(:host => "apotomo.de") %>
@@ -1 +0,0 @@
1
- AAAaaargh!
@@ -1,7 +0,0 @@
1
- %h1 Dashboard
2
-
3
- = SongCell::Lyrics.new(controller, :song => song, :phrases => ["In the Mirror", "I can see"]).show
4
-
5
- = SongCell::PlaysCell.new(controller, :song => song).call
6
-
7
- = cell("song_cell/plays").call
@@ -1 +0,0 @@
1
- %h3 #{title}
@@ -1 +0,0 @@
1
- %li #{render :title}
@@ -1,6 +0,0 @@
1
- -# notice how we use title from the superclass here.
2
- %h3 Lyrics for #{title}
3
-
4
- - phrases.each do |ln|
5
- %li
6
- = ln
@@ -1 +0,0 @@
1
- Plays: 99
@@ -1 +0,0 @@
1
- A Minor!
@@ -1,3 +0,0 @@
1
- %h1 #{title}
2
-
3
- = link_to "Permalink", song
@@ -1 +0,0 @@
1
- = title
@@ -1 +0,0 @@
1
- Find me at <%= link_to "vd.com", musicians_url %>
@@ -1,8 +0,0 @@
1
- class TrumpeterCell < Cell::Rails
2
- include ActionController::UrlFor
3
-
4
- def promote
5
- render
6
- end
7
-
8
- end
@@ -1,7 +0,0 @@
1
- %h1 "Comments from #{link_to title, Musician.new}"
2
-
3
- = local
4
-
5
- =# form
6
-
7
- =# comment.created_at