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
7 changes: 4 additions & 3 deletions .github/workflows/ruby.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,14 @@ jobs:
fail-fast: false
matrix:
ruby-version:
- '3.0'
- '3.2'
- '3.3'
- '3.4'
bundler-version:
- '2.3.19'
- '2.4.14'
- '2.4.19'
- '2.5.4'
- '2.6.0'
- '2.6.9'

env:
TEST_BUNDLER_VERSION: ${{ matrix.bundler-version }}
Expand Down
27 changes: 19 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,30 +37,41 @@ require File.join(Bundler::Plugin.index.load_paths("bundler-override")[0], "bund
2. Add _'override'_ block to the _Gemfile_, e.g.:

~~~ruby
override 'chef-config', :drop => ['chef-utils', 'mixlib-config']
if Bundler::Plugin.installed?('bundler-override')
override 'chef-config', :drop => ['chef-utils', 'mixlib-config']
end
~~~

or

~~~ruby
override 'chef-config', :drop => 'mixlib-config', :requirements => {
'chef-utils' => '17.10.68'
}
if Bundler::Plugin.installed?('bundler-override')
override 'chef-config', :drop => 'mixlib-config', :requirements => {
'chef-utils' => '17.10.68'
}
end
~~~

or

~~~ruby
override 'chef-config', :requirements => {
'chef-utils' => '17.10.68',
'mixlib-config' => '2.0.0'
}
if Bundler::Plugin.installed?('bundler-override')
override 'chef-config', :requirements => {
'chef-utils' => '17.10.68',
'mixlib-config' => '2.0.0'
}
end
~~~



### override

`override` is a command that allows to drop or replace dependency for a gem with desired version

It is a good practice to check if the plugin is installed since it will allow bundler to install it
automatically if it is missing.

### drop

Takes a gem name or list of gem names to be totally dropped from the dependencies.
Expand Down
2 changes: 1 addition & 1 deletion bundler-override.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
spec.summary = "This bundler plugin allows to change dependencies for a gem. It can be helpful in situation when a developer needs to use some other dependency than default for the gem. For usage details, please see: https://github.com/tarnowsc/bundler-override#usage"
spec.homepage = "https://github.com/tarnowsc/bundler-override"
spec.license = "Apache-2.0"
spec.required_ruby_version = ">= 3.0.0"
spec.required_ruby_version = ">= 3.2.0"

spec.metadata["allowed_push_host"] = "https://rubygems.org"

Expand Down
9 changes: 2 additions & 7 deletions lib/bundler-override.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# frozen_string_literal: true
require "set"
require_relative "bundler/override/dsl_patch"
require_relative "bundler/override/specset_patch"
require_relative "bundler/override/sharedhelpers_patch"
require_relative "bundler/override/dependency_patch"
require "bundler/friendly_errors.rb"

module Bundler
Expand All @@ -24,7 +23,7 @@ def add(name, drop, requirements)
return if @gems.include? name
@gems << name
@params = Array.new unless @params
@params << { :name=>name, :drop=>drop || [], :requirements=>requirements }
@params << { :name => name, :drop => drop || [], :requirements => requirements }
end
end
end
Expand All @@ -34,7 +33,3 @@ def add(name, drop, requirements)
ObjectSpace.each_object(Bundler::Dsl) do |o|
o.singleton_class.prepend(Bundler::Override::DslPatch)
end

Bundler::SpecSet.prepend(Bundler::Override::SpecSetPatch)

Bundler::SharedHelpers.prepend(Bundler::Override::SharedHelpersPatch)
49 changes: 49 additions & 0 deletions lib/bundler/override/dependency_patch.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
module Bundler
module Override
module DependencyPatch
def self.included(base)
base.class_eval do
alias_method :dependencies_orig, :dependencies

def dependencies
override_dependencies || []
end

def override_dependencies
deps = dependencies_orig
return deps unless Bundler::Override.override? name
param = Bundler::Override.params(name)
drop = Array(param[:drop])
requirements = param[:requirements]
if requirements && !requirements.empty?
requirements.each do |name, requirement|
existing = deps.find { |d| d.name == name }
deps.delete_if { |d| d.name == name }
deps << Gem::Dependency.new(name, requirement, existing&.type || :runtime)
end
end
deps.delete_if { |d| drop.include? d.name }

deps
end
end
end
end
end
end

module Bundler
class RemoteSpecification
include Override::DependencyPatch
end

class EndpointSpecification
include Override::DependencyPatch
end
end

module Gem
class Specification
include Bundler::Override::DependencyPatch
end
end
14 changes: 0 additions & 14 deletions lib/bundler/override/sharedhelpers_patch.rb

This file was deleted.

28 changes: 0 additions & 28 deletions lib/bundler/override/specset_patch.rb

This file was deleted.

Loading