templet_rails 0.1.0 → 0.2.0

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 (276) hide show
  1. checksums.yaml +5 -5
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +334 -269
  4. data/Rakefile +21 -7
  5. data/app/assets/config/templet_rails_manifest.js +2 -0
  6. data/app/assets/javascripts/templet_rails/application.js +15 -0
  7. data/app/assets/stylesheets/templet_rails/application.css +15 -0
  8. data/app/controllers/templet/json_rendering_helpers.rb +12 -0
  9. data/app/controllers/templet/rendering_helpers.rb +53 -0
  10. data/app/controllers/templet/viewer_call_string.rb +144 -0
  11. data/app/controllers/templet/viewer_call_string_class.rb +65 -0
  12. data/app/controllers/templet/viewer_responders.rb +121 -0
  13. data/app/controllers/templet_rails/application_controller.rb +5 -0
  14. data/app/helpers/templet/constants.rb +54 -0
  15. data/app/helpers/templet/forms/bs_form.rb +73 -0
  16. data/app/helpers/templet/forms/bs_form_errors.rb +38 -0
  17. data/app/helpers/templet/forms/bs_form_field.rb +114 -0
  18. data/app/helpers/templet/forms/bs_form_group.rb +115 -0
  19. data/app/helpers/templet/layouts/html_rails.rb +36 -0
  20. data/app/helpers/templet/links.rb +28 -0
  21. data/app/helpers/templet/links/bs_btn_class.rb +61 -0
  22. data/app/helpers/templet/links/bs_link_set_base.rb +168 -0
  23. data/app/helpers/templet/links/bs_link_set_collection.rb +21 -0
  24. data/app/helpers/templet/links/bs_link_set_navigation.rb +62 -0
  25. data/app/helpers/templet/links/rest_link_procs.rb +163 -0
  26. data/app/helpers/templet/links/rest_link_procs_parent.rb +39 -0
  27. data/app/helpers/templet/links/rest_link_procs_sets.rb +30 -0
  28. data/app/helpers/templet/links/rest_link_text.rb +102 -0
  29. data/app/helpers/templet/links/rest_path.rb +90 -0
  30. data/app/helpers/templet/mixins.rb +9 -0
  31. data/app/helpers/templet/mixins/bs.rb +11 -0
  32. data/app/helpers/templet/mixins/bs/grid.rb +53 -0
  33. data/app/helpers/templet/mixins/bs/lists.rb +77 -0
  34. data/app/helpers/templet/mixins/field_procs.rb +140 -0
  35. data/app/helpers/templet/mixins/html_presenters.rb +82 -0
  36. data/app/helpers/templet/require_all.rb +45 -0
  37. data/app/helpers/templet/utils/html_search_form.rb +53 -0
  38. data/app/helpers/templet/utils/link_set_factory.rb +46 -0
  39. data/app/helpers/templet/utils/link_set_factory_wrapper.rb +53 -0
  40. data/app/helpers/templet/utils/list_model_parents.rb +27 -0
  41. data/app/helpers/templet/utils/navbar_form.rb +26 -0
  42. data/app/helpers/templet/utils/selected_wrapper.rb +40 -0
  43. data/app/helpers/templet/viewer.rb +11 -0
  44. data/app/helpers/templet/viewer/meta_model.rb +66 -0
  45. data/app/helpers/templet/viewer/meta_model_defaults.rb +56 -0
  46. data/app/helpers/templet/viewer/presenters.rb +44 -0
  47. data/app/helpers/templet/viewer/rest_actions.rb +24 -0
  48. data/app/helpers/templet/viewer_base.rb +111 -0
  49. data/app/helpers/templet/viewer_rest.rb +144 -0
  50. data/app/helpers/templet_helper.rb +10 -0
  51. data/app/helpers/templet_rails/application_helper.rb +4 -0
  52. data/app/jobs/templet_rails/application_job.rb +4 -0
  53. data/app/mailers/templet_rails/application_mailer.rb +6 -0
  54. data/app/models/templet_rails/application_record.rb +5 -0
  55. data/app/views/layouts/templet_rails/application.html.erb +16 -0
  56. data/config/routes.rb +2 -0
  57. data/lib/generators/templet/controller/controller_generator.rb +70 -68
  58. data/lib/generators/templet/core_install/USAGE +14 -0
  59. data/lib/generators/templet/core_install/core_install_generator.rb +77 -0
  60. data/lib/generators/templet/core_rspec/USAGE +5 -8
  61. data/lib/generators/templet/core_rspec/core_rspec_generator.rb +32 -47
  62. data/lib/generators/templet/destroy/USAGE +1 -1
  63. data/lib/generators/templet/destroy/destroy_generator.rb +87 -84
  64. data/lib/generators/templet/install/USAGE +16 -0
  65. data/lib/generators/templet/install/install_generator.rb +103 -0
  66. data/lib/generators/templet/routes/routes_generator.rb +43 -41
  67. data/lib/generators/templet/rspec/rspec_generator.rb +1 -0
  68. data/lib/generators/templet/scaffold/scaffold_generator.rb +66 -64
  69. data/lib/generators/templet/shared/core_helpers.rb +10 -0
  70. data/lib/generators/templet/shared/model_fields.rb +2 -2
  71. data/lib/generators/templet/templates/core/app/base_viewer.rb +1 -1
  72. data/lib/generators/templet/templates/core/app/{panel → layouts}/layout_base.rb +3 -3
  73. data/lib/generators/templet/templates/core/app/{panel → layouts}/layout_header.rb +3 -1
  74. data/lib/generators/templet/templates/core/app/{panel → layouts}/layout_header_sidebar.rb +2 -1
  75. data/lib/generators/templet/templates/core/app/{panel/nav.rb → layouts/navbar.rb} +2 -2
  76. data/lib/generators/templet/templates/core/app/layouts/navbar_args_option.rb +32 -0
  77. data/lib/generators/templet/templates/core/app/{link_sets/navbar.rb → layouts/navbar_links.rb} +2 -2
  78. data/lib/generators/templet/templates/core/app/{panel → layouts}/options_config.rb +3 -3
  79. data/lib/generators/templet/templates/core/app/layouts/panel/flash_messages.rb +35 -0
  80. data/lib/generators/templet/templates/core/app/layouts/panel/show_parents_option.rb +24 -0
  81. data/lib/generators/templet/templates/core/app/layouts/panel/sidebar_links_option.rb +26 -0
  82. data/lib/generators/templet/templates/core/spec/layouts/flash_messages_spec.rb +18 -0
  83. data/lib/generators/templet/templates/core/spec/layouts/navbar_spec.rb +19 -0
  84. data/lib/generators/templet/templates/core/spec/support/apis/api_helper.rb +2 -0
  85. data/lib/generators/templet/templates/core/spec/support/apis/shared_examples_a_json_controller.rb +1 -1
  86. data/lib/generators/templet/templates/core/spec/support/{viewer → shared}/partial_test_helpers.rb +0 -0
  87. data/lib/generators/templet/templates/core/templet/viewer_base.rb +3 -3
  88. data/lib/generators/templet/viewer/viewer_generator.rb +60 -58
  89. data/lib/tasks/templet_rails_tasks.rake +4 -0
  90. data/lib/templet_rails.rb +1 -1
  91. data/lib/templet_rails/engine.rb +5 -0
  92. data/lib/templet_rails/version.rb +1 -1
  93. data/spec/dummy/Rakefile +6 -0
  94. data/spec/dummy/app/assets/config/manifest.js +4 -0
  95. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  96. data/spec/dummy/app/assets/javascripts/cable.js +13 -0
  97. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  98. data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
  99. data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
  100. data/spec/dummy/app/controllers/answers_controller.rb +86 -0
  101. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  102. data/spec/dummy/app/controllers/categories_controller.rb +80 -0
  103. data/spec/dummy/app/controllers/questions_controller.rb +86 -0
  104. data/spec/dummy/app/helpers/app.rb +4 -0
  105. data/spec/dummy/app/helpers/app/answer_viewer.rb +21 -0
  106. data/spec/dummy/app/helpers/app/base_viewer.rb +7 -0
  107. data/spec/dummy/app/helpers/app/category_viewer.rb +26 -0
  108. data/spec/dummy/app/helpers/app/layouts/layout_base.rb +40 -0
  109. data/spec/dummy/app/helpers/app/layouts/layout_header.rb +24 -0
  110. data/spec/dummy/app/helpers/app/layouts/layout_header_sidebar.rb +19 -0
  111. data/spec/dummy/app/helpers/app/layouts/navbar.rb +55 -0
  112. data/spec/dummy/app/helpers/app/layouts/navbar_args_option.rb +32 -0
  113. data/spec/dummy/app/helpers/app/layouts/navbar_links.rb +12 -0
  114. data/spec/dummy/app/helpers/app/layouts/options_config.rb +19 -0
  115. data/spec/dummy/app/helpers/app/layouts/panel/flash_messages.rb +35 -0
  116. data/spec/dummy/app/helpers/app/layouts/panel/show_parents_option.rb +24 -0
  117. data/spec/dummy/app/helpers/app/layouts/panel/sidebar_links_option.rb +26 -0
  118. data/spec/dummy/app/helpers/app/question_viewer.rb +26 -0
  119. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  120. data/spec/dummy/app/jobs/application_job.rb +2 -0
  121. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  122. data/spec/dummy/app/models/answer.rb +12 -0
  123. data/spec/dummy/app/models/application_record.rb +3 -0
  124. data/spec/dummy/app/models/category.rb +11 -0
  125. data/spec/dummy/app/models/question.rb +15 -0
  126. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  127. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  128. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  129. data/spec/dummy/bin/bundle +3 -0
  130. data/spec/dummy/bin/rails +4 -0
  131. data/spec/dummy/bin/rake +4 -0
  132. data/spec/dummy/bin/setup +36 -0
  133. data/spec/dummy/bin/update +31 -0
  134. data/spec/dummy/bin/yarn +11 -0
  135. data/spec/dummy/config.ru +5 -0
  136. data/spec/dummy/config/application.rb +30 -0
  137. data/spec/dummy/config/boot.rb +5 -0
  138. data/spec/dummy/config/cable.yml +10 -0
  139. data/spec/dummy/config/database.yml +25 -0
  140. data/spec/dummy/config/environment.rb +5 -0
  141. data/spec/dummy/config/environments/development.rb +61 -0
  142. data/spec/dummy/config/environments/production.rb +94 -0
  143. data/spec/dummy/config/environments/test.rb +46 -0
  144. data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
  145. data/spec/dummy/config/initializers/assets.rb +14 -0
  146. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  147. data/spec/dummy/config/initializers/content_security_policy.rb +25 -0
  148. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  149. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  150. data/spec/dummy/config/initializers/inflections.rb +16 -0
  151. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  152. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  153. data/spec/dummy/config/locales/en.yml +33 -0
  154. data/spec/dummy/config/puma.rb +34 -0
  155. data/spec/dummy/config/routes.rb +9 -0
  156. data/spec/dummy/config/spring.rb +6 -0
  157. data/spec/dummy/config/storage.yml +34 -0
  158. data/spec/dummy/db/development.sqlite3 +0 -0
  159. data/spec/dummy/db/migrate/20190709192619_create_categories.rb +9 -0
  160. data/spec/dummy/db/migrate/20190709192656_create_questions.rb +12 -0
  161. data/spec/dummy/db/migrate/20190709192737_create_answers.rb +13 -0
  162. data/spec/dummy/db/schema.rb +42 -0
  163. data/spec/dummy/db/test.sqlite3 +0 -0
  164. data/spec/dummy/log/development.log +64 -0
  165. data/spec/dummy/log/test.log +40792 -0
  166. data/spec/dummy/package.json +5 -0
  167. data/spec/dummy/public/404.html +67 -0
  168. data/spec/dummy/public/422.html +67 -0
  169. data/spec/dummy/public/500.html +66 -0
  170. data/{lib/generators/templet/templates/core/controllers/.keep → spec/dummy/public/apple-touch-icon-precomposed.png} +0 -0
  171. data/spec/dummy/public/apple-touch-icon.png +0 -0
  172. data/spec/dummy/public/favicon.ico +0 -0
  173. data/spec/dummy/spec/apis/answers_controller_spec.rb +17 -0
  174. data/spec/dummy/spec/apis/categories_controller_spec.rb +13 -0
  175. data/spec/dummy/spec/apis/questions_controller_spec.rb +15 -0
  176. data/spec/dummy/spec/helpers/app/answer_viewer_spec.rb +18 -0
  177. data/spec/dummy/spec/helpers/app/category_viewer_spec.rb +14 -0
  178. data/spec/dummy/spec/helpers/app/layouts/flash_messages_spec.rb +18 -0
  179. data/spec/dummy/spec/helpers/app/layouts/navbar_spec.rb +19 -0
  180. data/spec/dummy/spec/helpers/app/question_viewer_spec.rb +16 -0
  181. data/spec/dummy/spec/support/apis/api_helper.rb +15 -0
  182. data/spec/dummy/spec/support/apis/shared_examples_a_json_controller.rb +196 -0
  183. data/spec/dummy/spec/support/templet/partial_test_helpers.rb +32 -0
  184. data/spec/dummy/spec/support/templet/shared_examples_a_viewer.rb +105 -0
  185. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-6/-6-48LISBeQVJvpEXNgFstDrCriEFNmvje6XhidzlV4.cache +1 -0
  186. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-D/-DLE9y_1ICajcEaHcprHYBO8vjXpHySH_56FSb0SLOs.cache +0 -0
  187. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-Y/-YJ1ILDQvu3hOKkF0VR9K_z04e2-EVHglO0MAFS8gpQ.cache +1 -0
  188. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-_/-_7FgdEon9WttcnvoyQAysmonCHN7FxsrcuDa5OTUJQ.cache +1 -0
  189. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0u/0u-iWymOJvpggI1uY7Na3322xwcjNY7egB-czjV96m4.cache +2 -0
  190. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0x/0xArd189AygdGItqWO0_5BfinFQjLZjwyVsAGWqOgKg.cache +1 -0
  191. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2S/2SfjLWkOp2BGM0OzwsshKpnXI8rlJFOV6ZJsIszRn6k.cache +1 -0
  192. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3h/3hFAACevvXtDja9zz3rMK6gA1MD1I7_puWyRRkV7sLk.cache +2 -0
  193. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4o/4oNwzIrltWrfajciBz7JHd5RT5_XVv04L6NdaBGN794.cache +3 -0
  194. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7F/7F3o6QQqoI0bDk6-A5qMN8LCZQALddlu23KiRWBxtWk.cache +0 -0
  195. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Af/AfFBDeKpi4wSUc7rcjxfjPbEgV6GOGXTjeZhHrfDX48.cache +0 -0
  196. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bf/BfD6ZVgFq-kWDMMVb2EE5ZAKgsgn1VUR9oVxD0hHVMI.cache +0 -0
  197. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bo/Bogjbc_D5J-6_m5KEgeXt_GHc-IbUt1_FDWP4PHV0P8.cache +1 -0
  198. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DF/DF3HgsSD9LO1Bz8d3GJi_G6wBExmsnBJ6b1pvZEGE7w.cache +1 -0
  199. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DO/DO8Gqh32jK2GrO9uIlH7qvDkelVw0VM8CTSOUj6iUEo.cache +1 -0
  200. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/GC/GCNwk_ABiY0z51bz8iC8tqLLWKhQwxW4-JLNKv-SRe0.cache +1 -0
  201. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Gl/Gls_Zud1kxq7p08FGBfzalbaLMlLBl28bOYebh7Ljrg.cache +0 -0
  202. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Gm/GmHHk4YNC0G2V_5gQZp0U6mKFPxGSgL7fwWI3_fajrk.cache +1 -0
  203. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Gr/GreB3WHN8MyWMDFGNyqJJcxGblgo-5XepsEHvdJSQGI.cache +1 -0
  204. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HC/HCDOUd7-S45aJ_PjVAC_Vmjyud3i1aQv4cE3t9_Z3Dw.cache +2 -0
  205. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hd/HdvsElcHSt7aKjG9jocgIQJEvBjBbeSZ8HntI1pc38o.cache +1 -0
  206. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Iv/IvR5RxSTQkxfGWSoy5S2s7wO5u5qwCJ5mNAhqNJtJDY.cache +0 -0
  207. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JS/JSYyQZJzLNqpmVR--ZDUW6PY7_HflyFFHDAOLenxlP4.cache +1 -0
  208. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Jx/JxJXzSistcpH4S_9CbGx_wyjVTaE77ZDDfOc4uTfvdM.cache +0 -0
  209. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MH/MHCZUSVJq62YPmcVVkfjp2B5uH_nDL7snLl4yqvlSJY.cache +1 -0
  210. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MY/MY5theanttko1gCnW9vKb0Z1GkJn8Ofk149HwOt0UAM.cache +0 -0
  211. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Mn/MnGg5XDll2jo-E_CTC1htiNc0hOY6z80_bwGCvpYTXk.cache +1 -0
  212. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Nt/NtYu5CjAvU5ZHxSOn6Q4LPukD3hBE-3vYe30d_uSBzM.cache +1 -0
  213. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Nu/NuIepb7qomZzBDAJMUROsshKo8TJxdmFR4yOe64W58w.cache +1 -0
  214. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/R7/R7ngeIqpdwSWkbjbxxzh6B-KczkWMcxYMIkj5inxrV8.cache +1 -0
  215. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/S9/S9MhILnM64qd2M9Z92TrNMtw7VUWZxf3H367OO8rlhs.cache +2 -0
  216. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SI/SIZUy2mtjUm_G1YIulRCovzgkCwV1eoR2NLiYcsR1Ws.cache +0 -0
  217. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Sl/SlECThrSAExfICiFGVi-zu240BVDaUldaRs4qcj354U.cache +0 -0
  218. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/St/St6dTA4niiCDLnnArKZV38uZNFf6MbEZ_jHGC-Upft0.cache +0 -0
  219. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/T6/T6p-BnPmMCmpJdaqrjWmLMsBW8SNJpSW6w-Azc3XGVk.cache +1 -0
  220. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Vs/VsZPCEai1GtOT-vHjxMS8kAP9ASG5i_2O_EP76uI7Qs.cache +0 -0
  221. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Vv/Vv6dack32HV3tIZ_6F4BF8Mrrnb7wZEG4VlEKumQ6L0.cache +2 -0
  222. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Wp/WpV6mJwJX9dwIFJGLoJoa-gXNe1-ZHusE9SwvnWysa8.cache +0 -0
  223. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Wy/Wya0wl0Q2nXYb5-bC5Fbo0sDZfKb3415AjtSjld7fQI.cache +1 -0
  224. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/b7/b7j7TIOE1nnqvMku0QePWFrwCkaKkNpxkiWST6PAplo.cache +1 -0
  225. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ck/ckDOh-FroVE8r1fwUNWmnRconIREuVdmkZEFkaP9KfU.cache +1 -0
  226. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eN/eNQPQP-9gB3xzxJBsG7soV6Ie0YZ3gxIS97PgYtZVT8.cache +0 -0
  227. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gb/gbUMPMF8S0OQVsFHyAjHpHVEg-3iZzTVIQZDmfq-ycE.cache +1 -0
  228. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/if/ifyb5SlIS8vkACz_6P0uTOGijMB4C5TyFWmrMq3DYIg.cache +2 -0
  229. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jg/jg-s5YLdnojCtHqzfDTsvcy6UHewDRl1X09qlGyvyag.cache +1 -0
  230. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ko/koPyQus8Oqrx18bnLj-5nJrKvFf6FDDQbv2qEa7Bl7M.cache +0 -0
  231. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lG/lGRRazgrFErFx1PkfDlca6r-0MGQR40i0tq0Wgm2FNU.cache +1 -0
  232. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lS/lStvx9Beg2l4s8L-QdTSKuc5_qQPQAZPnIcRI7JkpPE.cache +2 -0
  233. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lZ/lZIacHrJV5bDohEHsVOXDGIDrUH2h4YvwV9g-MWmh3k.cache +3 -0
  234. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lq/lqM4-wfprvp5FEBp1pSm88Jwx-Vb2oJab2rjLtUcIyM.cache +1 -0
  235. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/n_/n_xYqQYhwEMQknb3jFQnjlxxBE9TzMNHCdJ-bEyZFIw.cache +2 -0
  236. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nx/nxTv3sKVUQZADJyM3dPaVmUA78MIsMLD_K279yN_GsI.cache +2 -0
  237. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ps/psGFyjvQcs8JpIV8BDeCqQfHaLYgIgSAi86n4RrFpFs.cache +1 -0
  238. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/r1/r1IIabhuPhgB3n8V3ZMRN0SqIsXJ8bH0ABTRzHTG1SU.cache +2 -0
  239. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vt/vtskp0QTt72oDQNM6mYZ8pCclh2HICHeYZ1QtDvC5xo.cache +1 -0
  240. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wi/win_v0ZNu-l7AoRx8w3ls1xcy0mUExLBVMCSr5oaJFc.cache +2 -0
  241. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yo/yoggubxI12fIM1o5TtxUialrUN-LWOfRaV_tqc1HAC4.cache +0 -0
  242. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zH/zHnHpZP25wEHaF3mI_M9RGH1zeCApf6mwhLB3Lku1zs.cache +3 -0
  243. data/spec/dummy/tmp/development_secret.txt +1 -0
  244. data/spec/factories/answers.rb +10 -0
  245. data/spec/factories/categories.rb +5 -0
  246. data/spec/factories/questions.rb +8 -0
  247. data/spec/helpers/templet/forms/bs_form_errors_spec.rb +18 -0
  248. data/spec/helpers/templet/forms/bs_form_spec.rb +58 -0
  249. data/spec/helpers/templet/layout/html_rails_spec.rb +64 -0
  250. data/spec/helpers/templet/links/bs_link_set_collection_spec.rb +79 -0
  251. data/spec/helpers/templet/links/rest_link_procs_params_spec.rb +68 -0
  252. data/spec/helpers/templet/links/rest_link_procs_parents_spec.rb +78 -0
  253. data/spec/helpers/templet/links/rest_link_procs_spec.rb +140 -0
  254. data/spec/models/answer_spec.rb +9 -0
  255. data/spec/models/category_spec.rb +9 -0
  256. data/spec/models/question_spec.rb +9 -0
  257. data/spec/rails_helper.rb +61 -0
  258. data/spec/spec_helper.rb +108 -0
  259. data/spec/support/templet/model_parent_helpers.rb +36 -0
  260. data/spec/support/templet/partial_test_helpers.rb +32 -0
  261. data/spec/support/templet/rest_link_procs_assignments.rb +43 -0
  262. data/spec/support/templet/rest_link_procs_helpers.rb +15 -0
  263. metadata +470 -38
  264. data/.gitignore +0 -8
  265. data/.travis.yml +0 -5
  266. data/Gemfile +0 -6
  267. data/LICENSE.txt +0 -21
  268. data/bin/console +0 -14
  269. data/bin/setup +0 -8
  270. data/lib/generators/templet/core/USAGE +0 -23
  271. data/lib/generators/templet/core/core_generator.rb +0 -128
  272. data/lib/generators/templet/templates/core/app/panel/flash_messages.rb +0 -33
  273. data/lib/generators/templet/templates/core/app/panel/nav_args_option.rb +0 -30
  274. data/lib/generators/templet/templates/core/app/panel/show_parents_option.rb +0 -22
  275. data/lib/generators/templet/templates/core/app/panel/sidebar_links_option.rb +0 -24
  276. data/templet_rails.gemspec +0 -36
