Class: Gem::BasicSpecification
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Deprecate
|
|
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
- .default_specifications_dir
- .new ⇒ BasicSpecification constructor
Deprecate
- Extended
deprecate | Simple deprecation method that deprecates #name by wrapping it up in a dummy method. |
rubygems_deprecate | Simple deprecation method that deprecates #name by wrapping it up in a dummy method. |
rubygems_deprecate_command | Deprecation method to deprecate Rubygems commands. |
skip_during | Temporarily turn off warnings. |
Instance Attribute Summary
-
#activated? ⇒ Boolean
readonly
True when the gem has been activated.
-
#base_dir
rw
Returns the full path to the base gem directory.
- #default_gem? ⇒ Boolean readonly
-
#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).
-
#ignored? ⇒ Boolean
rw
Return true if this spec should be ignored because it’s missing extensions.
-
#loaded_from
rw
The path this gemspec was loaded from.
-
#stubbed? ⇒ Boolean
readonly
Whether this specification is stubbed - i.e.
- #have_extensions? ⇒ Boolean readonly private
-
#base_dir=(value)
rw
Internal use only
Allows installation of extensions for git: gems.
-
#extension_dir=(value)
rw
Internal use only
Sets the directory where extensions for this gem will be installed.
-
#full_gem_path=(value)
rw
Internal use only
Allows correct activation of git: and path: gems.
-
#ignored=(value)
rw
Internal use only
Is this specification ignored for activation purposes?
Instance Method Summary
-
#base_dir_priority(gem_path)
Gems higher up in
gem_path
take precedence. -
#contains_requirable_file?(file) ⇒ Boolean
Return true if this spec can require
file
. -
#datadir
The path to the data directory for this gem.
-
#default_gem_priority
Regular gems take precedence over default gems.
-
#extensions_dir
Returns path to the extensions directory.
-
#full_name
Returns the full name (name-version) of this
::Gem
. -
#full_name_with_location
Returns the full name of this
::Gem
(see #full_name). -
#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.
-
#lib_dirs_glob
Returns a string usable in
Dir.glob
to match all requirable paths for this spec. -
#matches_for_glob(glob)
Return all files in this gem that match for
glob
. -
#name
Name of the gem.
-
#platform
Platform
of the gem. -
#plugins
Returns the list of plugins in this spec.
-
#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.
- #this
-
#to_fullpath(path)
Full path of the target library file.
-
#to_spec
Return a
Specification
from this gem. -
#version
Version
of the gem. - #have_file?(file, suffixes) ⇒ Boolean private
-
#gem_build_complete_path
Internal use only
The path to the gem.build_complete file within the extension install directory.
- #internal_init Internal use only
- #raw_require_paths Internal use only
- #find_full_gem_path private Internal use only
Constructor Details
.new ⇒ BasicSpecification
# File 'lib/rubygems/basic_specification.rb', line 33
def initialize internal_init end
Class Method Details
.default_specifications_dir
[ GitHub ]# File 'lib/rubygems/basic_specification.rb', line 37
def self.default_specifications_dir Gem.default_specifications_dir end
Instance Attribute Details
#activated? ⇒ Boolean
(readonly)
True when the gem has been activated
# File 'lib/rubygems/basic_specification.rb', line 57
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 66
def base_dir raise NotImplementedError end
#base_dir=(value) (rw)
Allows installation of extensions for git: gems.
# File 'lib/rubygems/basic_specification.rb', line 11
attr_writer :base_dir # :nodoc:
#default_gem? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/rubygems/basic_specification.rb', line 101
def default_gem? !loaded_from.nil? && File.dirname(loaded_from) == Gem.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 123
def extension_dir @extension_dir ||= File. (File.join(extensions_dir, full_name)) end
#extension_dir=(value) (rw)
Sets the directory where extensions for this gem will be installed.
# File 'lib/rubygems/basic_specification.rb', line 16
attr_writer :extension_dir # :nodoc:
#full_gem_path (rw)
The full path to the gem (install path + full name).
TODO: This is duplicated with #gem_dir. Eventually either of them should be deprecated.
# File 'lib/rubygems/basic_specification.rb', line 147
def full_gem_path @full_gem_path ||= find_full_gem_path end
#full_gem_path=(value) (rw)
Allows correct activation of git: and path: gems.
# File 'lib/rubygems/basic_specification.rb', line 31
attr_writer :full_gem_path # :nodoc:
#have_extensions? ⇒ Boolean
(readonly, private)
[ GitHub ]
# File 'lib/rubygems/basic_specification.rb', line 366
def have_extensions? !extensions.empty? end
#ignored=(value) (rw)
Is this specification ignored for activation purposes?
# File 'lib/rubygems/basic_specification.rb', line 21
attr_writer :ignored # :nodoc:
#ignored? ⇒ Boolean
(rw)
Return true if this spec should be ignored because it’s missing extensions.
# File 'lib/rubygems/basic_specification.rb', line 95
def ignored? return @ignored unless @ignored.nil? @ignored = missing_extensions? end
#loaded_from (rw)
The path this gemspec was loaded from. This attribute is not persisted.
# File 'lib/rubygems/basic_specification.rb', line 26
attr_accessor :loaded_from
#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 356
def stubbed? raise NotImplementedError end
Instance Method Details
#base_dir_priority(gem_path)
Gems higher up in gem_path
take precedence
# File 'lib/rubygems/basic_specification.rb', line 116
def base_dir_priority(gem_path) gem_path.index(base_dir) || gem_path.size end
#contains_requirable_file?(file) ⇒ Boolean
Return true if this spec can require file
.
# File 'lib/rubygems/basic_specification.rb', line 73
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
#datadir
The path to the data directory for this gem.
#default_gem_priority
Regular gems take precedence over default gems
# File 'lib/rubygems/basic_specification.rb', line 109
def default_gem_priority default_gem? ? 1 : -1 end
#extensions_dir
Returns path to the extensions directory.
# File 'lib/rubygems/basic_specification.rb', line 130
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
#find_full_gem_path (private)
#full_name
#full_name_with_location
Returns the full name of this ::Gem
(see #full_name). Information about where the gem is installed is also included if not installed in the default GEM_HOME.
#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 181
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
#gem_build_complete_path
The path to the gem.build_complete file within the extension install directory.
# File 'lib/rubygems/basic_specification.rb', line 50
def gem_build_complete_path # :nodoc: File.join extension_dir, "gem.build_complete" end
#gem_dir
Returns the full path to this spec’s gem directory. eg: /usr/local/lib/ruby/1.8/gems/mygem-1.0
TODO: This is duplicated with #full_gem_path. Eventually either of them should be deprecated.
# File 'lib/rubygems/basic_specification.rb', line 226
def gem_dir @gem_dir ||= find_full_gem_path end
#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 234
def gems_dir raise NotImplementedError end
#have_file?(file, suffixes) ⇒ Boolean
(private)
# File 'lib/rubygems/basic_specification.rb', line 370
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
#internal_init
# File 'lib/rubygems/basic_specification.rb', line 238
def internal_init # :nodoc: @extension_dir = nil @full_gem_path = nil @gem_dir = nil @ignored = nil end
#lib_dirs_glob
Returns a string usable in Dir.glob
to match all requirable paths for this spec.
# File 'lib/rubygems/basic_specification.rb', line 324
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
#matches_for_glob(glob)
Return all files in this gem that match for glob
.
# File 'lib/rubygems/basic_specification.rb', line 307
def matches_for_glob(glob) # TODO: rename? glob = File.join(lib_dirs_glob, glob) Dir[glob] end
#name
Name of the gem
# File 'lib/rubygems/basic_specification.rb', line 248
def name raise NotImplementedError end
#platform
Platform
of the gem
# File 'lib/rubygems/basic_specification.rb', line 255
def platform raise NotImplementedError end
#plugins
Returns the list of plugins in this spec.
# File 'lib/rubygems/basic_specification.rb', line 316
def plugins matches_for_glob("rubygems#{Gem.plugin_suffix_pattern}") end
#raw_require_paths
# File 'lib/rubygems/basic_specification.rb', line 259
def raw_require_paths # :nodoc: 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 280
def require_paths return raw_require_paths unless have_extensions? [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 290
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
#this
[ GitHub ]# File 'lib/rubygems/basic_specification.rb', line 360
def this self 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 206
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
#to_spec
Return a Specification
from this gem
# File 'lib/rubygems/basic_specification.rb', line 341
def to_spec raise NotImplementedError end
#version
Version
of the gem
# File 'lib/rubygems/basic_specification.rb', line 348
def version raise NotImplementedError end