fortitude 0.0.4-java

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 (355) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.rspec-local +4 -0
  4. data/.travis.yml +50 -0
  5. data/CHANGES.md +62 -0
  6. data/CONTRIBUTORS.md +6 -0
  7. data/Gemfile +5 -0
  8. data/LICENSE.txt +22 -0
  9. data/README-erector.md +246 -0
  10. data/README.md +15 -0
  11. data/Rakefile +67 -0
  12. data/ext/FortitudeJrubyNativeExtService.java +11 -0
  13. data/ext/com/fortituderuby/ext/fortitude/FortitudeNativeLibrary.java +223 -0
  14. data/ext/fortitude_native_ext/extconf.rb +4 -0
  15. data/ext/fortitude_native_ext/fortitude_native_ext.c +333 -0
  16. data/fortitude.gemspec +42 -0
  17. data/lib/fortitude.rb +7 -0
  18. data/lib/fortitude/doctypes.rb +48 -0
  19. data/lib/fortitude/doctypes/base.rb +42 -0
  20. data/lib/fortitude/doctypes/html4.rb +21 -0
  21. data/lib/fortitude/doctypes/html4_frameset.rb +20 -0
  22. data/lib/fortitude/doctypes/html4_strict.rb +18 -0
  23. data/lib/fortitude/doctypes/html4_tags_frameset.rb +53 -0
  24. data/lib/fortitude/doctypes/html4_tags_strict.rb +274 -0
  25. data/lib/fortitude/doctypes/html4_tags_transitional.rb +115 -0
  26. data/lib/fortitude/doctypes/html4_transitional.rb +19 -0
  27. data/lib/fortitude/doctypes/html5.rb +373 -0
  28. data/lib/fortitude/doctypes/unknown_doctype.rb +20 -0
  29. data/lib/fortitude/doctypes/xhtml10.rb +20 -0
  30. data/lib/fortitude/doctypes/xhtml10_frameset.rb +18 -0
  31. data/lib/fortitude/doctypes/xhtml10_strict.rb +18 -0
  32. data/lib/fortitude/doctypes/xhtml10_transitional.rb +18 -0
  33. data/lib/fortitude/doctypes/xhtml11.rb +30 -0
  34. data/lib/fortitude/errors.rb +153 -0
  35. data/lib/fortitude/extensions/fortitude_ruby_ext.rb +76 -0
  36. data/lib/fortitude/extensions/native_extensions.rb +33 -0
  37. data/lib/fortitude/method_templates/assign_locals_from_template.rb.smpl +22 -0
  38. data/lib/fortitude/method_templates/need_assignment_template.rb.smpl +16 -0
  39. data/lib/fortitude/method_templates/need_method_template.rb.smpl +4 -0
  40. data/lib/fortitude/method_templates/simple_template.rb +50 -0
  41. data/lib/fortitude/method_templates/tag_method_template.rb.smpl +68 -0
  42. data/lib/fortitude/method_templates/text_method_template.rb.smpl +17 -0
  43. data/lib/fortitude/rails.rb +26 -0
  44. data/lib/fortitude/rails/helpers.rb +153 -0
  45. data/lib/fortitude/rails/railtie.rb +256 -0
  46. data/lib/fortitude/rails/renderer.rb +43 -0
  47. data/lib/fortitude/rails/template_handler.rb +23 -0
  48. data/lib/fortitude/rails/widget_methods.rb +13 -0
  49. data/lib/fortitude/rails/yielded_object_outputter.rb +31 -0
  50. data/lib/fortitude/rendering_context.rb +205 -0
  51. data/lib/fortitude/support/assigns_proxy.rb +77 -0
  52. data/lib/fortitude/support/class_inheritable_attributes.rb +98 -0
  53. data/lib/fortitude/support/instance_variable_set.rb +76 -0
  54. data/lib/fortitude/support/staticized_method.rb +87 -0
  55. data/lib/fortitude/tags/partial_tag_placeholder.rb +19 -0
  56. data/lib/fortitude/tags/tag.rb +189 -0
  57. data/lib/fortitude/tags/tag_return_value.rb +13 -0
  58. data/lib/fortitude/tags/tag_store.rb +53 -0
  59. data/lib/fortitude/tags/tag_support.rb +51 -0
  60. data/lib/fortitude/tags/tags_module.rb +16 -0
  61. data/lib/fortitude/tilt.rb +17 -0
  62. data/lib/fortitude/tilt/fortitude_template.rb +169 -0
  63. data/lib/fortitude/version.rb +3 -0
  64. data/lib/fortitude/widget.rb +54 -0
  65. data/lib/fortitude/widget/around_content.rb +53 -0
  66. data/lib/fortitude/widget/capturing.rb +37 -0
  67. data/lib/fortitude/widget/content.rb +61 -0
  68. data/lib/fortitude/widget/doctypes.rb +53 -0
  69. data/lib/fortitude/widget/helpers.rb +62 -0
  70. data/lib/fortitude/widget/integration.rb +76 -0
  71. data/lib/fortitude/widget/localization.rb +63 -0
  72. data/lib/fortitude/widget/modules_and_subclasses.rb +58 -0
  73. data/lib/fortitude/widget/needs.rb +164 -0
  74. data/lib/fortitude/widget/non_rails_widget_methods.rb +13 -0
  75. data/lib/fortitude/widget/rendering.rb +98 -0
  76. data/lib/fortitude/widget/start_and_end_comments.rb +69 -0
  77. data/lib/fortitude/widget/staticization.rb +50 -0
  78. data/lib/fortitude/widget/tag_like_methods.rb +102 -0
  79. data/lib/fortitude/widget/tags.rb +55 -0
  80. data/lib/fortitude/widget/temporary_overrides.rb +28 -0
  81. data/lib/fortitude/widget/widget_class_inheritable_attributes.rb +35 -0
  82. data/lib/fortitude/widgets.rb +12 -0
  83. data/lib/fortitude/widgets/html4_frameset.rb +9 -0
  84. data/lib/fortitude/widgets/html4_strict.rb +9 -0
  85. data/lib/fortitude/widgets/html4_transitional.rb +9 -0
  86. data/lib/fortitude/widgets/html5.rb +9 -0
  87. data/lib/fortitude/widgets/xhtml10_frameset.rb +9 -0
  88. data/lib/fortitude/widgets/xhtml10_strict.rb +9 -0
  89. data/lib/fortitude/widgets/xhtml10_transitional.rb +9 -0
  90. data/lib/fortitude/widgets/xhtml11.rb +9 -0
  91. data/lib/fortitude_jruby_native_ext.jar +0 -0
  92. data/spec/helpers/global_helper.rb +8 -0
  93. data/spec/helpers/rails_helpers.rb +85 -0
  94. data/spec/helpers/rails_server.rb +386 -0
  95. data/spec/helpers/system_helpers.rb +117 -0
  96. data/spec/rails/basic_rails_system_spec.rb +7 -0
  97. data/spec/rails/capture_system_spec.rb +75 -0
  98. data/spec/rails/class_loading_system_spec.rb +63 -0
  99. data/spec/rails/complex_helpers_system_spec.rb +33 -0
  100. data/spec/rails/data_passing_system_spec.rb +96 -0
  101. data/spec/rails/default_layout_system_spec.rb +15 -0
  102. data/spec/rails/development_mode_system_spec.rb +67 -0
  103. data/spec/rails/erb_integration_system_spec.rb +23 -0
  104. data/spec/rails/helpers_include_all_off_system_spec.rb +7 -0
  105. data/spec/rails/helpers_system_spec.rb +79 -0
  106. data/spec/rails/helpers_unrefined_system_spec.rb +7 -0
  107. data/spec/rails/layouts_system_spec.rb +60 -0
  108. data/spec/rails/localization_system_spec.rb +38 -0
  109. data/spec/rails/production_mode_system_spec.rb +13 -0
  110. data/spec/rails/rendering_context_system_spec.rb +64 -0
  111. data/spec/rails/rendering_system_spec.rb +158 -0
  112. data/spec/rails/rules_system_spec.rb +23 -0
  113. data/spec/rails/static_method_system_spec.rb +12 -0
  114. data/spec/rails/templates/base/app/controllers/application_controller.rb +15 -0
  115. data/spec/rails/templates/base/app/controllers/working_controller.rb +5 -0
  116. data/spec/rails/templates/base/app/views/layouts/application.html.erb +11 -0
  117. data/spec/rails/templates/base/config/routes.rb +4 -0
  118. data/spec/rails/templates/base/config/secrets.yml +22 -0
  119. data/spec/rails/templates/basic_rails_system_spec/app/controllers/basic_rails_system_spec_controller.rb +8 -0
  120. data/spec/rails/templates/basic_rails_system_spec/app/views/basic_rails_system_spec/trivial_widget.rb +5 -0
  121. data/spec/rails/templates/capture_system_spec/app/controllers/capture_system_spec_controller.rb +37 -0
  122. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/_some_erb_partial.html.erb +1 -0
  123. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/another_widget.rb +7 -0
  124. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/capture_erb_from_widget.rb +11 -0
  125. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/capture_widget_from_erb.html.erb +9 -0
  126. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/capture_widget_from_widget.rb +17 -0
  127. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/some_widget.rb +5 -0
  128. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/widget_content_for.rb +19 -0
  129. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/widget_layout_needing_content_yield_with_erb.html.erb +13 -0
  130. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/widget_provide.rb +13 -0
  131. data/spec/rails/templates/capture_system_spec/app/views/layouts/erb_layout_needing_content.html.erb +15 -0
  132. data/spec/rails/templates/capture_system_spec/app/views/layouts/widget_layout_needing_content_content_for.rb +23 -0
  133. data/spec/rails/templates/capture_system_spec/app/views/layouts/widget_layout_needing_content_yield.rb +23 -0
  134. data/spec/rails/templates/class_loading_system_spec/app/controllers/class_loading_system_spec_controller.rb +74 -0
  135. data/spec/rails/templates/class_loading_system_spec/app/models/views/app_models_helper.rb +5 -0
  136. data/spec/rails/templates/class_loading_system_spec/app/models/views/models_widget.rb +5 -0
  137. data/spec/rails/templates/class_loading_system_spec/app/views/autoload_namespace/autoload_widget.rb +11 -0
  138. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/_loaded_underscore_widget.rb +11 -0
  139. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/_underscore_view.rb +5 -0
  140. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/_underscore_widget.rb +11 -0
  141. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/app_models.rb +6 -0
  142. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/autoload_one_widget_from_another.rb +7 -0
  143. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/class_should_not_load.rb +9 -0
  144. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/lib_views.rb +8 -0
  145. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/use_lib_widget_from_view_widget.rb +9 -0
  146. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/use_models_widget_from_view_widget.rb +7 -0
  147. data/spec/rails/templates/class_loading_system_spec/app/views/some_namespace/some_other_namespace/.git_keep +0 -0
  148. data/spec/rails/templates/class_loading_system_spec/app/views/sub_widget.rb +5 -0
  149. data/spec/rails/templates/class_loading_system_spec/lib/arbitrary_name/some_widget.rb +7 -0
  150. data/spec/rails/templates/class_loading_system_spec/lib/views/class_loading_system_spec/lib_views_helper.rb +5 -0
  151. data/spec/rails/templates/class_loading_system_spec/lib/views/class_loading_system_spec/widget_defined_outside_app_views.rb +5 -0
  152. data/spec/rails/templates/class_loading_system_spec/lib/views/lib_widget.rb +5 -0
  153. data/spec/rails/templates/complex_helpers_system_spec/app/controllers/complex_helpers_system_spec_controller.rb +14 -0
  154. data/spec/rails/templates/complex_helpers_system_spec/app/views/complex_helpers_system_spec/cache_test.rb +12 -0
  155. data/spec/rails/templates/complex_helpers_system_spec/app/views/complex_helpers_system_spec/fields_for_test.rb +14 -0
  156. data/spec/rails/templates/complex_helpers_system_spec/app/views/complex_helpers_system_spec/form_for_test.rb +14 -0
  157. data/spec/rails/templates/complex_helpers_system_spec/config/environments/development.rb +31 -0
  158. data/spec/rails/templates/data_passing_system_spec/app/controllers/data_passing_system_spec_controller.rb +101 -0
  159. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/_erb_to_parallel_widget_handoff_erb.html.erb +3 -0
  160. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/_implicit_erb_to_widget_handoff_erb.html.erb +3 -0
  161. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/_implicit_variable_write_erb.html.erb +1 -0
  162. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/_widget_to_parallel_erb_handoff_erb.html.erb +1 -0
  163. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/erb_copied_variables.html.erb +1 -0
  164. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/erb_to_parallel_widget_handoff.html.erb +2 -0
  165. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/erb_to_parallel_widget_handoff_widget.rb +5 -0
  166. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/explicit_controller_variable_read.rb +6 -0
  167. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/extra_variables.rb +23 -0
  168. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/extra_variables_requested.rb +24 -0
  169. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_erb_to_widget_handoff.html.erb +2 -0
  170. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_erb_to_widget_handoff_widget.rb +7 -0
  171. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access.rb +5 -0
  172. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inheritance.rb +6 -0
  173. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inheritance_child_one.rb +7 -0
  174. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inheritance_child_two.rb +5 -0
  175. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inheritance_parent.rb +3 -0
  176. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inner.rb +8 -0
  177. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_variable_read.rb +5 -0
  178. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_variable_read_inner.rb +7 -0
  179. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_variable_write.html.erb +2 -0
  180. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_variable_write_widget.rb +7 -0
  181. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/parent_to_child_passing.rb +7 -0
  182. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/parent_to_child_passing_child.rb +7 -0
  183. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/parent_to_child_passing_partial.rb +7 -0
  184. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/parent_to_child_passing_partial_child.rb +7 -0
  185. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/passing_data_widget.rb +8 -0
  186. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/passing_locals_and_controller_variables_widget.rb +9 -0
  187. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/passing_locals_widget.rb +8 -0
  188. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/variables_to_layout.rb +7 -0
  189. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/widget_copied_variables.rb +9 -0
  190. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/widget_to_parallel_erb_handoff.html.erb +2 -0
  191. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/widget_to_parallel_erb_handoff_widget.rb +5 -0
  192. data/spec/rails/templates/data_passing_system_spec/app/views/layouts/data_layout.rb +14 -0
  193. data/spec/rails/templates/default_layout_system_spec/app/controllers/default_layout_system_spec_controller.rb +9 -0
  194. data/spec/rails/templates/default_layout_system_spec/app/views/default_layout_system_spec/erb_with_widget_default_layout.html.erb +1 -0
  195. data/spec/rails/templates/default_layout_system_spec/app/views/default_layout_system_spec/widget_with_widget_default_layout.rb +5 -0
  196. data/spec/rails/templates/default_layout_system_spec/app/views/layouts/application.rb +12 -0
  197. data/spec/rails/templates/development_mode_system_spec/app/controllers/development_mode_system_spec_controller.rb +9 -0
  198. data/spec/rails/templates/development_mode_system_spec/app/views/development_mode_system_spec/reload_widget.rb +7 -0
  199. data/spec/rails/templates/development_mode_system_spec/app/views/development_mode_system_spec/sample_output.rb +9 -0
  200. data/spec/rails/templates/erb_integration_system_spec/app/controllers/erb_integration_system_spec_controller.rb +10 -0
  201. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/_erb_partial_from_widget_partial.html.erb +1 -0
  202. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/_fortitude_partial_with_underscore_partial.rb +5 -0
  203. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/_prefers_erb_partial_partial.html.erb +1 -0
  204. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/erb_partial_from_widget.rb +7 -0
  205. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/erb_to_widget_with_render_partial.html.erb +3 -0
  206. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/erb_to_widget_with_render_partial_widget.rb +5 -0
  207. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/fortitude_partial_with_underscore.html.erb +3 -0
  208. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/prefers_erb_partial.html.erb +3 -0
  209. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/prefers_erb_partial_partial.rb +5 -0
  210. data/spec/rails/templates/helpers_include_all_off_system_spec/app/controllers/helpers_include_all_off_system_spec_controller.rb +13 -0
  211. data/spec/rails/templates/helpers_include_all_off_system_spec/app/helpers/application_helper.rb +5 -0
  212. data/spec/rails/templates/helpers_include_all_off_system_spec/app/helpers/some_helper.rb +5 -0
  213. data/spec/rails/templates/helpers_include_all_off_system_spec/app/views/helpers_include_all_off_system_spec/include_all_off.rb +23 -0
  214. data/spec/rails/templates/helpers_include_all_off_system_spec/config/application.rb +28 -0
  215. data/spec/rails/templates/helpers_system_spec/app/controllers/helpers_system_spec_controller.rb +86 -0
  216. data/spec/rails/templates/helpers_system_spec/app/helpers/some_helper.rb +21 -0
  217. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_disabled.rb +37 -0
  218. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_inheritance.rb +6 -0
  219. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_inheritance_child_one.rb +34 -0
  220. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_inheritance_child_two.rb +36 -0
  221. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_inheritance_parent.rb +4 -0
  222. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/basic_helpers.rb +13 -0
  223. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/block_helpers.rb +7 -0
  224. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/built_in_outputting_helpers.rb +13 -0
  225. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/built_in_outputting_to_returning.rb +8 -0
  226. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/built_in_returning_to_outputting.rb +10 -0
  227. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/controller_helper_method.rb +5 -0
  228. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/controller_helper_module.rb +5 -0
  229. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_helper_outputs.rb +6 -0
  230. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_helpers_basic.rb +5 -0
  231. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_helpers_with_a_block.rb +6 -0
  232. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_outputting_to_returning.rb +7 -0
  233. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_returning_to_outputting.rb +10 -0
  234. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/helper_settings_inheritance.rb +10 -0
  235. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/helper_settings_inheritance_parent.rb +4 -0
  236. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/helpers_that_output_when_refined.rb +9 -0
  237. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/private_helper_erb.html.erb +1 -0
  238. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/private_helper_fortitude.rb +5 -0
  239. data/spec/rails/templates/helpers_system_spec/lib/some_stuff.rb +5 -0
  240. data/spec/rails/templates/helpers_unrefined_system_spec/app/controllers/helpers_unrefined_system_spec_controller.rb +7 -0
  241. data/spec/rails/templates/helpers_unrefined_system_spec/app/views/helpers_unrefined_system_spec/helpers_that_output_when_refined.rb +9 -0
  242. data/spec/rails/templates/helpers_unrefined_system_spec/config/environments/production.rb +31 -0
  243. data/spec/rails/templates/layouts_system_spec/app/controllers/layouts_system_spec_controller.rb +31 -0
  244. data/spec/rails/templates/layouts_system_spec/app/views/layouts/alternate.html.erb +11 -0
  245. data/spec/rails/templates/layouts_system_spec/app/views/layouts/application.html.erb +26 -0
  246. data/spec/rails/templates/layouts_system_spec/app/views/layouts/explicit_yield.rb +12 -0
  247. data/spec/rails/templates/layouts_system_spec/app/views/layouts/widget_layout.rb +22 -0
  248. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/erb_inside_widget_layout.html.erb +8 -0
  249. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/the_render_widget.rb +5 -0
  250. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/widget_inside_erb_layout.rb +8 -0
  251. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/widget_inside_widget_layout.rb +8 -0
  252. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/yield_from_widget_explicitly.rb +5 -0
  253. data/spec/rails/templates/localization_system_spec/app/controllers/localization_system_spec_controller.rb +31 -0
  254. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/content_method.rb +13 -0
  255. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/dot_notation.rb +5 -0
  256. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/explicit_html.rb +13 -0
  257. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/i18n_t.rb +5 -0
  258. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/native_support.rb +7 -0
  259. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/readjust_base.rb +7 -0
  260. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/t.rb +5 -0
  261. data/spec/rails/templates/localization_system_spec/config/locales/en.yml +21 -0
  262. data/spec/rails/templates/localization_system_spec/config/locales/fr.yml +14 -0
  263. data/spec/rails/templates/localization_system_spec/config/locales/pt.yml +2 -0
  264. data/spec/rails/templates/production_mode_system_spec/app/controllers/production_mode_system_spec_controller.rb +5 -0
  265. data/spec/rails/templates/production_mode_system_spec/app/views/production_mode_system_spec/sample_output.rb +9 -0
  266. data/spec/rails/templates/rendering_context_system_spec/app/controllers/rendering_context_system_spec_controller.rb +72 -0
  267. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/_start_end_widget_through_partials_partial.html.erb +1 -0
  268. 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
  269. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/_uses_specified_context_through_nesting_partial.html.erb +2 -0
  270. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/render_widget.rb +5 -0
  271. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_basic.rb +12 -0
  272. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_basic_inner.rb +7 -0
  273. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_through_partials.rb +16 -0
  274. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_through_partials_partial_widget.rb +7 -0
  275. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_direct_context_for_all_widgets.rb +7 -0
  276. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_direct_context_for_all_widgets_widget.rb +5 -0
  277. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_direct_context_in_view.rb +5 -0
  278. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_in_partials.html.erb +3 -0
  279. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_in_partials_partial.rb +5 -0
  280. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_in_view.rb +5 -0
  281. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_through_nesting.rb +6 -0
  282. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_through_nesting_inner_partial.rb +5 -0
  283. data/spec/rails/templates/rendering_context_system_spec/lib/simple_rc.rb +17 -0
  284. data/spec/rails/templates/rendering_system_spec/app/controllers/rendering_system_spec_controller.rb +111 -0
  285. data/spec/rails/templates/rendering_system_spec/app/views/layouts/application.html.erb +19 -0
  286. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/_layout_for_partial.html.erb +3 -0
  287. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/_the_partial.html.erb +1 -0
  288. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/partial_with_layout.rb +5 -0
  289. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_collection.html.erb +3 -0
  290. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_collection_as.html.erb +3 -0
  291. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_file_from_widget.rb +7 -0
  292. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_html_safe_strings.rb +16 -0
  293. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_inline_from_widget.rb +11 -0
  294. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_object.html.erb +3 -0
  295. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_partial_from_widget.rb +7 -0
  296. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_partial_with_layout.html.erb +3 -0
  297. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_partial_with_widget_layout.html.erb +3 -0
  298. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_template_from_widget.rb +7 -0
  299. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_text_from_widget.rb +7 -0
  300. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/stream_widget.rb +13 -0
  301. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/trivial_widget.rb +5 -0
  302. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/widget_layout_for_partial.rb +7 -0
  303. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/widget_with_name.rb +7 -0
  304. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/word.rb +7 -0
  305. data/spec/rails/templates/rendering_system_spec/app/views/widget_to_render.rb +7 -0
  306. data/spec/rails/templates/rules_system_spec/app/controllers/rules_system_spec_controller.rb +22 -0
  307. data/spec/rails/templates/rules_system_spec/app/views/layouts/fortitude_layout_with_p.rb +19 -0
  308. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/_intervening_partial_erb_partial.html.erb +1 -0
  309. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/intervening_partial.rb +9 -0
  310. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/intervening_partial_fortitude_partial.rb +9 -0
  311. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalid_start_tag_in_partial.html.erb +3 -0
  312. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalid_start_tag_in_partial_partial.rb +9 -0
  313. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalid_start_tag_in_view.rb +9 -0
  314. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalidly_nested_tag.rb +11 -0
  315. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalidly_nested_tag_in_partial.html.erb +3 -0
  316. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalidly_nested_tag_in_partial_partial.rb +11 -0
  317. data/spec/rails/templates/static_method_system_spec/app/controllers/static_method_system_spec_controller.rb +15 -0
  318. data/spec/rails/templates/static_method_system_spec/app/helpers/some_helper.rb +10 -0
  319. data/spec/rails/templates/static_method_system_spec/app/views/static_method_system_spec/allows_helper_access.rb +8 -0
  320. data/spec/rails/templates/static_method_system_spec/app/views/static_method_system_spec/localization.rb +7 -0
  321. data/spec/rails/templates/static_method_system_spec/config/locales/en.yml +4 -0
  322. data/spec/rails/templates/static_method_system_spec/config/locales/fr.yml +4 -0
  323. data/spec/system/around_content_system_spec.rb +399 -0
  324. data/spec/system/assigns_system_spec.rb +316 -0
  325. data/spec/system/attribute_rules_system_spec.rb +227 -0
  326. data/spec/system/basic_system_spec.rb +9 -0
  327. data/spec/system/content_inheritance_system_spec.rb +13 -0
  328. data/spec/system/convenience_methods_system_spec.rb +30 -0
  329. data/spec/system/doctypes_system_spec.rb +228 -0
  330. data/spec/system/erector_compatibility_system_spec.rb +84 -0
  331. data/spec/system/escaping_system_spec.rb +43 -0
  332. data/spec/system/formatting_system_spec.rb +63 -0
  333. data/spec/system/helpers_system_spec.rb +235 -0
  334. data/spec/system/id_uniqueness_system_spec.rb +205 -0
  335. data/spec/system/inline_system_spec.rb +58 -0
  336. data/spec/system/localization_system_spec.rb +94 -0
  337. data/spec/system/method_precedence_system_spec.rb +48 -0
  338. data/spec/system/needs_system_spec.rb +381 -0
  339. data/spec/system/other_outputters_system_spec.rb +117 -0
  340. data/spec/system/rails_not_available_spec.rb +11 -0
  341. data/spec/system/rebuild_notifications_system_spec.rb +208 -0
  342. data/spec/system/rendering_context_system_spec.rb +83 -0
  343. data/spec/system/setting_inheritance_system_spec.rb +585 -0
  344. data/spec/system/shared_variable_system_spec.rb +120 -0
  345. data/spec/system/start_end_comments_system_spec.rb +363 -0
  346. data/spec/system/static_method_system_spec.rb +348 -0
  347. data/spec/system/tag_rendering_system_spec.rb +260 -0
  348. data/spec/system/tag_return_value_system_spec.rb +41 -0
  349. data/spec/system/tag_rules_system_spec.rb +196 -0
  350. data/spec/system/tag_updating_system_spec.rb +171 -0
  351. data/spec/system/tilt_system_spec.rb +382 -0
  352. data/spec/system/unparsed_data_system_spec.rb +16 -0
  353. data/spec/system/void_tags_system_spec.rb +90 -0
  354. data/spec/system/widget_return_values_system_spec.rb +107 -0
  355. metadata +759 -0
