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,20 @@
1
+ require 'fortitude/doctypes'
2
+ require 'fortitude/doctypes/base'
3
+
4
+ module Fortitude
5
+ module Doctypes
6
+ class UnknownDoctype < Base
7
+ def initialize(declaration = nil)
8
+ super(:unknown, declaration)
9
+ end
10
+
11
+ def default_javascript_tag_attributes
12
+ { }
13
+ end
14
+
15
+ def needs_cdata_in_javascript_tag?
16
+ false
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ require 'fortitude/doctypes'
2
+ require 'fortitude/doctypes/base'
3
+
4
+ module Fortitude
5
+ module Doctypes
6
+ class Xhtml10 < Base
7
+ def default_javascript_tag_attributes
8
+ { :type => 'text/javascript'.freeze }.freeze
9
+ end
10
+
11
+ def needs_cdata_in_javascript_tag?
12
+ true
13
+ end
14
+
15
+ def close_void_tags_must_be
16
+ true
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ require 'fortitude/doctypes'
2
+ require 'fortitude/doctypes/xhtml10'
3
+
4
+ module Fortitude
5
+ module Doctypes
6
+ class Xhtml10Frameset < Xhtml10
7
+ def initialize
8
+ super(:xhtml10_frameset, 'html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"')
9
+ end
10
+
11
+ class << self
12
+ def delegate_tag_stores
13
+ [ Fortitude::Doctypes::Html4TagsFrameset ]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'fortitude/doctypes'
2
+ require 'fortitude/doctypes/xhtml10'
3
+
4
+ module Fortitude
5
+ module Doctypes
6
+ class Xhtml10Strict < Xhtml10
7
+ def initialize
8
+ super(:xhtml10_strict, 'html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"')
9
+ end
10
+
11
+ class << self
12
+ def delegate_tag_stores
13
+ [ Fortitude::Doctypes::Html4TagsStrict ]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'fortitude/doctypes'
2
+ require 'fortitude/doctypes/xhtml10'
3
+
4
+ module Fortitude
5
+ module Doctypes
6
+ class Xhtml10Transitional < Xhtml10
7
+ def initialize
8
+ super(:xhtml10_transitional, 'html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"')
9
+ end
10
+
11
+ class << self
12
+ def delegate_tag_stores
13
+ [ Fortitude::Doctypes::Html4TagsTransitional ]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,30 @@
1
+ require 'fortitude/doctypes'
2
+ require 'fortitude/doctypes/base'
3
+
4
+ module Fortitude
5
+ module Doctypes
6
+ class Xhtml11 < Base
7
+ def initialize
8
+ super(:xhtml11, 'html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"')
9
+ end
10
+
11
+ def default_javascript_tag_attributes
12
+ { :type => 'text/javascript'.freeze }.freeze
13
+ end
14
+
15
+ def needs_cdata_in_javascript_tag?
16
+ true
17
+ end
18
+
19
+ def close_void_tags_must_be
20
+ true
21
+ end
22
+
23
+ class << self
24
+ def delegate_tag_stores
25
+ [ Fortitude::Doctypes::Html4TagsStrict ]
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,153 @@
1
+ module Fortitude
2
+ module Errors
3
+ class Base < StandardError; end
4
+
5
+ class MissingNeed < Base
6
+ attr_reader :widget, :missing_needs, :assigns
7
+
8
+ def initialize(widget, missing_needs, assigns)
9
+ super(%{The widget #{widget} requires the following parameters to render, but they were not supplied: #{missing_needs.sort_by(&:to_s).join(", ")}})
10
+ @widget = widget
11
+ @missing_needs = missing_needs
12
+ @assigns = assigns
13
+ end
14
+ end
15
+
16
+ class BlockPassedToNeedMethod < Base
17
+ attr_reader :widget, :method_name
18
+
19
+ def initialize(widget, method_name)
20
+ super(%{You passed a block to a method that's a 'needs' method of a Fortitude widget, #{widget}. } +
21
+ %{This can mean you've declared a 'need' with the same name as a Fortitude tag method (e.g., "needs :#{method_name}"), } +
22
+ %{and think you're calling the method that will generate that tag, when you're actually calling a method } +
23
+ %{that will ignore the block you passed and just return the value of that 'need'. If that is the case, try } +
24
+ %{calling the tag with 'tag_' prefixed to it (e.g., 'tag_#{method_name}'), which does the same thing; if not, remove } +
25
+ %{the block and try again.})
26
+ @widget = widget
27
+ @method_name = method_name
28
+ end
29
+ end
30
+
31
+ class ExtraAssigns < Base
32
+ attr_reader :widget, :extra_assigns
33
+
34
+ def initialize(widget, extra_assigns)
35
+ super(%{The widget #{widget} does not accept the following parameters: #{extra_assigns.keys.sort_by(&:to_s).join(", ")}})
36
+ @widget = widget
37
+ @extra_assigns = extra_assigns
38
+ end
39
+ end
40
+
41
+ class InvalidElementNesting < Base
42
+ attr_reader :widget, :enclosing_element_name, :enclosed_element_name
43
+
44
+ def initialize(widget, enclosing_tag, enclosed_tag)
45
+ message = %{The widget #{widget} tried to render an element that is not allowed by element nesting rules: you can't put a <#{enclosed_tag.name}> inside a <#{enclosing_tag.name}>.}
46
+ if enclosing_tag.spec
47
+ message << " (See '#{enclosing_tag.spec}' for more details.)"
48
+ end
49
+
50
+ super(message)
51
+ @widget = widget
52
+ @enclosing_tag = enclosing_tag
53
+ @enclosed_tag = enclosed_tag
54
+ end
55
+
56
+ def enclosing_tag_name
57
+ @enclosing_tag.name
58
+ end
59
+
60
+ def enclosed_tag_name
61
+ @enclosed_tag.name
62
+ end
63
+ end
64
+
65
+ class InvalidElementAttributes < Base
66
+ attr_reader :widget, :invalid_attributes_hash, :allowed_attribute_names
67
+
68
+ def initialize(widget, tag, invalid_attributes_hash, allowed_attribute_names)
69
+ message = %{The widget #{widget} tried to render an element, <#{tag.name}>, with attributes that are not allowed: #{invalid_attributes_hash.inspect}. Only these attributes are allowed: #{allowed_attribute_names.sort_by(&:to_s).inspect}}
70
+ if tag.spec
71
+ message << " (See '#{tag.spec}' for more details.)"
72
+ end
73
+
74
+ super(message)
75
+ @widget = widget
76
+ @tag = tag
77
+ @invalid_attributes_hash = invalid_attributes_hash
78
+ @allowed_attribute_names = allowed_attribute_names
79
+ end
80
+
81
+ def tag_name
82
+ @tag.name
83
+ end
84
+ end
85
+
86
+ class DuplicateId < Base
87
+ attr_reader :widget, :id, :already_used_widget, :already_used_tag_name, :tag_name
88
+
89
+ def initialize(widget, id, already_used_widget, already_used_tag_name, tag_name)
90
+ super(%{The widget #{widget} tried to use a DOM ID, '#{id}', that has already been used. It was originally used on a <#{already_used_tag_name}> tag within widget #{already_used_widget}, and is now trying to be used on a <#{tag_name}> tag.})
91
+ @widget = widget
92
+ @id = id
93
+ @already_used_widget = already_used_widget
94
+ @already_used_tag_name = already_used_tag_name
95
+ @tag_name = tag_name
96
+ end
97
+ end
98
+
99
+ class DynamicAccessFromStaticMethod < Base
100
+ attr_reader :widget, :static_method_name, :method_called
101
+
102
+ def initialize(widget, static_method_name, method_called)
103
+ super(%{The widget class #{widget.class.name} declared method #{static_method_name.inspect} to be static, but, when we went to make it static, we found that it called #{method_called.inspect}, and that accesses dynamic data; this therefore can't possibly be made static safely.})
104
+ @widget = widget
105
+ @static_method_name = static_method_name
106
+ @method_called = method_called
107
+ end
108
+ end
109
+
110
+ class NoContentAllowed < Base
111
+ attr_reader :widget
112
+
113
+ def initialize(widget, tag)
114
+ message = %{The widget #{widget} tried to render an element, <#{tag.name}>, with content inside it, but that element doesn't accept content.}
115
+ if tag.spec
116
+ message << " (See '#{tag.spec}' for more details.)"
117
+ end
118
+
119
+ super(message)
120
+ @widget = widget
121
+ @tag = tag
122
+ end
123
+
124
+ def tag_name
125
+ @tag
126
+ end
127
+ end
128
+
129
+ class NoReturnValueFromTag < Base
130
+ attr_reader :method_name
131
+
132
+ def initialize(method_name)
133
+ super(%{You're trying to call a method, #{method_name.inspect}, on the return value of a Fortitude
134
+ tag; tags don't return anything usable. (If you're migrating from Erector, this may
135
+ be a place where you used Erector syntax for classes or IDs -- e.g., p.some_class,
136
+ div.some_id!. Fortitude doesn't support these for important performance reasons;
137
+ you simply need to convert these to "p :class => :some_class" or
138
+ "div :id => :some_id".)})
139
+ @method_name = method_name
140
+ end
141
+ end
142
+
143
+ class TagNotFound < Base
144
+ attr_reader :tag_store, :tag_name
145
+
146
+ def initialize(tag_store, tag_name)
147
+ super(%{The tag store #{tag_store} has no tag named #{tag_name.inspect}.})
148
+ @tag_store = tag_store
149
+ @tag_name = tag_name
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,76 @@
1
+ require 'erb'
2
+
3
+ ::String.class_eval do
4
+ def fortitude_append_escaped_string(output)
5
+ raise ArgumentError, "You can only append to a String" unless output.kind_of?(String)
6
+
7
+ if html_safe?
8
+ output.original_concat(self)
9
+ else
10
+ output.original_concat(ERB::Util.html_escape(self))
11
+ end
12
+ end
13
+ end
14
+
15
+ ::Hash.class_eval do
16
+ {
17
+ 'FORTITUDE_HYPHEN' => '-',
18
+ 'FORTITUDE_EQUALS_QUOTE' => '="',
19
+ 'FORTITUDE_QUOTE' => '"',
20
+ 'FORTITUDE_SPACE' => ' ',
21
+ 'TARGET_BASE' => ""
22
+ }.each do |constant_name, value|
23
+ value = value.html_safe if value.respond_to?(:html_safe)
24
+ value = value.freeze
25
+ const_set(constant_name, value)
26
+ end
27
+
28
+ def fortitude_append_as_attributes(output, prefix)
29
+ raise ArgumentError, "You can only append to a String" unless output.kind_of?(String)
30
+
31
+ target = ::Hash::TARGET_BASE.dup
32
+
33
+ each do |key, value|
34
+ if value.kind_of?(Hash)
35
+ new_prefix = case prefix
36
+ when String then fortitude_append_to(key, prefix.dup)
37
+ when nil then fortitude_append_to(key, "".html_safe)
38
+ else raise ArgumentError, "You can only use a String as a prefix"
39
+ end
40
+
41
+ new_prefix.original_concat(::Hash::FORTITUDE_HYPHEN)
42
+ value.fortitude_append_as_attributes(target, new_prefix)
43
+ else
44
+ target.original_concat(::Hash::FORTITUDE_SPACE)
45
+
46
+ case prefix
47
+ when String then target.original_concat(prefix)
48
+ when nil then nil
49
+ else raise ArgumentError, "You can only use a String as a prefix"
50
+ end
51
+
52
+ fortitude_append_to(key, target)
53
+ target.original_concat(::Hash::FORTITUDE_EQUALS_QUOTE)
54
+ fortitude_append_to(value, target)
55
+ target.original_concat(::Hash::FORTITUDE_QUOTE)
56
+ end
57
+ end
58
+
59
+ output.original_concat(target)
60
+ end
61
+
62
+ private
63
+ def fortitude_append_to(object, output)
64
+ case object
65
+ when String then object.fortitude_append_escaped_string(output)
66
+ when Symbol then object.to_s.fortitude_append_escaped_string(output)
67
+ when Array then object.each_with_index do |o,i|
68
+ output.original_concat(" ") if i > 0
69
+ fortitude_append_to(o, output)
70
+ end
71
+ when nil then nil
72
+ when Integer then output.original_concat(object.to_s)
73
+ else object.to_s.fortitude_append_escaped_string(output)
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,33 @@
1
+ native_loaded = false
2
+
3
+ if %w{false off 0}.include?((ENV['FORTITUDE_NATIVE_EXTENSIONS'] || '').strip.downcase)
4
+ $stderr.puts <<-EOM
5
+ WARNING: Fortitude native extensions disabled via environment variable FORTITUDE_NATIVE_EXTENSIONS.
6
+ Performance may be reduced by a factor of 3-5x!
7
+ EOM
8
+ else
9
+ begin
10
+ if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
11
+ require 'fortitude_jruby_native_ext.jar'
12
+ else
13
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'fortitude_native_ext'))
14
+ end
15
+
16
+ native_loaded = true
17
+ rescue LoadError => le
18
+ $stderr.puts <<-EOM
19
+ WARNING: The Fortitude gem cannot load its native extensions. Performance may be reduced by a factor of 3-5x!
20
+ Load path: #{$:.inspect}
21
+ Error: #{le.message} (#{le.class})
22
+ EOM
23
+ native_loaded = false
24
+ end
25
+ end
26
+
27
+ unless native_loaded
28
+ require 'fortitude/extensions/fortitude_ruby_ext'
29
+ end
30
+
31
+ require 'active_support'
32
+
33
+ ::ActiveSupport::SafeBuffer.class_eval { public :original_concat } if defined?(::ActiveSupport::SafeBuffer)
@@ -0,0 +1,22 @@
1
+ def assign_locals_from(assigns)
2
+ @_fortitude_raw_assigns = assigns
3
+ @_fortitude_raw_assigns = @_fortitude_raw_assigns.delete_if { |k,v| ! self.class.is_valid_ruby_method_name?(k) } # :if extra_assigns == :use
4
+ @_fortitude_default_assigns = { }
5
+ the_needs = needs_as_hash
6
+ missing = [ ]
7
+ have_missing = false
8
+
9
+ @_fortitude_extra_assigns = assigns.symbolize_keys # :if [ :error, :use ].include?(extra_assigns)
10
+
11
+ #{needs_text}
12
+
13
+ if @_fortitude_extra_assigns.size > 0 # :if extra_assigns == :error
14
+ raise Fortitude::Errors::ExtraAssigns.new(self, @_fortitude_extra_assigns) # :if extra_assigns == :error
15
+ end # :if extra_assigns == :error
16
+
17
+ @_fortitude_extra_assigns.each do |key, value| # :if extra_assigns == :use
18
+ instance_variable_set(instance_variable_name_for_need(key), value) # :if extra_assigns == :use
19
+ end # :if extra_assigns == :use
20
+
21
+ raise Fortitude::Errors::MissingNeed.new(self, missing, assigns) if have_missing
22
+ end
@@ -0,0 +1,16 @@
1
+ # Need '#{need}' -------------------------------------------------
2
+ @_fortitude_extra_assigns.delete(:#{need}) # :if [ :error, :use ].include?(extra_assigns)
3
+
4
+ value = assigns.fetch(:#{need}, NOT_PRESENT_NEED)
5
+ if value == NOT_PRESENT_NEED
6
+ value = assigns.fetch('#{need}', NOT_PRESENT_NEED)
7
+ if value == NOT_PRESENT_NEED
8
+ value = nil # :if ! has_default
9
+ missing << :#{need} # :if ! has_default
10
+ have_missing = true # :if ! has_default
11
+ value = the_needs[:#{need}] # :if has_default
12
+ @_fortitude_default_assigns[:#{need}] = true # :if has_default
13
+ end
14
+ end
15
+
16
+ #{ivar_name} = value
@@ -0,0 +1,4 @@
1
+ def #{need}
2
+ raise Fortitude::Errors::BlockPassedToNeedMethod.new(self, :#{need}) if block_given? # :if debug
3
+ #{ivar_name}
4
+ end
@@ -0,0 +1,50 @@
1
+ require 'active_support'
2
+ require 'active_support/core_ext/hash'
3
+
4
+ module Fortitude
5
+ module MethodTemplates
6
+ class SimpleTemplate
7
+ class << self
8
+ def template(name)
9
+ @templates ||= { }
10
+ @templates[name] ||= new(File.join(File.dirname(__FILE__), "#{name}.rb.smpl"))
11
+ end
12
+ end
13
+
14
+ def initialize(source_file)
15
+ @lines = File.read(source_file).split(/\r\n|\r|\n/)
16
+ end
17
+
18
+ def result(bindings)
19
+ bindings = bindings.stringify_keys
20
+ bindings_target = Object.new
21
+ bindings.each do |key, value|
22
+ (class << bindings_target; self; end).send(:define_method, key) { value }
23
+ end
24
+
25
+ result_lines = [ ]
26
+ @lines.each do |l|
27
+ if l =~ /^(.*)\#\s*\:if\s*(.*?)\s*$/i
28
+ l, condition = $1, $2
29
+ next unless bindings_target.instance_eval(condition)
30
+ end
31
+
32
+ while l =~ /[^\\]\#\{([^}]+)\}/ || l =~ /^\#\{([^}]+)\}/
33
+ name = $1
34
+ begin
35
+ value = bindings_target.send($1)
36
+ rescue => e
37
+ raise "Failed when processing #{l.inspect}: #{e.inspect}"
38
+ end
39
+ l = l.gsub("\#\{#{$1}\}", value.to_s)
40
+ end
41
+ l = l.gsub(/\\\#\{/, "\#\{")
42
+
43
+ result_lines << l
44
+ end
45
+
46
+ result_lines.join("\n")
47
+ end
48
+ end
49
+ end
50
+ end