fortitude 0.0.1

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 (332) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.rspec-local +4 -0
  4. data/.travis.yml +26 -0
  5. data/Gemfile +5 -0
  6. data/LICENSE.txt +22 -0
  7. data/README-erector.md +246 -0
  8. data/README.md +15 -0
  9. data/Rakefile +67 -0
  10. data/ext/FortitudeJrubyNativeExtService.java +11 -0
  11. data/ext/com/fortituderuby/ext/fortitude/FortitudeNativeLibrary.java +223 -0
  12. data/ext/fortitude_native_ext/extconf.rb +4 -0
  13. data/ext/fortitude_native_ext/fortitude_native_ext.c +333 -0
  14. data/fortitude.gemspec +37 -0
  15. data/lib/fortitude/assign_locals_from_template.rb.smpl +22 -0
  16. data/lib/fortitude/assigns_proxy.rb +75 -0
  17. data/lib/fortitude/class_inheritable_attributes.rb +96 -0
  18. data/lib/fortitude/doctypes/base.rb +38 -0
  19. data/lib/fortitude/doctypes/html4.rb +20 -0
  20. data/lib/fortitude/doctypes/html4_frameset.rb +18 -0
  21. data/lib/fortitude/doctypes/html4_strict.rb +17 -0
  22. data/lib/fortitude/doctypes/html4_tags_frameset.rb +52 -0
  23. data/lib/fortitude/doctypes/html4_tags_strict.rb +273 -0
  24. data/lib/fortitude/doctypes/html4_tags_transitional.rb +114 -0
  25. data/lib/fortitude/doctypes/html4_transitional.rb +18 -0
  26. data/lib/fortitude/doctypes/html5.rb +372 -0
  27. data/lib/fortitude/doctypes/unknown_doctype.rb +19 -0
  28. data/lib/fortitude/doctypes/xhtml10.rb +19 -0
  29. data/lib/fortitude/doctypes/xhtml10_frameset.rb +17 -0
  30. data/lib/fortitude/doctypes/xhtml10_strict.rb +17 -0
  31. data/lib/fortitude/doctypes/xhtml10_transitional.rb +17 -0
  32. data/lib/fortitude/doctypes/xhtml11.rb +29 -0
  33. data/lib/fortitude/doctypes.rb +46 -0
  34. data/lib/fortitude/errors.rb +153 -0
  35. data/lib/fortitude/fortitude_ruby_ext.rb +71 -0
  36. data/lib/fortitude/instance_variable_set.rb +74 -0
  37. data/lib/fortitude/need_assignment_template.rb.smpl +16 -0
  38. data/lib/fortitude/need_method_template.rb.smpl +4 -0
  39. data/lib/fortitude/non_rails_widget_methods.rb +15 -0
  40. data/lib/fortitude/partial_tag_placeholder.rb +17 -0
  41. data/lib/fortitude/rails/helpers.rb +153 -0
  42. data/lib/fortitude/rails/renderer.rb +43 -0
  43. data/lib/fortitude/rails/template_handler.rb +23 -0
  44. data/lib/fortitude/rails/widget_methods.rb +17 -0
  45. data/lib/fortitude/rails/yielded_object_outputter.rb +31 -0
  46. data/lib/fortitude/railtie.rb +254 -0
  47. data/lib/fortitude/rendering_context.rb +205 -0
  48. data/lib/fortitude/simple_template.rb +45 -0
  49. data/lib/fortitude/staticized_method.rb +85 -0
  50. data/lib/fortitude/tag.rb +162 -0
  51. data/lib/fortitude/tag_method_template.rb.smpl +68 -0
  52. data/lib/fortitude/tag_return_value.rb +11 -0
  53. data/lib/fortitude/tag_store.rb +48 -0
  54. data/lib/fortitude/tag_support.rb +48 -0
  55. data/lib/fortitude/tags_module.rb +14 -0
  56. data/lib/fortitude/text_method_template.rb.smpl +17 -0
  57. data/lib/fortitude/tilt/fortitude_template.rb +169 -0
  58. data/lib/fortitude/version.rb +3 -0
  59. data/lib/fortitude/widget.rb +904 -0
  60. data/lib/fortitude/widgets/html4_frameset.rb +9 -0
  61. data/lib/fortitude/widgets/html4_strict.rb +9 -0
  62. data/lib/fortitude/widgets/html4_transitional.rb +9 -0
  63. data/lib/fortitude/widgets/html5.rb +9 -0
  64. data/lib/fortitude/widgets/xhtml10_frameset.rb +9 -0
  65. data/lib/fortitude/widgets/xhtml10_strict.rb +9 -0
  66. data/lib/fortitude/widgets/xhtml10_transitional.rb +9 -0
  67. data/lib/fortitude/widgets/xhtml11.rb +9 -0
  68. data/lib/fortitude.rb +93 -0
  69. data/lib/fortitude_jruby_native_ext.jar +0 -0
  70. data/spec/helpers/global_helper.rb +8 -0
  71. data/spec/helpers/rails_helpers.rb +85 -0
  72. data/spec/helpers/rails_server.rb +386 -0
  73. data/spec/helpers/system_helpers.rb +117 -0
  74. data/spec/rails/basic_rails_system_spec.rb +7 -0
  75. data/spec/rails/capture_system_spec.rb +75 -0
  76. data/spec/rails/class_loading_system_spec.rb +63 -0
  77. data/spec/rails/complex_helpers_system_spec.rb +33 -0
  78. data/spec/rails/data_passing_system_spec.rb +96 -0
  79. data/spec/rails/default_layout_system_spec.rb +15 -0
  80. data/spec/rails/development_mode_system_spec.rb +67 -0
  81. data/spec/rails/erb_integration_system_spec.rb +23 -0
  82. data/spec/rails/helpers_include_all_off_system_spec.rb +7 -0
  83. data/spec/rails/helpers_system_spec.rb +79 -0
  84. data/spec/rails/helpers_unrefined_system_spec.rb +7 -0
  85. data/spec/rails/layouts_system_spec.rb +60 -0
  86. data/spec/rails/localization_system_spec.rb +38 -0
  87. data/spec/rails/production_mode_system_spec.rb +13 -0
  88. data/spec/rails/rendering_context_system_spec.rb +64 -0
  89. data/spec/rails/rendering_system_spec.rb +158 -0
  90. data/spec/rails/rules_system_spec.rb +23 -0
  91. data/spec/rails/static_method_system_spec.rb +12 -0
  92. data/spec/rails/templates/base/app/controllers/application_controller.rb +15 -0
  93. data/spec/rails/templates/base/app/controllers/working_controller.rb +5 -0
  94. data/spec/rails/templates/base/app/views/layouts/application.html.erb +11 -0
  95. data/spec/rails/templates/base/config/routes.rb +4 -0
  96. data/spec/rails/templates/base/config/secrets.yml +22 -0
  97. data/spec/rails/templates/basic_rails_system_spec/app/controllers/basic_rails_system_spec_controller.rb +8 -0
  98. data/spec/rails/templates/basic_rails_system_spec/app/views/basic_rails_system_spec/trivial_widget.rb +5 -0
  99. data/spec/rails/templates/capture_system_spec/app/controllers/capture_system_spec_controller.rb +37 -0
  100. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/_some_erb_partial.html.erb +1 -0
  101. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/another_widget.rb +7 -0
  102. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/capture_erb_from_widget.rb +11 -0
  103. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/capture_widget_from_erb.html.erb +9 -0
  104. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/capture_widget_from_widget.rb +17 -0
  105. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/some_widget.rb +5 -0
  106. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/widget_content_for.rb +19 -0
  107. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/widget_layout_needing_content_yield_with_erb.html.erb +13 -0
  108. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/widget_provide.rb +13 -0
  109. data/spec/rails/templates/capture_system_spec/app/views/layouts/erb_layout_needing_content.html.erb +15 -0
  110. data/spec/rails/templates/capture_system_spec/app/views/layouts/widget_layout_needing_content_content_for.rb +23 -0
  111. data/spec/rails/templates/capture_system_spec/app/views/layouts/widget_layout_needing_content_yield.rb +23 -0
  112. data/spec/rails/templates/class_loading_system_spec/app/controllers/class_loading_system_spec_controller.rb +74 -0
  113. data/spec/rails/templates/class_loading_system_spec/app/models/views/app_models_helper.rb +5 -0
  114. data/spec/rails/templates/class_loading_system_spec/app/models/views/models_widget.rb +5 -0
  115. data/spec/rails/templates/class_loading_system_spec/app/views/autoload_namespace/autoload_widget.rb +11 -0
  116. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/_loaded_underscore_widget.rb +11 -0
  117. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/_underscore_view.rb +5 -0
  118. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/_underscore_widget.rb +11 -0
  119. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/app_models.rb +6 -0
  120. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/autoload_one_widget_from_another.rb +7 -0
  121. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/class_should_not_load.rb +9 -0
  122. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/lib_views.rb +8 -0
  123. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/use_lib_widget_from_view_widget.rb +9 -0
  124. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/use_models_widget_from_view_widget.rb +7 -0
  125. data/spec/rails/templates/class_loading_system_spec/app/views/some_namespace/some_other_namespace/.git_keep +0 -0
  126. data/spec/rails/templates/class_loading_system_spec/app/views/sub_widget.rb +5 -0
  127. data/spec/rails/templates/class_loading_system_spec/lib/arbitrary_name/some_widget.rb +7 -0
  128. data/spec/rails/templates/class_loading_system_spec/lib/views/class_loading_system_spec/lib_views_helper.rb +5 -0
  129. data/spec/rails/templates/class_loading_system_spec/lib/views/class_loading_system_spec/widget_defined_outside_app_views.rb +5 -0
  130. data/spec/rails/templates/class_loading_system_spec/lib/views/lib_widget.rb +5 -0
  131. data/spec/rails/templates/complex_helpers_system_spec/app/controllers/complex_helpers_system_spec_controller.rb +14 -0
  132. data/spec/rails/templates/complex_helpers_system_spec/app/views/complex_helpers_system_spec/cache_test.rb +12 -0
  133. data/spec/rails/templates/complex_helpers_system_spec/app/views/complex_helpers_system_spec/fields_for_test.rb +14 -0
  134. data/spec/rails/templates/complex_helpers_system_spec/app/views/complex_helpers_system_spec/form_for_test.rb +14 -0
  135. data/spec/rails/templates/complex_helpers_system_spec/config/environments/development.rb +31 -0
  136. data/spec/rails/templates/data_passing_system_spec/app/controllers/data_passing_system_spec_controller.rb +101 -0
  137. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/_erb_to_parallel_widget_handoff_erb.html.erb +3 -0
  138. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/_implicit_erb_to_widget_handoff_erb.html.erb +3 -0
  139. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/_implicit_variable_write_erb.html.erb +1 -0
  140. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/_widget_to_parallel_erb_handoff_erb.html.erb +1 -0
  141. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/erb_copied_variables.html.erb +1 -0
  142. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/erb_to_parallel_widget_handoff.html.erb +2 -0
  143. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/erb_to_parallel_widget_handoff_widget.rb +5 -0
  144. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/explicit_controller_variable_read.rb +6 -0
  145. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/extra_variables.rb +23 -0
  146. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/extra_variables_requested.rb +24 -0
  147. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_erb_to_widget_handoff.html.erb +2 -0
  148. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_erb_to_widget_handoff_widget.rb +7 -0
  149. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access.rb +5 -0
  150. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inheritance.rb +6 -0
  151. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inheritance_child_one.rb +7 -0
  152. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inheritance_child_two.rb +5 -0
  153. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inheritance_parent.rb +3 -0
  154. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inner.rb +8 -0
  155. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_variable_read.rb +5 -0
  156. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_variable_read_inner.rb +7 -0
  157. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_variable_write.html.erb +2 -0
  158. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_variable_write_widget.rb +7 -0
  159. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/parent_to_child_passing.rb +7 -0
  160. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/parent_to_child_passing_child.rb +7 -0
  161. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/parent_to_child_passing_partial.rb +7 -0
  162. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/parent_to_child_passing_partial_child.rb +7 -0
  163. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/passing_data_widget.rb +8 -0
  164. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/passing_locals_and_controller_variables_widget.rb +9 -0
  165. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/passing_locals_widget.rb +8 -0
  166. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/variables_to_layout.rb +7 -0
  167. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/widget_copied_variables.rb +9 -0
  168. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/widget_to_parallel_erb_handoff.html.erb +2 -0
  169. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/widget_to_parallel_erb_handoff_widget.rb +5 -0
  170. data/spec/rails/templates/data_passing_system_spec/app/views/layouts/data_layout.rb +14 -0
  171. data/spec/rails/templates/default_layout_system_spec/app/controllers/default_layout_system_spec_controller.rb +9 -0
  172. data/spec/rails/templates/default_layout_system_spec/app/views/default_layout_system_spec/erb_with_widget_default_layout.html.erb +1 -0
  173. data/spec/rails/templates/default_layout_system_spec/app/views/default_layout_system_spec/widget_with_widget_default_layout.rb +5 -0
  174. data/spec/rails/templates/default_layout_system_spec/app/views/layouts/application.rb +12 -0
  175. data/spec/rails/templates/development_mode_system_spec/app/controllers/development_mode_system_spec_controller.rb +9 -0
  176. data/spec/rails/templates/development_mode_system_spec/app/views/development_mode_system_spec/reload_widget.rb +7 -0
  177. data/spec/rails/templates/development_mode_system_spec/app/views/development_mode_system_spec/sample_output.rb +9 -0
  178. data/spec/rails/templates/erb_integration_system_spec/app/controllers/erb_integration_system_spec_controller.rb +10 -0
  179. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/_erb_partial_from_widget_partial.html.erb +1 -0
  180. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/_fortitude_partial_with_underscore_partial.rb +5 -0
  181. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/_prefers_erb_partial_partial.html.erb +1 -0
  182. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/erb_partial_from_widget.rb +7 -0
  183. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/erb_to_widget_with_render_partial.html.erb +3 -0
  184. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/erb_to_widget_with_render_partial_widget.rb +5 -0
  185. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/fortitude_partial_with_underscore.html.erb +3 -0
  186. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/prefers_erb_partial.html.erb +3 -0
  187. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/prefers_erb_partial_partial.rb +5 -0
  188. data/spec/rails/templates/helpers_include_all_off_system_spec/app/controllers/helpers_include_all_off_system_spec_controller.rb +13 -0
  189. data/spec/rails/templates/helpers_include_all_off_system_spec/app/helpers/application_helper.rb +5 -0
  190. data/spec/rails/templates/helpers_include_all_off_system_spec/app/helpers/some_helper.rb +5 -0
  191. data/spec/rails/templates/helpers_include_all_off_system_spec/app/views/helpers_include_all_off_system_spec/include_all_off.rb +23 -0
  192. data/spec/rails/templates/helpers_include_all_off_system_spec/config/application.rb +28 -0
  193. data/spec/rails/templates/helpers_system_spec/app/controllers/helpers_system_spec_controller.rb +86 -0
  194. data/spec/rails/templates/helpers_system_spec/app/helpers/some_helper.rb +21 -0
  195. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_disabled.rb +37 -0
  196. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_inheritance.rb +6 -0
  197. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_inheritance_child_one.rb +34 -0
  198. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_inheritance_child_two.rb +36 -0
  199. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_inheritance_parent.rb +4 -0
  200. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/basic_helpers.rb +13 -0
  201. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/block_helpers.rb +7 -0
  202. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/built_in_outputting_helpers.rb +13 -0
  203. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/built_in_outputting_to_returning.rb +8 -0
  204. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/built_in_returning_to_outputting.rb +10 -0
  205. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/controller_helper_method.rb +5 -0
  206. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/controller_helper_module.rb +5 -0
  207. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_helper_outputs.rb +6 -0
  208. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_helpers_basic.rb +5 -0
  209. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_helpers_with_a_block.rb +6 -0
  210. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_outputting_to_returning.rb +7 -0
  211. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_returning_to_outputting.rb +10 -0
  212. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/helper_settings_inheritance.rb +10 -0
  213. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/helper_settings_inheritance_parent.rb +4 -0
  214. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/helpers_that_output_when_refined.rb +9 -0
  215. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/private_helper_erb.html.erb +1 -0
  216. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/private_helper_fortitude.rb +5 -0
  217. data/spec/rails/templates/helpers_system_spec/lib/some_stuff.rb +5 -0
  218. data/spec/rails/templates/helpers_unrefined_system_spec/app/controllers/helpers_unrefined_system_spec_controller.rb +7 -0
  219. data/spec/rails/templates/helpers_unrefined_system_spec/app/views/helpers_unrefined_system_spec/helpers_that_output_when_refined.rb +9 -0
  220. data/spec/rails/templates/helpers_unrefined_system_spec/config/environments/production.rb +31 -0
  221. data/spec/rails/templates/layouts_system_spec/app/controllers/layouts_system_spec_controller.rb +31 -0
  222. data/spec/rails/templates/layouts_system_spec/app/views/layouts/alternate.html.erb +11 -0
  223. data/spec/rails/templates/layouts_system_spec/app/views/layouts/application.html.erb +26 -0
  224. data/spec/rails/templates/layouts_system_spec/app/views/layouts/explicit_yield.rb +12 -0
  225. data/spec/rails/templates/layouts_system_spec/app/views/layouts/widget_layout.rb +22 -0
  226. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/erb_inside_widget_layout.html.erb +8 -0
  227. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/the_render_widget.rb +5 -0
  228. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/widget_inside_erb_layout.rb +8 -0
  229. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/widget_inside_widget_layout.rb +8 -0
  230. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/yield_from_widget_explicitly.rb +5 -0
  231. data/spec/rails/templates/localization_system_spec/app/controllers/localization_system_spec_controller.rb +31 -0
  232. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/content_method.rb +13 -0
  233. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/dot_notation.rb +5 -0
  234. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/explicit_html.rb +13 -0
  235. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/i18n_t.rb +5 -0
  236. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/native_support.rb +7 -0
  237. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/readjust_base.rb +7 -0
  238. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/t.rb +5 -0
  239. data/spec/rails/templates/localization_system_spec/config/locales/en.yml +21 -0
  240. data/spec/rails/templates/localization_system_spec/config/locales/fr.yml +14 -0
  241. data/spec/rails/templates/localization_system_spec/config/locales/pt.yml +2 -0
  242. data/spec/rails/templates/production_mode_system_spec/app/controllers/production_mode_system_spec_controller.rb +5 -0
  243. data/spec/rails/templates/production_mode_system_spec/app/views/production_mode_system_spec/sample_output.rb +9 -0
  244. data/spec/rails/templates/rendering_context_system_spec/app/controllers/rendering_context_system_spec_controller.rb +72 -0
  245. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/_start_end_widget_through_partials_partial.html.erb +1 -0
  246. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/_uses_direct_context_for_all_widgets_partial.html.erb +1 -0
  247. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/_uses_specified_context_through_nesting_partial.html.erb +2 -0
  248. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/render_widget.rb +5 -0
  249. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_basic.rb +12 -0
  250. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_basic_inner.rb +7 -0
  251. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_through_partials.rb +16 -0
  252. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_through_partials_partial_widget.rb +7 -0
  253. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_direct_context_for_all_widgets.rb +7 -0
  254. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_direct_context_for_all_widgets_widget.rb +5 -0
  255. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_direct_context_in_view.rb +5 -0
  256. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_in_partials.html.erb +3 -0
  257. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_in_partials_partial.rb +5 -0
  258. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_in_view.rb +5 -0
  259. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_through_nesting.rb +6 -0
  260. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_through_nesting_inner_partial.rb +5 -0
  261. data/spec/rails/templates/rendering_context_system_spec/lib/simple_rc.rb +17 -0
  262. data/spec/rails/templates/rendering_system_spec/app/controllers/rendering_system_spec_controller.rb +111 -0
  263. data/spec/rails/templates/rendering_system_spec/app/views/layouts/application.html.erb +19 -0
  264. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/_layout_for_partial.html.erb +3 -0
  265. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/_the_partial.html.erb +1 -0
  266. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/partial_with_layout.rb +5 -0
  267. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_collection.html.erb +3 -0
  268. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_collection_as.html.erb +3 -0
  269. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_file_from_widget.rb +7 -0
  270. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_html_safe_strings.rb +16 -0
  271. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_inline_from_widget.rb +11 -0
  272. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_object.html.erb +3 -0
  273. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_partial_from_widget.rb +7 -0
  274. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_partial_with_layout.html.erb +3 -0
  275. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_partial_with_widget_layout.html.erb +3 -0
  276. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_template_from_widget.rb +7 -0
  277. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_text_from_widget.rb +7 -0
  278. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/stream_widget.rb +13 -0
  279. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/trivial_widget.rb +5 -0
  280. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/widget_layout_for_partial.rb +7 -0
  281. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/widget_with_name.rb +7 -0
  282. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/word.rb +7 -0
  283. data/spec/rails/templates/rendering_system_spec/app/views/widget_to_render.rb +7 -0
  284. data/spec/rails/templates/rules_system_spec/app/controllers/rules_system_spec_controller.rb +22 -0
  285. data/spec/rails/templates/rules_system_spec/app/views/layouts/fortitude_layout_with_p.rb +19 -0
  286. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/_intervening_partial_erb_partial.html.erb +1 -0
  287. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/intervening_partial.rb +9 -0
  288. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/intervening_partial_fortitude_partial.rb +9 -0
  289. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalid_start_tag_in_partial.html.erb +3 -0
  290. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalid_start_tag_in_partial_partial.rb +9 -0
  291. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalid_start_tag_in_view.rb +9 -0
  292. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalidly_nested_tag.rb +11 -0
  293. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalidly_nested_tag_in_partial.html.erb +3 -0
  294. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalidly_nested_tag_in_partial_partial.rb +11 -0
  295. data/spec/rails/templates/static_method_system_spec/app/controllers/static_method_system_spec_controller.rb +15 -0
  296. data/spec/rails/templates/static_method_system_spec/app/helpers/some_helper.rb +10 -0
  297. data/spec/rails/templates/static_method_system_spec/app/views/static_method_system_spec/allows_helper_access.rb +8 -0
  298. data/spec/rails/templates/static_method_system_spec/app/views/static_method_system_spec/localization.rb +7 -0
  299. data/spec/rails/templates/static_method_system_spec/config/locales/en.yml +4 -0
  300. data/spec/rails/templates/static_method_system_spec/config/locales/fr.yml +4 -0
  301. data/spec/system/around_content_system_spec.rb +399 -0
  302. data/spec/system/assigns_system_spec.rb +316 -0
  303. data/spec/system/attribute_rules_system_spec.rb +227 -0
  304. data/spec/system/basic_system_spec.rb +9 -0
  305. data/spec/system/content_inheritance_system_spec.rb +13 -0
  306. data/spec/system/convenience_methods_system_spec.rb +30 -0
  307. data/spec/system/doctypes_system_spec.rb +213 -0
  308. data/spec/system/erector_compatibility_system_spec.rb +84 -0
  309. data/spec/system/escaping_system_spec.rb +43 -0
  310. data/spec/system/formatting_system_spec.rb +63 -0
  311. data/spec/system/helpers_system_spec.rb +235 -0
  312. data/spec/system/id_uniqueness_system_spec.rb +205 -0
  313. data/spec/system/localization_system_spec.rb +94 -0
  314. data/spec/system/method_precedence_system_spec.rb +48 -0
  315. data/spec/system/needs_system_spec.rb +368 -0
  316. data/spec/system/other_outputters_system_spec.rb +117 -0
  317. data/spec/system/rails_not_available_spec.rb +11 -0
  318. data/spec/system/rebuild_notifications_system_spec.rb +208 -0
  319. data/spec/system/rendering_context_system_spec.rb +83 -0
  320. data/spec/system/setting_inheritance_system_spec.rb +585 -0
  321. data/spec/system/shared_variable_system_spec.rb +120 -0
  322. data/spec/system/start_end_comments_system_spec.rb +363 -0
  323. data/spec/system/static_method_system_spec.rb +348 -0
  324. data/spec/system/tag_rendering_system_spec.rb +253 -0
  325. data/spec/system/tag_return_value_system_spec.rb +41 -0
  326. data/spec/system/tag_rules_system_spec.rb +196 -0
  327. data/spec/system/tag_updating_system_spec.rb +171 -0
  328. data/spec/system/tilt_system_spec.rb +378 -0
  329. data/spec/system/unparsed_data_system_spec.rb +16 -0
  330. data/spec/system/void_tags_system_spec.rb +51 -0
  331. data/spec/system/widget_return_values_system_spec.rb +89 -0
  332. metadata +736 -0
