module Bundler::GemHelpers
Constants
- GENERICS
- GENERIC_CACHE
Public Class Methods
force_ruby_platform(specs)
click to toggle source
# File bundler/gem_helpers.rb, line 51 def force_ruby_platform(specs) matching = specs.select {|spec| spec.match_platform(Gem::Platform::RUBY) && spec.force_ruby_platform! } sort_best_platform_match(matching, Gem::Platform::RUBY) end
generic(p)
click to toggle source
# File bundler/gem_helpers.rb, line 17 def generic(p) GENERIC_CACHE[p] ||= begin _, found = GENERICS.find do |match, _generic| p.os == match.os && (!match.cpu || p.cpu == match.cpu) end found || Gem::Platform::RUBY end end
generic_local_platform()
click to toggle source
# File bundler/gem_helpers.rb, line 27 def generic_local_platform generic(local_platform) end
local_platform()
click to toggle source
# File bundler/gem_helpers.rb, line 32 def local_platform Bundler.local_platform end
platform_specificity_match(spec_platform, user_platform)
click to toggle source
# File bundler/gem_helpers.rb, line 37 def platform_specificity_match(spec_platform, user_platform) spec_platform = Gem::Platform.new(spec_platform) PlatformMatch.specificity_score(spec_platform, user_platform) end
same_deps(spec, exemplary_spec)
click to toggle source
# File bundler/gem_helpers.rb, line 115 def same_deps(spec, exemplary_spec) same_runtime_deps = spec.dependencies.sort == exemplary_spec.dependencies.sort return same_runtime_deps unless spec.is_a?(Gem::Specification) && exemplary_spec.is_a?(Gem::Specification) same_metadata_deps = spec.required_ruby_version == exemplary_spec.required_ruby_version && spec.required_rubygems_version == exemplary_spec.required_rubygems_version same_runtime_deps && same_metadata_deps end
same_specificity(platform, spec, exemplary_spec)
click to toggle source
# File bundler/gem_helpers.rb, line 110 def same_specificity(platform, spec, exemplary_spec) platform_specificity_match(spec.platform, platform) == platform_specificity_match(exemplary_spec.platform, platform) end
select_best_platform_match(specs, platform)
click to toggle source
# File bundler/gem_helpers.rb, line 44 def select_best_platform_match(specs, platform) matching = specs.select {|spec| spec.match_platform(platform) } sort_best_platform_match(matching, platform) end
sort_best_platform_match(matching, platform)
click to toggle source
# File bundler/gem_helpers.rb, line 58 def sort_best_platform_match(matching, platform) exact = matching.select {|spec| spec.platform == platform } return exact if exact.any? sorted_matching = matching.sort_by {|spec| platform_specificity_match(spec.platform, platform) } exemplary_spec = sorted_matching.first sorted_matching.take_while {|spec| same_specificity(platform, spec, exemplary_spec) && same_deps(spec, exemplary_spec) } end
Private Instance Methods
force_ruby_platform(specs)
click to toggle source
# File bundler/gem_helpers.rb, line 51 def force_ruby_platform(specs) matching = specs.select {|spec| spec.match_platform(Gem::Platform::RUBY) && spec.force_ruby_platform! } sort_best_platform_match(matching, Gem::Platform::RUBY) end
generic(p)
click to toggle source
# File bundler/gem_helpers.rb, line 17 def generic(p) GENERIC_CACHE[p] ||= begin _, found = GENERICS.find do |match, _generic| p.os == match.os && (!match.cpu || p.cpu == match.cpu) end found || Gem::Platform::RUBY end end
generic_local_platform()
click to toggle source
# File bundler/gem_helpers.rb, line 27 def generic_local_platform generic(local_platform) end
local_platform()
click to toggle source
# File bundler/gem_helpers.rb, line 32 def local_platform Bundler.local_platform end
platform_specificity_match(spec_platform, user_platform)
click to toggle source
# File bundler/gem_helpers.rb, line 37 def platform_specificity_match(spec_platform, user_platform) spec_platform = Gem::Platform.new(spec_platform) PlatformMatch.specificity_score(spec_platform, user_platform) end
same_deps(spec, exemplary_spec)
click to toggle source
# File bundler/gem_helpers.rb, line 115 def same_deps(spec, exemplary_spec) same_runtime_deps = spec.dependencies.sort == exemplary_spec.dependencies.sort return same_runtime_deps unless spec.is_a?(Gem::Specification) && exemplary_spec.is_a?(Gem::Specification) same_metadata_deps = spec.required_ruby_version == exemplary_spec.required_ruby_version && spec.required_rubygems_version == exemplary_spec.required_rubygems_version same_runtime_deps && same_metadata_deps end
same_specificity(platform, spec, exemplary_spec)
click to toggle source
# File bundler/gem_helpers.rb, line 110 def same_specificity(platform, spec, exemplary_spec) platform_specificity_match(spec.platform, platform) == platform_specificity_match(exemplary_spec.platform, platform) end
select_best_platform_match(specs, platform)
click to toggle source
# File bundler/gem_helpers.rb, line 44 def select_best_platform_match(specs, platform) matching = specs.select {|spec| spec.match_platform(platform) } sort_best_platform_match(matching, platform) end
sort_best_platform_match(matching, platform)
click to toggle source
# File bundler/gem_helpers.rb, line 58 def sort_best_platform_match(matching, platform) exact = matching.select {|spec| spec.platform == platform } return exact if exact.any? sorted_matching = matching.sort_by {|spec| platform_specificity_match(spec.platform, platform) } exemplary_spec = sorted_matching.first sorted_matching.take_while {|spec| same_specificity(platform, spec, exemplary_spec) && same_deps(spec, exemplary_spec) } end