Class: Gem::BasicSpecification

Inherits:
Object
  • Object
show all
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

Specification, StubSpecification

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#base_dirObject

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_dirObject

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.expand_path File.join(extensions_dir, full_name)
end

#full_gem_pathObject

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_fromObject

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_dirObject



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

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


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.

Returns:

  • (Boolean)


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

Returns:

  • (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_dirObject

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_nameObject

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_pathsObject

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_dirObject

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.expand_path File.join(gems_dir, full_name)
end

#gems_dirObject

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

#nameObject

Name of the gem

Raises:

  • (NotImplementedError)


167
168
169
# File 'lib/rubygems/basic_specification.rb', line 167

def name
  raise NotImplementedError
end

#platformObject

Platform of the gem

Raises:

  • (NotImplementedError)


174
175
176
# File 'lib/rubygems/basic_specification.rb', line 174

def platform
  raise NotImplementedError
end

#raw_require_pathsObject

:nodoc:



178
179
180
# File 'lib/rubygems/basic_specification.rb', line 178

def raw_require_paths # :nodoc:
  @require_paths
end

#require_pathsObject

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

#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.

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


227
228
229
# File 'lib/rubygems/basic_specification.rb', line 227

def stubbed?
  raise NotImplementedError
end

#to_specObject

Return a Gem::Specification from this gem

Raises:

  • (NotImplementedError)


212
213
214
# File 'lib/rubygems/basic_specification.rb', line 212

def to_spec
  raise NotImplementedError
end

#versionObject

Version of the gem

Raises:

  • (NotImplementedError)


219
220
221
# File 'lib/rubygems/basic_specification.rb', line 219

def version
  raise NotImplementedError
end