diff --git a/Gemfile b/Gemfile index 628ae268..51d969f2 100644 --- a/Gemfile +++ b/Gemfile @@ -12,6 +12,8 @@ gem 'propshaft' gem 'puma' gem 'stimulus-rails' gem 'turbo-rails' + +# TODO: figure out why these need to be here for the specs to run gem 'doorkeeper' gem 'mcp' diff --git a/bin/dummy_app_builder.rb b/bin/dummy_app_builder.rb index aa8b52af..e0ea065f 100644 --- a/bin/dummy_app_builder.rb +++ b/bin/dummy_app_builder.rb @@ -10,7 +10,7 @@ def ruby_version = nil def node_version = nil def generate_test_dummy - invoke Rails::Generators::AppGenerator, [ File.expand_path(dummy_path) ], { + invoke Rails::Generators::AppGenerator, [ File.expand_path(app_path) ], { dummy_app: true, force: true, database: 'postgresql', @@ -30,6 +30,6 @@ def generate_test_dummy end def test_dummy_config - template 'boot.rb', "#{dummy_path}/config/boot.rb", force: true + directory 'config', "#{app_path}/config", force: true end end diff --git a/bin/new_generator b/bin/new_generator index aed292e0..ee0d6bf8 100755 --- a/bin/new_generator +++ b/bin/new_generator @@ -1,6 +1,7 @@ #!/usr/bin/env ruby require 'thor' -require 'active_support/core_ext/string/inflections' +require 'active_support' +require 'active_support/core_ext' class NewGenerator < Thor::Group include Thor::Actions @@ -16,12 +17,6 @@ class NewGenerator < Thor::Group directory 'generator_spec', "spec/generators/rolemodel/#{module_name.underscore}" end - def bump_version_number - in_root do - run 'bin/bump_version' - end - end - private def module_name = name.camelize.deconstantize @@ -29,6 +24,18 @@ private def filename = class_name.underscore def command_name = ['rolemodel', *name.split('/').map(&:underscore)].join(':') + def modules + @modules ||= name.camelize.split("::")[0...-1].unshift('Rolemodel') + end + + def wrap_in_modules(&) + modules.each_with_index do |mod, index| + concat "#{' ' * index}module #{mod}\n" + end + (capture(&).strip + "\n").each_line { concat ' ' * modules.size + it } + modules.size.times.reverse_each { concat ' ' * it + "end\n" } + end + class << self def banner <<~BANNER @@ -40,7 +47,7 @@ private end def desc = 'New Generator Scaffold' - def source_root = File.expand_path('lib/generators/templates') + def source_root = File.expand_path('templates/new_generator', __dir__) end end diff --git a/bin/recreate_current_example b/bin/recreate_current_example index b13a477a..354e792e 100755 --- a/bin/recreate_current_example +++ b/bin/recreate_current_example @@ -5,7 +5,7 @@ RAILS_VERSION = '8.1.3' require_relative 'dummy_app_builder' class RecreateCurrentExample < Rails::Generators::AppBase - source_root File.expand_path('templates', __dir__) + source_root File.expand_path('templates/dummy_app', __dir__) def recreate_example shell.mute do @@ -16,11 +16,7 @@ class RecreateCurrentExample < Rails::Generators::AppBase private - def dummy_path - @dummy_path ||= "./example_rails_current" - end - def get_builder_class = BuilderClass end -RecreateCurrentExample.start(["--app-path=example_rails_current"]) +RecreateCurrentExample.start(["example_rails_current"]) diff --git a/bin/templates/boot.rb.tt b/bin/templates/dummy_app/config/boot.rb.tt similarity index 100% rename from bin/templates/boot.rb.tt rename to bin/templates/dummy_app/config/boot.rb.tt diff --git a/bin/templates/new_generator/generator/%filename%.rb.tt b/bin/templates/new_generator/generator/%filename%.rb.tt new file mode 100644 index 00000000..96db61dd --- /dev/null +++ b/bin/templates/new_generator/generator/%filename%.rb.tt @@ -0,0 +1,9 @@ +<% wrap_in_modules do %> +class <%= class_name %> < ::Rolemodel::GeneratorBase + source_root File.expand_path('templates', __dir__) + + def generate_stuff + say 'generating stuff', :green + end +end +<% end %> diff --git a/lib/generators/templates/generator/README.md.tt b/bin/templates/new_generator/generator/README.md.tt similarity index 100% rename from lib/generators/templates/generator/README.md.tt rename to bin/templates/new_generator/generator/README.md.tt diff --git a/lib/generators/templates/generator/USAGE.tt b/bin/templates/new_generator/generator/USAGE.tt similarity index 100% rename from lib/generators/templates/generator/USAGE.tt rename to bin/templates/new_generator/generator/USAGE.tt diff --git a/lib/generators/templates/generator_spec/%filename%_spec.rb.tt b/bin/templates/new_generator/generator_spec/%filename%_spec.rb.tt similarity index 100% rename from lib/generators/templates/generator_spec/%filename%_spec.rb.tt rename to bin/templates/new_generator/generator_spec/%filename%_spec.rb.tt diff --git a/example_rails_current/config/database.yml b/example_rails_current/config/database.yml index f23f979b..7e1a59e0 100644 --- a/example_rails_current/config/database.yml +++ b/example_rails_current/config/database.yml @@ -1,4 +1,4 @@ -# PostgreSQL. Versions 9.3 and up are supported. +# PostgreSQL. Versions 9.5 and up are supported. # # Install the pg driver: # gem install pg diff --git a/lib/generators/rolemodel/all_generator.rb b/lib/generators/rolemodel/all_generator.rb index de7c0409..98f2f0a2 100644 --- a/lib/generators/rolemodel/all_generator.rb +++ b/lib/generators/rolemodel/all_generator.rb @@ -1,5 +1,5 @@ module Rolemodel - class AllGenerator < BaseGenerator + class AllGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def run_all_the_generators diff --git a/lib/generators/rolemodel/base_generator.rb b/lib/generators/rolemodel/base_generator.rb deleted file mode 100644 index ebfe333d..00000000 --- a/lib/generators/rolemodel/base_generator.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -require 'rails/generators/base' -require 'rails/generators/bundle_helper' -require_relative 'replace_content_helper' - -class Rolemodel::BaseGenerator < Rails::Generators::Base - include Rails::Generators::BundleHelper, - Rolemodel::ReplaceContentHelper - - private - # based on https://github.com/rails/rails/blob/main/railties/lib/rails/generators/app_base.rb#L713 - def run_bundle - bundle_command("install --quiet", "BUNDLE_IGNORE_MESSAGES" => "1") - end -end diff --git a/lib/generators/rolemodel/editors/editors_generator.rb b/lib/generators/rolemodel/editors/editors_generator.rb index 55c01866..23c2403b 100644 --- a/lib/generators/rolemodel/editors/editors_generator.rb +++ b/lib/generators/rolemodel/editors/editors_generator.rb @@ -4,7 +4,7 @@ module Rolemodel # Add standard editorconfig and any extensions to enable it - class EditorsGenerator < BaseGenerator + class EditorsGenerator < GeneratorBase include Rolemodel::VSCodeHelpers # This is bringing in the root from this gem, so we only modify diff --git a/lib/generators/rolemodel/github/github_generator.rb b/lib/generators/rolemodel/github/github_generator.rb index 13b9394c..f8f548a9 100644 --- a/lib/generators/rolemodel/github/github_generator.rb +++ b/lib/generators/rolemodel/github/github_generator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Rolemodel - class GithubGenerator < BaseGenerator + class GithubGenerator < GeneratorBase GITHUB_ACTIONS_REPO = 'https://github.com/RoleModel/actions.git' # Files which are both used by the gem source and copied to the target app without modification # are placed in the `.github` folder at the top level of this repository. This folder is then diff --git a/lib/generators/rolemodel/good_job/good_job_generator.rb b/lib/generators/rolemodel/good_job/good_job_generator.rb index e95a87b0..8da7d0d3 100644 --- a/lib/generators/rolemodel/good_job/good_job_generator.rb +++ b/lib/generators/rolemodel/good_job/good_job_generator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Rolemodel - class GoodJobGenerator < BaseGenerator + class GoodJobGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def install_good_job diff --git a/lib/generators/rolemodel/heroku/heroku_generator.rb b/lib/generators/rolemodel/heroku/heroku_generator.rb index c74e9680..186dc962 100644 --- a/lib/generators/rolemodel/heroku/heroku_generator.rb +++ b/lib/generators/rolemodel/heroku/heroku_generator.rb @@ -1,5 +1,5 @@ module Rolemodel - class HerokuGenerator < BaseGenerator + class HerokuGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def install_app_json diff --git a/lib/generators/rolemodel/kaminari/kaminari_generator.rb b/lib/generators/rolemodel/kaminari/kaminari_generator.rb index 4fa40306..97030c0a 100644 --- a/lib/generators/rolemodel/kaminari/kaminari_generator.rb +++ b/lib/generators/rolemodel/kaminari/kaminari_generator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Rolemodel - class KaminariGenerator < BaseGenerator + class KaminariGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def install_kaminari diff --git a/lib/generators/rolemodel/linters/all_generator.rb b/lib/generators/rolemodel/linters/all_generator.rb index 72a39d0b..432fe4a0 100644 --- a/lib/generators/rolemodel/linters/all_generator.rb +++ b/lib/generators/rolemodel/linters/all_generator.rb @@ -1,6 +1,6 @@ module Rolemodel module Linters - class AllGenerator < BaseGenerator + class AllGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def run_all_the_generators diff --git a/lib/generators/rolemodel/linters/eslint/eslint_generator.rb b/lib/generators/rolemodel/linters/eslint/eslint_generator.rb index c58f484f..583d32d7 100644 --- a/lib/generators/rolemodel/linters/eslint/eslint_generator.rb +++ b/lib/generators/rolemodel/linters/eslint/eslint_generator.rb @@ -2,7 +2,7 @@ module Rolemodel module Linters - class EslintGenerator < BaseGenerator + class EslintGenerator < GeneratorBase include ReplaceContentHelper source_root File.expand_path('templates', __dir__) diff --git a/lib/generators/rolemodel/linters/rubocop/rubocop_generator.rb b/lib/generators/rolemodel/linters/rubocop/rubocop_generator.rb index 1041632a..c2c2a3ad 100644 --- a/lib/generators/rolemodel/linters/rubocop/rubocop_generator.rb +++ b/lib/generators/rolemodel/linters/rubocop/rubocop_generator.rb @@ -3,7 +3,7 @@ module Rolemodel module Linters # Install the standard rubocop and a custom cop - class RubocopGenerator < BaseGenerator + class RubocopGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def install_rubocop diff --git a/lib/generators/rolemodel/lograge/lograge_generator.rb b/lib/generators/rolemodel/lograge/lograge_generator.rb index 2dbc1a2f..9fc25c23 100644 --- a/lib/generators/rolemodel/lograge/lograge_generator.rb +++ b/lib/generators/rolemodel/lograge/lograge_generator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Rolemodel - class LogrageGenerator < BaseGenerator + class LogrageGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def install_lograge diff --git a/lib/generators/rolemodel/mailers/mailers_generator.rb b/lib/generators/rolemodel/mailers/mailers_generator.rb index 49b2f2d0..b8ecd3e8 100644 --- a/lib/generators/rolemodel/mailers/mailers_generator.rb +++ b/lib/generators/rolemodel/mailers/mailers_generator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Rolemodel - class MailersGenerator < BaseGenerator + class MailersGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def install_premailer_rails diff --git a/lib/generators/rolemodel/mcp/mcp_generator.rb b/lib/generators/rolemodel/mcp/mcp_generator.rb index 161f8c0f..5b063e74 100644 --- a/lib/generators/rolemodel/mcp/mcp_generator.rb +++ b/lib/generators/rolemodel/mcp/mcp_generator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Rolemodel - class MCPGenerator < BaseGenerator + class McpGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def update_inflections @@ -53,6 +53,7 @@ def add_sample_mcp_tool def install_doorkeeper bundle_command 'add doorkeeper' + run_bundle generate 'doorkeeper:install' end @@ -103,7 +104,7 @@ def add_well_known_route private def application_name - Rails.application.class.try(:parent_name) || Rails.application.class.module_parent_name + Rails.application.name end end end diff --git a/lib/generators/rolemodel/optics/all_generator.rb b/lib/generators/rolemodel/optics/all_generator.rb index cbc538d4..8b6937bf 100644 --- a/lib/generators/rolemodel/optics/all_generator.rb +++ b/lib/generators/rolemodel/optics/all_generator.rb @@ -1,6 +1,6 @@ module Rolemodel module Optics - class AllGenerator < Rolemodel::BaseGenerator + class AllGenerator < Rolemodel::GeneratorBase source_root File.expand_path('templates', __dir__) def run_all_the_generators diff --git a/lib/generators/rolemodel/optics/base/base_generator.rb b/lib/generators/rolemodel/optics/base/base_generator.rb index cfcb86da..2bb5d10b 100644 --- a/lib/generators/rolemodel/optics/base/base_generator.rb +++ b/lib/generators/rolemodel/optics/base/base_generator.rb @@ -1,6 +1,6 @@ module Rolemodel module Optics - class BaseGenerator < Rolemodel::BaseGenerator + class BaseGenerator < Rolemodel::GeneratorBase source_root File.expand_path('templates', __dir__) def add_optics_package @@ -12,7 +12,7 @@ def add_optics_package def copy_templates say 'importing stylesheet', :green - prepend_to_file 'app/assets/stylesheets/application.scss', <<~SCSS + prepend_to_file Dir.glob('app/assets/stylesheets/application.*').first, <<~SCSS @import '@rolemodel/optics/dist/css/optics'; SCSS end diff --git a/lib/generators/rolemodel/optics/icons/icons_generator.rb b/lib/generators/rolemodel/optics/icons/icons_generator.rb index 5ec4b7e8..2614d65a 100644 --- a/lib/generators/rolemodel/optics/icons/icons_generator.rb +++ b/lib/generators/rolemodel/optics/icons/icons_generator.rb @@ -3,7 +3,7 @@ module Rolemodel module Optics # Generates the icon helper and icon builders for the chosen icon library - class IconsGenerator < Rolemodel::BaseGenerator + class IconsGenerator < Rolemodel::GeneratorBase SUPPORTED_LIBRARIES = HashWithIndifferentAccess.new( material: 'filled, size, weight, emphasis, additional_classes, color, hover_text', phosphor: 'duotone, filled, size, weight, additional_classes, color, hover_text', diff --git a/lib/generators/rolemodel/react/react_generator.rb b/lib/generators/rolemodel/react/react_generator.rb index f0f1a44d..661801db 100644 --- a/lib/generators/rolemodel/react/react_generator.rb +++ b/lib/generators/rolemodel/react/react_generator.rb @@ -1,5 +1,5 @@ module Rolemodel - class ReactGenerator < BaseGenerator + class ReactGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def add_npm_packages diff --git a/lib/generators/rolemodel/readme/readme_generator.rb b/lib/generators/rolemodel/readme/readme_generator.rb index 5f17c66b..b0b4aa42 100644 --- a/lib/generators/rolemodel/readme/readme_generator.rb +++ b/lib/generators/rolemodel/readme/readme_generator.rb @@ -1,5 +1,5 @@ module Rolemodel - class ReadmeGenerator < BaseGenerator + class ReadmeGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def install_readme diff --git a/lib/generators/rolemodel/saas/all_generator.rb b/lib/generators/rolemodel/saas/all_generator.rb index 18b4f742..2e12740f 100644 --- a/lib/generators/rolemodel/saas/all_generator.rb +++ b/lib/generators/rolemodel/saas/all_generator.rb @@ -1,6 +1,6 @@ module Rolemodel module Saas - class AllGenerator < BaseGenerator + class AllGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def run_all_the_generators diff --git a/lib/generators/rolemodel/saas/devise/devise_generator.rb b/lib/generators/rolemodel/saas/devise/devise_generator.rb index f540ad9e..6364ce4b 100644 --- a/lib/generators/rolemodel/saas/devise/devise_generator.rb +++ b/lib/generators/rolemodel/saas/devise/devise_generator.rb @@ -2,7 +2,7 @@ module Rolemodel module Saas - class DeviseGenerator < BaseGenerator + class DeviseGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def add_organization diff --git a/lib/generators/rolemodel/semaphore/semaphore_generator.rb b/lib/generators/rolemodel/semaphore/semaphore_generator.rb index acbf27a3..61f62e12 100644 --- a/lib/generators/rolemodel/semaphore/semaphore_generator.rb +++ b/lib/generators/rolemodel/semaphore/semaphore_generator.rb @@ -1,5 +1,5 @@ module Rolemodel - class SemaphoreGenerator < BaseGenerator + class SemaphoreGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def create_base_semaphore_config diff --git a/lib/generators/rolemodel/simple_form/simple_form_generator.rb b/lib/generators/rolemodel/simple_form/simple_form_generator.rb index 4657b730..377b1310 100644 --- a/lib/generators/rolemodel/simple_form/simple_form_generator.rb +++ b/lib/generators/rolemodel/simple_form/simple_form_generator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Rolemodel - class SimpleFormGenerator < BaseGenerator + class SimpleFormGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def add_gem diff --git a/lib/generators/rolemodel/slim/slim_generator.rb b/lib/generators/rolemodel/slim/slim_generator.rb index 7aaa2e67..03d9f52e 100644 --- a/lib/generators/rolemodel/slim/slim_generator.rb +++ b/lib/generators/rolemodel/slim/slim_generator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Rolemodel - class SlimGenerator < BaseGenerator + class SlimGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def add_slim diff --git a/lib/generators/rolemodel/soft_destroyable/soft_destroyable_generator.rb b/lib/generators/rolemodel/soft_destroyable/soft_destroyable_generator.rb index bd1bf66d..44999caf 100644 --- a/lib/generators/rolemodel/soft_destroyable/soft_destroyable_generator.rb +++ b/lib/generators/rolemodel/soft_destroyable/soft_destroyable_generator.rb @@ -1,5 +1,5 @@ module Rolemodel - class SoftDestroyableGenerator < BaseGenerator + class SoftDestroyableGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def add_concern diff --git a/lib/generators/rolemodel/source_map/source_map_generator.rb b/lib/generators/rolemodel/source_map/source_map_generator.rb index d009a772..99672fc9 100644 --- a/lib/generators/rolemodel/source_map/source_map_generator.rb +++ b/lib/generators/rolemodel/source_map/source_map_generator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Rolemodel - class SourceMapGenerator < BaseGenerator + class SourceMapGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def inject_config_for_production diff --git a/lib/generators/rolemodel/tailored_select/tailored_select_generator.rb b/lib/generators/rolemodel/tailored_select/tailored_select_generator.rb index 9b926100..47f2e79b 100644 --- a/lib/generators/rolemodel/tailored_select/tailored_select_generator.rb +++ b/lib/generators/rolemodel/tailored_select/tailored_select_generator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Rolemodel - class TailoredSelectGenerator < BaseGenerator + class TailoredSelectGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def add_tailored_select_package diff --git a/lib/generators/rolemodel/testing/all_generator.rb b/lib/generators/rolemodel/testing/all_generator.rb index b6f3d212..3e5c4629 100644 --- a/lib/generators/rolemodel/testing/all_generator.rb +++ b/lib/generators/rolemodel/testing/all_generator.rb @@ -1,6 +1,6 @@ module Rolemodel module Testing - class AllGenerator < BaseGenerator + class AllGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def run_all_the_generators diff --git a/lib/generators/rolemodel/testing/factory_bot/factory_bot_generator.rb b/lib/generators/rolemodel/testing/factory_bot/factory_bot_generator.rb index 29135196..b454aba0 100644 --- a/lib/generators/rolemodel/testing/factory_bot/factory_bot_generator.rb +++ b/lib/generators/rolemodel/testing/factory_bot/factory_bot_generator.rb @@ -2,7 +2,7 @@ module Rolemodel module Testing - class FactoryBotGenerator < BaseGenerator + class FactoryBotGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def install_factory_bot_rails diff --git a/lib/generators/rolemodel/testing/jasmine_playwright/jasmine_playwright_generator.rb b/lib/generators/rolemodel/testing/jasmine_playwright/jasmine_playwright_generator.rb index 4957326d..1e61ddb5 100644 --- a/lib/generators/rolemodel/testing/jasmine_playwright/jasmine_playwright_generator.rb +++ b/lib/generators/rolemodel/testing/jasmine_playwright/jasmine_playwright_generator.rb @@ -2,7 +2,7 @@ module Rolemodel module Testing - class JasminePlaywrightGenerator < BaseGenerator + class JasminePlaywrightGenerator < GeneratorBase include ReplaceContentHelper source_root File.expand_path('templates', __dir__) class_option :github_package_token, type: :string, default: ENV['GITHUB_PACKAGES_TOKEN'], desc: 'GitHub Packages token with access to @rolemodel packages' diff --git a/lib/generators/rolemodel/testing/parallel_tests/parallel_tests_generator.rb b/lib/generators/rolemodel/testing/parallel_tests/parallel_tests_generator.rb index 064584ad..2cf1a545 100644 --- a/lib/generators/rolemodel/testing/parallel_tests/parallel_tests_generator.rb +++ b/lib/generators/rolemodel/testing/parallel_tests/parallel_tests_generator.rb @@ -2,7 +2,7 @@ module Rolemodel module Testing - class ParallelTestsGenerator < BaseGenerator # rubocop:disable Style/Documentation + class ParallelTestsGenerator < GeneratorBase # rubocop:disable Style/Documentation source_root File.expand_path('templates', __dir__) def install_parallel_tests diff --git a/lib/generators/rolemodel/testing/rspec/rspec_generator.rb b/lib/generators/rolemodel/testing/rspec/rspec_generator.rb index bbea5645..5b357536 100644 --- a/lib/generators/rolemodel/testing/rspec/rspec_generator.rb +++ b/lib/generators/rolemodel/testing/rspec/rspec_generator.rb @@ -2,7 +2,7 @@ module Rolemodel module Testing - class RspecGenerator < BaseGenerator + class RspecGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def install_rspec diff --git a/lib/generators/rolemodel/testing/test_prof/test_prof_generator.rb b/lib/generators/rolemodel/testing/test_prof/test_prof_generator.rb index a82cb569..593c580b 100644 --- a/lib/generators/rolemodel/testing/test_prof/test_prof_generator.rb +++ b/lib/generators/rolemodel/testing/test_prof/test_prof_generator.rb @@ -2,7 +2,7 @@ module Rolemodel module Testing - class TestProfGenerator < BaseGenerator + class TestProfGenerator < GeneratorBase def install_test_prof gem_group :test do gem 'test-prof' diff --git a/lib/generators/rolemodel/testing/vitest/vitest_generator.rb b/lib/generators/rolemodel/testing/vitest/vitest_generator.rb index a62271a5..cd2134ca 100644 --- a/lib/generators/rolemodel/testing/vitest/vitest_generator.rb +++ b/lib/generators/rolemodel/testing/vitest/vitest_generator.rb @@ -2,7 +2,7 @@ module Rolemodel module Testing - class VitestGenerator < BaseGenerator + class VitestGenerator < GeneratorBase include ReplaceContentHelper source_root File.expand_path('templates', __dir__) diff --git a/lib/generators/rolemodel/ui_components/all_generator.rb b/lib/generators/rolemodel/ui_components/all_generator.rb index 868f977e..0f9fcf26 100644 --- a/lib/generators/rolemodel/ui_components/all_generator.rb +++ b/lib/generators/rolemodel/ui_components/all_generator.rb @@ -1,6 +1,6 @@ module Rolemodel module UiComponents - class AllGenerator < BaseGenerator + class AllGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def run_all_the_generators diff --git a/lib/generators/rolemodel/ui_components/flash/flash_generator.rb b/lib/generators/rolemodel/ui_components/flash/flash_generator.rb index 1cbeeade..e4a07386 100644 --- a/lib/generators/rolemodel/ui_components/flash/flash_generator.rb +++ b/lib/generators/rolemodel/ui_components/flash/flash_generator.rb @@ -2,7 +2,7 @@ module Rolemodel module UiComponents - class FlashGenerator < BaseGenerator + class FlashGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def generate_files diff --git a/lib/generators/rolemodel/ui_components/modals/modals_generator.rb b/lib/generators/rolemodel/ui_components/modals/modals_generator.rb index a3e168b9..d18b61a0 100644 --- a/lib/generators/rolemodel/ui_components/modals/modals_generator.rb +++ b/lib/generators/rolemodel/ui_components/modals/modals_generator.rb @@ -1,6 +1,6 @@ module Rolemodel module UiComponents - class ModalsGenerator < BaseGenerator + class ModalsGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) class_option :panels, type: :boolean, default: false, desc: 'Include RoleModel Panel Setup' diff --git a/lib/generators/rolemodel/ui_components/navbar/navbar_generator.rb b/lib/generators/rolemodel/ui_components/navbar/navbar_generator.rb index b94a34f4..3538ffb4 100644 --- a/lib/generators/rolemodel/ui_components/navbar/navbar_generator.rb +++ b/lib/generators/rolemodel/ui_components/navbar/navbar_generator.rb @@ -2,7 +2,7 @@ module Rolemodel module UiComponents - class NavbarGenerator < BaseGenerator + class NavbarGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) def copy_navbar_files diff --git a/lib/generators/rolemodel/webpack/webpack_generator.rb b/lib/generators/rolemodel/webpack/webpack_generator.rb index a8c667be..d62c37b6 100644 --- a/lib/generators/rolemodel/webpack/webpack_generator.rb +++ b/lib/generators/rolemodel/webpack/webpack_generator.rb @@ -1,5 +1,5 @@ module Rolemodel - class WebpackGenerator < BaseGenerator + class WebpackGenerator < GeneratorBase source_root File.expand_path('templates', __dir__) DEV_DEPS = %w[ diff --git a/lib/generators/templates/generator/%filename%.rb.tt b/lib/generators/templates/generator/%filename%.rb.tt deleted file mode 100644 index 5c0fa8e2..00000000 --- a/lib/generators/templates/generator/%filename%.rb.tt +++ /dev/null @@ -1,11 +0,0 @@ -module Rolemodel - <%= "module #{module_name}" if module_name %> - class <%= class_name %> < BaseGenerator - source_root File.expand_path('templates', __dir__) - - def generate_stuff - say 'generating stuff', :green - end - end - <%= 'end' if module_name %> -end diff --git a/lib/rolemodel/engine.rb b/lib/rolemodel/engine.rb index d63f12cf..ba77692c 100644 --- a/lib/rolemodel/engine.rb +++ b/lib/rolemodel/engine.rb @@ -2,8 +2,10 @@ module Rolemodel class Engine < ::Rails::Engine + require_relative 'generator_base' + generators do - require 'generators/rolemodel/base_generator' + require 'generators/rolemodel/all_generator' end end end diff --git a/lib/rolemodel/generator_base.rb b/lib/rolemodel/generator_base.rb new file mode 100644 index 00000000..52cfc99b --- /dev/null +++ b/lib/rolemodel/generator_base.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +require 'rails/generators' +require 'rails/generators/bundle_helper' +require_relative 'replace_content_helper' + +module Rolemodel + class GeneratorBase < ::Rails::Generators::Base + include ::Rails::Generators::BundleHelper, ReplaceContentHelper + + private + # based on https://github.com/rails/rails/blob/main/railties/lib/rails/generators/app_base.rb#L713 + def run_bundle + bundle_command("install --quiet", "BUNDLE_IGNORE_MESSAGES" => "1") + end + end +end diff --git a/lib/generators/rolemodel/replace_content_helper.rb b/lib/rolemodel/replace_content_helper.rb similarity index 100% rename from lib/generators/rolemodel/replace_content_helper.rb rename to lib/rolemodel/replace_content_helper.rb diff --git a/spec/generators/rolemodel/heroku_generator_spec.rb b/spec/generators/rolemodel/heroku_generator_spec.rb index d621a0cc..a8bfd5f6 100644 --- a/spec/generators/rolemodel/heroku_generator_spec.rb +++ b/spec/generators/rolemodel/heroku_generator_spec.rb @@ -3,7 +3,7 @@ it 'generates app.json' do assert_file 'app.json' do |content| - expect(content).to include('"name": ""') # erb replacement is happening, though application name is nil + expect(content).to include('"name": "ExampleRailsCurrent"') end end diff --git a/spec/generators/rolemodel/mcp_generator_spec.rb b/spec/generators/rolemodel/mcp_generator_spec.rb index 17890be0..a24dd6ff 100644 --- a/spec/generators/rolemodel/mcp_generator_spec.rb +++ b/spec/generators/rolemodel/mcp_generator_spec.rb @@ -1,8 +1,5 @@ -RSpec.describe Rolemodel::MCPGenerator, type: :generator do - before do - require_relative '../../tmp/config/application' # Needed for the mcp_controller template to get the application name - run_generator_against_test_app - end +RSpec.describe Rolemodel::McpGenerator, type: :generator do + before { run_generator_against_test_app } it 'adds the MCP controller' do assert_file 'app/controllers/mcp_controller.rb' do |content| diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 56d7e19f..68843701 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,7 +6,6 @@ require 'rolemodel-rails' require_relative 'support/helpers' -require 'generators/rolemodel/base_generator' Dir[File.expand_path('lib/generators/**/*_generator.rb')].each { require it } RSpec.configure do |config| diff --git a/spec/support/helpers/example_app.rb b/spec/support/helpers/example_app.rb index c173cade..fa2d62b8 100644 --- a/spec/support/helpers/example_app.rb +++ b/spec/support/helpers/example_app.rb @@ -8,6 +8,7 @@ def prepare_test_app self.destination_root ||= File.expand_path('spec/tmp') cleanup_test_app FileUtils.cp_r(TEMPLATE_APP_PATH, destination_root) + require File.expand_path('config/application', destination_root) end def cleanup_test_app