From 30477fdbd195f0054896377864c68eb3e4801d47 Mon Sep 17 00:00:00 2001 From: Zach Ahn Date: Sun, 22 Sep 2024 00:41:20 -0400 Subject: [PATCH 1/2] Move `Jsbundling::Tasks` into its own file --- lib/jsbundling/tasks.rb | 42 ++++++++++++++++++++++++++++++ lib/tasks/jsbundling/build.rake | 45 ++------------------------------- 2 files changed, 44 insertions(+), 43 deletions(-) create mode 100644 lib/jsbundling/tasks.rb diff --git a/lib/jsbundling/tasks.rb b/lib/jsbundling/tasks.rb new file mode 100644 index 0000000..645fb67 --- /dev/null +++ b/lib/jsbundling/tasks.rb @@ -0,0 +1,42 @@ +module Jsbundling + module Tasks + extend self + + def install_command + case tool + when :bun then "bun install" + when :yarn then "yarn install" + when :pnpm then "pnpm install" + when :npm then "npm install" + else raise "jsbundling-rails: No suitable tool found for installing JavaScript dependencies" + end + end + + def build_command + case tool + when :bun then "bun run build" + when :yarn then "yarn build" + when :pnpm then "pnpm build" + when :npm then "npm run build" + else raise "jsbundling-rails: No suitable tool found for building JavaScript" + end + end + + def tool_exists?(tool) + system "command -v #{tool} > /dev/null" + end + + def tool + case + when File.exist?('bun.lockb') then :bun + when File.exist?('yarn.lock') then :yarn + when File.exist?('pnpm-lock.yaml') then :pnpm + when File.exist?('package-lock.json') then :npm + when tool_exists?('bun') then :bun + when tool_exists?('yarn') then :yarn + when tool_exists?('pnpm') then :pnpm + when tool_exists?('npm') then :npm + end + end + end +end diff --git a/lib/tasks/jsbundling/build.rake b/lib/tasks/jsbundling/build.rake index c6b29aa..72e1da3 100644 --- a/lib/tasks/jsbundling/build.rake +++ b/lib/tasks/jsbundling/build.rake @@ -1,3 +1,5 @@ +require "jsbundling/tasks" + namespace :javascript do desc "Install JavaScript dependencies" task :install do @@ -18,49 +20,6 @@ namespace :javascript do build_task.prereqs << :install unless ENV["SKIP_YARN_INSTALL"] || ENV["SKIP_BUN_INSTALL"] end -module Jsbundling - module Tasks - extend self - - def install_command - case tool - when :bun then "bun install" - when :yarn then "yarn install" - when :pnpm then "pnpm install" - when :npm then "npm install" - else raise "jsbundling-rails: No suitable tool found for installing JavaScript dependencies" - end - end - - def build_command - case tool - when :bun then "bun run build" - when :yarn then "yarn build" - when :pnpm then "pnpm build" - when :npm then "npm run build" - else raise "jsbundling-rails: No suitable tool found for building JavaScript" - end - end - - def tool_exists?(tool) - system "command -v #{tool} > /dev/null" - end - - def tool - case - when File.exist?('bun.lockb') then :bun - when File.exist?('yarn.lock') then :yarn - when File.exist?('pnpm-lock.yaml') then :pnpm - when File.exist?('package-lock.json') then :npm - when tool_exists?('bun') then :bun - when tool_exists?('yarn') then :yarn - when tool_exists?('pnpm') then :pnpm - when tool_exists?('npm') then :npm - end - end - end -end - unless ENV["SKIP_JS_BUILD"] if Rake::Task.task_defined?("assets:precompile") Rake::Task["assets:precompile"].enhance(["javascript:build"]) From 8b4eb0a299a6f3ee3bb96aeb55c7b48d325da43f Mon Sep 17 00:00:00 2001 From: Zach Ahn Date: Sun, 22 Sep 2024 00:46:25 -0400 Subject: [PATCH 2/2] Allow for overriding `build_command` --- lib/jsbundling/tasks.rb | 6 ++++++ test/tasks_test.rb | 15 +++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 test/tasks_test.rb diff --git a/lib/jsbundling/tasks.rb b/lib/jsbundling/tasks.rb index 645fb67..417f368 100644 --- a/lib/jsbundling/tasks.rb +++ b/lib/jsbundling/tasks.rb @@ -2,6 +2,8 @@ module Jsbundling module Tasks extend self + attr_writer :build_command + def install_command case tool when :bun then "bun install" @@ -13,6 +15,10 @@ def install_command end def build_command + if @build_command + return @build_command + end + case tool when :bun then "bun run build" when :yarn then "yarn build" diff --git a/test/tasks_test.rb b/test/tasks_test.rb new file mode 100644 index 0000000..a9d2ed5 --- /dev/null +++ b/test/tasks_test.rb @@ -0,0 +1,15 @@ +require "test_helper" +require "jsbundling/tasks" + +class TasksTest < ActiveSupport::TestCase + test "override build_command" do + original_build_command = Jsbundling::Tasks.build_command + Jsbundling::Tasks.build_command = "hello there" + assert_equal("hello there", Jsbundling::Tasks.build_command) + + Jsbundling::Tasks.build_command = nil + assert_equal(original_build_command, Jsbundling::Tasks.build_command) + ensure + Jsbundling::Tasks.build_command = nil + end +end