class Gem::BasicSpecification
def self.default_specifications_dir
def self.default_specifications_dir Gem.default_specifications_dir end
def activated?
def activated? raise NotImplementedError end
def base_dir
def base_dir raise NotImplementedError end
def base_dir_priority(gem_path)
def base_dir_priority(gem_path) gem_path.index(base_dir) || gem_path.size end
def contains_requirable_file?(file)
def contains_requirable_file?(file) if ignored? if platform == Gem::Platform::RUBY || Gem::Platform.local === platform warn "Ignoring #{full_name} because its extensions are not built. " \ "Try: gem pristine #{name} --version #{version}" end return false end is_soext = file.end_with?(".so", ".o") if is_soext have_file? file.delete_suffix(File.extname(file)), Gem.dynamic_library_suffixes else have_file? file, Gem.suffixes end end
def datadir
def datadir # TODO: drop the extra ", gem_name" which is uselessly redundant File.expand_path(File.join(gems_dir, full_name, "data", name)) end
def default_gem?
def default_gem? !loaded_from.nil? && File.dirname(loaded_from) == Gem.default_specifications_dir end
def default_gem_priority
def default_gem_priority default_gem? ? 1 : -1 end
def extension_dir
def extension_dir @extension_dir ||= File.expand_path(File.join(extensions_dir, full_name)) end
def extensions_dir
def extensions_dir Gem.default_ext_dir_for(base_dir) || File.join(base_dir, "extensions", Gem::Platform.local.to_s, Gem.extension_api_version) end
def find_full_gem_path # :nodoc:
def find_full_gem_path # :nodoc: File.expand_path File.join(gems_dir, full_name) end
def full_gem_path
def full_gem_path @full_gem_path ||= find_full_gem_path end
def full_name
def full_name if platform == Gem::Platform::RUBY || platform.nil? "#{name}-#{version}" else "#{name}-#{version}-#{platform}" end end
def full_name_with_location
def full_name_with_location if base_dir != Gem.dir "#{full_name} in #{base_dir}" else full_name end end
def full_require_paths
def full_require_paths @full_require_paths ||= begin full_paths = raw_require_paths.map do |path| File.join full_gem_path, path end full_paths << extension_dir if have_extensions? full_paths end end
def gem_build_complete_path # :nodoc:
def gem_build_complete_path # :nodoc: File.join extension_dir, "gem.build_complete" end
def gem_dir
def gem_dir @gem_dir ||= find_full_gem_path end
def gems_dir
def gems_dir raise NotImplementedError end
def have_extensions?
def have_extensions? !extensions.empty? end
def have_file?(file, suffixes)
def have_file?(file, suffixes) return true if raw_require_paths.any? do |path| base = File.join(gems_dir, full_name, path, file) suffixes.any? {|suf| File.file? base + suf } end if have_extensions? base = File.join extension_dir, file suffixes.any? {|suf| File.file? base + suf } else false end end
def ignored?
def ignored? return @ignored unless @ignored.nil? @ignored = missing_extensions? end
def initialize
def initialize internal_init end
def internal_init # :nodoc:
def internal_init # :nodoc: @extension_dir = nil @full_gem_path = nil @gem_dir = nil @ignored = nil end
def lib_dirs_glob
def lib_dirs_glob dirs = if raw_require_paths if raw_require_paths.size > 1 "{#{raw_require_paths.join(",")}}" else raw_require_paths.first end else "lib" # default value for require_paths for bundler/inline end "#{full_gem_path}/#{dirs}" end
def matches_for_glob(glob) # TODO: rename?
def matches_for_glob(glob) # TODO: rename? glob = File.join(lib_dirs_glob, glob) Dir[glob] end
def name
def name raise NotImplementedError end
def platform
def platform raise NotImplementedError end
def plugins
def plugins matches_for_glob("rubygems#{Gem.plugin_suffix_pattern}") end
def raw_require_paths # :nodoc:
def raw_require_paths # :nodoc: raise NotImplementedError end
def require_paths
def require_paths return raw_require_paths unless have_extensions? [extension_dir].concat raw_require_paths end
def source_paths
def source_paths paths = raw_require_paths.dup if have_extensions? ext_dirs = extensions.map do |extension| extension.split(File::SEPARATOR, 2).first end.uniq paths.concat ext_dirs end paths.uniq end
def stubbed?
about the gem from a stub line, without having to evaluate the
Whether this specification is stubbed - i.e. we have information
#
def stubbed? raise NotImplementedError end
def this
def this self end
def to_fullpath(path)
def to_fullpath(path) if activated? @paths_map ||= {} Gem.suffixes.each do |suf| full_require_paths.each do |dir| fullpath = "#{dir}/#{path}#{suf}" next unless File.file?(fullpath) @paths_map[path] ||= fullpath end end @paths_map[path] end end
def to_spec
def to_spec raise NotImplementedError end
def version
def version raise NotImplementedError end