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,38 @@
1
+ describe "basic Rails support", :type => :rails do
2
+ uses_rails_with_template :localization_system_spec
3
+
4
+ it "should allow you to provide localized content methods" do
5
+ expect_match("content_method?locale=en", /wassup\? this is english/mi)
6
+ expect_match("content_method?locale=fr", /bienvenue, les mecs/mi)
7
+ expect_match("content_method?locale=pt", /i don&#(39|x27);t know that language/mi)
8
+ end
9
+
10
+ it "should let you translate strings with I18n.t" do
11
+ expect_match("i18n_t?locale=en", /a house is: house/)
12
+ expect_match("i18n_t?locale=fr", /a house is: maison/)
13
+ end
14
+
15
+ it "should let you translate strings with just t" do
16
+ expect_match("t?locale=en", /a house is: house/)
17
+ expect_match("t?locale=fr", /a house is: maison/)
18
+ end
19
+
20
+ it "should support dot-notation for I18n translation naming" do
21
+ expect_match("dot_notation?locale=en", /awesome is: awesome!/)
22
+ expect_match("dot_notation?locale=fr", /awesome is: formidable!/)
23
+ end
24
+
25
+ it "should let you translate strings with Fortitude translation support" do
26
+ expect_match("native_support?locale=en", /not translated; also awesome 127!; also not translated/i)
27
+ expect_match("native_support?locale=fr", /not translated; encore formidable 127!; also not translated/i)
28
+ end
29
+
30
+ it "should let you readjust the translation base" do
31
+ expect_match("readjust_base?locale=en", /SUPA-awesome 127!/)
32
+ expect_match("readjust_base?locale=fr", /TOUS formidable, 127!/)
33
+ end
34
+
35
+ it "should not escape explicitly-HTML translations" do
36
+ expect_match("explicit_html", /one: foo<bar>, two: bar<baz>, one again: foo<bar>, two again: bar<baz>/i)
37
+ end
38
+ end
@@ -0,0 +1,13 @@
1
+ describe "Rails production-mode support", :type => :rails do
2
+ uses_rails_with_template :production_mode_system_spec
3
+
4
+ it "should not, by default, format output" do
5
+ expect_match("sample_output", %r{<section class="one"><p>hello, Jessica</p></section>}i)
6
+ end
7
+
8
+ it "should not, by default, output BEGIN/END debugging tags" do
9
+ data = get_success("sample_output")
10
+ expect(data).not_to match(%r{<!--\s*BEGIN}mi)
11
+ expect(data).not_to match(%r{<!--\s*END}mi)
12
+ end
13
+ end
@@ -0,0 +1,64 @@
1
+ describe "Rails RenderingContext support", :type => :rails do
2
+ uses_rails_with_template :rendering_context_system_spec
3
+
4
+ it "should use the context returned by create_fortitude_rendering_context in the view" do
5
+ expect_match("uses_specified_context_in_view", /context is: SimpleRc, value 12345/)
6
+ end
7
+
8
+ it "should still use that context even for partials invoked by ERb" do
9
+ expect_match("uses_specified_context_in_partials", /before partial.*context is: SimpleRc, value 23456.*after partial/mi)
10
+ end
11
+
12
+ it "should use that context for partials through multiple layers of nesting" do
13
+ text = get_success("uses_specified_context_through_nesting")
14
+ if text =~ /view rc: SimpleRc, 34567, (\d+).*partial.*inner partial rc: SimpleRc, 34567, (\d+)/mi
15
+ first_value, second_value = Integer($1), Integer($2)
16
+ expect(first_value).to eq(second_value)
17
+ else
18
+ raise "Text did not match: #{text.inspect}"
19
+ end
20
+ end
21
+
22
+ it "should use that context for widgets rendered with render :widget" do
23
+ expect_match("uses_specified_context_in_render_widget", /context is: SimpleRc, value 45678/)
24
+ end
25
+
26
+ it "should use that context for widgets rendered with render :inline" do
27
+ expect_match("uses_specified_context_in_render_inline", /context is: SimpleRc, value 56789/)
28
+ end
29
+
30
+ it "should use the context returned by just plain fortitude_rendering_context in the view" do
31
+ expect_match("uses_direct_context_in_view", /context is: SimpleRc, value 67890/)
32
+ end
33
+
34
+ it "should still call that method for all widgets" do
35
+ expect_match("uses_direct_context_for_all_widgets", /context is: SimpleRc, value 67890.*context is: SimpleRc, value 67891.*context is: SimpleRc, value 67890/mi)
36
+ end
37
+
38
+ it "should call start_widget! and end_widget! properly on widgets in Rails" do
39
+ text = get_success("start_end_widget_basic")
40
+ lines = text.split(/[\r\n]+/)
41
+ lines = lines.select { |l| l =~ /^\d:/ }.map { |l| l.strip }
42
+ expect(lines[0]).to eq("0: start Views::RenderingContextSystemSpec::StartEndWidgetBasic")
43
+ expect(lines[1]).to eq("1: start Views::RenderingContextSystemSpec::StartEndWidgetBasicInner 1")
44
+ expect(lines[2]).to eq("2: end Views::RenderingContextSystemSpec::StartEndWidgetBasicInner 1")
45
+ expect(lines[3]).to eq("3: start Views::RenderingContextSystemSpec::StartEndWidgetBasicInner 2")
46
+ expect(lines[4]).to eq("4: start Views::RenderingContextSystemSpec::StartEndWidgetBasicInner")
47
+ expect(lines[5]).to eq("5: end Views::RenderingContextSystemSpec::StartEndWidgetBasicInner")
48
+ expect(lines[6]).to eq("6: end Views::RenderingContextSystemSpec::StartEndWidgetBasicInner 2")
49
+ expect(lines.length).to eq(7)
50
+ end
51
+
52
+ it "should call start_widget! and end_widget! through ERb partials, passing them as hashes" do
53
+ text = get_success("start_end_widget_through_partials")
54
+ lines = text.split(/[\r\n]+/)
55
+ lines = lines.select { |l| l =~ /^\d:/ }.map { |l| l.strip }
56
+
57
+ expect(lines[0]).to eq("0: start Views::RenderingContextSystemSpec::StartEndWidgetThroughPartials")
58
+ expect(lines[1]).to eq("1: start [{:partial=>\"start_end_widget_through_partials_partial\"}]")
59
+ expect(lines[2]).to eq("2: start Views::RenderingContextSystemSpec::StartEndWidgetThroughPartialsPartialWidget 12345")
60
+ expect(lines[3]).to eq("3: end Views::RenderingContextSystemSpec::StartEndWidgetThroughPartialsPartialWidget 12345")
61
+ expect(lines[4]).to eq("4: end [{:partial=>\"start_end_widget_through_partials_partial\"}]")
62
+ expect(lines.length).to eq(5)
63
+ end
64
+ end
@@ -0,0 +1,158 @@
1
+ describe "Rails rendering support", :type => :rails do
2
+ uses_rails_with_template :rendering_system_spec
3
+
4
+ describe "rendering from a controller" do
5
+ it "should let you specify a widget with 'render :action =>'" do
6
+ expect_match("render_with_colon_action", /hello, world/)
7
+ end
8
+
9
+ it "should let you specify a widget with 'render :template =>'" do
10
+ expect_match("render_with_colon_template", /hello, world/)
11
+ end
12
+
13
+ it "should let you specify a widget with 'render :widget =>', which should use a layout by default" do
14
+ data = expect_match("render_widget", /hello from a widget named Fred/)
15
+ expect(data).to match(/rails_spec_application/)
16
+ end
17
+
18
+ it "should let you omit the layout with 'render :widget =>', if you ask for it" do
19
+ data = expect_match("render_widget_without_layout", /hello from a widget named Fred/, :no_layout => true)
20
+ expect(data).not_to match(/rails_spec_application/)
21
+ end
22
+
23
+ it "should let you render a widget with 'render \"foo\"'" do
24
+ expect_match("render_widget_via_file_path", /hello from a widget named Fred/)
25
+ end
26
+
27
+ it "should let you render a widget with 'render :file =>'" do
28
+ expect_match("render_widget_via_colon_file", /hello from a widget named Fred/)
29
+ end
30
+
31
+ it "should let you render a widget inline with 'render :inline =>'" do
32
+ expect_match("render_widget_via_inline", /this is an inline widget named Fred/)
33
+ end
34
+
35
+ it "should let you render a widget inline, and use all instance and local variables, with locals overriding instance variables" do
36
+ expect_match("render_widget_via_inline_with_var_access", /this is an inline widget named Fred, and it is 27 years old, and friends with Mary/)
37
+ end
38
+ end
39
+
40
+ describe "rendering in a widget" do
41
+ it "should let you render a partial in a widget" do
42
+ expect_match("render_partial_from_widget", /this is the widget.*this is the_partial.*this is the widget again/mi)
43
+ end
44
+
45
+ it "should let you render :text in a widget" do
46
+ expect_match("render_text_from_widget", /this is the widget.*this is render_text.*this is the widget again/mi)
47
+ end
48
+
49
+ it "should let you render :template in a widget" do
50
+ expect_match("render_template_from_widget", /this is the widget.*widget_with_name: Fred.*this is the widget again/mi)
51
+ end
52
+
53
+ it "should let you render :inline in a widget" do
54
+ expect_match("render_inline_from_widget", /this is the widget.*widget_with_name: Fred.*this is the widget again/mi)
55
+ end
56
+
57
+ it "should let you render :file in a widget" do
58
+ expect_match("render_file_from_widget", /this is the widget.*widget_with_name: Fred.*this is the widget again/mi)
59
+ end
60
+ end
61
+
62
+ describe "render options" do
63
+ it "should let you set the content-type" do
64
+ data = get_response("render_with_content_type")
65
+ expect(data.body.strip).to match(/hello, world/)
66
+ content_type = data.header['content-type']
67
+ expect(content_type).to match(%r{^boo/yeah(;.*)?$})
68
+ end
69
+
70
+ it "should let you set the location" do
71
+ data = get_response("render_with_location")
72
+ expect(data.body.strip).to match(/hello, world/)
73
+ location = data.header['location']
74
+ expect(location).to eq("http://somewhere/over/the/rainbow")
75
+ end
76
+
77
+ it "should let you set the status" do
78
+ data = get_response("render_with_status", :ignore_status_code => true)
79
+ expect(data.code.to_s).to eq("768")
80
+ end
81
+ end
82
+
83
+ describe "rendering partial invocation" do
84
+ it "should render a collection correctly if so invoked" do
85
+ expect_match("render_collection", /collection is:.*word: apple.*word: pie.*word: is.*word: nice.*and that's all!/mi)
86
+ end
87
+
88
+ it "should support :as for rendering" do
89
+ expect_match("render_collection_as", /collection is:.*widget_with_name: bonita.*widget_with_name: applebaum.*widget_with_name: the.*widget_with_name: dude.*and that's all!/mi)
90
+ end
91
+
92
+ it "should support :object for rendering" do
93
+ expect_match("render_object", /partial is:.*word: donkey.*and that's all!/mi)
94
+ end
95
+
96
+ it "should support ERb partial layouts" do
97
+ expect_match("render_partial_with_layout", /this is the partial:.*partial_layout before.*partial_with_layout.*partial_layout after.*done!/mi)
98
+ end
99
+
100
+ it "should support using a widget as an ERb partial layout" do
101
+ expect_match("render_partial_with_widget_layout", /this is the partial:.*widget_partial_layout before.*partial_with_layout.*widget_partial_layout after.*done!/mi)
102
+ end
103
+ end
104
+
105
+ describe "HTML escaping" do
106
+ it "should only escape strings that aren't raw() or html_safe(), and do the right thing with h()" do
107
+ expect_match("render_html_safe_strings", /a: foo&lt;bar, b: bar<baz, c: baz<quux, d: quux&lt;marph, e: marph>foo/)
108
+ end
109
+ end
110
+
111
+ describe "streaming support" do
112
+ # Actually trying to get streaming working completely is a VERY finicky business, and we don't want to fail
113
+ # our tests just because (e.g.) we can't get buffering 100% disabled on this platform. So, we:
114
+ #
115
+ # * Use Net::HTTP to collect the HTTP/1.1 transfer chunks of the response; there should be more than one if
116
+ # we're actually streaming (and there ends up being just 1 if you don't tell it to stream, or if Rails
117
+ # detects that your template engine doesn't support streaming);
118
+ # * Collect the rendering order server-side and output it; if streaming, we'll render the top of the layout,
119
+ # then the widget, then the bottom of the layout, completely differently from Rails' default mechanism of
120
+ # rendering the view first, then the layout.
121
+ def collect_chunks(path)
122
+ chunks = [ ]
123
+
124
+ uri = rails_server.uri_for(full_path(path))
125
+ Net::HTTP.start(uri.host, uri.port) do |http|
126
+ request = Net::HTTP::Get.new uri.request_uri
127
+
128
+ http.request(request) do |response|
129
+ response.read_body do |chunk|
130
+ chunks << chunk
131
+ end
132
+ end
133
+ end
134
+
135
+ chunks
136
+ end
137
+
138
+ it "should let you stream a pure widget" do
139
+ skip "currently, we can't figure out a way to test this for certain -- we get just one chunk no matter what we do"
140
+
141
+ chunks = collect_chunks("stream_widget")
142
+ expect(chunks.length).to be > 1
143
+ end
144
+
145
+ it "should let you stream from a widget that's in an ERb layout" do
146
+ skip("Fortitude streaming test is not supported under Rails 3.0.x") if @rails_server.rails_version =~ /^3\.0\./
147
+ skip("Fortitude streaming test is not supported under Ruby 1.8") if RUBY_VERSION =~ /^1\.8\./
148
+
149
+ chunks = collect_chunks("stream_widget_with_layout")
150
+ expect(chunks.length).to be > 1
151
+
152
+ full_text = chunks.join("")
153
+ expect(full_text).to match(/start_of_layout order:\s+\[:layout_start\]/mi)
154
+ expect(full_text).to match(/end_of_widget order:\s+\[:layout_start, :widget\]/mi)
155
+ expect(full_text).to match(/end_of_layout order:\s+\[:layout_start, :widget, :layout_end\]/mi)
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,23 @@
1
+ describe "Rails rules support", :type => :rails do
2
+ uses_rails_with_template :rules_system_spec
3
+
4
+ it "should be able to enforce tag-nesting rules in Rails" do
5
+ expect_exception('invalidly_nested_tag', Fortitude::Errors::InvalidElementNesting, /div/)
6
+ end
7
+
8
+ it "should still enforce tag-nesting rules inside a partial" do
9
+ expect_exception('invalidly_nested_tag_in_partial', Fortitude::Errors::InvalidElementNesting, /div/)
10
+ end
11
+
12
+ it "should not enforce tag-nesting rules at the start of a partial rendered from ERb" do
13
+ expect_match("invalid_start_tag_in_partial", /we got there\!/)
14
+ end
15
+
16
+ it "should not enforce tag-nesting rules from layout to view, even if both are in Fortitude" do
17
+ expect_match('invalid_start_tag_in_view', /we got there\!/)
18
+ end
19
+
20
+ it "should not enforce tag-nesting rules across an intervening partial" do
21
+ expect_match('intervening_partial', /we got there\!/)
22
+ end
23
+ end
@@ -0,0 +1,12 @@
1
+ describe "Fortitude static-method behavior in Rails", :type => :rails do
2
+ uses_rails_with_template :static_method_system_spec
3
+
4
+ it "should allow access to helpers in methods made static" do
5
+ expect_match("allows_helper_access", /foo is: fooaaafoobarbbb!/)
6
+ end
7
+
8
+ it "should respect localization in methods made static" do
9
+ expect_match("localization?locale=en", /hello is: hello/)
10
+ expect_match("localization?locale=fr", /hello is: bonjour/)
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ class ApplicationController < ActionController::Base
2
+ # Prevent CSRF attacks by raising an exception.
3
+ # For APIs, you may want to use :null_session instead.
4
+ protect_from_forgery :with => :exception
5
+
6
+ rescue_from Exception do |exception|
7
+ render :json => {
8
+ :exception => {
9
+ :class => exception.class.name,
10
+ :message => exception.message,
11
+ :backtrace => exception.backtrace
12
+ }
13
+ }
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ class WorkingController < ApplicationController
2
+ def rails_is_working
3
+ render :text => "Rails version: #{Rails.version}"
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>rails_spec_application layout_default</title>
5
+ </head>
6
+ <body>
7
+
8
+ <%= yield %>
9
+
10
+ </body>
11
+ </html>
@@ -0,0 +1,4 @@
1
+ app_class = "#{File.basename(Rails.root).camelize}::Application".constantize
2
+ app_class.routes.draw do
3
+ get ':controller/:action'
4
+ end
@@ -0,0 +1,22 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Your secret key is used for verifying the integrity of signed cookies.
4
+ # If you change this key, all old signed cookies will become invalid!
5
+
6
+ # Make sure the secret is at least 30 characters and all random,
7
+ # no regular words or you'll be exposed to dictionary attacks.
8
+ # You can use `rake secret` to generate a secure secret key.
9
+
10
+ # Make sure the secrets in this file are kept private
11
+ # if you're sharing your code publicly.
12
+
13
+ development:
14
+ secret_key_base: 0985fb529eab373cecb28150a410855320b217fad4e79cdf343e3b81d667f380f6c7f2c1e9943cd4786eb0ba15ae5de0e7004b28453515dcace3dcbfcc93eca7
15
+
16
+ test:
17
+ secret_key_base: 6783078d4dc326633f90f560efef22b743b79289d1370baa89857eb252a0cb36c45ef4a0a6aa959b22c9a15ffa62ebfd5aa933c2253a071c568e2464db683bd0
18
+
19
+ # Do not keep production secrets in the repository,
20
+ # instead read values from the environment.
21
+ production:
22
+ secret_key_base: 0985fb529eab373cecb28150a410855320b217fad4e79cdf343e3b81d667f380f6c7f2c1e9943cd4786eb0ba15ae5de0e7004b28453515dcace3dcbfcc93eca7
@@ -0,0 +1,8 @@
1
+ class BasicRailsSystemSpecController < ApplicationController
2
+ def trivial_widget
3
+ end
4
+
5
+ def the_class_should_not_load
6
+ render :text => BasicRailsSystemSpec::ClassShouldNotLoad.new.to_s
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ class Views::BasicRailsSystemSpec::TrivialWidget < Fortitude::Widgets::Html5
2
+ def content
3
+ p "hello, world"
4
+ end
5
+ end
@@ -0,0 +1,37 @@
1
+ class CaptureSystemSpecController < ApplicationController
2
+ def capture_widget_from_erb
3
+ # nothing here
4
+ end
5
+
6
+ def capture_erb_from_widget
7
+ # nothing here
8
+ end
9
+
10
+ def capture_widget_from_widget
11
+ # nothing here
12
+ end
13
+
14
+ def widget_content_for
15
+ render :layout => 'erb_layout_needing_content'
16
+ end
17
+
18
+ def widget_provide
19
+ render :layout => 'erb_layout_needing_content'
20
+ end
21
+
22
+ def widget_layout_needing_content_yield_with_erb
23
+ render :layout => 'widget_layout_needing_content_yield'
24
+ end
25
+
26
+ def widget_layout_needing_content_yield_with_widget
27
+ render :action => 'widget_content_for', :layout => 'widget_layout_needing_content_yield'
28
+ end
29
+
30
+ def widget_layout_needing_content_content_for_with_erb
31
+ render :action => 'widget_layout_needing_content_yield_with_erb', :layout => 'widget_layout_needing_content_content_for'
32
+ end
33
+
34
+ def widget_layout_needing_content_content_for_with_widget
35
+ render :action => 'widget_content_for', :layout => 'widget_layout_needing_content_content_for'
36
+ end
37
+ end
@@ -0,0 +1,7 @@
1
+ class Views::CaptureSystemSpec::AnotherWidget < Fortitude::Widgets::Html5
2
+ needs :name
3
+
4
+ def content
5
+ h3 "this is another_widget #{name}"
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ class Views::CaptureSystemSpec::CaptureErbFromWidget < Fortitude::Widgets::Html5
2
+ def content
3
+ widget_text = capture do
4
+ render :partial => 'some_erb_partial'
5
+ end
6
+
7
+ text "Widget text is: "
8
+ text widget_text
9
+ text "END"
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ <%
2
+ widget_text = capture do
3
+ %>
4
+ <%= render :partial => 'some_widget' %>
5
+ <%
6
+ end
7
+ %>
8
+ Widget text is: <%= widget_text %>
9
+ END
@@ -0,0 +1,17 @@
1
+ class Views::CaptureSystemSpec::CaptureWidgetFromWidget < Fortitude::Widgets::Html5
2
+ def content
3
+ widget_text_1 = capture do
4
+ widget Views::CaptureSystemSpec::AnotherWidget.new(:name => "rendered_with_widget")
5
+ end
6
+
7
+ widget_text_2 = capture do
8
+ render :partial => 'another_widget', :locals => { :name => "rendered_with_render_partial" }
9
+ end
10
+
11
+ text "Rendered with widget:"
12
+ text widget_text_1
13
+ text "Rendered with render_partial:"
14
+ text widget_text_2
15
+ text "END"
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ class Views::CaptureSystemSpec::SomeWidget < Fortitude::Widgets::Html5
2
+ def content
3
+ h3 "this is some_widget"
4
+ end
5
+ end
@@ -0,0 +1,19 @@
1
+ class Views::CaptureSystemSpec::WidgetContentFor < Fortitude::Widgets::Html5
2
+ def content
3
+ content_for :bar do
4
+ h3 "this is content for bar!"
5
+ end
6
+ content_for :foo do
7
+ h5 "this is content for foo!"
8
+ end
9
+
10
+ h4 "this is main_content!"
11
+
12
+ content_for :foo do
13
+ h5 "this is more content for foo!"
14
+ end
15
+ content_for :bar do
16
+ h3 "this is more content for bar!"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ <% content_for :bar do %>
2
+ <h3>this is content for bar!</h3>
3
+ <% end %>
4
+ <% content_for :foo do %>
5
+ <h5>this is content for foo!</h5>
6
+ <% end %>
7
+ <h4>this is main_content!</h4>
8
+ <% content_for :foo do %>
9
+ <h5>this is more content for foo!</h5>
10
+ <% end %>
11
+ <% content_for :bar do %>
12
+ <h3>this is more content for bar!</h3>
13
+ <% end %>
@@ -0,0 +1,13 @@
1
+ class Views::CaptureSystemSpec::WidgetProvide < Fortitude::Widgets::Html5
2
+ def content
3
+ provide :bar do
4
+ h3 "this is content for bar!"
5
+ end
6
+
7
+ h4 "this is main_content!"
8
+
9
+ provide :foo do
10
+ h5 "this is content for foo!"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>erb_layout_needing_content</title>
5
+ </head>
6
+ <body>
7
+
8
+ <p>Foo content is: <%= yield :foo %></p>
9
+
10
+ <p>Main content is: <%= yield %></p>
11
+
12
+ <p>Bar content is: <%= yield :bar %></p>
13
+
14
+ </body>
15
+ </html>
@@ -0,0 +1,23 @@
1
+ class Views::Layouts::WidgetLayoutNeedingContentContentFor < Fortitude::Widgets::Html5
2
+ def content
3
+ html {
4
+ head {
5
+ title "widget_layout_needing_content"
6
+ }
7
+ body {
8
+ p {
9
+ text "Foo content is: "
10
+ text(content_for :foo)
11
+ }
12
+ p {
13
+ text "Main content is: "
14
+ yield
15
+ }
16
+ p {
17
+ text "Bar content is: "
18
+ text(content_for :bar)
19
+ }
20
+ }
21
+ }
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ class Views::Layouts::WidgetLayoutNeedingContentYield < Fortitude::Widgets::Html5
2
+ def content
3
+ html {
4
+ head {
5
+ title "widget_layout_needing_content"
6
+ }
7
+ body {
8
+ p {
9
+ text "Foo content is: "
10
+ yield :foo
11
+ }
12
+ p {
13
+ text "Main content is: "
14
+ yield
15
+ }
16
+ p {
17
+ text "Bar content is: "
18
+ yield :bar
19
+ }
20
+ }
21
+ }
22
+ end
23
+ end