From 77553c7f7bee7aba78af0302e3de1fc2238591d3 Mon Sep 17 00:00:00 2001 From: 3v0k4 Date: Wed, 7 May 2025 22:48:41 +0200 Subject: [PATCH 1/2] Fix tests --- Appraisals | 18 ++++++++++++++++++ Gemfile | 2 ++ Gemfile.lock | 1 + gemfiles/rails_7_0_propshaft.gemfile | 1 + gemfiles/rails_7_0_propshaft.gemfile.lock | 1 + gemfiles/rails_7_0_sprockets.gemfile | 1 + gemfiles/rails_7_0_sprockets.gemfile.lock | 1 + gemfiles/rails_main_propshaft.gemfile | 2 +- gemfiles/rails_main_sprockets.gemfile | 2 +- test/installer_test.rb | 12 ++++++++++-- 10 files changed, 37 insertions(+), 4 deletions(-) diff --git a/Appraisals b/Appraisals index dd6b0c7..40a3f33 100644 --- a/Appraisals +++ b/Appraisals @@ -11,19 +11,37 @@ end appraise "rails_7_1_sprockets" do gem "rails", "~> 7.1.0" gem "sprockets-rails" + + group :test do + remove_gem "concurrent-ruby" + end end appraise "rails_7_1_propshaft" do gem "rails", "~> 7.1.0" gem "propshaft" + + group :test do + remove_gem "concurrent-ruby" + end end appraise "rails_main_sprockets" do gem "rails", github: "rails/rails", branch: "main" gem "sprockets-rails" + gem "sqlite3", ">= 2.1" + + group :test do + remove_gem "concurrent-ruby" + end end appraise "rails_main_propshaft" do gem "rails", github: "rails/rails", branch: "main" gem "propshaft" + gem "sqlite3", ">= 2.1" + + group :test do + remove_gem "concurrent-ruby" + end end diff --git a/Gemfile b/Gemfile index f164b69..f45c56e 100644 --- a/Gemfile +++ b/Gemfile @@ -22,4 +22,6 @@ group :test do gem "capybara" gem "selenium-webdriver" gem "webdrivers" + + gem "concurrent-ruby", "1.3.4" end diff --git a/Gemfile.lock b/Gemfile.lock index 34107ad..6f48fdc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -213,6 +213,7 @@ DEPENDENCIES appraisal byebug capybara + concurrent-ruby (= 1.3.4) importmap-rails! rails (~> 6.1.0) rexml diff --git a/gemfiles/rails_7_0_propshaft.gemfile b/gemfiles/rails_7_0_propshaft.gemfile index 98513e3..d57f1fe 100644 --- a/gemfiles/rails_7_0_propshaft.gemfile +++ b/gemfiles/rails_7_0_propshaft.gemfile @@ -18,6 +18,7 @@ group :test do gem "capybara" gem "selenium-webdriver" gem "webdrivers" + gem "concurrent-ruby", "1.3.4" end gemspec path: "../" diff --git a/gemfiles/rails_7_0_propshaft.gemfile.lock b/gemfiles/rails_7_0_propshaft.gemfile.lock index 410f0a8..420dfff 100644 --- a/gemfiles/rails_7_0_propshaft.gemfile.lock +++ b/gemfiles/rails_7_0_propshaft.gemfile.lock @@ -219,6 +219,7 @@ DEPENDENCIES appraisal byebug capybara + concurrent-ruby (= 1.3.4) importmap-rails! propshaft rails (~> 7.0.0) diff --git a/gemfiles/rails_7_0_sprockets.gemfile b/gemfiles/rails_7_0_sprockets.gemfile index ddd8532..0e609f2 100644 --- a/gemfiles/rails_7_0_sprockets.gemfile +++ b/gemfiles/rails_7_0_sprockets.gemfile @@ -18,6 +18,7 @@ group :test do gem "capybara" gem "selenium-webdriver" gem "webdrivers" + gem "concurrent-ruby", "1.3.4" end gemspec path: "../" diff --git a/gemfiles/rails_7_0_sprockets.gemfile.lock b/gemfiles/rails_7_0_sprockets.gemfile.lock index 147be85..5d351a3 100644 --- a/gemfiles/rails_7_0_sprockets.gemfile.lock +++ b/gemfiles/rails_7_0_sprockets.gemfile.lock @@ -221,6 +221,7 @@ DEPENDENCIES appraisal byebug capybara + concurrent-ruby (= 1.3.4) importmap-rails! rails (~> 7.0.0) rexml diff --git a/gemfiles/rails_main_propshaft.gemfile b/gemfiles/rails_main_propshaft.gemfile index c69d95a..593347a 100644 --- a/gemfiles/rails_main_propshaft.gemfile +++ b/gemfiles/rails_main_propshaft.gemfile @@ -3,7 +3,7 @@ source "https://rubygems.org" gem "rails", branch: "main", git: "https://github.com/rails/rails.git" -gem "sqlite3" +gem "sqlite3", ">= 2.1" gem "propshaft" group :development do diff --git a/gemfiles/rails_main_sprockets.gemfile b/gemfiles/rails_main_sprockets.gemfile index eb0afbe..bcf3872 100644 --- a/gemfiles/rails_main_sprockets.gemfile +++ b/gemfiles/rails_main_sprockets.gemfile @@ -3,7 +3,7 @@ source "https://rubygems.org" gem "rails", branch: "main", git: "https://github.com/rails/rails.git" -gem "sqlite3" +gem "sqlite3", ">= 2.1" gem "sprockets-rails" group :development do diff --git a/test/installer_test.rb b/test/installer_test.rb index 9b6c526..d108755 100644 --- a/test/installer_test.rb +++ b/test/installer_test.rb @@ -55,13 +55,21 @@ def with_new_rails_app Rails::Generators::AppGenerator.start([app_dir, "--quiet", "--skip-bundle", "--skip-bootsnap"]) Dir.chdir(app_dir) do + if Rails::VERSION::PRE == "alpha" && Gem.loaded_specs["sprockets-rails"] + FileUtils.mkdir_p("app/assets/config") + File.write("app/assets/config/manifest.js", "") + end + gemfile = File.read("Gemfile") - gemfile.gsub!(/^gem "importmap-rails".*/, "") - gemfile << %(gem "importmap-rails", path: #{File.expand_path("..", __dir__).inspect}\n) + if Gem.loaded_specs["rails"].version < Gem::Version.new("7.1") + gemfile << %(gem "concurrent-ruby", "1.3.4"\n) + end if Rails::VERSION::PRE == "alpha" gemfile.gsub!(/^gem "rails".*/, "") gemfile << %(gem "rails", path: #{Gem.loaded_specs["rails"].full_gem_path.inspect}\n) end + gemfile.gsub!(/^gem "importmap-rails".*/, "") + gemfile << %(gem "importmap-rails", path: #{File.expand_path("..", __dir__).inspect}\n) File.write("Gemfile", gemfile) run_command("bundle", "install") From 8a5218f5f835822322637b5e2c40555f19c5f0ce Mon Sep 17 00:00:00 2001 From: 3v0k4 Date: Wed, 7 May 2025 22:41:28 +0200 Subject: [PATCH 2/2] Add --preload option to pin command --- lib/importmap/commands.rb | 3 ++- lib/importmap/packager.rb | 16 +++++++++++++--- test/packager_test.rb | 4 ++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/importmap/commands.rb b/lib/importmap/commands.rb index 0a6fbec..d3fda40 100644 --- a/lib/importmap/commands.rb +++ b/lib/importmap/commands.rb @@ -12,12 +12,13 @@ def self.exit_on_failure? desc "pin [*PACKAGES]", "Pin new packages" option :env, type: :string, aliases: :e, default: "production" option :from, type: :string, aliases: :f, default: "jspm" + option :preload, type: :string, repeatable: true, desc: "Can be used multiple times" def pin(*packages) if imports = packager.import(*packages, env: options[:env], from: options[:from]) imports.each do |package, url| puts %(Pinning "#{package}" to #{packager.vendor_path}/#{package}.js via download from #{url}) packager.download(package, url) - pin = packager.vendored_pin_for(package, url) + pin = packager.vendored_pin_for(package, url, options[:preload]) if packager.packaged?(package) gsub_file("config/importmap.rb", /^pin "#{package}".*$/, pin, verbose: false) diff --git a/lib/importmap/packager.rb b/lib/importmap/packager.rb index 76f0661..f495317 100644 --- a/lib/importmap/packager.rb +++ b/lib/importmap/packager.rb @@ -36,14 +36,14 @@ def pin_for(package, url) %(pin "#{package}", to: "#{url}") end - def vendored_pin_for(package, url) + def vendored_pin_for(package, url, preloads = nil) filename = package_filename(package) version = extract_package_version_from(url) if "#{package}.js" == filename - %(pin "#{package}" # #{version}) + %(pin "#{package}"#{preload(preloads)} # #{version}) else - %(pin "#{package}", to: "#{filename}" # #{version}) + %(pin "#{package}", to: "#{filename}"#{preload(preloads)} # #{version}) end end @@ -63,6 +63,16 @@ def remove(package) end private + def preload(preloads) + case Array(preloads) + in [] then "" + in ["true"] then %(, preload: true) + in ["false"] then %(, preload: false) + in [string] then %(, preload: "#{string}") + else %(, preload: #{preloads}) + end + end + def post_json(body) Net::HTTP.post(self.class.endpoint, body.to_json, "Content-Type" => "application/json") rescue => error diff --git a/test/packager_test.rb b/test/packager_test.rb index 29ce7f6..a4ba75c 100644 --- a/test/packager_test.rb +++ b/test/packager_test.rb @@ -54,5 +54,9 @@ def code() "200" end test "vendored_pin_for" do assert_equal %(pin "react" # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/react@17.0.2") assert_equal %(pin "javascript/react", to: "javascript--react.js" # @17.0.2), @packager.vendored_pin_for("javascript/react", "https://cdn/react@17.0.2") + assert_equal %(pin "react", preload: true # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/react@17.0.2", ["true"]) + assert_equal %(pin "react", preload: false # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/react@17.0.2", ["false"]) + assert_equal %(pin "react", preload: "foo" # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/react@17.0.2", ["foo"]) + assert_equal %(pin "react", preload: ["foo", "bar"] # @17.0.2), @packager.vendored_pin_for("react", "https://cdn/react@17.0.2", ["foo", "bar"]) end end