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
- .default_specifications_dir
- .new ⇒ BasicSpecification constructor
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. 
- 
    
      #activated?  ⇒ Boolean 
    
    readonly
    True when the gem has been activated. 
- #default_gem? ⇒ Boolean readonly
- 
    
      #stubbed?  ⇒ Boolean 
    
    readonly
    Whether this specification is stubbed - i.e. 
- #have_extensions? ⇒ Boolean readonly private
Instance Method Summary
- 
    
      #contains_requirable_file?(file)  ⇒ Boolean 
    
    Return true if this spec can require file.
- 
    
      #datadir  
    
    The path to the data directory for this gem. 
- 
    
      #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_PATHwhen 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.globto 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. 
- 
    
      #require_paths  
    
    Paths in the gem to add to $LOAD_PATHwhen 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. 
- #have_file?(file, suffixes) ⇒ Boolean private
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 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 52
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 61
def base_dir raise NotImplementedError end
    #default_gem?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'lib/rubygems/basic_specification.rb', line 82
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 90
def extension_dir @extension_dir ||= File.(File.join(extensions_dir, full_name)).untaint end
#full_gem_path (rw)
The full path to the gem (install path + full name).
# File 'lib/rubygems/basic_specification.rb', line 115
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
    #have_extensions?  ⇒ Boolean  (readonly, private)
  
  [ GitHub ]
# File 'lib/rubygems/basic_specification.rb', line 312
def have_extensions?; !extensions.empty?; 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 306
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 68
def contains_requirable_file? file if @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 have_file? file, Gem.suffixes end
#datadir
The path to the data directory for this gem.
#extensions_dir
Returns path to the extensions directory.
# File 'lib/rubygems/basic_specification.rb', line 97
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 138
def full_require_paths @full_require_paths ||= begin full_paths = raw_require_paths.map do |path| File.join full_gem_path, path.untaint end full_paths << extension_dir if have_extensions? 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 193
def gems_dir raise NotImplementedError end
    #have_file?(file, suffixes)  ⇒ Boolean  (private)
  
# File 'lib/rubygems/basic_specification.rb', line 314
def have_file? file, suffixes return true if raw_require_paths.any? do |path| base = File.join(gems_dir, full_name, path.untaint, file).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
#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 278
def lib_dirs_glob dirs = if self.require_paths.size > 1 then "{#{self.require_paths.join(',')}}" else self.require_paths.first end "#{self.full_gem_path}/#{dirs}".dup.untaint end
#matches_for_glob(glob)
Return all files in this gem that match for glob.
# File 'lib/rubygems/basic_specification.rb', line 267
def matches_for_glob glob # TODO: rename? # TODO: do we need these?? Kill it glob = File.join(self.lib_dirs_glob, glob) Dir[glob].map { |f| f.untaint } # FIX our tests are broken, run w/ SAFE=1 end
#name
Name of the gem
# File 'lib/rubygems/basic_specification.rb', line 208
def name raise NotImplementedError end
#platform
Platform of the gem
# File 'lib/rubygems/basic_specification.rb', line 215
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 240
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 250
def source_paths paths = raw_require_paths.dup if have_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 163
def to_fullpath path if activated? then @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
#to_spec
Return a Specification from this gem
# File 'lib/rubygems/basic_specification.rb', line 291
def to_spec raise NotImplementedError end
#version
Version of the gem
# File 'lib/rubygems/basic_specification.rb', line 298
def version raise NotImplementedError end