summaryrefslogtreecommitdiff
path: root/lib/bundler/dependency.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bundler/dependency.rb')
-rw-r--r--lib/bundler/dependency.rb147
1 files changed, 100 insertions, 47 deletions
diff --git a/lib/bundler/dependency.rb b/lib/bundler/dependency.rb
index 21a4564dcc..cb9c7a76ea 100644
--- a/lib/bundler/dependency.rb
+++ b/lib/bundler/dependency.rb
@@ -2,83 +2,136 @@
require "rubygems/dependency"
require_relative "shared_helpers"
-require_relative "rubygems_ext"
module Bundler
class Dependency < Gem::Dependency
- attr_reader :autorequire
- attr_reader :groups, :platforms, :gemfile, :path, :git, :github, :branch, :ref
-
- ALL_RUBY_VERSIONS = ((18..27).to_a + (30..33).to_a).freeze
- PLATFORM_MAP = {
- :ruby => [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
- :mri => [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
- :rbx => [Gem::Platform::RUBY],
- :truffleruby => [Gem::Platform::RUBY],
- :jruby => [Gem::Platform::JAVA, [18, 19]],
- :windows => [Gem::Platform::WINDOWS, ALL_RUBY_VERSIONS],
- # deprecated
- :mswin => [Gem::Platform::MSWIN, ALL_RUBY_VERSIONS],
- :mswin64 => [Gem::Platform::MSWIN64, ALL_RUBY_VERSIONS - [18]],
- :mingw => [Gem::Platform::MINGW, ALL_RUBY_VERSIONS],
- :x64_mingw => [Gem::Platform::X64_MINGW, ALL_RUBY_VERSIONS - [18, 19]],
- }.each_with_object({}) do |(platform, spec), hash|
- hash[platform] = spec[0]
- spec[1]&.each {|version| hash[:"#{platform}_#{version}"] = spec[0] }
- end.freeze
-
def initialize(name, version, options = {}, &blk)
type = options["type"] || :runtime
super(name, version, type)
- @autorequire = nil
- @groups = Array(options["group"] || :default).map(&:to_sym)
- @source = options["source"]
- @path = options["path"]
- @git = options["git"]
- @github = options["github"]
- @branch = options["branch"]
- @ref = options["ref"]
- @platforms = Array(options["platforms"])
- @env = options["env"]
- @should_include = options.fetch("should_include", true)
- @gemfile = options["gemfile"]
- @force_ruby_platform = options["force_ruby_platform"] if options.key?("force_ruby_platform")
+ @options = options
+ end
+
+ def groups
+ @groups ||= Array(@options["group"] || :default).map(&:to_sym)
+ end
+
+ def source
+ return @source if defined?(@source)
+
+ @source = @options["source"]
+ end
+
+ def path
+ return @path if defined?(@path)
+
+ @path = @options["path"]
+ end
+
+ def git
+ return @git if defined?(@git)
+
+ @git = @options["git"]
+ end
+
+ def github
+ return @github if defined?(@github)
+
+ @github = @options["github"]
+ end
+
+ def branch
+ return @branch if defined?(@branch)
+
+ @branch = @options["branch"]
+ end
+
+ def ref
+ return @ref if defined?(@ref)
+
+ @ref = @options["ref"]
+ end
+
+ def glob
+ return @glob if defined?(@glob)
+
+ @glob = @options["glob"]
+ end
+
+ def platforms
+ @platforms ||= Array(@options["platforms"])
+ end
+
+ def env
+ return @env if defined?(@env)
+
+ @env = @options["env"]
+ end
+
+ def should_include
+ @should_include ||= @options.fetch("should_include", true)
+ end
+
+ def gemfile
+ return @gemfile if defined?(@gemfile)
- @autorequire = Array(options["require"] || []) if options.key?("require")
+ @gemfile = @options["gemfile"]
end
+ def force_ruby_platform
+ return @force_ruby_platform if defined?(@force_ruby_platform)
+
+ @force_ruby_platform = @options["force_ruby_platform"]
+ end
+
+ def autorequire
+ return @autorequire if defined?(@autorequire)
+
+ @autorequire = Array(@options["require"] || []) if @options.key?("require")
+ end
+
+ RUBY_PLATFORM_ARRAY = [Gem::Platform::RUBY].freeze
+ private_constant :RUBY_PLATFORM_ARRAY
+
# Returns the platforms this dependency is valid for, in the same order as
# passed in the `valid_platforms` parameter
def gem_platforms(valid_platforms)
- return [Gem::Platform::RUBY] if force_ruby_platform
- return valid_platforms if @platforms.empty?
+ return RUBY_PLATFORM_ARRAY if force_ruby_platform
+ return valid_platforms if platforms.empty?
- valid_platforms.select {|p| expanded_platforms.include?(GemHelpers.generic(p)) }
+ valid_platforms.select {|p| expanded_platforms.include?(Gem::Platform.generic(p)) }
end
def expanded_platforms
- @expanded_platforms ||= @platforms.map {|pl| PLATFORM_MAP[pl] }.compact.flatten.uniq
+ @expanded_platforms ||= platforms.filter_map {|pl| CurrentRuby::PLATFORM_MAP[pl] }.flatten.uniq
end
def should_include?
- @should_include && current_env? && current_platform?
+ should_include && current_env? && current_platform?
+ end
+
+ def gemspec_dev_dep?
+ @gemspec_dev_dep ||= @options.fetch("gemspec_dev_dep", false)
+ end
+
+ def gemfile_dep?
+ !gemspec_dev_dep?
end
def current_env?
- return true unless @env
- if @env.is_a?(Hash)
- @env.all? do |key, val|
+ return true unless env
+ if env.is_a?(Hash)
+ env.all? do |key, val|
ENV[key.to_s] && (val.is_a?(String) ? ENV[key.to_s] == val : ENV[key.to_s] =~ val)
end
else
- ENV[@env.to_s]
+ ENV[env.to_s]
end
end
def current_platform?
- return true if @platforms.empty?
- @platforms.any? do |p|
+ return true if platforms.empty?
+ platforms.any? do |p|
Bundler.current_ruby.send("#{p}?")
end
end