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_PATHwhen 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_PATHwhen 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.
93 94 95 |
# File 'lib/rubygems/basic_specification.rb', line 93 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).
118 119 120 121 122 |
# 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 |
#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 83 |
# 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 |
#default_gem? ⇒ Boolean
85 86 87 88 |
# File 'lib/rubygems/basic_specification.rb', line 85 def default_gem? loaded_from && File.dirname(loaded_from) == self.class.default_specifications_dir end |
#extensions_dir ⇒ Object
Returns path to the extensions directory.
100 101 102 103 104 |
# 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 ⇒ 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.
129 130 131 132 133 134 135 |
# File 'lib/rubygems/basic_specification.rb', line 129 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.
141 142 143 144 145 146 147 148 149 150 151 152 |
# 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 ⇒ Object
Returns the full path to this spec’s gem directory. eg: /usr/local/lib/ruby/1.8/gems/mygem-1.0
180 181 182 |
# File 'lib/rubygems/basic_specification.rb', line 180 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
188 189 190 191 |
# 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 ⇒ Object
Name of the gem
211 212 213 |
# File 'lib/rubygems/basic_specification.rb', line 211 def name raise NotImplementedError end |
#platform ⇒ Object
Platform of the gem
218 219 220 |
# File 'lib/rubygems/basic_specification.rb', line 218 def platform raise NotImplementedError end |
#raw_require_paths ⇒ Object
:nodoc:
222 223 224 |
# File 'lib/rubygems/basic_specification.rb', line 222 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 = '.'
243 244 245 246 247 |
# 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 ⇒ Object
Returns the paths to the source files for use with analysis and documentation tools. These paths are relative to full_gem_path.
253 254 255 256 257 258 259 260 261 262 263 264 265 |
# 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 |
#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.
285 286 287 |
# File 'lib/rubygems/basic_specification.rb', line 285 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.
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# 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 ⇒ Object
Return a Gem::Specification from this gem
270 271 272 |
# File 'lib/rubygems/basic_specification.rb', line 270 def to_spec raise NotImplementedError end |
#version ⇒ Object
Version of the gem
277 278 279 |
# File 'lib/rubygems/basic_specification.rb', line 277 def version raise NotImplementedError end |