From e5d2dea5703388b606ea253518602666d2144b6d Mon Sep 17 00:00:00 2001 From: Marco Roth Date: Tue, 21 Apr 2026 11:33:45 +0900 Subject: [PATCH] Ruby: Extract `Herb#ensure_installed` helper --- lib/herb.rb | 14 ++++++++++++++ lib/herb/action_view/render_analyzer.rb | 7 +------ lib/herb/project.rb | 7 +------ sig/herb.rbs | 2 ++ 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/herb.rb b/lib/herb.rb index af0081979..f0e06e039 100644 --- a/lib/herb.rb +++ b/lib/herb.rb @@ -118,5 +118,19 @@ def dev_server_port(project_path = nil) rescue StandardError nil end + + def ensure_installed(&block) + require "bundler/inline" + + verbose = $VERBOSE + $VERBOSE = nil + + gemfile(true, quiet: true) do # steep:ignore + source "https://rubygems.org" # steep:ignore + instance_eval(&block) # steep:ignore + end + ensure + $VERBOSE = verbose + end end end diff --git a/lib/herb/action_view/render_analyzer.rb b/lib/herb/action_view/render_analyzer.rb index b4f183d32..61a10739b 100644 --- a/lib/herb/action_view/render_analyzer.rb +++ b/lib/herb/action_view/render_analyzer.rb @@ -784,12 +784,7 @@ def process_file_for_render_calls(file) def ensure_parallel! return if defined?(Parallel) - require "bundler/inline" - - gemfile(true, quiet: true) do # steep:ignore - source "https://rubygems.org" # steep:ignore - gem "parallel" # steep:ignore - end + Herb.ensure_installed { gem "parallel" } # steep:ignore end def collect_ruby_render_references diff --git a/lib/herb/project.rb b/lib/herb/project.rb index 1630ba3fd..712b28841 100644 --- a/lib/herb/project.rb +++ b/lib/herb/project.rb @@ -903,12 +903,7 @@ def percentage(part, total) def ensure_parallel! return if defined?(Parallel) - require "bundler/inline" - - gemfile(true, quiet: true) do - source "https://rubygems.org" - gem "parallel" - end + Herb.ensure_installed { gem "parallel" } # steep:ignore end def separator diff --git a/sig/herb.rbs b/sig/herb.rbs index 605f466f8..7aae701c9 100644 --- a/sig/herb.rbs +++ b/sig/herb.rbs @@ -23,4 +23,6 @@ module Herb def self.reset_configuration!: () -> untyped def self.dev_server_port: (?untyped project_path) -> untyped + + def self.ensure_installed: () ?{ (?) -> untyped } -> untyped end