class Gem::Specification

On universal Rubies, resolve the “universal” arch to the real CPU arch, without changing the extension directory.

Constants

LATEST_RUBY_WITHOUT_PATCH_VERSIONS
ORIGINAL_LOCAL_PLATFORM

Attributes

location[RW]
relative_loaded_from[RW]
remote[RW]
source[W]

Public Instance Methods

deleted_gem?() click to toggle source
# File bundler/rubygems_ext.rb, line 153
def deleted_gem?
  !default_gem? && !File.directory?(full_gem_path)
end
extension_dir() click to toggle source
# File bundler/rubygems_ext.rb, line 68
def extension_dir
  # following instance variable is already used in original method
  # and that is the reason to prefix it with bundler_ and add rubocop exception
  @bundler_extension_dir ||= if source.respond_to?(:extension_dir_name) # rubocop:disable Naming/MemoizedInstanceVariableName
    unique_extension_dir = [source.extension_dir_name, File.basename(full_gem_path)].uniq.join("-")
    File.expand_path(File.join(extensions_dir, unique_extension_dir))
  else
    rg_extension_dir
  end
end
Also aliased as: rg_extension_dir
extensions_dir() click to toggle source
# File bundler/rubygems_ext.rb, line 353
def extensions_dir
  Gem.default_ext_dir_for(base_dir) ||
    File.join(base_dir, "extensions", ORIGINAL_LOCAL_PLATFORM,
              Gem.extension_api_version)
end
full_gem_path() click to toggle source
# File bundler/rubygems_ext.rb, line 47
def full_gem_path
  if source.respond_to?(:root)
    Pathname.new(loaded_from).dirname.expand_path(source.root).to_s.tap {|x| x.untaint if RUBY_VERSION < "2.7" }
  else
    rg_full_gem_path
  end
end
Also aliased as: rg_full_gem_path
gem_dir() click to toggle source
# File bundler/rubygems_ext.rb, line 98
def gem_dir
  full_gem_path
end
git_version() click to toggle source
# File bundler/rubygems_ext.rb, line 123
def git_version
  return unless loaded_from && source.is_a?(Bundler::Source::Git)
  " #{source.revision[0..6]}"
end
groups() click to toggle source
# File bundler/rubygems_ext.rb, line 119
def groups
  @groups ||= []
end
load_paths() click to toggle source
# File bundler/rubygems_ext.rb, line 63
def load_paths
  full_require_paths
end
loaded_from() click to toggle source
# File bundler/rubygems_ext.rb, line 55
def loaded_from
  if relative_loaded_from
    source.path.join(relative_loaded_from).to_s
  else
    rg_loaded_from
  end
end
Also aliased as: rg_loaded_from
missing_extensions?() click to toggle source
# File bundler/rubygems_ext.rb, line 80
def missing_extensions?
  # When we use this methods with local gemspec, we don't handle
  # build status of extension correctly. So We need to find extension
  # files in require_paths.
  # TODO: Gem::Specification couldn't access extension name from extconf.rb
  #       so we find them with heuristic way. We should improve it.
  if source.respond_to?(:root)
    return false if raw_require_paths.any? do |path|
      ext_dir = File.join(full_gem_path, path)
      File.exist?(File.join(ext_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}")) ||
      !Dir.glob(File.join(ext_dir, name, "*.#{RbConfig::CONFIG["DLEXT"]}")).empty?
    end
  end

  rg_missing_extensions?
end
Also aliased as: rg_missing_extensions?
nondevelopment_dependencies() click to toggle source
# File bundler/rubygems_ext.rb, line 149
def nondevelopment_dependencies
  dependencies - development_dependencies
end
required_ruby_version=(req) click to toggle source
# File bundler/rubygems_ext.rb, line 106
def required_ruby_version=(req)
  self.rg_required_ruby_version = req

  @required_ruby_version.requirements.map! do |op, v|
    if v >= LATEST_RUBY_WITHOUT_PATCH_VERSIONS && v.release.segments.size == 4
      [op == "~>" ? "=" : op, Gem::Version.new(v.segments.tap {|s| s.delete_at(3) }.join("."))]
    else
      [op, v]
    end
  end
end
rg_extension_dir()
Alias for: extension_dir
rg_full_gem_path()
Alias for: full_gem_path
rg_loaded_from()
Alias for: loaded_from
rg_missing_extensions?()
Alias for: missing_extensions?
source() click to toggle source
# File bundler/rubygems_ext.rb, line 40
def source
  (defined?(@source) && @source) || Gem::Source::Installed.new
end
to_gemfile(path = nil) click to toggle source
# File bundler/rubygems_ext.rb, line 128
def to_gemfile(path = nil)
  gemfile = String.new("source 'https://rubygems.org'\n")
  gemfile << dependencies_to_gemfile(nondevelopment_dependencies)
  unless development_dependencies.empty?
    gemfile << "\n"
    gemfile << dependencies_to_gemfile(development_dependencies, :development)
  end
  gemfile
end

Private Instance Methods

dependencies_to_gemfile(dependencies, group = nil) click to toggle source
# File bundler/rubygems_ext.rb, line 159
def dependencies_to_gemfile(dependencies, group = nil)
  gemfile = String.new
  if dependencies.any?
    gemfile << "group :#{group} do\n" if group
    dependencies.each do |dependency|
      gemfile << "  " if group
      gemfile << %(gem "#{dependency.name}")
      req = dependency.requirements_list.first
      gemfile << %(, "#{req}") if req
      gemfile << "\n"
    end
    gemfile << "end\n" if group
  end
  gemfile
end