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
@@ -5,102 +5,104 @@ require_relative '../shared/model_option'
|
|
5
5
|
require_relative '../shared/actions_option'
|
6
6
|
require_relative '../shared/model_fields'
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
module Templet
|
9
|
+
class ControllerGenerator < Rails::Generators::NamedBase
|
10
|
+
include Shared::ModelOption
|
11
|
+
include Shared::ParentOption
|
12
|
+
include Shared::GrandParentOption
|
13
|
+
include Shared::ActionsOption
|
13
14
|
|
14
|
-
|
15
|
+
include Shared::ModelFields
|
15
16
|
|
16
|
-
|
17
|
+
TEMPLATE_FILE = 'controller.rb.erb'
|
17
18
|
|
18
|
-
|
19
|
+
SET_MODEL_ACTIONS = %w(show edit update destroy)
|
19
20
|
|
20
|
-
|
21
|
-
|
21
|
+
source_root File.expand_path('.', __FILE__)
|
22
|
+
desc
|
22
23
|
|
23
|
-
|
24
|
+
source_root File.expand_path('../../templates', __FILE__)
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
def create_controller
|
27
|
+
template TEMPLATE_FILE, controller_path
|
28
|
+
end
|
28
29
|
|
29
|
-
|
30
|
+
private
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
def include_action?(action)
|
33
|
+
if actions
|
34
|
+
actions.include? action.to_s
|
35
|
+
else
|
36
|
+
true
|
37
|
+
end
|
36
38
|
end
|
37
|
-
end
|
38
39
|
|
39
|
-
|
40
|
-
|
40
|
+
def before_action(name, only=nil, prefix: "\n ")
|
41
|
+
return unless name
|
41
42
|
|
42
|
-
|
43
|
+
suffix = only&.any? ? ', only: %i(' + only * ' ' + ')' : ''
|
43
44
|
|
44
|
-
|
45
|
-
|
45
|
+
"#{prefix}before_action :set_#{name}#{suffix}\n"
|
46
|
+
end
|
46
47
|
|
47
|
-
|
48
|
-
|
49
|
-
|
48
|
+
def set_model?
|
49
|
+
not actions or set_model_actions.any?
|
50
|
+
end
|
50
51
|
|
51
|
-
|
52
|
-
|
53
|
-
|
52
|
+
def set_model_actions
|
53
|
+
actions ? SET_MODEL_ACTIONS & actions : SET_MODEL_ACTIONS
|
54
|
+
end
|
54
55
|
|
55
|
-
|
56
|
-
|
57
|
-
|
56
|
+
def controller_path
|
57
|
+
File.join("app/controllers", "#{file_path.pluralize}_controller.rb")
|
58
|
+
end
|
58
59
|
|
59
|
-
|
60
|
-
|
61
|
-
|
60
|
+
def model_plural
|
61
|
+
model_name.pluralize
|
62
|
+
end
|
62
63
|
|
63
|
-
|
64
|
-
|
65
|
-
|
64
|
+
def model_class_name
|
65
|
+
model_name.classify
|
66
|
+
end
|
66
67
|
|
67
|
-
|
68
|
-
|
69
|
-
|
68
|
+
def receiver
|
69
|
+
parent ? "@#{parent}.#{model_plural}" : model_class_name
|
70
|
+
end
|
70
71
|
|
71
|
-
|
72
|
-
|
73
|
-
|
72
|
+
def redirect_path(use_instance=true)
|
73
|
+
if parent
|
74
|
+
params = ", id: @#{model_name}" if model_name? and use_instance
|
74
75
|
|
75
|
-
|
76
|
-
|
77
|
-
|
76
|
+
"[#{path_scope}@#{parent}, #{path_element use_instance}#{params}]"
|
77
|
+
else
|
78
|
+
"[#{path_scope}#{path_element false}]"
|
79
|
+
end
|
78
80
|
end
|
79
|
-
end
|
80
81
|
|
81
|
-
|
82
|
-
|
82
|
+
def path_scope
|
83
|
+
elements = file_path.split('/')[0..-2]
|
83
84
|
|
84
|
-
|
85
|
-
|
85
|
+
if elements.any?
|
86
|
+
(elements.size == 1 ? ":#{elements.first}" : "'/#{elements * "/"}'") + ', '
|
87
|
+
end
|
86
88
|
end
|
87
|
-
end
|
88
89
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
90
|
+
def path_element(use_instance)
|
91
|
+
if use_instance
|
92
|
+
(model_name? ? ':' : '@') + singular_name
|
93
|
+
else
|
94
|
+
":#{plural_name}"
|
95
|
+
end
|
94
96
|
end
|
95
|
-
end
|
96
97
|
|
97
|
-
|
98
|
-
|
98
|
+
def path_controller(prefix=nil)
|
99
|
+
parents = [ parent.pluralize, '1' ] if parent
|
99
100
|
|
100
|
-
|
101
|
-
|
101
|
+
[ *file_path.split('/')[0..-2], *parents, plural_name, *prefix ] * '/'
|
102
|
+
end
|
102
103
|
|
103
|
-
|
104
|
-
|
104
|
+
def to_option(key, name, prefix='')
|
105
|
+
name ? "#{prefix}#{key}: :#{name}" : ''
|
106
|
+
end
|
105
107
|
end
|
106
108
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Description:
|
2
|
+
Installs the complete framework source under new directory trees,
|
3
|
+
by default, the core code is copied under app/helpers/templet/,
|
4
|
+
but you can change this with the option, DEST.
|
5
|
+
If you install under a directory, like lib/ or vendor/, then you must
|
6
|
+
uncomment the 'require' statements in the file, templet/require_all.rb.
|
7
|
+
|
8
|
+
Example:
|
9
|
+
rails generate templet:core_insall --dest lib/
|
10
|
+
|
11
|
+
This will create:
|
12
|
+
app/controllers/templet/* # Helper modules for invoking the framework
|
13
|
+
app/helpers/templet/** # If dest is given, it replaces 'app/helpers'
|
14
|
+
app/helpers/templet_helper.rb # For framework settings
|
@@ -0,0 +1,77 @@
|
|
1
|
+
|
2
|
+
require_relative '../shared/core_helpers'
|
3
|
+
|
4
|
+
module Templet
|
5
|
+
class CoreInstallGenerator < Rails::Generators::Base
|
6
|
+
include Shared::CoreHelpers
|
7
|
+
|
8
|
+
CONTROLLER_SUBDIR = 'controllers/'
|
9
|
+
APIS_SUBDIR = 'apis/'
|
10
|
+
|
11
|
+
source_root File.expand_path('./', __FILE__)
|
12
|
+
desc
|
13
|
+
|
14
|
+
DEST_DESC = 'The directory that the core code will be copied beneath'
|
15
|
+
class_option :dest, type: :string, aliases: "-d", default: '', desc: DEST_DESC
|
16
|
+
|
17
|
+
def ensure_uninstalled
|
18
|
+
if dir = already_installed_at
|
19
|
+
puts "Can't install while there are files present in #{dir}"
|
20
|
+
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_templet_core
|
26
|
+
create_templet_tree
|
27
|
+
|
28
|
+
create_controller_modules
|
29
|
+
|
30
|
+
create_templet_helper_rb
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def create_templet_tree
|
36
|
+
directory core_dir_source, core_dir_target
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_controller_modules
|
40
|
+
directory controller_dir_source, controller_dir_target
|
41
|
+
end
|
42
|
+
|
43
|
+
def create_templet_helper_rb
|
44
|
+
copy_helper 'templet_helper.rb'
|
45
|
+
end
|
46
|
+
|
47
|
+
def core_dir_source
|
48
|
+
SOURCE_ROOT + TEMPLET_SUBDIR
|
49
|
+
end
|
50
|
+
def core_dir_target
|
51
|
+
core_dest_subdir + TEMPLET_SUBDIR
|
52
|
+
end
|
53
|
+
|
54
|
+
def controller_dir_source
|
55
|
+
SOURCE_ROOT + CONTROLLER_SUBDIR
|
56
|
+
end
|
57
|
+
def controller_dir_target
|
58
|
+
APP_ROOT + CONTROLLER_SUBDIR + TEMPLET_SUBDIR
|
59
|
+
end
|
60
|
+
|
61
|
+
def dest_dirs
|
62
|
+
super + [ LIB_ROOT + TEMPLET_SUBDIR, core_dest_subdir + TEMPLET_SUBDIR ]
|
63
|
+
end
|
64
|
+
|
65
|
+
def core_dest_subdir
|
66
|
+
if ( dest = options['dest'] ).present?
|
67
|
+
if Dir.exists? dest
|
68
|
+
dest + (dest.end_with?('/') ? '' : '/')
|
69
|
+
else
|
70
|
+
raise "Destination directory, #{dest}, must exist"
|
71
|
+
end
|
72
|
+
else
|
73
|
+
APP_ROOT + HELPERS_SUBDIR
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -1,16 +1,13 @@
|
|
1
1
|
Description:
|
2
|
-
Generates Rspec tests for
|
3
|
-
|
4
|
-
Second, an optional step that adds various tests for the framework itself.
|
5
|
-
This second step is superfluous unless you're going to change the source
|
2
|
+
Generates Rspec tests for the core code.
|
3
|
+
It is superfluous unless you're going to change the source
|
6
4
|
code - as these tests offer few, if any, real safeguards.
|
7
|
-
Note that the
|
8
|
-
the option, --include-core-specs is given, and also if the core is kept
|
5
|
+
Note that the tests will only be installed if the core is kept
|
9
6
|
in its default directory, i.e. under app/helpers/templet/.
|
10
7
|
|
11
8
|
Example:
|
12
9
|
rails generate template:core_rspec --include-core-specs
|
13
10
|
|
14
11
|
This will create files under the directories:
|
15
|
-
spec/helpers/
|
16
|
-
spec/
|
12
|
+
spec/helpers/templet/
|
13
|
+
spec/suppoert/templet/
|
@@ -1,65 +1,50 @@
|
|
1
1
|
|
2
2
|
require_relative '../shared/core_helpers'
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
module Templet
|
5
|
+
class CoreRspecGenerator < Rails::Generators::Base
|
6
|
+
include Shared::CoreHelpers
|
6
7
|
|
7
|
-
|
8
|
+
source_root File.expand_path('./', __FILE__)
|
9
|
+
desc
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
+
def copy_templet_specs
|
12
|
+
if Dir.exists? core_default_dir
|
13
|
+
%i(shared core).each do |subdir|
|
14
|
+
directory spec_support_dir_source(subdir), spec_support_dir_target
|
15
|
+
end
|
11
16
|
|
12
|
-
|
13
|
-
desc
|
17
|
+
directory spec_templet_dir_source, spec_templet_dir_target
|
14
18
|
|
15
|
-
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def copy_templet_specs
|
20
|
-
if include_core_specs? and Dir.exists? core_default_dir
|
21
|
-
directory spec_support_dir_source, spec_support_dir_target
|
22
|
-
|
23
|
-
directory spec_templet_dir_source, spec_templet_dir_target
|
24
|
-
|
25
|
-
puts message_for_file_change
|
19
|
+
puts message_for_file_change
|
20
|
+
end
|
26
21
|
end
|
27
|
-
end
|
28
22
|
|
29
|
-
|
30
|
-
|
31
|
-
def app_panel_dir_source
|
32
|
-
SOURCE_ROOT + SPEC_SUBDIR + PANEL_SUBDIR
|
33
|
-
end
|
34
|
-
def app_panel_dir_target
|
35
|
-
SPEC_SUBDIR + HELPERS_SUBDIR + APP_SUBDIR + PANEL_SUBDIR
|
36
|
-
end
|
37
|
-
|
38
|
-
def spec_templet_dir_source
|
39
|
-
SOURCE_ROOT + SPEC_SUBDIR + TEMPLET_SUBDIR
|
40
|
-
end
|
23
|
+
private
|
41
24
|
|
42
|
-
|
43
|
-
|
44
|
-
|
25
|
+
def spec_templet_dir_source
|
26
|
+
SOURCE_ROOT + SPEC_SUBDIR + TEMPLET_SUBDIR
|
27
|
+
end
|
45
28
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
def spec_support_dir_target
|
50
|
-
spec_support_dir + TEMPLET_SUBDIR
|
51
|
-
end
|
29
|
+
def spec_templet_dir_target
|
30
|
+
SPEC_SUBDIR + HELPERS_SUBDIR + TEMPLET_SUBDIR
|
31
|
+
end
|
52
32
|
|
53
|
-
|
54
|
-
|
55
|
-
|
33
|
+
def spec_support_dir_source(subdir)
|
34
|
+
SOURCE_ROOT + spec_support_dir + "#{subdir}/"
|
35
|
+
end
|
36
|
+
def spec_support_dir_target
|
37
|
+
spec_support_dir + TEMPLET_SUBDIR
|
38
|
+
end
|
56
39
|
|
57
|
-
|
58
|
-
|
40
|
+
def message_for_file_change
|
41
|
+
%Q(
|
59
42
|
If you get rspec failures you may need to change values in the file:
|
60
|
-
|
43
|
+
spec/support/templet/model_parent_helpers.rb
|
61
44
|
Or if you'd rather just get rid of these failing tests run this:
|
62
|
-
|
45
|
+
$ rails generate templet:destroy --rm-core-rspec
|
63
46
|
)
|
47
|
+
end
|
64
48
|
end
|
65
49
|
end
|
50
|
+
|
@@ -7,7 +7,7 @@ Description:
|
|
7
7
|
|
8
8
|
Examples:
|
9
9
|
# To get rid of the whole lot
|
10
|
-
rails generate templet:destroy
|
10
|
+
rails generate templet:destroy --all
|
11
11
|
|
12
12
|
# To delete just the templet core tests - leaves everything else intact
|
13
13
|
rails generate templet:destroy --only-core-rspec
|
@@ -1,126 +1,129 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
module Templet
|
3
|
+
class DestroyGenerator < Rails::Generators::Base
|
4
|
+
ALL_DESC = "Remove all files to do with this framework (default: false)"
|
5
|
+
class_option 'all', type: :boolean, default: false, desc: ALL_DESC
|
5
6
|
|
6
|
-
|
7
|
-
|
7
|
+
CORE_DESC = "Remove all of the core (framework) files (default: false)"
|
8
|
+
class_option 'rm-core', type: :boolean, default: false, desc: CORE_DESC
|
8
9
|
|
9
|
-
|
10
|
-
|
10
|
+
APP_DESC = "Remove the application files under app/helpers/app/ and all tests (default: false)"
|
11
|
+
class_option 'rm-app', type: :boolean, default: false, desc: APP_DESC
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
SPEC_DESC = "Remove just the tests for the template core (default: false)"
|
14
|
+
class_option 'rm-core-rspec', type: :boolean, default: false, desc: SPEC_DESC
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
DEST_DESC = 'The directory that the core code will be copied into'
|
17
|
+
class_option :dest, type: :string, aliases: "-d", default: '', desc: DEST_DESC
|
17
18
|
|
18
|
-
|
19
|
-
|
19
|
+
source_root File.expand_path('.', __FILE__)
|
20
|
+
desc
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
22
|
+
def check
|
23
|
+
if rm_all? or rm_core_rspec? or rm_app? or rm_core?
|
24
|
+
unless yes? 'Please confirm that you are about to delete a slew of files?'
|
25
|
+
exit
|
26
|
+
end
|
27
|
+
else
|
28
|
+
generate 'templet:destroy --help'
|
28
29
|
|
29
|
-
|
30
|
+
puts 'Note that at least one option needs to be given'
|
30
31
|
|
31
|
-
|
32
|
+
exit
|
33
|
+
end
|
32
34
|
end
|
33
|
-
end
|
34
35
|
|
35
|
-
|
36
|
-
|
37
|
-
|
36
|
+
def rm_core
|
37
|
+
if core_delete?
|
38
|
+
rm %w(app/helpers/templet/ lib/templet/)
|
39
|
+
rm 'app/helpers/templet_helper.rb'
|
38
40
|
|
39
|
-
|
40
|
-
|
41
|
+
if ( dest = options['dest'] ).present?
|
42
|
+
rm dest
|
43
|
+
end
|
41
44
|
end
|
42
45
|
end
|
43
|
-
end
|
44
46
|
|
45
|
-
|
46
|
-
|
47
|
-
|
47
|
+
def rm_controller
|
48
|
+
if core_delete?
|
49
|
+
rm %w(app/controllers/templet/)
|
50
|
+
end
|
48
51
|
end
|
49
|
-
end
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
+
def rm_helpers_rb
|
54
|
+
if core_delete?
|
55
|
+
end
|
53
56
|
end
|
54
|
-
end
|
55
57
|
|
56
|
-
|
57
|
-
|
58
|
-
|
58
|
+
def rm_app_trees
|
59
|
+
if app_delete?
|
60
|
+
rm 'app/helpers/app.rb'
|
59
61
|
|
60
|
-
|
62
|
+
rm 'app/helpers/app/'
|
61
63
|
|
62
|
-
|
64
|
+
rm %w(spec/helpers/app/ spec/support/templet/)
|
63
65
|
|
64
|
-
|
66
|
+
rm %w(spec/apis/ spec/support/apis/)
|
65
67
|
|
66
|
-
|
67
|
-
|
68
|
-
|
68
|
+
puts "Note that any generated controllers won't have been removed"
|
69
|
+
puts " You'll have to manually delete these yourself"
|
70
|
+
puts " There may also be entries in config/routes.rb"
|
71
|
+
end
|
69
72
|
end
|
70
|
-
end
|
71
73
|
|
72
|
-
|
73
|
-
|
74
|
-
|
74
|
+
def rm_core_rspec
|
75
|
+
if rm_all? or rm_core? or rm_core_rspec?
|
76
|
+
rm %w(spec/helpers/templet/)
|
75
77
|
|
76
|
-
|
77
|
-
|
78
|
-
|
78
|
+
rm %w(spec/support/templet/rest_link_procs_assignments.rb
|
79
|
+
spec/support/templet/rest_link_procs_helpers.rb
|
80
|
+
spec/support/templet/model_parent_helpers.rb)
|
81
|
+
end
|
79
82
|
end
|
80
|
-
end
|
81
83
|
|
82
|
-
|
84
|
+
private
|
83
85
|
|
84
|
-
|
85
|
-
|
86
|
-
|
86
|
+
def rm(*paths)
|
87
|
+
paths.flatten.compact.each do |path|
|
88
|
+
#puts " #{exists?(path) ? '*' : '?'} #{path}"
|
87
89
|
|
88
|
-
|
90
|
+
remove_file path if exists?(path)
|
91
|
+
end
|
89
92
|
end
|
90
|
-
end
|
91
93
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
94
|
+
def exists?(path)
|
95
|
+
if not path or path.empty?
|
96
|
+
false
|
97
|
+
elsif path.include?('.') or path =~ /[A-Z]/ or not path.end_with?('/')
|
98
|
+
File.exists? path
|
99
|
+
else
|
100
|
+
Dir.exists? path
|
101
|
+
end
|
99
102
|
end
|
100
|
-
end
|
101
103
|
|
102
|
-
|
103
|
-
|
104
|
-
|
104
|
+
def core_delete?
|
105
|
+
rm_all? or (rm_core? and not rm_core_rspec?)
|
106
|
+
end
|
105
107
|
|
106
|
-
|
107
|
-
|
108
|
-
|
108
|
+
def app_delete?
|
109
|
+
rm_all? or (rm_app? and not rm_core_rspec?)
|
110
|
+
end
|
109
111
|
|
110
|
-
|
111
|
-
|
112
|
-
|
112
|
+
def rm_core_rspec?
|
113
|
+
options['rm-core-rspec']
|
114
|
+
end
|
113
115
|
|
114
|
-
|
115
|
-
|
116
|
-
|
116
|
+
def rm_app?
|
117
|
+
options['rm-app']
|
118
|
+
end
|
117
119
|
|
118
|
-
|
119
|
-
|
120
|
-
|
120
|
+
def rm_core?
|
121
|
+
options['rm-core']
|
122
|
+
end
|
121
123
|
|
122
|
-
|
123
|
-
|
124
|
+
def rm_all?
|
125
|
+
options['all']
|
126
|
+
end
|
124
127
|
end
|
125
128
|
end
|
126
129
|
|