Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions lib/generators/rolemodel/linters/eslint/eslint_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ class EslintGenerator < GeneratorBase
].freeze

def install_eslint
ensure_yarn
run "yarn add --dev #{DEV_DEPENDENCIES.join(' ')}"
yarn_command "add --dev #{DEV_DEPENDENCIES.join(' ')}"
end

def add_config
Expand Down
3 changes: 1 addition & 2 deletions lib/generators/rolemodel/optics/base/base_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ class BaseGenerator < Rolemodel::GeneratorBase
def add_optics_package
say 'installing Optics package', :green

ensure_yarn
run 'yarn add @rolemodel/optics'
yarn_command 'add @rolemodel/optics'
end

def copy_templates
Expand Down
3 changes: 1 addition & 2 deletions lib/generators/rolemodel/react/react_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ def add_npm_packages
@add_react = yes?('Would you like to add react?')

if @add_react
ensure_yarn
run 'yarn add react react-dom'
yarn_command 'add react react-dom'
end
end

Expand Down
3 changes: 1 addition & 2 deletions lib/generators/rolemodel/sentry/sentry_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ def add_user_context
def add_js_dependencies
say 'Adding Sentry JS dependencies to package.json', :green

ensure_yarn
run "yarn add --dev #{JS_DEPS.join(' ')}"
yarn_command "add --dev #{JS_DEPS.join(' ')}"
end

def add_js_initializer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ class TailoredSelectGenerator < GeneratorBase
def add_tailored_select_package
say 'Installing Tailored Select package', :green

ensure_yarn
run 'yarn add @rolemodel/tailored-select'
yarn_command 'add @rolemodel/tailored-select'
end

def add_simple_form_input
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ def fail_without_github_token
raise Thor::InvocationError, 'a --github_package_token option or GITHUB_PACKAGES_TOKEN environment variable is required' if options[:github_package_token].blank?
end

def enable_corepack_and_yarn
ensure_yarn
def add_dev_dependencies
say 'Adding new dev dependency to package.json', :green

yarn_command "add --dev #{DEV_DEPENDENCIES.join(' ')}"
end

def add_browser_test_script
Expand All @@ -34,12 +36,6 @@ def set_node_version
create_file '.node-version', NODE_VERSION, force: true
end

def add_dev_dependencies
say 'Adding new dev dependency to package.json', :green

run "yarn add --dev #{DEV_DEPENDENCIES.join(' ')}"
end

def add_spec_config_files
say 'Adding Jasmine Playwright configuration files', :green

Expand Down
5 changes: 2 additions & 3 deletions lib/generators/rolemodel/testing/rspec/rspec_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,8 @@ def bundle_install
def install_playwright
say 'Installing Playwright for system tests', :green

ensure_yarn
run 'yarn add --dev playwright'
run 'yarn run playwright install'
yarn_command 'add --dev playwright'
yarn_command 'run playwright install'
end

def add_spec_files
Expand Down
13 changes: 6 additions & 7 deletions lib/generators/rolemodel/testing/vitest/vitest_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,16 @@ class VitestGenerator < GeneratorBase
@vitest/ui
].freeze

def update_test_script
say 'Update yarn test command', :green
ensure_yarn
def add_dev_dependencies
say 'Adding new dev dependency to package.json', :green

add_package_json_script 'test', TEST_COMMAND
yarn_command "add --dev #{DEV_DEPENDENCIES.join(' ')}"
end

def add_dev_dependencies
say 'Adding new dev dependency to package.json', :green
def update_test_script
say 'Update yarn test command', :green

run "yarn add --dev #{DEV_DEPENDENCIES.join(' ')}"
add_package_json_script 'test', TEST_COMMAND
end

def add_spec_config_files
Expand Down
3 changes: 1 addition & 2 deletions lib/generators/rolemodel/turbo/confirm/confirm_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ class ConfirmGenerator < ::Rolemodel::GeneratorBase
def add_turbo_confirm_package
say 'Installing Turbo Confirm package', :green

ensure_yarn
run 'yarn add @rolemodel/turbo-confirm'
yarn_command 'add @rolemodel/turbo-confirm'
end

def add_initializer
Expand Down
3 changes: 1 addition & 2 deletions lib/generators/rolemodel/turbo/form/form_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ class FormGenerator < GeneratorBase
def add_rails_request_package
say 'Installing @rails/request.js package', :green

ensure_yarn
run 'yarn add @rails/request.js'
yarn_command 'add @rails/request.js'
end

def add_stimulus_controller
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ def insert_navbar_before_content
def install_shoelace
say 'Installing Shoelace package', :green

ensure_yarn
run 'yarn add @shoelace-style/shoelace'
yarn_command 'add @shoelace-style/shoelace'
end

def add_shoelace_javascript_imports
Expand Down
10 changes: 2 additions & 8 deletions lib/generators/rolemodel/webpack/webpack_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,6 @@ def ensure_node_version
create_file '.node-version', NODE_VERSION, force: true
end

def enable_corepack_and_yarn
say 'Enabling Corepack and pinning the project to Yarn 4+', :green

ensure_yarn
end

def force_node_to_use_es_modules
say 'Configuring project to use ES Modules instead of CommonJS', :green

Expand All @@ -56,14 +50,14 @@ def force_node_to_use_es_modules
def remove_obsolete_javascript_dependencies
say 'Removing webpack & webpack-cli from package.json dependencies', :green

run 'yarn remove webpack webpack-cli'
yarn_command 'remove webpack webpack-cli'
end

def add_npm_packages
say 'Adding new dev dependencies to package.json', :green

dependencies = DEV_DEPS + POSTCSS_PKGS + WEBPACK_CSS_PKGS
run "yarn add --dev #{dependencies.join(' ')}"
yarn_command "add --dev #{dependencies.join(' ')}"
end

def add_webpack_config
Expand Down
8 changes: 7 additions & 1 deletion lib/rolemodel/generator_base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,25 @@ 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

def yarn_command(command)
ensure_yarn

run "yarn #{command}"
end

# Enable Corepack and pin the project to Yarn 4+ before running any `yarn`
# command. Empty args/opts are required: without them, Thor forwards this
# generator's own CLI args (e.g. the test harness's --skip-bundle
# --skip-bootsnap) into Rolemodel::Yarn#setup, which takes none and raises
# Thor::InvocationError.
def ensure_yarn
return if Rails.root.join(destination_root, '.yarnrc.yml').exist?
invoke 'rolemodel:yarn:setup', [], {}
end

Expand Down
5 changes: 2 additions & 3 deletions lib/rolemodel/yarn.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@ module Rolemodel
class Yarn < ::Thor
include ::Thor::Actions

# Enable Corepack and pin the project to Yarn 4+ (instead of the classic
# Yarn 1.22). Idempotent, so any generator can call it before running a
# `yarn` command to guarantee the modern toolchain is in place.
# Enable Corepack and pin the project to Yarn 4+ (instead of the classic Yarn 1.22).
desc 'setup', 'Set the current stable version of Yarn, enable corepack, and initialize a package.json file'
def setup
say 'Setting up Yarn 4+ and Corepack', :green
# Configure the node-modules linker so webpack, Playwright, and the Rails
# asset pipeline keep working (Yarn 4 defaults to Plug'n'Play otherwise).
# skip if exists? to avoid overwriting any other existing config
Expand Down