diff --git a/.github/workflows/locked_deps.yml b/.github/workflows/locked_deps.yml index eb6621c..6416f7d 100644 --- a/.github/workflows/locked_deps.yml +++ b/.github/workflows/locked_deps.yml @@ -73,6 +73,9 @@ jobs: - name: Checkout uses: actions/checkout@v6 + - name: Install tree-sitter library + uses: kettle-rb/ts-grammar-action@main + - name: Setup Ruby & RubyGems uses: ruby/setup-ruby@v1 with: @@ -81,19 +84,5 @@ jobs: bundler: ${{ matrix.bundler }} bundler-cache: true - - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" - id: bundleAppraisalAttempt1 - if: ${{ !env.ACT }} - run: bundle exec appraisal ${{ matrix.appraisal }} install - # Continue to the next step on failure - continue-on-error: true - - # Effectively an automatic retry of the previous step. - - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}" - id: bundleAppraisalAttempt2 - # If bundleAppraisalAttempt1 failed, try again here; Otherwise skip. - if: ${{ steps.bundleAppraisalAttempt1.outcome == 'failure' && !env.ACT }} - run: bundle exec appraisal ${{ matrix.appraisal }} install - - name: Checks the kitchen sink via ${{ matrix.exec_cmd }} run: bundle exec ${{ matrix.exec_cmd }} diff --git a/Gemfile b/Gemfile index 24bcdb3..25dbd0b 100644 --- a/Gemfile +++ b/Gemfile @@ -27,7 +27,7 @@ gem "nomono", "~> 1.0" gem "logger" # Templating (env-switched: KETTLE_RB_DEV=true for local paths) -eval_gemfile "gemfiles/modular/templating.gemfile" if ENV.fetch("K_JEM_TEMPLATING", "true").casecmp("true").zero? +eval_gemfile "gemfiles/modular/templating.gemfile" if ENV.fetch("K_JEM_TEMPLATING", "false").casecmp("true").zero? # Debugging eval_gemfile "gemfiles/modular/debug.gemfile" diff --git a/README.md b/README.md index 7e8fc06..57a4049 100644 --- a/README.md +++ b/README.md @@ -248,12 +248,18 @@ A gem that needs zero new top-level namespaces from this dependency can load the namespace. On Ruby 3.1+, use `Kernel.load(path, module)`: ```ruby -auth_sanitizer_spec = Gem.loaded_specs["auth-sanitizer"] || - Gem::Specification.find_by_name("auth-sanitizer") +auth_sanitizer_requirement = Gem::Requirement.new("~> 0.1", ">= 0.1.3") +auth_sanitizer_spec = Gem.loaded_specs["auth-sanitizer"] +unless auth_sanitizer_spec && auth_sanitizer_requirement.satisfied_by?(auth_sanitizer_spec.version) + auth_sanitizer_spec = Gem::Specification.find_by_name("auth-sanitizer", auth_sanitizer_requirement) +end auth_sanitizer_loader_path = File.join( auth_sanitizer_spec.full_gem_path, "lib/auth_sanitizer/loader.rb", ) +unless File.file?(auth_sanitizer_loader_path) + raise LoadError, "auth-sanitizer #{auth_sanitizer_requirement} loader not found at #{auth_sanitizer_loader_path}" +end auth_sanitizer_loader_namespace = Module.new Kernel.load(auth_sanitizer_loader_path, auth_sanitizer_loader_namespace) @@ -274,12 +280,18 @@ Ruby 2.2 through Ruby 3.0 do not support `Kernel.load(path, module)`. For those inside an anonymous namespace with `Module#module_eval`: ```ruby -auth_sanitizer_spec = Gem.loaded_specs["auth-sanitizer"] || - Gem::Specification.find_by_name("auth-sanitizer") +auth_sanitizer_requirement = Gem::Requirement.new("~> 0.1", ">= 0.1.3") +auth_sanitizer_spec = Gem.loaded_specs["auth-sanitizer"] +unless auth_sanitizer_spec && auth_sanitizer_requirement.satisfied_by?(auth_sanitizer_spec.version) + auth_sanitizer_spec = Gem::Specification.find_by_name("auth-sanitizer", auth_sanitizer_requirement) +end auth_sanitizer_loader_path = File.join( auth_sanitizer_spec.full_gem_path, "lib/auth_sanitizer/loader.rb", ) +unless File.file?(auth_sanitizer_loader_path) + raise LoadError, "auth-sanitizer #{auth_sanitizer_requirement} loader not found at #{auth_sanitizer_loader_path}" +end auth_sanitizer_loader_namespace = Module.new auth_sanitizer_loader_namespace.module_eval(