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,117 @@
1
+ require 'active_support'
2
+ require 'fortitude'
3
+
4
+ module SystemHelpers
5
+ extend ActiveSupport::Concern
6
+
7
+ class IvarAccessible
8
+ def [](x)
9
+ instance_variable_get("@#{x}")
10
+ end
11
+
12
+ def []=(x, y)
13
+ instance_variable_set("@#{x}", y)
14
+ end
15
+ end
16
+
17
+ attr_reader :ivars
18
+
19
+ def rc(options = { })
20
+ options[:instance_variables_object] = ivars unless options.has_key?(:instance_variables_object)
21
+ ::Fortitude::RenderingContext.new(options)
22
+ end
23
+
24
+ def html_from(rendering_context)
25
+ rendering_context.output_buffer_holder.output_buffer.to_s
26
+ end
27
+
28
+ def define_helper(name, &block)
29
+ @helpers_class.send(:define_method, name, &block)
30
+ end
31
+
32
+ class TestDoctype < Fortitude::Doctypes::Base
33
+ def initialize
34
+ super(:test_doctype, "FORTITUDE TEST")
35
+ end
36
+
37
+ def close_void_tags?
38
+ true
39
+ end
40
+
41
+ def default_javascript_tag_attributes
42
+ { }
43
+ end
44
+
45
+ def needs_cdata_in_javascript_tag?
46
+ false
47
+ end
48
+
49
+ tag :p, :newline_before => true, :valid_attributes => %w{class}, :can_enclose => %w{a span br b _text}, :spec => 'THE_SPEC_FOR_P'
50
+ tag :div, :newline_before => true, :valid_attributes => %w{aaaaaaaaaaaaaa}, :can_enclose => %w{div p hr}
51
+ tag :span
52
+ tag :hr, :content_allowed => false
53
+ tag :br, :content_allowed => false, :spec => 'THE_SPEC_FOR_BR'
54
+ tag :a
55
+ tag :b
56
+ tag :nav, :newline_before => true
57
+ tag :h1, :newline_before => true
58
+ tag :img
59
+ tag :script, :newline_before => true, :escape_direct_content => false
60
+ tag :head, :newline_before => true
61
+ tag :style, :newline_before => true, :escape_direct_content => false
62
+ end
63
+
64
+ class TestWidgetClass < Fortitude::Widget
65
+ doctype TestDoctype.new
66
+ end
67
+
68
+ def widget_class(options = { }, &block)
69
+ klass = Class.new(options[:superclass] || TestWidgetClass, &block)
70
+ $spec_widget_seq ||= 0
71
+ $spec_widget_seq += 1
72
+ ::Object.const_set("SpecWidget#{$spec_widget_seq}", klass)
73
+ klass
74
+ end
75
+
76
+ def widget_class_with_content(options = { }, &block)
77
+ wc = widget_class(options)
78
+ wc.send(:define_method, :content, &block)
79
+ wc
80
+ end
81
+
82
+ def render(widget_or_class, options = { })
83
+ widget = if widget_or_class.kind_of?(Class)
84
+ widget_or_class.new(options[:assigns] || { })
85
+ else
86
+ widget_or_class
87
+ end
88
+ rendering_context = options[:rendering_context] || rc
89
+ widget.to_html(rendering_context)
90
+ html_from(rendering_context)
91
+ end
92
+
93
+ def capture_exception(klass = StandardError, &block)
94
+ out = nil
95
+ begin
96
+ block.call
97
+ rescue klass => e
98
+ out = e
99
+ end
100
+ raise "Exception of class #{klass.inspect} was expected, but none was raised" unless out
101
+ out
102
+ end
103
+
104
+ def render_content(options = { }, &block)
105
+ widget_class = widget_class_with_content(options, &block)
106
+ render(widget_class, options)
107
+ end
108
+
109
+ included do
110
+ before :each do
111
+ @helpers_class = Class.new
112
+ @helpers = @helpers_class.new
113
+ @ivars = IvarAccessible.new
114
+ @yield_block = double("yield_block")
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,7 @@
1
+ describe "basic Rails support", :type => :rails do
2
+ uses_rails_with_template :basic_rails_system_spec
3
+
4
+ it "should be able to render a trivial widget" do
5
+ expect_match("trivial_widget", /layout_default/, /hello, world/)
6
+ end
7
+ end
@@ -0,0 +1,75 @@
1
+ describe "Rails capture support", :type => :rails do
2
+ uses_rails_with_template :capture_system_spec
3
+
4
+ it "should successfully capture a widget partial with capture { } in an ERb view" do
5
+ expect_match('capture_widget_from_erb', %r{Widget text is:\s+<h3>\s*this is some_widget</h3>\s*END}mi)
6
+ end
7
+
8
+ it "should successfully capture an ERb partial with capture { } in a widget" do
9
+ expect_match('capture_erb_from_widget', %r{Widget text is:\s+<h3>\s*this is some_erb_partial</h3>\s*END}mi)
10
+ end
11
+
12
+ it "should successfully capture a widget with capture { } in a widget" do
13
+ expect_match('capture_widget_from_widget', %r{Rendered with widget:\s*<h3>\s*this is another_widget rendered_with_widget</h3>.*Rendered with render_partial:\s*<h3>\s*this is another_widget rendered_with_render_partial\s*</h3>\s*END}mi)
14
+ end
15
+
16
+ it "should be able to provide content in a widget with content_for" do
17
+ expect_match('widget_content_for',
18
+ %r{erb_layout_needing_content}i,
19
+ %r{Foo content is: <h5>this is content for foo!</h5>\s*<h5>this is more content for foo!</h5>}mi,
20
+ %r{Main content is: <h4>this is main_content!</h4>}mi,
21
+ %r{Bar content is: <h3>this is content for bar!</h3>\s*<h3>this is more content for bar!</h3>}mi,
22
+ :no_layout => true)
23
+ end
24
+
25
+ it "should be able to provide content in a widget with provide" do
26
+ skip "Rails 3.0.x doesn't support :provide" if @rails_server.rails_version =~ /^3\.0\./
27
+
28
+ expect_match('widget_provide',
29
+ %r{erb_layout_needing_content}i,
30
+ %r{Foo content is: <h5>this is content for foo!</h5>}mi,
31
+ %r{Main content is: <h4>this is main_content!</h4>}mi,
32
+ %r{Bar content is: <h3>this is content for bar!</h3>}mi,
33
+ :no_layout => true)
34
+ end
35
+
36
+ describe "should be able to retrieve stored content in a widget with yield :name" do
37
+ it "when provided by ERb" do
38
+ expect_match('widget_layout_needing_content_yield_with_erb',
39
+ %r{widget_layout_needing_content}mi,
40
+ %r{Foo content is: <h5>this is content for foo!</h5>\s*<h5>this is more content for foo!</h5>}mi,
41
+ %r{Main content is: <h4>this is main_content!</h4>}mi,
42
+ %r{Bar content is: <h3>this is content for bar!</h3>\s*<h3>this is more content for bar!</h3>}mi,
43
+ :no_layout => true)
44
+ end
45
+
46
+ it "when provided by a widget" do
47
+ expect_match('widget_layout_needing_content_yield_with_widget',
48
+ %r{widget_layout_needing_content}mi,
49
+ %r{Foo content is: <h5>this is content for foo!</h5>\s*<h5>this is more content for foo!</h5>}mi,
50
+ %r{Main content is: <h4>this is main_content!</h4>}mi,
51
+ %r{Bar content is: <h3>this is content for bar!</h3>\s*<h3>this is more content for bar!</h3>}mi,
52
+ :no_layout => true)
53
+ end
54
+ end
55
+
56
+ describe "should be able to retrieve stored content in a widget with content_for :name" do
57
+ it "when provided by ERb" do
58
+ expect_match('widget_layout_needing_content_content_for_with_erb',
59
+ %r{widget_layout_needing_content}mi,
60
+ %r{Foo content is: <h5>this is content for foo!</h5>\s*<h5>this is more content for foo!</h5>}mi,
61
+ %r{Main content is: <h4>this is main_content!</h4>}mi,
62
+ %r{Bar content is: <h3>this is content for bar!</h3>\s*<h3>this is more content for bar!</h3>}mi,
63
+ :no_layout => true)
64
+ end
65
+
66
+ it "when provided by a widget" do
67
+ expect_match('widget_layout_needing_content_content_for_with_widget',
68
+ %r{widget_layout_needing_content}mi,
69
+ %r{Foo content is: <h5>this is content for foo!</h5>\s*<h5>this is more content for foo!</h5>}mi,
70
+ %r{Main content is: <h4>this is main_content!</h4>}mi,
71
+ %r{Bar content is: <h3>this is content for bar!</h3>\s*<h3>this is more content for bar!</h3>}mi,
72
+ :no_layout => true)
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,63 @@
1
+ describe "Rails class-loading support", :type => :rails do
2
+ uses_rails_with_template :class_loading_system_spec
3
+
4
+ it "should not load classes under app/views without the Views:: prefix" do
5
+ expect_exception('the_class_should_not_load', 'NameError',
6
+ /uninitialized constant ClassLoadingSystemSpec::ClassShouldNotLoad/i)
7
+ end
8
+
9
+ it "should allow me to define classes under Views:: outside of app/views, like in lib/views" do
10
+ expect_match('lib_views', /hello: i am lib\/views/)
11
+ end
12
+
13
+ it "should allow me to define classes under Views:: outside of app/views, but in some other autoloaded place, like app/models" do
14
+ expect_match('app_models', /hello: i am app\/models/)
15
+ end
16
+
17
+ it "should not create anonymous modules without the Views:: namespace for directories under app/views/" do
18
+ expect_exception('some_namespace', 'NameError', /uninitialized constant SomeNamespace/)
19
+ expect_exception('some_other_namespace', 'NameError', /uninitialized constant SomeNamespace/)
20
+ expect_match('views_some_namespace', /Views::SomeNamespace/, :no_layout => true)
21
+ expect_match('views_some_other_namespace', /Views::SomeNamespace::SomeOtherNamespace/, :no_layout => true)
22
+ end
23
+
24
+ it "should autoload widgets under app/views/" do
25
+ expect_match('autoload_widget', /autoload_widget is here!/, :no_layout => true)
26
+ end
27
+
28
+ it "should autoload one widget from another" do
29
+ expect_match('autoload_one_widget_from_another', /about to run the sub widget.*this is the sub widget.*ran the sub widget/)
30
+ end
31
+
32
+ it "should allow use of a widget defined in lib/ from a view widget" do
33
+ expect_match('use_lib_widget_from_view_widget', /about to run the lib widget.*this is the lib widget.*ran the lib widget/)
34
+ end
35
+
36
+ it "should allow use of a widget defined on another autoload path from a view widget" do
37
+ expect_match('use_models_widget_from_view_widget', /about to run the models widget.*this is the models widget.*ran the models widget/)
38
+ end
39
+
40
+ it "should not allow me to define widgets outside of app/views/" do
41
+ expect_exception('widget_defined_outside_app_views', 'ActionView::MissingTemplate', /class_loading_system_spec\/widget_defined_outside_app_views/)
42
+ end
43
+
44
+ it "should not let me define a widget in a file starting with an underscore, and use it for a view" do
45
+ expect_exception('underscore_view', 'ActionView::MissingTemplate', /class_loading_system_spec\/underscore_view/)
46
+ end
47
+
48
+ it "should not let me define a widget in a file starting with an underscore, and autoload it" do
49
+ expect_exception('underscore_widget', 'NameError', /uninitialized constant Views::ClassLoadingSystemSpec::UnderscoreWidget/)
50
+ end
51
+
52
+ it "should not let me 'require' files in app/views without a views/ prefix" do
53
+ expect_exception('require_loaded_underscore_widget_without_views', 'LoadError', /(cannot load such file|no such file to load)/)
54
+ end
55
+
56
+ it "should not let me 'require' files in app/views with a views/ prefix" do
57
+ expect_exception('require_loaded_underscore_widget_with_views', 'LoadError', /(cannot load such file|no such file to load)/)
58
+ end
59
+
60
+ it "should let me render a widget defined outside of app/views/ if I use render :widget" do
61
+ expect_match('render_widget_outside_app_views', /arbitrary_name_some_widget/)
62
+ end
63
+ end
@@ -0,0 +1,33 @@
1
+ describe "Rails complex helper support", :type => :rails do
2
+ uses_rails_with_template :complex_helpers_system_spec
3
+
4
+ it "should render form_for correctly" do
5
+ expect_match("form_for_test",
6
+ %r{OUTSIDE_BEFORE\s*<form.*action=\"/complex_helpers_system_spec/form_for_test\".*
7
+ INSIDE_BEFORE\s*
8
+ FIRST:\s*<input.*person_first_name.*/>\s*
9
+ LAST:\s*<input.*person_last_name.*/>\s*
10
+ INSIDE_AFTER\s*
11
+ </form>\s*
12
+ OUTSIDE_AFTER}mix)
13
+ end
14
+
15
+ it "should render fields_for correctly" do
16
+ expect_match("fields_for_test",
17
+ %r{OUTSIDE_BEFORE\s*
18
+ INSIDE_BEFORE\s*
19
+ FIRST:\s*<input.*person_first_name.*/>\s*
20
+ LAST:\s*<input.*person_last_name.*/>\s*
21
+ INSIDE_AFTER\s*
22
+ OUTSIDE_AFTER}mix)
23
+ end
24
+
25
+ it "should cache based on a name properly" do
26
+ expect_match("cache_test?a=a1&b=b1",
27
+ /before_cache\(a1,b1\).*inside_cache\(a1,b1\).*after_cache\(a1,b1\)/mi)
28
+ expect_match("cache_test?a=a1&b=b2",
29
+ /before_cache\(a1,b2\).*inside_cache\(a1,b1\).*after_cache\(a1,b2\)/mi)
30
+ expect_match("cache_test?a=a2&b=b2",
31
+ /before_cache\(a2,b2\).*inside_cache\(a2,b2\).*after_cache\(a2,b2\)/mi)
32
+ end
33
+ end
@@ -0,0 +1,96 @@
1
+ describe "Rails data-passing support", :type => :rails do
2
+ uses_rails_with_template :data_passing_system_spec
3
+
4
+ it "should allow passing data to the widget through controller variables" do
5
+ expect_match("passing_data_widget", /foo is: the_foo/, /bar is: and_bar/)
6
+ end
7
+
8
+ it "should not fail if the controller provides more data than it needs" do
9
+ expect_match("extra_data_widget", /foo is: the_foo/, /bar is: and_bar/)
10
+ end
11
+
12
+ it "should allow passing data to the widget through :locals => { ... }" do
13
+ expect_match("passing_locals_widget", /foo is: local_foo/, /bar is: local_bar/)
14
+ end
15
+
16
+ it "should merge locals and controller variables, with locals winning" do
17
+ expect_match("passing_locals_and_controller_variables_widget", /foo is: controller_foo/, /bar is: local_bar/, /baz is: local_baz/)
18
+ end
19
+
20
+ it "should give you a reasonable error if you omit a variable" do
21
+ expect_exception('omitted_variable', 'Fortitude::Errors::MissingNeed', /bar/)
22
+ end
23
+
24
+ it "should not propagate un-needed variables" do
25
+ expect_match("extra_variables", /foo method call: the_foo/, /foo instance var: nil/,
26
+ /bar method call: NoMethodError/, /bar instance var: nil/,
27
+ /baz method call: NoMethodError/, /baz instance var: nil/)
28
+ end
29
+
30
+ it "should propagate un-needed variables, if asked" do
31
+ expect_match("extra_variables_requested", /foo method call: the_foo/, /foo instance var: nil/,
32
+ /bar method call: the_bar/, /bar instance var: nil/,
33
+ /baz method call: the_baz/, /baz instance var: nil/)
34
+ end
35
+
36
+ it "should not propagate a controller variable through a view to a child widget without being explicitly passed" do
37
+ expect_exception('parent_to_child_passing', 'Fortitude::Errors::MissingNeed', /foo/)
38
+ end
39
+
40
+ it "should propagate a controller variable through a view to a child widget without being explicitly passed, if invoked using render :partial" do
41
+ expect_match('parent_to_child_passing_partial', /parent before.*foo: the_foo.*parent after/)
42
+ end
43
+
44
+ it "should let a widget read a controller variable explicitly, as a Symbol or a String" do
45
+ expect_match("explicit_controller_variable_read", /explicit foo as symbol: the_foo/)
46
+ expect_match("explicit_controller_variable_read", /explicit foo as string: the_foo/)
47
+ end
48
+
49
+ it "should let a widget read a controller variable set by an earlier ERb view" do
50
+ expect_match("erb_to_parallel_widget_handoff", /widget foo: foo_from_erb/)
51
+ end
52
+
53
+ it "should let a widget write a controller variable that a later ERb view can read" do
54
+ expect_match("widget_to_parallel_erb_handoff", /erb foo: foo_from_widget/)
55
+ end
56
+
57
+ it "should let both controller variables and locals get picked up by the layout, as well as the view" do
58
+ expect_match("variables_to_layout", /widget_default_layout: foo = the_foo, bar = the_bar.*widget foo: the_foo, widget bar: the_bar/, :no_layout => true)
59
+ end
60
+
61
+ describe "backwards-compatible instance-variable mode" do
62
+ it "should let a widget read a controller variable implicitly" do
63
+ expect_match("implicit_variable_read", /inner widget foo: foo_from_controller/)
64
+ end
65
+
66
+ it "should let a widget write a controller variable implicitly" do
67
+ expect_match("implicit_variable_write", /erb foo: foo_from_widget/)
68
+ end
69
+
70
+ it "should let a widget read a controller variable set by an earlier ERb view" do
71
+ expect_match("implicit_erb_to_widget_handoff", /widget foo: foo_from_erb/)
72
+ end
73
+
74
+ it "should not enable access to local variables via @foo directly" do
75
+ expect_match("implicit_shared_variable_access", /foo: nil/)
76
+ end
77
+
78
+ it "should inherit the setting for implicit_shared_variable_access properly" do
79
+ expect_match("implicit_shared_variable_access_inheritance", /C1: foo is , bar is .*C2: foo is the_foo, bar is the_bar/mi)
80
+ end
81
+
82
+ it "should have the same set of copied variables for ERb and a widget" do
83
+ widget_copied_variables = JSON.parse(get('widget_copied_variables'))['widget_copied_variables'].sort
84
+ erb_copied_variables = JSON.parse(get('erb_copied_variables'))['erb_copied_variables'].sort
85
+
86
+ common = widget_copied_variables & erb_copied_variables
87
+ extra_widget = widget_copied_variables - erb_copied_variables
88
+ missing_widget = erb_copied_variables - widget_copied_variables
89
+
90
+ extra_widget = extra_widget.reject { |v| v =~ /^@_fortitude_/i }
91
+
92
+ expect(extra_widget).to eq([ ])
93
+ expect(missing_widget).to eq([ ])
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,15 @@
1
+ describe "Rails default layout support", :type => :rails do
2
+ uses_rails_with_template :default_layout_system_spec
3
+
4
+ it "should let you use a default layout that's a widget, and render ERb inside it" do
5
+ data = get("erb_with_widget_default_layout")
6
+ data.should match(/widget_default_layout/i)
7
+ data.should match(/erb_with_widget_default_layout/i)
8
+ end
9
+
10
+ it "should let you use a default layout that's a widget, and render a widget inside it" do
11
+ data = get("widget_with_widget_default_layout")
12
+ data.should match(/widget_default_layout/i)
13
+ data.should match(/widget_with_widget_default_layout/i)
14
+ end
15
+ end
@@ -0,0 +1,67 @@
1
+ describe "Rails development-mode support", :type => :rails do
2
+ uses_rails_with_template :development_mode_system_spec, :rails_env => :development
3
+
4
+ it "should automatically reload widgets if they change on disk" do
5
+ expect_match("reload_widget", /before_reload/)
6
+ # The sleep is unfortunate, but required: without it, Rails will not necessarily pick up our change,
7
+ # especially if we run multiple tests back-to-back. (There's a maximum frequency at which Rails can
8
+ # detect distinct file changes on disk, which on the order of 1 Hz -- i.e., once a second; any more
9
+ # than this and it fails. This is irrelevant for human-centered development, but important for
10
+ # tests like this.)
11
+ sleep 1
12
+ splat_new_widget!
13
+ expect_match("reload_widget", /after_reload/)
14
+ end
15
+
16
+ it "should let you change the controller, and that should work fine, too" do
17
+ expect_match("reload_widget", /datum\s+one\s+datum/)
18
+ sleep 1
19
+ splat_new_controller!
20
+ expect_match("reload_widget", /datum\s+two\s+datum/)
21
+ end
22
+
23
+ it "should, by default, format output" do
24
+ expect_match("sample_output", %r{<section class="one">
25
+ <p>hello, Jessica</p>
26
+ </section>}mi)
27
+ end
28
+
29
+ it "should, by default, output BEGIN/END debugging tags" do
30
+ expect_match("sample_output", %r{<!-- BEGIN Views::DevelopmentModeSystemSpec::SampleOutput depth 0: :name => "Jessica" -->
31
+ .*
32
+ <!-- END Views::DevelopmentModeSystemSpec::SampleOutput depth 0 -->}mi)
33
+ end
34
+
35
+ private
36
+ def splat_new_widget!
37
+ reload_file = File.join(rails_server.rails_root, 'app/views/development_mode_system_spec/reload_widget.rb')
38
+ File.open(reload_file, 'w') do |f|
39
+ f.puts <<-EOS
40
+ class Views::DevelopmentModeSystemSpec::ReloadWidget < Fortitude::Widgets::Html5
41
+ needs :datum
42
+
43
+ def content
44
+ p "after_reload: datum \#{datum} datum"
45
+ end
46
+ end
47
+ EOS
48
+ end
49
+ end
50
+
51
+ def splat_new_controller!
52
+ controller_file = File.join(rails_server.rails_root, 'app/controllers/development_mode_system_spec_controller.rb')
53
+ File.open(controller_file, 'w') do |f|
54
+ f.puts <<-EOS
55
+ class DevelopmentModeSystemSpecController < ApplicationController
56
+ def reload_widget
57
+ @datum = "two"
58
+ end
59
+
60
+ def sample_output
61
+ @name = "Jessica"
62
+ end
63
+ end
64
+ EOS
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,23 @@
1
+ describe "Rails ERb integration support", :type => :rails do
2
+ uses_rails_with_template :erb_integration_system_spec
3
+
4
+ it "should let you call a widget from an ERb file with render :partial" do
5
+ expect_match("erb_to_widget_with_render_partial", /erb to widget with render partial widget/,
6
+ /erb_start/, /erb_end/, /erb_start.*erb to widget with render partial widget.*erb_end/m)
7
+ end
8
+
9
+ it "should prefer ERb partials to Fortitude partials" do
10
+ expect_match("prefers_erb_partial", /erb partial/,
11
+ /erb_start.*erb partial.*erb_end/m)
12
+ end
13
+
14
+ it "should allow you to define a Fortitude partial in a file with an underscore" do
15
+ expect_match('fortitude_partial_with_underscore', /fortitude partial with underscore partial/,
16
+ /erb_start.*fortitude partial with underscore partial.*erb_end/m)
17
+ end
18
+
19
+ it "should let you call an ERb partial from a widget with render :partial" do
20
+ expect_match('erb_partial_from_widget',
21
+ /this is the widget.*this is the partial.*this is the widget again/mi)
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ describe "Fortitude helpers with config.action_controller.include_all_helpers = false", :type => :rails do
2
+ uses_rails_with_template :helpers_include_all_off_system_spec
3
+
4
+ it "should not include all helpers" do
5
+ expect_match("include_all_off", /excitedly: awesome!!!; uncertainly: NoMethodError/mi)
6
+ end
7
+ end
@@ -0,0 +1,79 @@
1
+ describe "Rails helper support", :type => :rails do
2
+ uses_rails_with_template :helpers_system_spec
3
+
4
+ it "should support the built-in Rails helpers by default" do
5
+ expect_match("basic_helpers",
6
+ /Three months ago: 3 months/mi,
7
+ /A million dollars: \$1,000,000\.00/mi,
8
+ %r{Select datetime:\s*<select.*name="date.*>.*<option.*value="2014".*</option>}mi)
9
+ end
10
+
11
+ it "should refine the built-in Rails helpers by default" do
12
+ expect_match("helpers_that_output_when_refined",
13
+ %r{START.*<img.*src="http://example.com/foo".*/><a href="mailto:test@example.com">test@example.com</a><link.*href="http://example.com/bar".*/>END}mi)
14
+ end
15
+
16
+ it "should support helpers that use blocks" do
17
+ expect_match("block_helpers",
18
+ %r{<body>\s*<form.*action="/form_dest".*>.*<input.*authenticity_token.*/>.*<p>inside the form</p>.*</form>}mi,
19
+ %r{})
20
+ end
21
+
22
+ it "should support built-in Rails helpers that output, rather than return, properly" do
23
+ expect_match("built_in_outputting_helpers",
24
+ %r{<div class=.concat_container.>.*this is concatted.*</div>.*<div class=.safe_concat_container.>.*this is safe_concatted.*</div>}mi)
25
+ end
26
+
27
+ it "should support custom-defined helpers" do
28
+ expect_match("custom_helpers_basic", %r{excited: awesome!!!})
29
+ end
30
+
31
+ it "should support custom-defined helpers that output, rather than return, properly" do
32
+ expect_match("custom_helper_outputs", %r{how awesome: super awesome!})
33
+ end
34
+
35
+ it "should support custom-defined helpers that take a block" do
36
+ expect_match("custom_helpers_with_a_block", %r{fedxxcbayyabcxxdef})
37
+ end
38
+
39
+ it "should allow changing a built-in Rails helper from outputting to returning" do
40
+ expect_match("built_in_outputting_to_returning", %r{<body>\s*<p>\s*text is: this is the_text\s*</p>\s*</body>}mi)
41
+ end
42
+
43
+ it "should allow changing a built-in Rails helper from returning to outputting" do
44
+ expect_match("built_in_returning_to_outputting", %r{<body>\s*it was 3 months, yo\s*</body>}mi)
45
+ end
46
+
47
+ it "should allow changing a custom-defined helper from outputting to returning" do
48
+ expect_match("custom_outputting_to_returning", %r{and super awesome!, yo}mi)
49
+ end
50
+
51
+ it "should allow changing a custom-defined helper from returning to outputting" do
52
+ expect_match("custom_returning_to_outputting", %r{and awesome!!!, yo}mi)
53
+ end
54
+
55
+ it "should inherit helper settings, but also let them be overridden" do
56
+ expect_match("helper_settings_inheritance", %r{it is really awesome!!!, yo\s*and super awesome!, too}mi)
57
+ end
58
+
59
+ it "should allow access to controller methods declared as helpers" do
60
+ expect_match("controller_helper_method", %r{it is \*\~\* Fred \*\~\*\!}mi)
61
+ end
62
+
63
+ it "should allow access to methods explicitly imported as helpers" do
64
+ expect_match("controller_helper_module", %r{and &gt;=== June ===&gt;}mi)
65
+ end
66
+
67
+ it "should allow turning off automatic helper access" do
68
+ expect_match("automatic_helpers_disabled", %r{excitedly: NoMethodError; time_ago_in_words: NoMethodError; number_to_currency: \$1,000,000.00})
69
+ end
70
+
71
+ it "should inherit automatic helper access properly" do
72
+ expect_match("automatic_helpers_inheritance", %r{C1: excitedly: NoMethodError; time_ago_in_words: NoMethodError; number_to_currency: \$1,000,000.00.*C2: excitedly: awesome!!!; time_ago_in_words: 3 months; number_to_currency: \$1,000,000.00})
73
+ end
74
+
75
+ it "should allow access to private helpers in exactly the same way as ERb" do
76
+ expect_match("private_helper_erb", %r{a private helper: private!})
77
+ expect_match("private_helper_fortitude", %r{a private helper: private!})
78
+ end
79
+ end
@@ -0,0 +1,7 @@
1
+ describe "Fortitude unrefined Rails helper support", :type => :rails do
2
+ uses_rails_with_template :helpers_unrefined_system_spec
3
+
4
+ it "should not output when refined-outputting helpers are called" do
5
+ expect_match("helpers_that_output_when_refined", /STARTEND/)
6
+ end
7
+ end
@@ -0,0 +1,60 @@
1
+ describe "Rails layout support", :type => :rails do
2
+ uses_rails_with_template :layouts_system_spec
3
+
4
+ it "should let you use a widget in an ERb layout, and render in the right order" do
5
+ data = get("widget_inside_erb_layout")
6
+ data.should match(/default_layout_erb/i)
7
+ data.should match(/this is widget_inside_erb_layout/i)
8
+ data.should match(/pre_layout order: \[:widget_inside_erb_layout, :layout_pre\]/i)
9
+ data.should match(/post_layout order: \[:widget_inside_erb_layout, :layout_pre, :layout_post\]/i)
10
+ data.should match(/order inside widget: \[:widget_inside_erb_layout\]/i)
11
+ data.should match(/pre_layout foo: foo_from_widget_inside_erb_layout/i)
12
+ data.should match(/post_layout foo: foo_from_widget_inside_erb_layout/i)
13
+ end
14
+
15
+ it "should let you use a widget as a layout with an ERb view, and render in the right order" do
16
+ data = get("erb_inside_widget_layout")
17
+ data.should match(/widget_layout/i)
18
+ data.should match(/this is erb_inside_widget_layout/i)
19
+ data.should match(/pre_layout order: \[:erb_inside_widget_layout, :widget_layout_pre\]/i)
20
+ data.should match(/post_layout order: \[:erb_inside_widget_layout, :widget_layout_pre, :widget_layout_post\]/i)
21
+ data.should match(/order inside erb: \[:erb_inside_widget_layout\]/i)
22
+ data.should match(/pre_layout foo: foo_from_erb_inside_widget_layout/i)
23
+ data.should match(/post_layout foo: foo_from_erb_inside_widget_layout/i)
24
+ end
25
+
26
+ it "should let you use a widget as a layout with a widget view, and render in the right order" do
27
+ data = get("widget_inside_widget_layout")
28
+ data.should match(/widget_layout/i)
29
+ data.should match(/this is widget_inside_widget_layout/i)
30
+ data.should match(/pre_layout order: \[:widget_inside_widget_layout, :widget_layout_pre\]/i)
31
+ data.should match(/post_layout order: \[:widget_inside_widget_layout, :widget_layout_pre, :widget_layout_post\]/i)
32
+ data.should match(/order inside widget: \[:widget_inside_widget_layout\]/i)
33
+ data.should match(/pre_layout foo: foo_from_widget_inside_widget_layout/i)
34
+ data.should match(/post_layout foo: foo_from_widget_inside_widget_layout/i)
35
+ end
36
+
37
+ it "should use a layout with render :widget by default" do
38
+ data = get("render_widget")
39
+ data.should match(/default_layout_erb/i)
40
+ data.should match(/this is the_render_widget/i)
41
+ end
42
+
43
+ it "should let you turn off the layout with render :widget" do
44
+ data = get("render_widget_without_layout")
45
+ data.should_not match(/default_layout_erb/i)
46
+ data.should match(/this is the_render_widget/i)
47
+ end
48
+
49
+ it "should let you pick an alternate layout for render :widget" do
50
+ data = get("render_widget_with_alt_layout")
51
+ data.should match(/alternate_layout_erb/i)
52
+ data.should match(/this is the_render_widget/i)
53
+ end
54
+
55
+ it "should let you explicitly yield to the view" do
56
+ data = get("yield_from_widget_explicitly")
57
+ data.should match(/explicit_yield_layout/i)
58
+ data.should match(/this is yield_from_widget_explicitly/i)
59
+ end
60
+ end