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.
- checksums.yaml +5 -5
- data/MIT-LICENSE +20 -0
- data/README.md +334 -269
- data/Rakefile +21 -7
- data/app/assets/config/templet_rails_manifest.js +2 -0
- data/app/assets/javascripts/templet_rails/application.js +15 -0
- data/app/assets/stylesheets/templet_rails/application.css +15 -0
- data/app/controllers/templet/json_rendering_helpers.rb +12 -0
- data/app/controllers/templet/rendering_helpers.rb +53 -0
- data/app/controllers/templet/viewer_call_string.rb +144 -0
- data/app/controllers/templet/viewer_call_string_class.rb +65 -0
- data/app/controllers/templet/viewer_responders.rb +121 -0
- data/app/controllers/templet_rails/application_controller.rb +5 -0
- data/app/helpers/templet/constants.rb +54 -0
- data/app/helpers/templet/forms/bs_form.rb +73 -0
- data/app/helpers/templet/forms/bs_form_errors.rb +38 -0
- data/app/helpers/templet/forms/bs_form_field.rb +114 -0
- data/app/helpers/templet/forms/bs_form_group.rb +115 -0
- data/app/helpers/templet/layouts/html_rails.rb +36 -0
- data/app/helpers/templet/links.rb +28 -0
- data/app/helpers/templet/links/bs_btn_class.rb +61 -0
- data/app/helpers/templet/links/bs_link_set_base.rb +168 -0
- data/app/helpers/templet/links/bs_link_set_collection.rb +21 -0
- data/app/helpers/templet/links/bs_link_set_navigation.rb +62 -0
- data/app/helpers/templet/links/rest_link_procs.rb +163 -0
- data/app/helpers/templet/links/rest_link_procs_parent.rb +39 -0
- data/app/helpers/templet/links/rest_link_procs_sets.rb +30 -0
- data/app/helpers/templet/links/rest_link_text.rb +102 -0
- data/app/helpers/templet/links/rest_path.rb +90 -0
- data/app/helpers/templet/mixins.rb +9 -0
- data/app/helpers/templet/mixins/bs.rb +11 -0
- data/app/helpers/templet/mixins/bs/grid.rb +53 -0
- data/app/helpers/templet/mixins/bs/lists.rb +77 -0
- data/app/helpers/templet/mixins/field_procs.rb +140 -0
- data/app/helpers/templet/mixins/html_presenters.rb +82 -0
- data/app/helpers/templet/require_all.rb +45 -0
- data/app/helpers/templet/utils/html_search_form.rb +53 -0
- data/app/helpers/templet/utils/link_set_factory.rb +46 -0
- data/app/helpers/templet/utils/link_set_factory_wrapper.rb +53 -0
- data/app/helpers/templet/utils/list_model_parents.rb +27 -0
- data/app/helpers/templet/utils/navbar_form.rb +26 -0
- data/app/helpers/templet/utils/selected_wrapper.rb +40 -0
- data/app/helpers/templet/viewer.rb +11 -0
- data/app/helpers/templet/viewer/meta_model.rb +66 -0
- data/app/helpers/templet/viewer/meta_model_defaults.rb +56 -0
- data/app/helpers/templet/viewer/presenters.rb +44 -0
- data/app/helpers/templet/viewer/rest_actions.rb +24 -0
- data/app/helpers/templet/viewer_base.rb +111 -0
- data/app/helpers/templet/viewer_rest.rb +144 -0
- data/app/helpers/templet_helper.rb +10 -0
- data/app/helpers/templet_rails/application_helper.rb +4 -0
- data/app/jobs/templet_rails/application_job.rb +4 -0
- data/app/mailers/templet_rails/application_mailer.rb +6 -0
- data/app/models/templet_rails/application_record.rb +5 -0
- data/app/views/layouts/templet_rails/application.html.erb +16 -0
- data/config/routes.rb +2 -0
- data/lib/generators/templet/controller/controller_generator.rb +70 -68
- data/lib/generators/templet/core_install/USAGE +14 -0
- data/lib/generators/templet/core_install/core_install_generator.rb +77 -0
- data/lib/generators/templet/core_rspec/USAGE +5 -8
- data/lib/generators/templet/core_rspec/core_rspec_generator.rb +32 -47
- data/lib/generators/templet/destroy/USAGE +1 -1
- data/lib/generators/templet/destroy/destroy_generator.rb +87 -84
- data/lib/generators/templet/install/USAGE +16 -0
- data/lib/generators/templet/install/install_generator.rb +103 -0
- data/lib/generators/templet/routes/routes_generator.rb +43 -41
- data/lib/generators/templet/rspec/rspec_generator.rb +1 -0
- data/lib/generators/templet/scaffold/scaffold_generator.rb +66 -64
- data/lib/generators/templet/shared/core_helpers.rb +10 -0
- data/lib/generators/templet/shared/model_fields.rb +2 -2
- data/lib/generators/templet/templates/core/app/base_viewer.rb +1 -1
- data/lib/generators/templet/templates/core/app/{panel → layouts}/layout_base.rb +3 -3
- data/lib/generators/templet/templates/core/app/{panel → layouts}/layout_header.rb +3 -1
- data/lib/generators/templet/templates/core/app/{panel → layouts}/layout_header_sidebar.rb +2 -1
- data/lib/generators/templet/templates/core/app/{panel/nav.rb → layouts/navbar.rb} +2 -2
- data/lib/generators/templet/templates/core/app/layouts/navbar_args_option.rb +32 -0
- data/lib/generators/templet/templates/core/app/{link_sets/navbar.rb → layouts/navbar_links.rb} +2 -2
- data/lib/generators/templet/templates/core/app/{panel → layouts}/options_config.rb +3 -3
- data/lib/generators/templet/templates/core/app/layouts/panel/flash_messages.rb +35 -0
- data/lib/generators/templet/templates/core/app/layouts/panel/show_parents_option.rb +24 -0
- data/lib/generators/templet/templates/core/app/layouts/panel/sidebar_links_option.rb +26 -0
- data/lib/generators/templet/templates/core/spec/layouts/flash_messages_spec.rb +18 -0
- data/lib/generators/templet/templates/core/spec/layouts/navbar_spec.rb +19 -0
- data/lib/generators/templet/templates/core/spec/support/apis/api_helper.rb +2 -0
- data/lib/generators/templet/templates/core/spec/support/apis/shared_examples_a_json_controller.rb +1 -1
- data/lib/generators/templet/templates/core/spec/support/{viewer → shared}/partial_test_helpers.rb +0 -0
- data/lib/generators/templet/templates/core/templet/viewer_base.rb +3 -3
- data/lib/generators/templet/viewer/viewer_generator.rb +60 -58
- data/lib/tasks/templet_rails_tasks.rake +4 -0
- data/lib/templet_rails.rb +1 -1
- data/lib/templet_rails/engine.rb +5 -0
- data/lib/templet_rails/version.rb +1 -1
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/config/manifest.js +4 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/javascripts/cable.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
- data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
- data/spec/dummy/app/controllers/answers_controller.rb +86 -0
- data/spec/dummy/app/controllers/application_controller.rb +2 -0
- data/spec/dummy/app/controllers/categories_controller.rb +80 -0
- data/spec/dummy/app/controllers/questions_controller.rb +86 -0
- data/spec/dummy/app/helpers/app.rb +4 -0
- data/spec/dummy/app/helpers/app/answer_viewer.rb +21 -0
- data/spec/dummy/app/helpers/app/base_viewer.rb +7 -0
- data/spec/dummy/app/helpers/app/category_viewer.rb +26 -0
- data/spec/dummy/app/helpers/app/layouts/layout_base.rb +40 -0
- data/spec/dummy/app/helpers/app/layouts/layout_header.rb +24 -0
- data/spec/dummy/app/helpers/app/layouts/layout_header_sidebar.rb +19 -0
- data/spec/dummy/app/helpers/app/layouts/navbar.rb +55 -0
- data/spec/dummy/app/helpers/app/layouts/navbar_args_option.rb +32 -0
- data/spec/dummy/app/helpers/app/layouts/navbar_links.rb +12 -0
- data/spec/dummy/app/helpers/app/layouts/options_config.rb +19 -0
- data/spec/dummy/app/helpers/app/layouts/panel/flash_messages.rb +35 -0
- data/spec/dummy/app/helpers/app/layouts/panel/show_parents_option.rb +24 -0
- data/spec/dummy/app/helpers/app/layouts/panel/sidebar_links_option.rb +26 -0
- data/spec/dummy/app/helpers/app/question_viewer.rb +26 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/jobs/application_job.rb +2 -0
- data/spec/dummy/app/mailers/application_mailer.rb +4 -0
- data/spec/dummy/app/models/answer.rb +12 -0
- data/spec/dummy/app/models/application_record.rb +3 -0
- data/spec/dummy/app/models/category.rb +11 -0
- data/spec/dummy/app/models/question.rb +15 -0
- data/spec/dummy/app/views/layouts/application.html.erb +15 -0
- data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +36 -0
- data/spec/dummy/bin/update +31 -0
- data/spec/dummy/bin/yarn +11 -0
- data/spec/dummy/config.ru +5 -0
- data/spec/dummy/config/application.rb +30 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/cable.yml +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +61 -0
- data/spec/dummy/config/environments/production.rb +94 -0
- data/spec/dummy/config/environments/test.rb +46 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/spec/dummy/config/initializers/assets.rb +14 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/content_security_policy.rb +25 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +33 -0
- data/spec/dummy/config/puma.rb +34 -0
- data/spec/dummy/config/routes.rb +9 -0
- data/spec/dummy/config/spring.rb +6 -0
- data/spec/dummy/config/storage.yml +34 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20190709192619_create_categories.rb +9 -0
- data/spec/dummy/db/migrate/20190709192656_create_questions.rb +12 -0
- data/spec/dummy/db/migrate/20190709192737_create_answers.rb +13 -0
- data/spec/dummy/db/schema.rb +42 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +64 -0
- data/spec/dummy/log/test.log +40792 -0
- data/spec/dummy/package.json +5 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/{lib/generators/templet/templates/core/controllers/.keep → spec/dummy/public/apple-touch-icon-precomposed.png} +0 -0
- data/spec/dummy/public/apple-touch-icon.png +0 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/spec/apis/answers_controller_spec.rb +17 -0
- data/spec/dummy/spec/apis/categories_controller_spec.rb +13 -0
- data/spec/dummy/spec/apis/questions_controller_spec.rb +15 -0
- data/spec/dummy/spec/helpers/app/answer_viewer_spec.rb +18 -0
- data/spec/dummy/spec/helpers/app/category_viewer_spec.rb +14 -0
- data/spec/dummy/spec/helpers/app/layouts/flash_messages_spec.rb +18 -0
- data/spec/dummy/spec/helpers/app/layouts/navbar_spec.rb +19 -0
- data/spec/dummy/spec/helpers/app/question_viewer_spec.rb +16 -0
- data/spec/dummy/spec/support/apis/api_helper.rb +15 -0
- data/spec/dummy/spec/support/apis/shared_examples_a_json_controller.rb +196 -0
- data/spec/dummy/spec/support/templet/partial_test_helpers.rb +32 -0
- data/spec/dummy/spec/support/templet/shared_examples_a_viewer.rb +105 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-6/-6-48LISBeQVJvpEXNgFstDrCriEFNmvje6XhidzlV4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-D/-DLE9y_1ICajcEaHcprHYBO8vjXpHySH_56FSb0SLOs.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-Y/-YJ1ILDQvu3hOKkF0VR9K_z04e2-EVHglO0MAFS8gpQ.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-_/-_7FgdEon9WttcnvoyQAysmonCHN7FxsrcuDa5OTUJQ.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0u/0u-iWymOJvpggI1uY7Na3322xwcjNY7egB-czjV96m4.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0x/0xArd189AygdGItqWO0_5BfinFQjLZjwyVsAGWqOgKg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/2S/2SfjLWkOp2BGM0OzwsshKpnXI8rlJFOV6ZJsIszRn6k.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3h/3hFAACevvXtDja9zz3rMK6gA1MD1I7_puWyRRkV7sLk.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4o/4oNwzIrltWrfajciBz7JHd5RT5_XVv04L6NdaBGN794.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7F/7F3o6QQqoI0bDk6-A5qMN8LCZQALddlu23KiRWBxtWk.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Af/AfFBDeKpi4wSUc7rcjxfjPbEgV6GOGXTjeZhHrfDX48.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bf/BfD6ZVgFq-kWDMMVb2EE5ZAKgsgn1VUR9oVxD0hHVMI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bo/Bogjbc_D5J-6_m5KEgeXt_GHc-IbUt1_FDWP4PHV0P8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DF/DF3HgsSD9LO1Bz8d3GJi_G6wBExmsnBJ6b1pvZEGE7w.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DO/DO8Gqh32jK2GrO9uIlH7qvDkelVw0VM8CTSOUj6iUEo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/GC/GCNwk_ABiY0z51bz8iC8tqLLWKhQwxW4-JLNKv-SRe0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Gl/Gls_Zud1kxq7p08FGBfzalbaLMlLBl28bOYebh7Ljrg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Gm/GmHHk4YNC0G2V_5gQZp0U6mKFPxGSgL7fwWI3_fajrk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Gr/GreB3WHN8MyWMDFGNyqJJcxGblgo-5XepsEHvdJSQGI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HC/HCDOUd7-S45aJ_PjVAC_Vmjyud3i1aQv4cE3t9_Z3Dw.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hd/HdvsElcHSt7aKjG9jocgIQJEvBjBbeSZ8HntI1pc38o.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Iv/IvR5RxSTQkxfGWSoy5S2s7wO5u5qwCJ5mNAhqNJtJDY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JS/JSYyQZJzLNqpmVR--ZDUW6PY7_HflyFFHDAOLenxlP4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Jx/JxJXzSistcpH4S_9CbGx_wyjVTaE77ZDDfOc4uTfvdM.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MH/MHCZUSVJq62YPmcVVkfjp2B5uH_nDL7snLl4yqvlSJY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MY/MY5theanttko1gCnW9vKb0Z1GkJn8Ofk149HwOt0UAM.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Mn/MnGg5XDll2jo-E_CTC1htiNc0hOY6z80_bwGCvpYTXk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Nt/NtYu5CjAvU5ZHxSOn6Q4LPukD3hBE-3vYe30d_uSBzM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Nu/NuIepb7qomZzBDAJMUROsshKo8TJxdmFR4yOe64W58w.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/R7/R7ngeIqpdwSWkbjbxxzh6B-KczkWMcxYMIkj5inxrV8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/S9/S9MhILnM64qd2M9Z92TrNMtw7VUWZxf3H367OO8rlhs.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SI/SIZUy2mtjUm_G1YIulRCovzgkCwV1eoR2NLiYcsR1Ws.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Sl/SlECThrSAExfICiFGVi-zu240BVDaUldaRs4qcj354U.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/St/St6dTA4niiCDLnnArKZV38uZNFf6MbEZ_jHGC-Upft0.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/T6/T6p-BnPmMCmpJdaqrjWmLMsBW8SNJpSW6w-Azc3XGVk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Vs/VsZPCEai1GtOT-vHjxMS8kAP9ASG5i_2O_EP76uI7Qs.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Vv/Vv6dack32HV3tIZ_6F4BF8Mrrnb7wZEG4VlEKumQ6L0.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Wp/WpV6mJwJX9dwIFJGLoJoa-gXNe1-ZHusE9SwvnWysa8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Wy/Wya0wl0Q2nXYb5-bC5Fbo0sDZfKb3415AjtSjld7fQI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/b7/b7j7TIOE1nnqvMku0QePWFrwCkaKkNpxkiWST6PAplo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ck/ckDOh-FroVE8r1fwUNWmnRconIREuVdmkZEFkaP9KfU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eN/eNQPQP-9gB3xzxJBsG7soV6Ie0YZ3gxIS97PgYtZVT8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gb/gbUMPMF8S0OQVsFHyAjHpHVEg-3iZzTVIQZDmfq-ycE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/if/ifyb5SlIS8vkACz_6P0uTOGijMB4C5TyFWmrMq3DYIg.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jg/jg-s5YLdnojCtHqzfDTsvcy6UHewDRl1X09qlGyvyag.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ko/koPyQus8Oqrx18bnLj-5nJrKvFf6FDDQbv2qEa7Bl7M.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lG/lGRRazgrFErFx1PkfDlca6r-0MGQR40i0tq0Wgm2FNU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lS/lStvx9Beg2l4s8L-QdTSKuc5_qQPQAZPnIcRI7JkpPE.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lZ/lZIacHrJV5bDohEHsVOXDGIDrUH2h4YvwV9g-MWmh3k.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lq/lqM4-wfprvp5FEBp1pSm88Jwx-Vb2oJab2rjLtUcIyM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/n_/n_xYqQYhwEMQknb3jFQnjlxxBE9TzMNHCdJ-bEyZFIw.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nx/nxTv3sKVUQZADJyM3dPaVmUA78MIsMLD_K279yN_GsI.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ps/psGFyjvQcs8JpIV8BDeCqQfHaLYgIgSAi86n4RrFpFs.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/r1/r1IIabhuPhgB3n8V3ZMRN0SqIsXJ8bH0ABTRzHTG1SU.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vt/vtskp0QTt72oDQNM6mYZ8pCclh2HICHeYZ1QtDvC5xo.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wi/win_v0ZNu-l7AoRx8w3ls1xcy0mUExLBVMCSr5oaJFc.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yo/yoggubxI12fIM1o5TtxUialrUN-LWOfRaV_tqc1HAC4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zH/zHnHpZP25wEHaF3mI_M9RGH1zeCApf6mwhLB3Lku1zs.cache +3 -0
- data/spec/dummy/tmp/development_secret.txt +1 -0
- data/spec/factories/answers.rb +10 -0
- data/spec/factories/categories.rb +5 -0
- data/spec/factories/questions.rb +8 -0
- data/spec/helpers/templet/forms/bs_form_errors_spec.rb +18 -0
- data/spec/helpers/templet/forms/bs_form_spec.rb +58 -0
- data/spec/helpers/templet/layout/html_rails_spec.rb +64 -0
- data/spec/helpers/templet/links/bs_link_set_collection_spec.rb +79 -0
- data/spec/helpers/templet/links/rest_link_procs_params_spec.rb +68 -0
- data/spec/helpers/templet/links/rest_link_procs_parents_spec.rb +78 -0
- data/spec/helpers/templet/links/rest_link_procs_spec.rb +140 -0
- data/spec/models/answer_spec.rb +9 -0
- data/spec/models/category_spec.rb +9 -0
- data/spec/models/question_spec.rb +9 -0
- data/spec/rails_helper.rb +61 -0
- data/spec/spec_helper.rb +108 -0
- data/spec/support/templet/model_parent_helpers.rb +36 -0
- data/spec/support/templet/partial_test_helpers.rb +32 -0
- data/spec/support/templet/rest_link_procs_assignments.rb +43 -0
- data/spec/support/templet/rest_link_procs_helpers.rb +15 -0
- metadata +470 -38
- data/.gitignore +0 -8
- data/.travis.yml +0 -5
- data/Gemfile +0 -6
- data/LICENSE.txt +0 -21
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/lib/generators/templet/core/USAGE +0 -23
- data/lib/generators/templet/core/core_generator.rb +0 -128
- data/lib/generators/templet/templates/core/app/panel/flash_messages.rb +0 -33
- data/lib/generators/templet/templates/core/app/panel/nav_args_option.rb +0 -30
- data/lib/generators/templet/templates/core/app/panel/show_parents_option.rb +0 -22
- data/lib/generators/templet/templates/core/app/panel/sidebar_links_option.rb +0 -24
- data/templet_rails.gemspec +0 -36
@@ -0,0 +1,15 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file. JavaScript code in this file should be added after the last require_* statement.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require rails-ujs
|
14
|
+
//= require activestorage
|
15
|
+
//= require_tree .
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// Action Cable provides the framework to deal with WebSockets in Rails.
|
2
|
+
// You can generate new channels where WebSocket features live using the `rails generate channel` command.
|
3
|
+
//
|
4
|
+
//= require action_cable
|
5
|
+
//= require_self
|
6
|
+
//= require_tree ./channels
|
7
|
+
|
8
|
+
(function() {
|
9
|
+
this.App || (this.App = {});
|
10
|
+
|
11
|
+
App.cable = ActionCable.createConsumer();
|
12
|
+
|
13
|
+
}).call(this);
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
10
|
+
* files in this directory. Styles in this file should be added after the last require_* statement.
|
11
|
+
* It is generally better to create a new file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require_self
|
15
|
+
*/
|
@@ -0,0 +1,86 @@
|
|
1
|
+
|
2
|
+
class AnswersController < ApplicationController
|
3
|
+
include Templet::ViewerResponders
|
4
|
+
|
5
|
+
before_action :set_question
|
6
|
+
|
7
|
+
before_action :set_answer, only: %i(show edit update destroy)
|
8
|
+
|
9
|
+
# GET /questions/1/answers
|
10
|
+
# GET /questions/1/answers.json
|
11
|
+
def index
|
12
|
+
@answers = @question.answers.all
|
13
|
+
|
14
|
+
respond_to_index
|
15
|
+
end
|
16
|
+
|
17
|
+
# GET /questions/1/answers/1
|
18
|
+
# GET /questions/1/answers/1.json
|
19
|
+
def show
|
20
|
+
respond_to_show
|
21
|
+
end
|
22
|
+
|
23
|
+
# GET /questions/1/answers/new
|
24
|
+
def new
|
25
|
+
@answer = @question.answers.new
|
26
|
+
|
27
|
+
respond_to_new
|
28
|
+
end
|
29
|
+
|
30
|
+
# GET /questions/1/answers/1/edit
|
31
|
+
def edit
|
32
|
+
respond_to_edit
|
33
|
+
end
|
34
|
+
|
35
|
+
# POST /questions/1/answers/1
|
36
|
+
# POST /questions/1/answers/1.json
|
37
|
+
def create
|
38
|
+
@answer = @question.answers.new(answer_params)
|
39
|
+
|
40
|
+
if @answer.save
|
41
|
+
respond_to_save_success(@answer, [@question, @answer])
|
42
|
+
else
|
43
|
+
respond_to_save_failure(:new, @answer)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# PATCH/PUT /questions/1/answers/1
|
48
|
+
# PATCH/PUT /questions/1/answers/1.json
|
49
|
+
def update
|
50
|
+
if @answer.update(answer_params)
|
51
|
+
respond_to_save_success(@answer, [@question, @answer])
|
52
|
+
else
|
53
|
+
respond_to_save_failure(:edit, @answer)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# DELETE /questions/1/answers/1
|
58
|
+
# DELETE /questions/1/answers/1.json
|
59
|
+
def destroy
|
60
|
+
@answer.destroy
|
61
|
+
|
62
|
+
respond_to_destroy(@answer, [@question, :answers])
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def set_question
|
68
|
+
@question = Question.find(params[:question_id])
|
69
|
+
end
|
70
|
+
|
71
|
+
def set_answer
|
72
|
+
@answer = @question.answers.find(params[:id])
|
73
|
+
end
|
74
|
+
|
75
|
+
def answer_params
|
76
|
+
params.require(:answer).permit(*answer_fields)
|
77
|
+
end
|
78
|
+
|
79
|
+
def answer_fields
|
80
|
+
%i(reply active rating by question_id)
|
81
|
+
end
|
82
|
+
|
83
|
+
def viewer_options
|
84
|
+
super.merge({ parent: :question, grand_parent: :category })
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
|
2
|
+
class CategoriesController < ApplicationController
|
3
|
+
include Templet::ViewerResponders
|
4
|
+
|
5
|
+
before_action :set_category, only: %i(show edit update destroy)
|
6
|
+
|
7
|
+
# GET /categories
|
8
|
+
# GET /categories.json
|
9
|
+
def index
|
10
|
+
@categories = Category.all
|
11
|
+
|
12
|
+
respond_to_index
|
13
|
+
end
|
14
|
+
|
15
|
+
# GET /categories/1
|
16
|
+
# GET /categories/1.json
|
17
|
+
def show
|
18
|
+
respond_to_show
|
19
|
+
end
|
20
|
+
|
21
|
+
# GET /categories/new
|
22
|
+
def new
|
23
|
+
@category = Category.new
|
24
|
+
|
25
|
+
respond_to_new
|
26
|
+
end
|
27
|
+
|
28
|
+
# GET /categories/1/edit
|
29
|
+
def edit
|
30
|
+
respond_to_edit
|
31
|
+
end
|
32
|
+
|
33
|
+
# POST /categories/1
|
34
|
+
# POST /categories/1.json
|
35
|
+
def create
|
36
|
+
@category = Category.new(category_params)
|
37
|
+
|
38
|
+
if @category.save
|
39
|
+
respond_to_save_success(@category, [:categories])
|
40
|
+
else
|
41
|
+
respond_to_save_failure(:new, @category)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# PATCH/PUT /categories/1
|
46
|
+
# PATCH/PUT /categories/1.json
|
47
|
+
def update
|
48
|
+
if @category.update(category_params)
|
49
|
+
respond_to_save_success(@category, [:categories])
|
50
|
+
else
|
51
|
+
respond_to_save_failure(:edit, @category)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# DELETE /categories/1
|
56
|
+
# DELETE /categories/1.json
|
57
|
+
def destroy
|
58
|
+
@category.destroy
|
59
|
+
|
60
|
+
respond_to_destroy(@category, [:categories])
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def set_category
|
66
|
+
@category = Category.find(params[:id])
|
67
|
+
end
|
68
|
+
|
69
|
+
def category_params
|
70
|
+
params.require(:category).permit(*category_fields)
|
71
|
+
end
|
72
|
+
|
73
|
+
def category_fields
|
74
|
+
%i(name)
|
75
|
+
end
|
76
|
+
|
77
|
+
def viewer_options
|
78
|
+
super.merge({ })
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
|
2
|
+
class QuestionsController < ApplicationController
|
3
|
+
include Templet::ViewerResponders
|
4
|
+
|
5
|
+
before_action :set_category
|
6
|
+
|
7
|
+
before_action :set_question, only: %i(show edit update destroy)
|
8
|
+
|
9
|
+
# GET /categories/1/questions
|
10
|
+
# GET /categories/1/questions.json
|
11
|
+
def index
|
12
|
+
@questions = @category.questions.all
|
13
|
+
|
14
|
+
respond_to_index
|
15
|
+
end
|
16
|
+
|
17
|
+
# GET /categories/1/questions/1
|
18
|
+
# GET /categories/1/questions/1.json
|
19
|
+
def show
|
20
|
+
respond_to_show
|
21
|
+
end
|
22
|
+
|
23
|
+
# GET /categories/1/questions/new
|
24
|
+
def new
|
25
|
+
@question = @category.questions.new
|
26
|
+
|
27
|
+
respond_to_new
|
28
|
+
end
|
29
|
+
|
30
|
+
# GET /categories/1/questions/1/edit
|
31
|
+
def edit
|
32
|
+
respond_to_edit
|
33
|
+
end
|
34
|
+
|
35
|
+
# POST /categories/1/questions/1
|
36
|
+
# POST /categories/1/questions/1.json
|
37
|
+
def create
|
38
|
+
@question = @category.questions.new(question_params)
|
39
|
+
|
40
|
+
if @question.save
|
41
|
+
respond_to_save_success(@question, [@category, @question])
|
42
|
+
else
|
43
|
+
respond_to_save_failure(:new, @question)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# PATCH/PUT /categories/1/questions/1
|
48
|
+
# PATCH/PUT /categories/1/questions/1.json
|
49
|
+
def update
|
50
|
+
if @question.update(question_params)
|
51
|
+
respond_to_save_success(@question, [@category, @question])
|
52
|
+
else
|
53
|
+
respond_to_save_failure(:edit, @question)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# DELETE /categories/1/questions/1
|
58
|
+
# DELETE /categories/1/questions/1.json
|
59
|
+
def destroy
|
60
|
+
@question.destroy
|
61
|
+
|
62
|
+
respond_to_destroy(@question, [@category, :questions])
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def set_category
|
68
|
+
@category = Category.find(params[:category_id])
|
69
|
+
end
|
70
|
+
|
71
|
+
def set_question
|
72
|
+
@question = @category.questions.find(params[:id])
|
73
|
+
end
|
74
|
+
|
75
|
+
def question_params
|
76
|
+
params.require(:question).permit(*question_fields)
|
77
|
+
end
|
78
|
+
|
79
|
+
def question_fields
|
80
|
+
%i(query active expires_on category_id)
|
81
|
+
end
|
82
|
+
|
83
|
+
def viewer_options
|
84
|
+
super.merge({ parent: :category })
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
|
2
|
+
module App
|
3
|
+
class AnswerViewer < BaseViewer
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
|
8
|
+
# You can override the following methods:
|
9
|
+
#
|
10
|
+
# remote? For AJAX links and forms
|
11
|
+
# form_height For the field height on the form (sm md lg)
|
12
|
+
# forward For the model's principal has_many relationship
|
13
|
+
# backward For the model's grand-parent
|
14
|
+
# This can be overriden in the controller
|
15
|
+
#
|
16
|
+
# There are also a number of others, mostly to do with the layout
|
17
|
+
#
|
18
|
+
# For more info see: app/helpers/templet/viewer_base.rb
|
19
|
+
# app/helpers/templet/viewer_rest.rb
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
module App
|
3
|
+
class CategoryViewer < BaseViewer
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
# Used in button groups for links to a model's children
|
8
|
+
def forward
|
9
|
+
:questions
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
# You can override the following methods:
|
14
|
+
#
|
15
|
+
# remote? For AJAX links and forms
|
16
|
+
# form_height For the field height on the form (sm md lg)
|
17
|
+
# forward For the model's principal has_many relationship
|
18
|
+
# backward For the model's grand-parent
|
19
|
+
# This can be overriden in the controller
|
20
|
+
#
|
21
|
+
# There are also a number of others, mostly to do with the layout
|
22
|
+
#
|
23
|
+
# For more info see: app/helpers/templet/viewer_base.rb
|
24
|
+
# app/helpers/templet/viewer_rest.rb
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
module App
|
3
|
+
module Layouts
|
4
|
+
# Renders a navbar, flash messages and yielded content in Bootstrap grid
|
5
|
+
class LayoutBase < Templet::Component::Partial
|
6
|
+
include Templet::Mixins::Bs::Grid
|
7
|
+
|
8
|
+
def call(action, **options)
|
9
|
+
super() do
|
10
|
+
js_target_div :outer,
|
11
|
+
navbar(*options[:nav_args]),
|
12
|
+
messages,
|
13
|
+
in_rows(renderer, yield(renderer), **bs_column_opts)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
# Adds a surrounding div tag, whose content is replaced in JS requests
|
20
|
+
def js_target_div(suffix, *content)
|
21
|
+
renderer.call do
|
22
|
+
div(id: "panel-#{suffix}") { content }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def bs_column_opts
|
27
|
+
{ cols: 10, offset: 1 }
|
28
|
+
end
|
29
|
+
|
30
|
+
def messages
|
31
|
+
Panel::FlashMessages.new(renderer).(**bs_column_opts)
|
32
|
+
end
|
33
|
+
|
34
|
+
def navbar(*args)
|
35
|
+
Navbar.new(renderer).(*args)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
module App
|
3
|
+
module Layouts
|
4
|
+
# Renders a heading with a title, subtitle and perhaps something on right
|
5
|
+
class LayoutHeader < LayoutBase
|
6
|
+
def call(action, **options)
|
7
|
+
args = options.values_at :title, :subtitle, :header_right
|
8
|
+
|
9
|
+
super { [ header(*args), yield(renderer) ] }
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def header(title, subtitle, on_right)
|
15
|
+
renderer.call do
|
16
|
+
div :page_header do
|
17
|
+
[ div(on_right, :pull_right), h1([title, small(subtitle)]) ]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|