@@ -0,0 +1,32 @@
1
+
2
+ require "nokogiri"
3
+
4
+ module PartialTestHelpers
5
+ def renderer
6
+ Templet::Renderer.new helper
7
+ end
8
+
9
+ def partial_for(klass, *args)
10
+ klass.new(renderer, *args)
11
+ end
12
+ def partial(*args, **options)
13
+ partial_for(described_class, *args, **options)
14
+ end
15
+
16
+ def render_partial(*args, &block)
17
+ partial.(*args, &block)
18
+ end
19
+
20
+ def parse(html)
21
+ Nokogiri::HTML(html)
22
+ end
23
+
24
+ def parse_html(selector, single_return: true,
25
+ render_args: [],
26
+ html: render_partial(*render_args))
27
+ method = single_return ? :at_css : :css
28
+
29
+ parse(html).send(method, selector)
30
+ end
31
+ end
32
+
@@ -0,0 +1,105 @@
1
+
2
+ #require_relative "partial_test_helpers"
3
+
4
+ shared_examples 'a viewer' do |actions|
5
+ include PartialTestHelpers
6
+
7
+ let(:scope) { nil }
8
+
9
+ let(:controller_name) { nil }
10
+
11
+ let(:model) { create model_name, field_name => field_value }
12
+
13
+ let(:parent) { model.send parent_name if model.respond_to?(parent_name || '') }
14
+
15
+ let(:new_model) { build model_name, field_name => field_value }
16
+
17
+ let(:field_values) { %w(First Second Third) }
18
+
19
+ let :models do
20
+ field_values.map {|value| create model_name, field_name => value }
21
+ end
22
+
23
+ let(:parent_name) { }
24
+
25
+ let(:grand_parent_name) { }
26
+
27
+ let(:field_name) { :name }
28
+
29
+ let(:field_value) { "#{model_name} #{field_name}" }
30
+
31
+ let(:input_field_tag) { "input" }
32
+
33
+ let(:index_selector) { 'tbody tr td:first' }
34
+
35
+ let(:field_selector) { "#{input_field_tag}[id=#{model_name}_#{field_name}]" }
36
+
37
+ let(:list_selector) { 'dl dd:first' }
38
+
39
+ def viewer(model, parent=nil, **opts)
40
+ if scope or controller_name
41
+ opts[:controller] = (scope ? "#{scope}/" : '') +
42
+ (controller_name&.to_s || model_name.to_s.pluralize)
43
+ end
44
+
45
+ opts[:grand_parent] = grand_parent_name if grand_parent_name
46
+
47
+ described_class.new helper, model, parent, **opts
48
+ end
49
+
50
+ if not actions or actions.include? :index
51
+ describe '#index' do
52
+ it "shows model queries" do
53
+ html = viewer(model_name, parent, models: models).index
54
+
55
+ queries = parse_html(index_selector, html: html, single_return: false)
56
+
57
+ expect(queries.map(&:text)).to eq field_values
58
+ end
59
+ end
60
+ end
61
+
62
+ if not actions or actions.include? :show
63
+ describe '#show' do
64
+ it 'displays field value' do
65
+ html = viewer(model, parent).show
66
+
67
+ value = parse_html(list_selector, html: html).text
68
+
69
+ expect(value).to eq field_value
70
+ end
71
+ end
72
+ end
73
+
74
+ if not actions or actions.include? :new
75
+ describe '#new' do
76
+ it 'prompts for field value' do
77
+ helper.instance_variable_set("@#{model_name}", new_model)
78
+
79
+ html = viewer(new_model, parent).new
80
+
81
+ selected = parse_html(field_selector, html: html)
82
+
83
+ value = selected['value'] || selected.text
84
+
85
+ expect(value.strip).to eq field_value
86
+ end
87
+ end
88
+ end
89
+
90
+ if not actions or actions.include? :edit
91
+ describe '#edit' do
92
+ it 'prompts for field value' do
93
+ helper.instance_variable_set("@#{model_name}", model)
94
+
95
+ html = viewer(model, parent).edit
96
+
97
+ selected = parse_html(field_selector, html: html)
98
+
99
+ value = selected['value'] || selected.text
100
+
101
+ expect(value.strip).to eq field_value
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1 @@
1
+ "%A��G �{h t�l�m�V���NE���f���
@@ -0,0 +1 @@
1
+ "%b�t^4y9�,N!�+��j\�U09>��E�ܖ�4
@@ -0,0 +1 @@
1
+ I"�/home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled/rails-ujs.js?type=application/javascript&pipeline=self&id=45e7ab1941ee8f1f2d6661a63f7082d533541aafb0d46a7eb17fbab4227beea8:ET
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash}-I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"mfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/templet_rails/application.js;TTI"$file-digest://app/assets/config;TTI".file-digest://app/assets/config/rails-ujs;TTI"$file-digest://app/assets/images;TTI".file-digest://app/assets/images/rails-ujs;TTI")file-digest://app/assets/javascripts;TTI"3file-digest://app/assets/javascripts/rails-ujs;TTI")file-digest://app/assets/stylesheets;TTI"3file-digest://app/assets/stylesheets/rails-ujs;TTI"Kfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config;TTI"Ufile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config/rails-ujs;TTI"Kfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images;TTI"Ufile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images/rails-ujs;TTI"Pfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts;TTI"Zfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/rails-ujs;TTI"Pfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets;TTI"Zfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/rails-ujs;TTI"hfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled;TTI"rfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/rails-ujs;TTI"mfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts;TTI"wfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/rails-ujs;TTI"gfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled;TTI"qfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled/rails-ujs;TTI"tfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled/rails-ujs.js;TTI"2file-digest://app/assets/config/activestorage;TTI"2file-digest://app/assets/images/activestorage;TTI"7file-digest://app/assets/javascripts/activestorage;TTI"7file-digest://app/assets/stylesheets/activestorage;TTI"Yfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config/activestorage;TTI"Yfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images/activestorage;TTI"^file-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/activestorage;TTI"^file-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/activestorage;TTI"vfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/activestorage;TTI"{file-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/activestorage;TTI"~file-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/activestorage.js;TTI"^file-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/templet_rails;TTF
@@ -0,0 +1 @@
1
+ "%��Rm�v�S3.��O�L���ڹc�ƕq�=_j�
@@ -0,0 +1 @@
1
+ "%�bhM�g�X*������C�'��+�qa�u
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash}.I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"mfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/templet_rails/application.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"tfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled/rails-ujs.js;TTI"~file-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/activestorage.js;TTI"$file-digest://app/assets/config;TTI".file-digest://app/assets/config/rails-ujs;TTI"$file-digest://app/assets/images;TTI".file-digest://app/assets/images/rails-ujs;TTI")file-digest://app/assets/javascripts;TTI"3file-digest://app/assets/javascripts/rails-ujs;TTI")file-digest://app/assets/stylesheets;TTI"3file-digest://app/assets/stylesheets/rails-ujs;TTI"Kfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config;TTI"Ufile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config/rails-ujs;TTI"Kfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images;TTI"Ufile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images/rails-ujs;TTI"Pfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts;TTI"Zfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/rails-ujs;TTI"Pfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets;TTI"Zfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/rails-ujs;TTI"hfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled;TTI"rfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/rails-ujs;TTI"mfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts;TTI"wfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/rails-ujs;TTI"gfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled;TTI"qfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled/rails-ujs;TTI"2file-digest://app/assets/config/activestorage;TTI"2file-digest://app/assets/images/activestorage;TTI"7file-digest://app/assets/javascripts/activestorage;TTI"7file-digest://app/assets/stylesheets/activestorage;TTI"Yfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config/activestorage;TTI"Yfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images/activestorage;TTI"^file-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/activestorage;TTI"^file-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/activestorage;TTI"vfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/activestorage;TTI"{file-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/activestorage;TTI"^file-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/templet_rails;TTF
@@ -0,0 +1,3 @@
1
+ [o:Set:
2
+ @hash}
3
+ I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"tfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled/rails-ujs.js;TTF
@@ -0,0 +1 @@
1
+ "%��B�����șo�$'�A�d��L���xR�U
@@ -0,0 +1 @@
1
+ "%��B�����șo�$'�A�d��L���xR�U
@@ -0,0 +1 @@
1
+ I"�/home/stephen/apps/quora/templet_rails/app/assets/javascripts/templet_rails/application.js?type=application/javascript&pipeline=self&id=bbbf6781aabb32b031a22de9a65e2256765b9cde12aa708d25d9e8a3c9e51cc3:ET
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/application.js?type=application/javascript&pipeline=self&id=b7103b8aa259ca941bdf6f880b19413c194721f1d2a3ff2a82cb7600d33b5220:ET
@@ -0,0 +1 @@
1
+ "%�<������X���̀#+�����,�(o���
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash}I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"2file-digest://app/assets/javascripts/cable.js;TTI"$file-digest://app/assets/config;TTI"1file-digest://app/assets/config/action_cable;TTI"$file-digest://app/assets/images;TTI"1file-digest://app/assets/images/action_cable;TTI")file-digest://app/assets/javascripts;TTI"6file-digest://app/assets/javascripts/action_cable;TTI")file-digest://app/assets/stylesheets;TTI"6file-digest://app/assets/stylesheets/action_cable;TTI"Kfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config;TTI"Xfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config/action_cable;TTI"Kfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images;TTI"Xfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images/action_cable;TTI"Pfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts;TTI"]file-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/action_cable;TTI"Pfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets;TTI"]file-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/action_cable;TTI"hfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled;TTI"ufile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/action_cable;TTI"xfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/action_cable.js;TTI"2file-digest://app/assets/javascripts/channels;TTF
@@ -0,0 +1 @@
1
+ "%� j�i �-'��O+�� �m��T���2Q
@@ -0,0 +1 @@
1
+ "%�bhM�g�X*������C�'��+�qa�u
@@ -0,0 +1 @@
1
+ "%�bhM�g�X*������C�'��+�qa�u
@@ -0,0 +1 @@
1
+ "%� j�i �-'��O+�� �m��T���2Q
@@ -0,0 +1 @@
1
+ I"�/home/stephen/apps/quora/templet_rails/app/assets/stylesheets/templet_rails/application.css?type=text/css&pipeline=self&id=897ad744282d7228ba776a7cf0da4005f0722404eada764b551a7ab691173aff:ET
@@ -0,0 +1 @@
1
+ "%�d�-�K���`���8Y��3�͹/Y����a~K
@@ -0,0 +1 @@
1
+ "%��Rm�v�S3.��O�L���ڹc�ƕq�=_j�
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"0processors:type=text/css&file_type=text/css;TTI"nfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/templet_rails/application.css;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTI"^file-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/templet_rails;TTF
@@ -0,0 +1 @@
1
+ "%�Rst;XS���VN<1� ̠4%�$�1��N|�
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTI"nfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/templet_rails/application.css;TTI"^file-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/templet_rails;TTF
@@ -0,0 +1 @@
1
+ I"�/home/stephen/apps/quora/templet_rails/app/assets/javascripts/templet_rails/application.js?type=application/javascript&id=f5dd119f55eb25635ab4456968e9bb9960c13585033575d1ff57ba9bca7fca47:ET
@@ -0,0 +1 @@
1
+ I"�/home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/action_cable.js?type=application/javascript&pipeline=self&id=e59553ab5218de42ab0a77b11e4b9574de2b048fd4447e596462767f60e6636e:ET
@@ -0,0 +1 @@
1
+ I"}app/assets/stylesheets/application.css?type=text/css&id=a996612a8efc47b00ce82f65118bde75ea6e00dac3bc7ccfb9d735ca3f626ed8:ET
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/application.js?type=application/javascript&id=57512993a5ca719c710b1bbd374e12bc4d979bacf4f69d6ce565ad54fc32cfe8:ET
@@ -0,0 +1,2 @@
1
+ "%IG1�ϺR]
2
+ KLd>୴�b� N��k�o���F��
@@ -0,0 +1 @@
1
+ I"�/home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/activestorage.js?type=application/javascript&pipeline=self&id=6794a72122196ade6161f50abae78ce6af0b7ce8c036e9296179fd42dd0bfbca:ET
@@ -0,0 +1 @@
1
+ I"�/home/stephen/apps/quora/templet_rails/app/assets/stylesheets/templet_rails/application.css?type=text/css&id=45b9e1b5d543a045b79584a2e14b3f04c69df6d03caaf94b920237575f1cd7a7:ET
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash}.I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"8file-digest://app/assets/javascripts/application.js;TTI"$file-digest://app/assets/config;TTI".file-digest://app/assets/config/rails-ujs;TTI"$file-digest://app/assets/images;TTI".file-digest://app/assets/images/rails-ujs;TTI")file-digest://app/assets/javascripts;TTI"3file-digest://app/assets/javascripts/rails-ujs;TTI")file-digest://app/assets/stylesheets;TTI"3file-digest://app/assets/stylesheets/rails-ujs;TTI"Kfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config;TTI"Ufile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config/rails-ujs;TTI"Kfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images;TTI"Ufile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images/rails-ujs;TTI"Pfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts;TTI"Zfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/rails-ujs;TTI"Pfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets;TTI"Zfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/rails-ujs;TTI"hfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled;TTI"rfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/rails-ujs;TTI"mfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts;TTI"wfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/rails-ujs;TTI"gfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled;TTI"qfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled/rails-ujs;TTI"tfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled/rails-ujs.js;TTI"2file-digest://app/assets/config/activestorage;TTI"2file-digest://app/assets/images/activestorage;TTI"7file-digest://app/assets/javascripts/activestorage;TTI"7file-digest://app/assets/stylesheets/activestorage;TTI"Yfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config/activestorage;TTI"Yfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images/activestorage;TTI"^file-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/activestorage;TTI"^file-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/activestorage;TTI"vfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/activestorage;TTI"{file-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/activestorage;TTI"~file-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/activestorage.js;TTI"2file-digest://app/assets/javascripts/channels;TTI"2file-digest://app/assets/javascripts/cable.js;TTF
@@ -0,0 +1,3 @@
1
+ [o:Set:
2
+ @hash}
3
+ I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"xfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/action_cable.js;TTF
@@ -0,0 +1 @@
1
+ "%�<������X���̀#+�����,�(o���
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTI"9file-digest://app/assets/stylesheets/application.css;TTI")file-digest://app/assets/stylesheets;TTF
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"0processors:type=text/css&file_type=text/css;TTI"9file-digest://app/assets/stylesheets/application.css;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTI")file-digest://app/assets/stylesheets;TTF
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/cable.js?type=application/javascript&pipeline=self&id=87d4ee4b9abca522995c471216dfdf910cb86670141e371aa209cab1a2289b84:ET
@@ -0,0 +1,2 @@
1
+ "%�E�r��Z��JM=ֽek
2
+ �rX�ˊ@�KҞ$��^
@@ -0,0 +1 @@
1
+ I"�app/assets/stylesheets/application.css?type=text/css&pipeline=self&id=719872afc1023d7b04ecfac54aa4edf77f8e8d4fb1f45cb409eb848cd918fae7:ET
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash}9I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"8file-digest://app/assets/javascripts/application.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"tfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled/rails-ujs.js;TTI"~file-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/activestorage.js;TTI"xfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/action_cable.js;TTI"2file-digest://app/assets/javascripts/cable.js;TTI"$file-digest://app/assets/config;TTI"1file-digest://app/assets/config/action_cable;TTI"$file-digest://app/assets/images;TTI"1file-digest://app/assets/images/action_cable;TTI")file-digest://app/assets/javascripts;TTI"6file-digest://app/assets/javascripts/action_cable;TTI")file-digest://app/assets/stylesheets;TTI"6file-digest://app/assets/stylesheets/action_cable;TTI"Kfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config;TTI"Xfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config/action_cable;TTI"Kfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images;TTI"Xfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images/action_cable;TTI"Pfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts;TTI"]file-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/action_cable;TTI"Pfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets;TTI"]file-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/action_cable;TTI"hfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled;TTI"ufile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/action_cable;TTI"2file-digest://app/assets/javascripts/channels;TTI".file-digest://app/assets/config/rails-ujs;TTI".file-digest://app/assets/images/rails-ujs;TTI"3file-digest://app/assets/javascripts/rails-ujs;TTI"3file-digest://app/assets/stylesheets/rails-ujs;TTI"Ufile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config/rails-ujs;TTI"Ufile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images/rails-ujs;TTI"Zfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/rails-ujs;TTI"Zfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/rails-ujs;TTI"rfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/rails-ujs;TTI"mfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts;TTI"wfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/rails-ujs;TTI"gfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled;TTI"qfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actionview-5.2.3/lib/assets/compiled/rails-ujs;TTI"2file-digest://app/assets/config/activestorage;TTI"2file-digest://app/assets/images/activestorage;TTI"7file-digest://app/assets/javascripts/activestorage;TTI"7file-digest://app/assets/stylesheets/activestorage;TTI"Yfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/config/activestorage;TTI"Yfile-digest:///home/stephen/apps/quora/templet_rails/app/assets/images/activestorage;TTI"^file-digest:///home/stephen/apps/quora/templet_rails/app/assets/javascripts/activestorage;TTI"^file-digest:///home/stephen/apps/quora/templet_rails/app/assets/stylesheets/activestorage;TTI"vfile-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/actioncable-5.2.3/lib/assets/compiled/activestorage;TTI"{file-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/activestorage;TTF
@@ -0,0 +1,3 @@
1
+ [o:Set:
2
+ @hash}
3
+ I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"~file-digest:///home/stephen/.rvm/gems/ruby-2.6.0@templet/gems/activestorage-5.2.3/app/assets/javascripts/activestorage.js;TTF
@@ -0,0 +1 @@
1
+ 2f4ac0d62a3045a4c36b5625c326f23c4f7c03805c8739e7d138c74c7d125344ac882e81924b738dca4acc92efe43f945c21d6173af178280124074e1003216b
@@ -0,0 +1,10 @@
1
+
2
+ FactoryBot.define do
3
+ factory :answer do
4
+ reply "Reply text"
5
+ active true
6
+ rating 1
7
+ by "Me"
8
+ question { Question.first || association(:question, query: "With question") }
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ FactoryBot.define do
2
+ factory :category do
3
+ name "Category name"
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+
2
+ FactoryBot.define do
3
+ factory :question do
4
+ query "Query text"
5
+
6
+ category { Category.first || association(:category, name: "With question") }
7
+ end
8
+ end
@@ -0,0 +1,18 @@
1
+
2
+ require "rails_helper"
3
+
4
+ require 'templet/forms/bs_form_errors'
5
+
6
+ RSpec.describe Templet::Forms::BsFormErrors, type: :helper do
7
+ include PartialTestHelpers
8
+
9
+ let(:model) { build(:category, name: '').tap {|model| model.valid? } }
10
+
11
+ it "shows error message" do
12
+ selector = 'div[id=error_expl] ul li:first'
13
+
14
+ message = parse_html(selector, render_args: [model]).text
15
+
16
+ expect(message).to match %r(Name.+blank)
17
+ end
18
+ end
@@ -0,0 +1,58 @@
1
+
2
+ require "rails_helper"
3
+
4
+ require 'templet/forms/bs_form'
5
+
6
+ RSpec.describe Templet::Forms::BsForm, type: :helper do
7
+ include PartialTestHelpers
8
+
9
+ include ModelParentHelpers
10
+
11
+ def rest_path(model, parent=nil, **options)
12
+ Templet::Links::RestPath.new model, parent, **options.merge(scope: scope)
13
+ end
14
+
15
+ def parse_form_html(selector, model)
16
+ path = rest_path(model, parent)
17
+
18
+ html = render_partial(url: path) {}
19
+
20
+ parse_html(selector, html: html)
21
+ end
22
+
23
+ def expect_action(url_matcher, model=model())
24
+ selector = 'form[role=form]'
25
+
26
+ action = parse_form_html(selector, model)['action']
27
+
28
+ expect(action).to match url_matcher
29
+ end
30
+
31
+ def expect_method(http_method, model=model())
32
+ selector = 'input[name=_method]'
33
+
34
+ method_value = parse_form_html(selector, model)['value']
35
+
36
+ expect(method_value).to eq http_method
37
+ end
38
+
39
+ describe 'form action' do
40
+ it "has new model url" do
41
+ expect_action path_re, new_model
42
+ end
43
+
44
+ it "has persisted model url" do
45
+ expect_action path_re(suffix: '/\d+')
46
+ end
47
+ end
48
+
49
+ describe 'form method' do
50
+ it "is POST for new model" do
51
+ expect_method 'post', new_model
52
+ end
53
+
54
+ it "is PATCH for persisted model" do
55
+ expect_method 'patch'
56
+ end
57
+ end
58
+ end