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 contains_requirable_file?(file)
def contains_requirable_file?(file) if @ignored return false elsif missing_extensions? @ignored = true if Gem::Platform::RUBY == platform || Gem::Platform.local === platform warn "Ignoring #{full_name} because its extensions are not built. " + "Try: gem pristine #{name} --version #{version}" end return false end have_file? file, Gem.suffixes 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)).tap(&Gem::UNTAINT) end
def default_gem?
def default_gem? loaded_from && File.dirname(loaded_from) == Gem.default_specifications_dir end
def extension_dir
def extension_dir @extension_dir ||= File.expand_path(File.join(extensions_dir, full_name)).tap(&Gem::UNTAINT) 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: # TODO: also, shouldn't it default to full_name if it hasn't been written? path = File.expand_path File.join(gems_dir, full_name) path.tap(&Gem::UNTAINT) path end
def full_gem_path
def full_gem_path # TODO: This is a heavily used method by gems, so we'll need # to aleast just alias it to #gem_dir rather than remove it. @full_gem_path ||= find_full_gem_path end
def full_name
def full_name if platform == Gem::Platform::RUBY or platform.nil? "#{name}-#{version}".dup.tap(&Gem::UNTAINT) else "#{name}-#{version}-#{platform}".dup.tap(&Gem::UNTAINT) 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.tap(&Gem::UNTAINT) 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 ||= File.expand_path File.join(gems_dir, full_name) end
def gems_dir
def gems_dir raise NotImplementedError end
def have_extensions?; !extensions.empty?; end
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.tap(&Gem::UNTAINT), file).tap(&Gem::UNTAINT) 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 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 self.raw_require_paths if self.raw_require_paths.size > 1 "{#{self.raw_require_paths.join(',')}}" else self.raw_require_paths.first end else "lib" # default value for require_paths for bundler/inline end "#{self.full_gem_path}/#{dirs}".dup.tap(&Gem::UNTAINT) end
def matches_for_glob(glob) # TODO: rename?
def matches_for_glob(glob) # TODO: rename? glob = File.join(self.lib_dirs_glob, glob) Dir[glob].map {|f| f.tap(&Gem::UNTAINT) } # FIX our tests are broken, run w/ SAFE=1 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; self; end
def this; self; end
def to_fullpath(path)
def to_fullpath(path) if activated? @paths_map ||= {} @paths_map[path] ||= begin fullpath = nil suffixes = Gem.suffixes suffixes.find do |suf| full_require_paths.find do |dir| File.file?(fullpath = "#{dir}/#{path}#{suf}") end end ? fullpath : nil end else nil end end
def to_spec
def to_spec raise NotImplementedError end
def version
def version raise NotImplementedError end