Class: Gem::BasicSpecification
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Inherits: | Object |
Defined in: | lib/rubygems/basic_specification.rb |
Overview
BasicSpecification
is an abstract class which implements some common code used by both Specification and StubSpecification.
Class Method Summary
Instance Attribute Summary
-
#base_dir
rw
Returns the full path to the base gem directory.
-
#extension_dir
rw
Returns full path to the directory where gem's extensions are installed.
-
#full_gem_path
rw
The full path to the gem (install path + full name).
-
#loaded_from
rw
The path this gemspec was loaded from.
-
#loaded_from=(path)
rw
Set the path the Specification was loaded from.
-
#activated? ⇒ Boolean
readonly
True when the gem has been activated.
- #default_gem? ⇒ Boolean readonly
-
#stubbed? ⇒ Boolean
readonly
Whether this specification is stubbed - i.e.
Instance Method Summary
-
#contains_requirable_file?(file) ⇒ Boolean
Return true if this spec can require
file
. -
#extensions_dir
Returns path to the extensions directory.
-
#full_name
Returns the full name (name-version) of this ::Gem.
-
#full_require_paths
Full paths in the gem to add to
$LOAD_PATH
when this gem is activated. -
#gem_dir
Returns the full path to this spec's gem directory.
-
#gems_dir
Returns the full path to the gems directory containing this spec's gem directory.
-
#name
Name of the gem.
-
#platform
Platform of the gem.
-
#require_paths
Paths in the gem to add to
$LOAD_PATH
when this gem is activated. -
#source_paths
Returns the paths to the source files for use with analysis and documentation tools.
-
#to_fullpath(path)
Full path of the target library file.
-
#to_spec
Return a Specification from this gem.
-
#version
Version of the gem.
Class Method Details
.default_specifications_dir
[ GitHub ]# File 'lib/rubygems/basic_specification.rb', line 32
def self.default_specifications_dir File.join(Gem.default_dir, "specifications", "default") end
Instance Attribute Details
#activated? ⇒ Boolean
(readonly)
True when the gem has been activated
# File 'lib/rubygems/basic_specification.rb', line 39
def activated? raise NotImplementedError end
#base_dir (rw)
Returns the full path to the base gem directory.
eg: /usr/local/lib/ruby/gems/1.8
# File 'lib/rubygems/basic_specification.rb', line 48
def base_dir return Gem.dir unless loaded_from @base_dir ||= if default_gem? then File.dirname File.dirname File.dirname loaded_from else File.dirname File.dirname loaded_from end end
#default_gem? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/rubygems/basic_specification.rb', line 85
def default_gem? loaded_from && File.dirname(loaded_from) == self.class.default_specifications_dir end
#extension_dir (rw)
Returns full path to the directory where gem's extensions are installed.
# File 'lib/rubygems/basic_specification.rb', line 93
def extension_dir @extension_dir ||= File. File.join(extensions_dir, full_name) end
#full_gem_path (rw)
The full path to the gem (install path + full name).
# File 'lib/rubygems/basic_specification.rb', line 118
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
#loaded_from (rw)
The path this gemspec was loaded from. This attribute is not persisted.
# File 'lib/rubygems/basic_specification.rb', line 25
attr_reader :loaded_from
#loaded_from=(path) (rw)
Set the path the Specification was loaded from. Gem.path is converted to a String.
#stubbed? ⇒ Boolean
(readonly)
Whether this specification is stubbed - i.e. we have information about the gem from a stub line, without having to evaluate the entire gemspec file.
# File 'lib/rubygems/basic_specification.rb', line 285
def stubbed? raise NotImplementedError end
Instance Method Details
#contains_requirable_file?(file) ⇒ Boolean
Return true if this spec can require file
.
# File 'lib/rubygems/basic_specification.rb', line 60
def contains_requirable_file? file @contains_requirable_file ||= {} @contains_requirable_file[file] ||= begin if instance_variable_defined?(:@ignored) or instance_variable_defined?('@ignored') then return false elsif missing_extensions? then @ignored = true warn "Ignoring #{full_name} because its extensions are not built. " + "Try: gem pristine #{name} --version #{version}" return false end suffixes = Gem.suffixes full_require_paths.any? do |dir| base = "#{dir}/#{file}" suffixes.any? { |suf| File.file? "#{base}#{suf}" } end end ? :yes : :no @contains_requirable_file[file] == :yes end
#extensions_dir
Returns path to the extensions directory.
# File 'lib/rubygems/basic_specification.rb', line 100
def extensions_dir @extensions_dir ||= Gem.default_ext_dir_for(base_dir) || File.join(base_dir, 'extensions', Gem::Platform.local.to_s, Gem.extension_api_version) end
#full_name
#full_require_paths
Full paths in the gem to add to $LOAD_PATH
when this gem is activated.
# File 'lib/rubygems/basic_specification.rb', line 141
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.unshift extension_dir unless @extensions.nil? || @extensions.empty? full_paths end end
#gem_dir
Returns the full path to this spec's gem directory. eg: /usr/local/lib/ruby/1.8/gems/mygem-1.0
#gems_dir
Returns the full path to the gems directory containing this spec's gem directory. eg: /usr/local/lib/ruby/1.8/gems
# File 'lib/rubygems/basic_specification.rb', line 188
def gems_dir # TODO: this logic seems terribly broken, but tests fail if just base_dir @gems_dir ||= File.join(loaded_from && base_dir || Gem.dir, "gems") end
#name
Name of the gem
# File 'lib/rubygems/basic_specification.rb', line 211
def name raise NotImplementedError end
#platform
Platform of the gem
# File 'lib/rubygems/basic_specification.rb', line 218
def platform raise NotImplementedError end
#require_paths
Paths in the gem to add to $LOAD_PATH
when this gem is activated.
See also #require_paths=
If you have an extension you do not need to add "ext"
to the require path, the extension build process will copy the extension files into “lib” for you.
The default value is "lib"
Usage:
# If all library files are in the root directory...
spec.require_path = '.'
# File 'lib/rubygems/basic_specification.rb', line 243
def require_paths return raw_require_paths if @extensions.nil? || @extensions.empty? [extension_dir].concat raw_require_paths end
#source_paths
Returns the paths to the source files for use with analysis and documentation tools. These paths are relative to full_gem_path.
# File 'lib/rubygems/basic_specification.rb', line 253
def source_paths paths = raw_require_paths.dup if @extensions then ext_dirs = @extensions.map do |extension| extension.split(File::SEPARATOR, 2).first end.uniq paths.concat ext_dirs end paths.uniq end
#to_fullpath(path)
Full path of the target library file. If the file is not in this gem, return nil.
# File 'lib/rubygems/basic_specification.rb', line 158
def to_fullpath path if activated? then @paths_map ||= {} @paths_map[path] ||= begin fullpath = nil suffixes = Gem.suffixes full_require_paths.find do |dir| suffixes.find do |suf| File.file?(fullpath = "#{dir}/#{path}#{suf}") end end ? fullpath : nil end else nil end end
#to_spec
Return a Specification from this gem
# File 'lib/rubygems/basic_specification.rb', line 270
def to_spec raise NotImplementedError end
#version
Version of the gem
# File 'lib/rubygems/basic_specification.rb', line 277
def version raise NotImplementedError end