@@ -0,0 +1,235 @@
1
+ describe "Fortitude helper support", :type => :system do
2
+ before :each do
3
+ @output_buffer = ""
4
+ @output_buffer_holder_class = Class.new do
5
+ attr_accessor :output_buffer
6
+ end
7
+ @output_buffer_holder = @output_buffer_holder_class.new
8
+ @output_buffer_holder.output_buffer = @output_buffer
9
+
10
+ @helpers_class = Class.new do
11
+ attr_accessor :output_buffer_holder
12
+
13
+ def helper1
14
+ "this is helper1"
15
+ end
16
+
17
+ def helper2(input)
18
+ "this is #{input} helper2"
19
+ end
20
+
21
+ def helper3(input)
22
+ output_buffer << "this is #{input} helper3"
23
+ end
24
+
25
+ def helper4(arg)
26
+ result = yield(arg)
27
+ "foo #{result} bar"
28
+ end
29
+
30
+ def p(input)
31
+ "pp#{input}pp"
32
+ end
33
+
34
+ def kaboom
35
+ raise "kaboom!"
36
+ end
37
+
38
+ def output_buffer
39
+ @output_buffer_holder.output_buffer
40
+ end
41
+ end
42
+
43
+ @helpers_object = @helpers_class.new
44
+ @helpers_object.output_buffer_holder = @output_buffer_holder
45
+ end
46
+
47
+ def render(widget_or_class, options = { })
48
+ @output_buffer.replace("")
49
+ super(widget_or_class, { :rendering_context => rc(
50
+ :helpers_object => @helpers_object, :output_buffer_holder => @output_buffer_holder) }.merge(options))
51
+ end
52
+
53
+ describe "manual invocation of helpers using #invoke_helper" do
54
+ it "should work for a very simple helper, without arguments" do
55
+ expect(render(widget_class_with_content { s = invoke_helper(:helper1); text s })).to eq("this is helper1")
56
+ end
57
+
58
+ it "should allow passing arguments" do
59
+ expect(render(widget_class_with_content { s = invoke_helper(:helper2, 'foo'); text s })).to eq("this is foo helper2")
60
+ end
61
+
62
+ it "should work even if automatic_helper_access is off" do
63
+ wc = widget_class do
64
+ automatic_helper_access false
65
+ def content
66
+ text invoke_helper(:helper1)
67
+ end
68
+ end
69
+
70
+ expect(render(wc)).to eq("this is helper1")
71
+ end
72
+
73
+ it "should allow passing a block" do
74
+ expect(render(widget_class_with_content { text invoke_helper(:helper4, "b") { |a| "x#{a}x" } })).to eq("foo xbx bar")
75
+ end
76
+
77
+ it "should return an exception properly" do
78
+ expect { render(widget_class_with_content { invoke_helper(:kaboom) }) }.to raise_error(/kaboom!/i)
79
+ end
80
+
81
+ it "should allow calling a helper that outputs" do
82
+ expect(render(widget_class_with_content { invoke_helper(:helper3, "aaa") })).to eq("this is aaa helper3")
83
+ end
84
+
85
+ it "should allow calling a method that's overridden on Widget" do
86
+ expect(render(widget_class_with_content { text invoke_helper(:p, "a") })).to eq("ppapp")
87
+ end
88
+ end
89
+
90
+ it "should, by default, allow automatic access to helpers" do
91
+ expect(render(widget_class_with_content { text "helper1: #{helper1}" })).to eq("helper1: this is helper1")
92
+ expect(render(widget_class_with_content { text "helper2: #{helper2("yo")}" })).to eq("helper2: this is yo helper2")
93
+ expect(render(widget_class_with_content { helper3("ho") })).to eq("this is ho helper3")
94
+ end
95
+
96
+ it "should not allow automatic access to helpers if we say not to" do
97
+ wc = widget_class do
98
+ automatic_helper_access false
99
+ def content
100
+ helper1_value = begin
101
+ helper1
102
+ rescue => e
103
+ e.class.name
104
+ end
105
+
106
+ helper2_value = begin
107
+ helper2("foo")
108
+ rescue => e
109
+ e.class.name
110
+ end
111
+
112
+ helper3_value = begin
113
+ helper3("bar")
114
+ rescue => e
115
+ e.class.name
116
+ end
117
+
118
+ text "helper1: #{helper1_value}, helper2: #{helper2_value}, helper3: #{helper3_value}"
119
+ end
120
+ end
121
+
122
+ expect(render(wc)).to eq("helper1: NameError, helper2: NoMethodError, helper3: NoMethodError")
123
+ end
124
+
125
+ it "should allow manually declaring helpers" do
126
+ wc = widget_class do
127
+ automatic_helper_access false
128
+ helper :helper1, :helper3
129
+ def content
130
+ helper2_value = begin
131
+ helper2("foo")
132
+ rescue => e
133
+ e.class.name
134
+ end
135
+
136
+ text "helper1: #{helper1}, helper2: #{helper2_value}, helper3: "
137
+ helper3("hi")
138
+ end
139
+ end
140
+
141
+ expect(render(wc)).to eq("helper1: this is helper1, helper2: NoMethodError, helper3: this is hi helper3")
142
+ end
143
+
144
+ it "should allow overriding a manually-declared helper, and allow use of #super" do
145
+ wc = widget_class do
146
+ automatic_helper_access false
147
+ helper :helper1
148
+
149
+ def helper1
150
+ "xx" + super + "yy"
151
+ end
152
+
153
+ def content
154
+ text "helper1: #{helper1}"
155
+ end
156
+ end
157
+
158
+ expect(render(wc)).to eq("helper1: xxthis is helper1yy")
159
+ end
160
+
161
+ it "should allow overriding a helper accessed using automatic_helper_access, and allow use of #super" do
162
+ wc = widget_class do
163
+ def helper1
164
+ "xx" + super + "yy"
165
+ end
166
+
167
+ def content
168
+ text "helper1: #{helper1}"
169
+ end
170
+ end
171
+
172
+ expect(render(wc)).to eq("helper1: xxthis is helper1yy")
173
+ end
174
+
175
+ it "should allow transforming helpers that return to helpers that output" do
176
+ wc = widget_class do
177
+ helper :helper1, :transform => :output_return_value
178
+
179
+ def content
180
+ text "helper1: "
181
+ helper1
182
+ end
183
+ end
184
+
185
+ expect(render(wc)).to eq("helper1: this is helper1")
186
+ end
187
+
188
+ it "should allow transforming helpers that output to helpers that return" do
189
+ wc = widget_class do
190
+ helper :helper3, :transform => :return_output
191
+
192
+ def content
193
+ helper3_value = helper3("boo")
194
+ text "helper3: #{helper3_value}, done"
195
+ end
196
+ end
197
+
198
+ expect(render(wc)).to eq("helper3: this is boo helper3, done")
199
+ end
200
+
201
+ it "should allow aliasing helper method names" do
202
+ wc = widget_class do
203
+ helper :h2a, :call => :helper2
204
+ helper :h2b, :call => :helper2, :transform => :output_return_value
205
+
206
+ def content
207
+ h2b("yo")
208
+ text ", h2a: #{h2a('xx')}, done"
209
+ end
210
+ end
211
+
212
+ expect(render(wc)).to eq("this is yo helper2, h2a: this is xx helper2, done")
213
+ end
214
+
215
+ it "should allow declaring helpers with :transform = nil, false, or none" do
216
+ wc = widget_class do
217
+ automatic_helper_access false
218
+ helper :helper1, :transform => nil
219
+ helper :helper2, :transform => false
220
+ helper :helper3, :transform => :none
221
+
222
+ def content
223
+ text "helper1: #{helper1}, helper2: #{helper2('yo')}, helper3: "
224
+ helper3("hi")
225
+ end
226
+ end
227
+
228
+ expect(render(wc)).to eq("helper1: this is helper1, helper2: this is yo helper2, helper3: this is hi helper3")
229
+ end
230
+
231
+ it "should validate the options passed to .helper" do
232
+ expect { widget_class { helper :foo, :transform => :boo } }.to raise_error(ArgumentError)
233
+ expect { widget_class { helper :foo, :foo => :bar } }.to raise_error(ArgumentError)
234
+ end
235
+ end
@@ -0,0 +1,205 @@
1
+ describe "Fortitude ID uniqueness", :type => :system do
2
+ def widget_class(options = { }, &block)
3
+ needs_uniqueness = true unless options.delete(:no_enforcement)
4
+ out = super(options, &block)
5
+ out.class_eval { enforce_id_uniqueness true } if needs_uniqueness
6
+ out
7
+ end
8
+
9
+ it "should not enforce ID uniqueness by default" do
10
+ wc = widget_class_with_content(:no_enforcement => true) do
11
+ p :id => "foo"
12
+ p :id => "foo"
13
+ end
14
+
15
+ expect(render(wc)).to eq("<p id=\"foo\"></p><p id=\"foo\"></p>")
16
+ end
17
+
18
+ it "should enforce ID uniqueness if asked to" do
19
+ wc = widget_class_with_content do
20
+ p :id => "foo"
21
+ p :id => "foo"
22
+ end
23
+
24
+ instance = wc.new
25
+ e = capture_exception(Fortitude::Errors::DuplicateId) { render(instance) }
26
+ expect(e.widget).to be(instance)
27
+ expect(e.id).to eq("foo")
28
+ expect(e.already_used_widget).to be(instance)
29
+ expect(e.already_used_tag_name).to eq(:p)
30
+ expect(e.tag_name).to eq(:p)
31
+ end
32
+
33
+ it "should enforce ID uniqueness between Symbols and Strings properly" do
34
+ wc = widget_class_with_content do
35
+ p :id => :foo
36
+ p :id => "foo"
37
+ end
38
+
39
+ instance = wc.new
40
+ e = capture_exception(Fortitude::Errors::DuplicateId) { render(instance) }
41
+ expect(e.widget).to be(instance)
42
+ expect(e.id).to eq("foo")
43
+ expect(e.already_used_widget).to be(instance)
44
+ expect(e.already_used_tag_name).to eq(:p)
45
+ expect(e.tag_name).to eq(:p)
46
+ end
47
+
48
+ it "should enforce ID uniqueness across different kinds of tags" do
49
+ wc = widget_class_with_content do
50
+ p :id => "foo"
51
+ div :id => :foo
52
+ end
53
+
54
+ instance = wc.new
55
+ e = capture_exception(Fortitude::Errors::DuplicateId) { render(instance) }
56
+ expect(e.widget).to be(instance)
57
+ expect(e.id).to eq("foo")
58
+ expect(e.already_used_widget).to be(instance)
59
+ expect(e.already_used_tag_name).to eq(:p)
60
+ expect(e.tag_name).to eq(:div)
61
+ end
62
+
63
+ it "should enforce ID uniqueness across different widgets" do
64
+ outer = widget_class do
65
+ attr_accessor :inner
66
+ def content
67
+ p :id => 'foo'
68
+ widget inner
69
+ end
70
+ end
71
+
72
+ inner = widget_class_with_content do
73
+ p :id => :foo
74
+ end
75
+
76
+ outer_instance = outer.new
77
+ inner_instance = inner.new
78
+ outer_instance.inner = inner_instance
79
+
80
+ e = capture_exception(Fortitude::Errors::DuplicateId) { render(outer_instance) }
81
+ expect(e.widget).to be(inner_instance)
82
+ expect(e.id).to eq("foo")
83
+ expect(e.already_used_widget).to be(outer_instance)
84
+ expect(e.already_used_tag_name).to eq(:p)
85
+ expect(e.tag_name).to eq(:p)
86
+ end
87
+
88
+ it "should not enforce uniqueness inside a widget with the setting off, even if surrounding widgets have it on" do
89
+ outer = widget_class do
90
+ attr_accessor :inner
91
+ def content
92
+ p :id => 'foo'
93
+ widget inner
94
+ p :id => 'bar'
95
+ end
96
+ end
97
+
98
+ inner = widget_class_with_content(:no_enforcement => true) do
99
+ p :id => :foo
100
+ end
101
+
102
+ outer_instance = outer.new
103
+ inner_instance = inner.new
104
+ outer_instance.inner = inner_instance
105
+
106
+ expect(render(outer_instance)).to eq("<p id=\"foo\"></p><p id=\"foo\"></p><p id=\"bar\"></p>")
107
+ end
108
+
109
+ it "should allow you to disable enforcement with a block" do
110
+ wc = widget_class_with_content do
111
+ p :id => :foo
112
+ with_id_uniqueness(false) do
113
+ p :id => :foo
114
+ end
115
+ begin
116
+ p :id => :foo
117
+ rescue => e
118
+ text e.class.name
119
+ end
120
+ end
121
+
122
+ expect(render(wc)).to eq('<p id="foo"></p><p id="foo"></p>Fortitude::Errors::DuplicateId')
123
+ end
124
+
125
+ it "should allow you to disable enforcement with a block, even across widget boundaries" do
126
+ outer = widget_class do
127
+ attr_accessor :inner
128
+ def content
129
+ p :id => 'foo'
130
+ with_id_uniqueness(false) do
131
+ widget inner
132
+ end
133
+ p :id => 'bar'
134
+ end
135
+ end
136
+
137
+ inner = widget_class_with_content do
138
+ p :id => :foo
139
+ end
140
+
141
+ outer_instance = outer.new
142
+ inner_instance = inner.new
143
+ outer_instance.inner = inner_instance
144
+
145
+ expect(render(outer_instance)).to eq("<p id=\"foo\"></p><p id=\"foo\"></p><p id=\"bar\"></p>")
146
+ end
147
+
148
+ it "should allow you to re-enable enforcement with a block" do
149
+ wc = widget_class_with_content do
150
+ p :id => :foo
151
+ with_id_uniqueness(false) do
152
+ with_id_uniqueness(true) do
153
+ p :id => :foo
154
+ end
155
+ end
156
+ end
157
+
158
+ expect { render(wc) }.to raise_error(Fortitude::Errors::DuplicateId)
159
+ end
160
+
161
+ it "should let you re-enable enforcement with a block, even across widget boundaries" do
162
+ outer = widget_class do
163
+ attr_accessor :inner
164
+ def content
165
+ p :id => 'foo'
166
+ with_id_uniqueness(false) do
167
+ widget inner
168
+ end
169
+ end
170
+ end
171
+
172
+ inner = widget_class_with_content do
173
+ with_id_uniqueness(true) do
174
+ p :id => :foo
175
+ end
176
+ end
177
+
178
+ outer_instance = outer.new
179
+ inner_instance = inner.new
180
+ outer_instance.inner = inner_instance
181
+
182
+ expect { render(outer_instance) }.to raise_error(Fortitude::Errors::DuplicateId)
183
+ end
184
+
185
+ it "should raise an error if you try to enable enforcement with a block in a widget that isn't enforcing in the first place" do
186
+ wc = widget_class_with_content(:no_enforcement => true) do
187
+ with_id_uniqueness(true) do
188
+ p :id => "foo"
189
+ end
190
+ end
191
+
192
+ expect { render(wc) }.to raise_error(ArgumentError)
193
+ end
194
+
195
+ it "should not raise an error if you try to DISable enforcement with a block in a widget that isn't enforcing in the first place" do
196
+ wc = widget_class_with_content(:no_enforcement => true) do
197
+ with_id_uniqueness(false) do
198
+ p :id => "foo"
199
+ p :id => "foo"
200
+ end
201
+ end
202
+
203
+ expect(render(wc)).to eq('<p id="foo"></p><p id="foo"></p>')
204
+ end
205
+ end
@@ -0,0 +1,58 @@
1
+ describe "Fortitude inline-code support", :type => :system do
2
+ it "should let you get a widget class back with .new_subclass" do
3
+ wc = widget_class
4
+ new_wc = wc.inline_subclass do
5
+ p "hello, world"
6
+ end
7
+ expect(render(new_wc)).to eq("<p>hello, world</p>")
8
+ end
9
+
10
+ it "should let you pass assigns to the new subclass, and inherit settings of the parent" do
11
+ wc = widget_class do
12
+ start_and_end_comments true
13
+ format_output true
14
+
15
+ needs :name
16
+ end
17
+
18
+ new_wc = wc.inline_subclass do
19
+ div {
20
+ p "hello, #{name}"
21
+ }
22
+ end
23
+
24
+ expect(render(new_wc.new(:name => 'julia'))).to eq(%{<!-- BEGIN (anonymous widget class) depth 0: :name => \"julia\" -->
25
+ <div>
26
+ <p>hello, julia</p>
27
+ </div>
28
+ <!-- END depth 0 -->})
29
+ end
30
+
31
+ it "should let you get rendered content back with .inline_html" do
32
+ data = ::Fortitude::Widgets::Html5.inline_html do
33
+ p "hello, world"
34
+ end
35
+ expect(data).to eq("<p>hello, world</p>")
36
+ end
37
+
38
+ it "should let you pass assigns to the new widget with .inline_html, and inherit settings of the parent" do
39
+ wc = widget_class do
40
+ start_and_end_comments true
41
+ format_output true
42
+
43
+ needs :name
44
+ end
45
+
46
+ content = wc.inline_html(:name => 'julia') do
47
+ div {
48
+ p "hello, #{name}"
49
+ }
50
+ end
51
+
52
+ expect(content).to eq(%{<!-- BEGIN (anonymous widget class) depth 0: :name => \"julia\" -->
53
+ <div>
54
+ <p>hello, julia</p>
55
+ </div>
56
+ <!-- END depth 0 -->})
57
+ end
58
+ end