@@ -0,0 +1,363 @@
1
+ describe "Fortitude start/end comments support", :type => :system do
2
+ def eb(widget_class, expected_depth = 0)
3
+ "BEGIN #{widget_class.name} depth #{expected_depth}"
4
+ end
5
+
6
+ def ee(widget_class, expected_depth = 0)
7
+ "END #{widget_class.name} depth #{expected_depth}"
8
+ end
9
+
10
+ it "should not add comments by default" do
11
+ wc = widget_class do
12
+ def content
13
+ p "hi!"
14
+ end
15
+ end
16
+
17
+ expect(render(wc)).to eq("<p>hi!</p>")
18
+ end
19
+
20
+ it "should add comments if asked to" do
21
+ wc = widget_class do
22
+ start_and_end_comments true
23
+
24
+ def content
25
+ p "hi!"
26
+ end
27
+ end
28
+
29
+ expect(render(wc)).to eq("<!-- #{eb(wc)} --><p>hi!</p><!-- #{ee(wc)} -->")
30
+ end
31
+
32
+ it "should add passed assigns, including defaults" do
33
+ wc = widget_class do
34
+ start_and_end_comments true
35
+
36
+ needs :foo, :bar => nil, :baz => 'def_baz', :quux => 'the_quux'
37
+
38
+ def content
39
+ p "hi"
40
+ end
41
+ end
42
+
43
+ result = render(wc.new(:foo => 'the_foo', :bar => /whatever/i, :quux => 'the_quux'))
44
+ expect(result).to match(%r{^<!-- #{eb(wc)}: })
45
+ expect(result).to match(%r{:foo => \"the_foo\"})
46
+ expect(result).to match(%r{:bar => /whatever/i})
47
+ expect(result).to match(%r{:baz => \(DEFAULT\) \"def_baz\"})
48
+ expect(result).to match(%r{:quux => \"the_quux\"})
49
+ expect(result).to match(%r{ --><p>hi</p><!-- #{ee(wc)} -->$})
50
+ end
51
+
52
+ it "should not display extra assigns if we're not using them" do
53
+ wc = widget_class do
54
+ needs :foo
55
+ start_and_end_comments true
56
+
57
+ def content
58
+ p "hi"
59
+ end
60
+ end
61
+
62
+ expect(render(wc.new(:foo => 'bar', :bar => 'baz'))).to eq("<!-- #{eb(wc)}: " +
63
+ ":foo => \"bar\" --><p>hi</p><!-- #{ee(wc)} -->")
64
+ end
65
+
66
+ it "should display extra assigns if we're using them" do
67
+ wc = widget_class do
68
+ needs :foo
69
+ start_and_end_comments true
70
+ extra_assigns :use
71
+
72
+ def content
73
+ p "hi"
74
+ end
75
+ end
76
+
77
+ result = render(wc.new(:foo => 'bar', :bar => 'baz'))
78
+ expect(result).to match(%r{^<!-- #{eb(wc)}: })
79
+ expect(result).to match(%r{:foo => \"bar\"})
80
+ expect(result).to match(%r{:bar => \"baz\"})
81
+ expect(result).to match(%r{--><p>hi</p><!-- #{ee(wc)} -->})
82
+ end
83
+
84
+ it "should not display all of the text of long assigns" do
85
+ wc = widget_class do
86
+ needs :foo
87
+ start_and_end_comments true
88
+
89
+ def content
90
+ p "hi"
91
+ end
92
+ end
93
+
94
+ assigns = { :foo => "a" * 1000 }
95
+ text = render(wc.new(assigns))
96
+
97
+ expect(text).to match(%r{^<!-- #{eb(wc)}: :foo => \"aaaaa})
98
+ expect(text).to match(%r{aaa... --><p>hi</p><!-- #{ee(wc)} -->$})
99
+ expect(text.length).to be < 500
100
+ expect(text).not_to match("a" * 500)
101
+ end
102
+
103
+ it "should, by default, use #inspect, not #to_s, for assigns" do
104
+ obj = Object.new
105
+ class << obj
106
+ def to_s
107
+ "THIS IS TO_S"
108
+ end
109
+
110
+ def inspect
111
+ "THIS IS INSPECT"
112
+ end
113
+ end
114
+
115
+ wc = widget_class do
116
+ needs :foo
117
+ start_and_end_comments true
118
+
119
+ def content
120
+ p "hi"
121
+ end
122
+ end
123
+
124
+ expect(render(wc.new(:foo => obj))).to eq("<!-- #{eb(wc)}: " +
125
+ ":foo => THIS IS INSPECT --><p>hi</p><!-- #{ee(wc)} -->")
126
+ end
127
+
128
+ it "should allow overriding the text returned for assigns" do
129
+ obj = Object.new
130
+ class << obj
131
+ def to_s
132
+ "THIS IS TO_S"
133
+ end
134
+
135
+ def inspect
136
+ "THIS IS INSPECT"
137
+ end
138
+
139
+ def to_fortitude_comment_string
140
+ "THIS IS TO_FORTITUDE_COMMENT_STRING"
141
+ end
142
+ end
143
+
144
+ wc = widget_class do
145
+ needs :foo
146
+ start_and_end_comments true
147
+
148
+ def content
149
+ p "hi"
150
+ end
151
+ end
152
+
153
+ expect(render(wc.new(:foo => obj))).to eq("<!-- #{eb(wc)}: " +
154
+ ":foo => THIS IS TO_FORTITUDE_COMMENT_STRING --><p>hi</p><!-- #{ee(wc)} -->")
155
+ end
156
+
157
+ it "should order the comment text in whatever order the needs are declared" do
158
+ needed = [ ]
159
+ 5.times { needed << "need#{rand(1_000_000_000)}".to_sym }
160
+ needed = needed.shuffle
161
+
162
+ wc = widget_class do
163
+ start_and_end_comments true
164
+
165
+ def content
166
+ p "hi"
167
+ end
168
+ end
169
+
170
+ remaining_needed = needed.dup
171
+ while remaining_needed.length > 0
172
+ this_slice = remaining_needed.shift(rand(3))
173
+ wc.needs *this_slice
174
+ end
175
+
176
+ params = { }
177
+ needed.shuffle.each { |n| params[n] = "value-#{n}" }
178
+
179
+ text = render(wc.new(params))
180
+
181
+ expected_output = "<!-- #{eb(wc)}: "
182
+ expected_output << needed.map do |n|
183
+ ":#{n} => \"value-#{n}\""
184
+ end.join(", ")
185
+ expected_output << " --><p>hi</p><!-- #{ee(wc)} -->"
186
+ end
187
+
188
+ it "should display the depth at which a widget is being rendered" do
189
+ inner = widget_class do
190
+ start_and_end_comments true
191
+ def content
192
+ text "hi!"
193
+ end
194
+ end
195
+
196
+ middle = widget_class do
197
+ start_and_end_comments true
198
+ cattr_accessor :klass
199
+ def content
200
+ widget klass.new
201
+ end
202
+ end
203
+
204
+ outer = widget_class do
205
+ start_and_end_comments true
206
+ cattr_accessor :klass
207
+ def content
208
+ widget klass.new
209
+ end
210
+ end
211
+
212
+ outer.klass = middle
213
+ middle.klass = inner
214
+
215
+ expect(render(outer)).to eq(
216
+ "<!-- #{eb(outer, 0)} -->" +
217
+ "<!-- #{eb(middle, 1)} -->" +
218
+ "<!-- #{eb(inner, 2)} -->" +
219
+ "hi!" +
220
+ "<!-- #{ee(inner, 2)} -->" +
221
+ "<!-- #{ee(middle, 1)} -->" +
222
+ "<!-- #{ee(outer, 0)} -->")
223
+ end
224
+
225
+ it "should display the depth at which a widget is being rendered, even if outer widgets aren't rendering comments" do
226
+ inner = widget_class do
227
+ start_and_end_comments true
228
+ def content
229
+ text "hi!"
230
+ end
231
+ end
232
+
233
+ middle = widget_class do
234
+ cattr_accessor :klass
235
+ def content
236
+ widget klass.new
237
+ end
238
+ end
239
+
240
+ outer = widget_class do
241
+ cattr_accessor :klass
242
+ def content
243
+ widget klass.new
244
+ end
245
+ end
246
+
247
+ outer.klass = middle
248
+ middle.klass = inner
249
+
250
+ expect(render(outer)).to eq(
251
+ "<!-- #{eb(inner, 2)} -->" +
252
+ "hi!" +
253
+ "<!-- #{ee(inner, 2)} -->")
254
+ end
255
+
256
+ it "should put comments on their own lines if we're formatting output" do
257
+ wc = widget_class do
258
+ start_and_end_comments true
259
+ format_output true
260
+
261
+ def content
262
+ text "hi"
263
+ end
264
+ end
265
+
266
+ expect(render(wc)).to eq(%{<!-- #{eb(wc)} -->
267
+ hi
268
+ <!-- #{ee(wc)} -->})
269
+ end
270
+
271
+ it "should put comments on their own lines, nested inside another widget, if we're formatting output" do
272
+ outer = widget_class do
273
+ format_output true
274
+ cattr_accessor :klass
275
+
276
+ def content
277
+ div do
278
+ div do
279
+ widget klass.new
280
+ end
281
+ end
282
+ end
283
+ end
284
+
285
+ inner = widget_class do
286
+ start_and_end_comments true
287
+ format_output true
288
+
289
+ def content
290
+ text "hi"
291
+ end
292
+ end
293
+
294
+ outer.klass = inner
295
+ expect(render(outer)).to eq(%{<div>
296
+ <div>
297
+ <!-- #{eb(inner, 1)} -->
298
+ hi
299
+ <!-- #{ee(inner, 1)} -->
300
+ </div>
301
+ </div>})
302
+ end
303
+
304
+ it "should put assignments on their own lines, with indentation, if they're long enough and we're formatting output" do
305
+ outer = widget_class do
306
+ format_output true
307
+ cattr_accessor :klass
308
+
309
+ def content
310
+ div do
311
+ div do
312
+ widget klass.new(:foo => "a" * 1000, :bar => "b" * 1000)
313
+ end
314
+ end
315
+ end
316
+ end
317
+
318
+ inner = widget_class do
319
+ needs :foo, :bar
320
+ start_and_end_comments true
321
+ format_output true
322
+
323
+ def content
324
+ text "hi"
325
+ end
326
+ end
327
+
328
+ outer.klass = inner
329
+
330
+ result = render(outer)
331
+ expect(result).to match(%r{^<div>\n <div>\n <!-- #{eb(inner, 1)}:\n :}m)
332
+ expect(result).to match(%r{^ :foo => \"a{97}...\n})
333
+ expect(result).to match(%r{^ :bar => \"b{97}...\n})
334
+ expect(result).to match(%r{^ -->$})
335
+ expect(result).to match(%r{^ hi})
336
+ expect(result).to match(%r{^ <!-- #{ee(inner, 1)} -->\n </div>\n</div>$}m)
337
+ end
338
+
339
+ BAD_VALUES = [ ">foo", "fo -- bar", "--", "->bar", "baz-" ]
340
+
341
+ BAD_VALUES.each do |bad_value|
342
+ it "should escape any potentially invalid-comment text in assign values, like #{bad_value.inspect}" do
343
+ wc = widget_class do
344
+ needs :foo
345
+ start_and_end_comments true
346
+
347
+ def content
348
+ p "hi"
349
+ end
350
+ end
351
+
352
+ instance = wc.new(:foo => bad_value)
353
+ text = render(instance)
354
+ # expect(text).to match(%r{^<!-- #{eb(wc)}: :foo => (.*) --><p>hi</p><!-- #{ee(wc)} -->$})
355
+ if text =~ %r{^<!-- #{eb(wc)}: :foo => (.*) --><p>hi</p><!-- #{ee(wc)} -->$}
356
+ data = $1
357
+ expect(data).not_to match(/\-\-/)
358
+ else
359
+ raise "Text does not match: #{text.inspect}"
360
+ end
361
+ end
362
+ end
363
+ end
@@ -0,0 +1,348 @@
1
+ describe "Fortitude staticization behavior", :type => :system do
2
+ it "should allow making a method static, and it should not change behavior ever" do
3
+ $global_value = 12345
4
+ wc = widget_class do
5
+ def content
6
+ p :class => 'foo' do
7
+ text "bar: #{$global_value}"
8
+ end
9
+ p "baz"
10
+ end
11
+
12
+ static :content
13
+ end
14
+
15
+ expect(render(wc)).to eq('<p class="foo">bar: 12345</p><p>baz</p>')
16
+
17
+ $global_value = 23456
18
+ expect(render(wc)).to eq('<p class="foo">bar: 12345</p><p>baz</p>')
19
+ end
20
+
21
+ it "should allow making a method static twice, and it should not cause problems" do
22
+ $global_value = 12345
23
+ wc = widget_class do
24
+ def content
25
+ p :class => 'foo' do
26
+ text "bar: #{$global_value}"
27
+ end
28
+ p "baz"
29
+ end
30
+
31
+ static :content
32
+ static :content
33
+ end
34
+
35
+ expect(render(wc)).to eq('<p class="foo">bar: 12345</p><p>baz</p>')
36
+
37
+ $global_value = 23456
38
+ expect(render(wc)).to eq('<p class="foo">bar: 12345</p><p>baz</p>')
39
+ end
40
+
41
+ it "should update the static definition of a method if static is called again" do
42
+ $global_value = 12345
43
+ wc = widget_class do
44
+ def content
45
+ p :class => 'foo' do
46
+ text "bar: #{$global_value}"
47
+ end
48
+ p "baz"
49
+ end
50
+
51
+ static :content
52
+ end
53
+
54
+ expect(render(wc)).to eq('<p class="foo">bar: 12345</p><p>baz</p>')
55
+
56
+ $global_value = 23456
57
+ expect(render(wc)).to eq('<p class="foo">bar: 12345</p><p>baz</p>')
58
+ wc.class_eval { static :content }
59
+ expect(render(wc)).to eq('<p class="foo">bar: 23456</p><p>baz</p>')
60
+ $global_value = 34567
61
+ expect(render(wc)).to eq('<p class="foo">bar: 23456</p><p>baz</p>')
62
+ end
63
+
64
+ it "should allow you to yield from a method that's made static" do
65
+ $global_value = 12345
66
+ wc = widget_class do
67
+ def content
68
+ text "content before:#{$global_value}"
69
+ foo do
70
+ text "yield inside:#{$global_value}"
71
+ end
72
+ text "content after:#{$global_value}"
73
+ end
74
+
75
+ def foo
76
+ text "foo before:#{$global_value}"
77
+ yield
78
+ text "foo after:#{$global_value}"
79
+ end
80
+
81
+ static :foo
82
+ end
83
+
84
+ expect(render(wc)).to eq('content before:12345foo before:12345yield inside:12345foo after:12345content after:12345')
85
+
86
+ $global_value = 23456
87
+ expect(render(wc)).to eq('content before:23456foo before:12345yield inside:23456foo after:12345content after:23456')
88
+ $global_value = 34567
89
+ expect(render(wc)).to eq('content before:34567foo before:12345yield inside:34567foo after:12345content after:34567')
90
+ end
91
+
92
+ it "should not allow you to yield more than once from a method that's made static" do
93
+ wc = widget_class do
94
+ def content
95
+ foo do
96
+ text "yo"
97
+ end
98
+ end
99
+
100
+ def foo
101
+ text "one"
102
+ yield
103
+ text "two"
104
+ yield
105
+ text "three"
106
+ end
107
+ end
108
+
109
+ expect { wc.class_eval { static :foo }; render(wc) }.to raise_error(/yields more than once/i)
110
+ end
111
+
112
+ it "should raise an error if you try to access a variable from within a method that's being made static" do
113
+ wc = widget_class do
114
+ needs :foo => 12345
115
+
116
+ def content
117
+ bar
118
+ end
119
+
120
+ def bar
121
+ text "foo is: #{foo}"
122
+ end
123
+ end
124
+
125
+ e = capture_exception(Fortitude::Errors::DynamicAccessFromStaticMethod) { wc.class_eval { static :bar }; render(wc) }
126
+ expect(e.widget.class).to be(wc)
127
+ expect(e.static_method_name).to eq(:bar)
128
+ expect(e.method_called).to eq(:foo)
129
+ end
130
+
131
+ def check_dynamic_raises(base_class, method_called, &block)
132
+ subclass = Class.new(base_class)
133
+ subclass.send(:define_method, :bar, &block)
134
+
135
+ e = capture_exception(Fortitude::Errors::DynamicAccessFromStaticMethod) { subclass.static :bar; render(subclass) }
136
+ expect(e.widget.class).to be(subclass)
137
+ expect(e.static_method_name).to eq(:bar)
138
+ expect(e.method_called).to eq(method_called)
139
+ end
140
+
141
+ it "should raise an error if you try to access dynamic data in other ways from within a method that's being made static" do
142
+ base_class = widget_class do
143
+ needs :foo => 12345
144
+
145
+ def content
146
+ bar
147
+ end
148
+ end
149
+
150
+ check_dynamic_raises(base_class, :foo) { foo }
151
+ check_dynamic_raises(base_class, :assigns) { assigns }
152
+ check_dynamic_raises(base_class, :shared_variables) { shared_variables }
153
+ end
154
+
155
+ it "should allow static-izing a widget that has required needs" do
156
+ wc = widget_class do
157
+ needs :foo
158
+
159
+ def content
160
+ text "foo: #{foo}"
161
+ bar
162
+ end
163
+
164
+ def bar
165
+ text "bar!"
166
+ end
167
+
168
+ static :bar
169
+ end
170
+
171
+ expect(render(wc.new(:foo => 12345))).to eq("foo: 12345bar!")
172
+ expect(render(wc.new(:foo => 23456))).to eq("foo: 23456bar!")
173
+ end
174
+
175
+ it "should allow disabling locale support" do
176
+ $global_value = 12345
177
+ wc = widget_class do
178
+ def initialize(locale)
179
+ @locale = locale
180
+ end
181
+
182
+ def widget_locale
183
+ @locale
184
+ end
185
+
186
+ def content
187
+ foo
188
+ end
189
+
190
+ def foo
191
+ text "locale: #{widget_locale}, #{$global_value}"
192
+ end
193
+
194
+ static :foo, :locale_support => false
195
+ end
196
+
197
+ expect(render(wc.new(:en))).to eq("locale: en, 12345")
198
+ $global_value = 23456
199
+ expect(render(wc.new(:fr))).to eq("locale: en, 12345")
200
+ expect(render(wc.new(:en))).to eq("locale: en, 12345")
201
+ end
202
+
203
+ describe "helper support" do
204
+ before :each do
205
+ @helpers_class = Class.new do
206
+ def foo(x)
207
+ "foo #{x} foo!"
208
+ end
209
+ end
210
+ @helpers_object = @helpers_class.new
211
+
212
+ @wc = widget_class do
213
+ def content
214
+ text "it is: #{foo('bar')}"
215
+ end
216
+ end
217
+ end
218
+
219
+ def do_render(widget_or_class, options = { })
220
+ render(widget_or_class, { :rendering_context => rc(:helpers_object => @helpers_object) }.merge(options))
221
+ end
222
+
223
+ it "should allow static methods to access helpers by default" do
224
+ expect(do_render(@wc)).to eq("it is: foo bar foo!")
225
+ @wc.static :content
226
+ expect(do_render(@wc)).to eq("it is: foo bar foo!")
227
+ expect(do_render(@wc)).to eq("it is: foo bar foo!")
228
+ end
229
+ end
230
+
231
+ describe "around_content support" do
232
+ before :each do
233
+ $global_value = 12345
234
+ @wc = widget_class do
235
+ around_content :ac
236
+
237
+ def ac
238
+ text "before #{$global_value}"
239
+ yield
240
+ text "after #{$global_value}"
241
+ end
242
+
243
+ def content
244
+ text "this is content"
245
+ sub
246
+ end
247
+
248
+ def sub
249
+ text "this is sub #{$global_value}"
250
+ end
251
+ end
252
+ end
253
+
254
+ it "should not run around_content filters around a static method, if that method is not #content" do
255
+ @wc.static :sub
256
+ expect(render(@wc)).to eq("before 12345this is contentthis is sub 12345after 12345")
257
+ $global_value = 23456
258
+ expect(render(@wc)).to eq("before 23456this is contentthis is sub 12345after 23456")
259
+ end
260
+
261
+ it "should run around_content filters around a static method, if that method is #content" do
262
+ @wc.static :content
263
+ expect(render(@wc)).to eq("before 12345this is contentthis is sub 12345after 12345")
264
+ $global_value = 23456
265
+ expect(render(@wc)).to eq("before 23456this is contentthis is sub 12345after 23456")
266
+ end
267
+ end
268
+
269
+ it "should still run the proper localized content methods even if #content, or one of them, is static" do
270
+ $global_value = 12345
271
+ wc = widget_class do
272
+ def initialize(locale)
273
+ self.widget_locale = locale
274
+ super({ })
275
+ end
276
+
277
+ def localized_content_en
278
+ text "hullo! #{$global_value}"
279
+ end
280
+
281
+ def localized_content_fr
282
+ text "bonjour! #{$global_value}"
283
+ end
284
+
285
+ def content
286
+ text "saluton! #{$global_value}"
287
+ end
288
+
289
+ attr_accessor :widget_locale
290
+ end
291
+
292
+ expect(render(wc.new(nil))).to eq("saluton! 12345")
293
+ expect(render(wc.new(:en))).to eq("hullo! 12345")
294
+ expect(render(wc.new(:fr))).to eq("bonjour! 12345")
295
+
296
+ wc.static :localized_content_fr
297
+ expect(render(wc.new(:fr))).to eq("bonjour! 12345")
298
+ $global_value = 23456
299
+
300
+ expect(render(wc.new(nil))).to eq("saluton! 23456")
301
+ expect(render(wc.new(:en))).to eq("hullo! 23456")
302
+ expect(render(wc.new(:fr))).to eq("bonjour! 12345")
303
+
304
+ wc.static :content
305
+ expect(render(wc.new(nil))).to eq("saluton! 23456")
306
+ $global_value = 34567
307
+
308
+ expect(render(wc.new(nil))).to eq("saluton! 23456")
309
+ expect(render(wc.new(:en))).to eq("hullo! 34567")
310
+ expect(render(wc.new(:fr))).to eq("bonjour! 12345")
311
+ end
312
+
313
+ describe "localization support" do
314
+ it "should allow staticized methods to have different output per-locale" do
315
+ $global_value = 12345
316
+ wc = widget_class do
317
+ def initialize(locale)
318
+ @locale = locale
319
+ end
320
+
321
+ def widget_locale
322
+ @locale
323
+ end
324
+
325
+ def content
326
+ text "this is content in #{widget_locale} language #{$global_value}!"
327
+ end
328
+ end
329
+
330
+ expect(render(wc.new(nil))).to eq("this is content in language 12345!")
331
+ expect(render(wc.new("en"))).to eq("this is content in en language 12345!")
332
+ expect(render(wc.new("fr"))).to eq("this is content in fr language 12345!")
333
+
334
+ $global_value = 23456
335
+ wc.static :content
336
+
337
+ expect(render(wc.new(nil))).to eq("this is content in language 23456!")
338
+ expect(render(wc.new("en"))).to eq("this is content in en language 23456!")
339
+ expect(render(wc.new("fr"))).to eq("this is content in fr language 23456!")
340
+
341
+ $global_value = 34567
342
+
343
+ expect(render(wc.new(nil))).to eq("this is content in language 23456!")
344
+ expect(render(wc.new("en"))).to eq("this is content in en language 23456!")
345
+ expect(render(wc.new("fr"))).to eq("this is content in fr language 23456!")
346
+ end
347
+ end
348
+ end