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).
-
#ignored ⇒ Object
writeonly
Is this specification ignored for activation purposes?.
-
#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_fullpath(path) ⇒ Object
Full path of the target library file.
-
#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
48 49 50 51 52 53 54 55 |
# 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 |
#extension_dir ⇒ Object
Returns full path to the directory where gem’s extensions are installed.
92 93 94 |
# File 'lib/rubygems/basic_specification.rb', line 92 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).
117 118 119 120 121 |
# File 'lib/rubygems/basic_specification.rb', line 117 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 |
#ignored=(value) ⇒ Object (writeonly)
Is this specification ignored for activation purposes?
20 21 22 |
# File 'lib/rubygems/basic_specification.rb', line 20 def ignored=(value) @ignored = value end |
#loaded_from ⇒ Object
The path this gemspec was loaded from. This attribute is not persisted.
25 26 27 |
# File 'lib/rubygems/basic_specification.rb', line 25 def loaded_from @loaded_from end |
Class Method Details
.default_specifications_dir ⇒ Object
32 33 34 |
# File 'lib/rubygems/basic_specification.rb', line 32 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
39 40 41 |
# File 'lib/rubygems/basic_specification.rb', line 39 def activated? raise NotImplementedError end |
#contains_requirable_file?(file) ⇒ Boolean
Return true if this spec can require file
.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# 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) 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 |
#default_gem? ⇒ Boolean
84 85 86 87 |
# File 'lib/rubygems/basic_specification.rb', line 84 def default_gem? loaded_from && File.dirname(loaded_from) == self.class.default_specifications_dir end |
#extensions_dir ⇒ Object
Returns path to the extensions directory.
99 100 101 102 103 |
# File 'lib/rubygems/basic_specification.rb', line 99 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.
128 129 130 131 132 133 134 |
# File 'lib/rubygems/basic_specification.rb', line 128 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.
140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/rubygems/basic_specification.rb', line 140 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 unless @extensions.nil? || @extensions.empty? full_paths end 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
179 180 181 |
# File 'lib/rubygems/basic_specification.rb', line 179 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
187 188 189 190 |
# File 'lib/rubygems/basic_specification.rb', line 187 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
210 211 212 |
# File 'lib/rubygems/basic_specification.rb', line 210 def name raise NotImplementedError end |
#platform ⇒ Object
Platform of the gem
217 218 219 |
# File 'lib/rubygems/basic_specification.rb', line 217 def platform raise NotImplementedError end |
#raw_require_paths ⇒ Object
:nodoc:
221 222 223 |
# File 'lib/rubygems/basic_specification.rb', line 221 def raw_require_paths # :nodoc: Array(@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 = '.'
242 243 244 245 246 |
# File 'lib/rubygems/basic_specification.rb', line 242 def require_paths return raw_require_paths if @extensions.nil? || @extensions.empty? [extension_dir].concat raw_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.
252 253 254 255 256 257 258 259 260 261 262 263 264 |
# File 'lib/rubygems/basic_specification.rb', line 252 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.
284 285 286 |
# File 'lib/rubygems/basic_specification.rb', line 284 def stubbed? raise NotImplementedError end |
#to_fullpath(path) ⇒ Object
Full path of the target library file. If the file is not in this gem, return nil.
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/rubygems/basic_specification.rb', line 157 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 ⇒ Object
Return a Gem::Specification from this gem
269 270 271 |
# File 'lib/rubygems/basic_specification.rb', line 269 def to_spec raise NotImplementedError end |
#version ⇒ Object
Version of the gem
276 277 278 |
# File 'lib/rubygems/basic_specification.rb', line 276 def version raise NotImplementedError end |