Class: Gem::BasicSpecification
- Inherits:
-
Object
- Object
- Gem::BasicSpecification
- Defined in:
- lib/rubygems/basic_specification.rb
Overview
BasicSpecification is an abstract class which implements some common code used by both Specification and StubSpecification.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#base_dir ⇒ Object
Returns the full path to the base gem directory.
-
#extension_dir ⇒ Object
Returns full path to the directory where gem’s extensions are installed.
-
#full_gem_path ⇒ Object
The full path to the gem (install path + full name).
-
#loaded_from ⇒ Object
The path this gemspec was loaded from.
Class Method Summary collapse
Instance Method Summary collapse
-
#activated? ⇒ Boolean
True when the gem has been activated.
-
#contains_requirable_file?(file) ⇒ Boolean
Return true if this spec can require
file
. - #default_gem? ⇒ Boolean
-
#extensions_dir ⇒ Object
Returns path to the extensions directory.
-
#full_name ⇒ Object
Returns the full name (name-version) of this Gem.
-
#full_require_paths ⇒ Object
Full paths in the gem to add to
$LOAD_PATH
when this gem is activated. -
#gem_dir ⇒ Object
Returns the full path to this spec’s gem directory.
-
#gems_dir ⇒ Object
Returns the full path to the gems directory containing this spec’s gem directory.
-
#name ⇒ Object
Name of the gem.
-
#platform ⇒ Object
Platform of the gem.
-
#raw_require_paths ⇒ Object
:nodoc:.
-
#require_paths ⇒ Object
Paths in the gem to add to
$LOAD_PATH
when this gem is activated. -
#source_paths ⇒ Object
Returns the paths to the source files for use with analysis and documentation tools.
-
#stubbed? ⇒ Boolean
Whether this specification is stubbed - i.e.
-
#to_spec ⇒ Object
Return a Gem::Specification from this gem.
-
#version ⇒ Object
Version of the gem.
Instance Attribute Details
#base_dir ⇒ Object
Returns the full path to the base gem directory.
eg: /usr/local/lib/ruby/gems/1.8
43 44 45 46 47 48 49 50 |
# File 'lib/rubygems/basic_specification.rb', line 43 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 |
#extension_dir ⇒ Object
Returns full path to the directory where gem’s extensions are installed.
74 75 76 |
# File 'lib/rubygems/basic_specification.rb', line 74 def extension_dir @extension_dir ||= File. File.join(extensions_dir, full_name) end |
#full_gem_path ⇒ Object
The full path to the gem (install path + full name).
99 100 101 102 103 |
# File 'lib/rubygems/basic_specification.rb', line 99 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 ⇒ Object
The path this gemspec was loaded from. This attribute is not persisted.
20 21 22 |
# File 'lib/rubygems/basic_specification.rb', line 20 def loaded_from @loaded_from end |
Class Method Details
.default_specifications_dir ⇒ Object
27 28 29 |
# File 'lib/rubygems/basic_specification.rb', line 27 def self.default_specifications_dir File.join(Gem.default_dir, "specifications", "default") end |
Instance Method Details
#activated? ⇒ Boolean
True when the gem has been activated
34 35 36 |
# File 'lib/rubygems/basic_specification.rb', line 34 def activated? raise NotImplementedError end |
#contains_requirable_file?(file) ⇒ Boolean
Return true if this spec can require file
.
55 56 57 58 59 60 61 62 63 64 |
# File 'lib/rubygems/basic_specification.rb', line 55 def contains_requirable_file? file build_extensions suffixes = Gem.suffixes full_require_paths.any? do |dir| base = "#{dir}/#{file}" suffixes.any? { |suf| File.file? "#{base}#{suf}" } end end |
#default_gem? ⇒ Boolean
66 67 68 69 |
# File 'lib/rubygems/basic_specification.rb', line 66 def default_gem? loaded_from && File.dirname(loaded_from) == self.class.default_specifications_dir end |
#extensions_dir ⇒ Object
Returns path to the extensions directory.
81 82 83 84 85 |
# File 'lib/rubygems/basic_specification.rb', line 81 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 ⇒ Object
Returns the full name (name-version) of this Gem. Platform information is included (name-version-platform) if it is specified and not the default Ruby platform.
110 111 112 113 114 115 116 |
# File 'lib/rubygems/basic_specification.rb', line 110 def full_name if platform == Gem::Platform::RUBY or platform.nil? then "#{name}-#{version}".untaint else "#{name}-#{version}-#{platform}".untaint end end |
#full_require_paths ⇒ Object
Full paths in the gem to add to $LOAD_PATH
when this gem is activated.
122 123 124 125 126 127 128 129 130 |
# File 'lib/rubygems/basic_specification.rb', line 122 def full_require_paths full_paths = @require_paths.map do |path| File.join full_gem_path, path end full_paths.unshift extension_dir unless @extensions.empty? full_paths end |
#gem_dir ⇒ Object
Returns the full path to this spec’s gem directory. eg: /usr/local/lib/ruby/1.8/gems/mygem-1.0
136 137 138 |
# File 'lib/rubygems/basic_specification.rb', line 136 def gem_dir @gem_dir ||= File. File.join(gems_dir, full_name) end |
#gems_dir ⇒ Object
Returns the full path to the gems directory containing this spec’s gem directory. eg: /usr/local/lib/ruby/1.8/gems
144 145 146 147 |
# File 'lib/rubygems/basic_specification.rb', line 144 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 ⇒ Object
Name of the gem
167 168 169 |
# File 'lib/rubygems/basic_specification.rb', line 167 def name raise NotImplementedError end |
#platform ⇒ Object
Platform of the gem
174 175 176 |
# File 'lib/rubygems/basic_specification.rb', line 174 def platform raise NotImplementedError end |
#raw_require_paths ⇒ Object
:nodoc:
178 179 180 |
# File 'lib/rubygems/basic_specification.rb', line 178 def raw_require_paths # :nodoc: @require_paths end |
#require_paths ⇒ Object
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 = '.'
199 200 201 202 203 204 205 206 207 |
# File 'lib/rubygems/basic_specification.rb', line 199 def require_paths return @require_paths if @extensions.empty? relative_extension_dir = File.join '..', '..', 'extensions', Gem::Platform.local.to_s, Gem.extension_api_version, full_name [relative_extension_dir].concat @require_paths end |
#source_paths ⇒ Object
Returns the paths to the source files for use with analysis and documentation tools. These paths are relative to full_gem_path.
213 214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/rubygems/basic_specification.rb', line 213 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 |
#stubbed? ⇒ Boolean
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.
245 246 247 |
# File 'lib/rubygems/basic_specification.rb', line 245 def stubbed? raise NotImplementedError end |
#to_spec ⇒ Object
Return a Gem::Specification from this gem
230 231 232 |
# File 'lib/rubygems/basic_specification.rb', line 230 def to_spec raise NotImplementedError end |
#version ⇒ Object
Version of the gem
237 238 239 |
# File 'lib/rubygems/basic_specification.rb', line 237 def version raise NotImplementedError end |