класс Bundler::RemoteSpecification
Представляет лениво загружаемое описание драгоценного камня, где полное описание находится на сервере источника в индексе «quick» rubygems. Объект-прокси должен быть заполнен тем, что мы получаем из сокращенного индекса источника — полное описание будет извлечено только при необходимости.
Атрибуты
Публичные методы класса
# File lib/bundler/remote_specification.rb, line 16 def initialize(name, version, platform, spec_fetcher) @name = name @version = Gem::Version.create version @platform = platform @spec_fetcher = spec_fetcher @dependencies = nil end
Публичные методы экземпляров
# File lib/bundler/remote_specification.rb, line 41
def <=>(other)
if other.respond_to?(:sort_obj)
sort_obj <=> other.sort_obj
else
super
end
end Сравните это описание с другим объектом. Использование sort_obj совместимо с Gem::Specification и другими объектами Bundler или RubyGems. В противном случае используйте стандартное сравнение Object.
# File lib/bundler/remote_specification.rb, line 52 def __swap__(spec) SharedHelpers.ensure_same_dependencies(self, dependencies, spec.dependencies) @_remote_specification = spec end
Поскольку Rubyforge нельзя доверять для предоставления корректных описаний после загрузки удаленного драгоценного камня, описание бэкенда будет заменено.
# File lib/bundler/remote_specification.rb, line 74
def dependencies
@dependencies ||= begin
deps = method_missing(:dependencies)
# allow us to handle when the specs dependencies are an array of array of string
# see https://github.com/bundler/bundler/issues/5797
deps = deps.map {|d| d.is_a?(Gem::Dependency) ? d : Gem::Dependency.new(*d) }
deps
end
end # File lib/bundler/remote_specification.rb, line 26 def fetch_platform @platform = _remote_specification.platform end
Необходимо перед установкой, так как архитектура важна, а быстрые описания не включают архитектуру в строку платформы
# File lib/bundler/remote_specification.rb, line 30
def full_name
if platform == Gem::Platform::RUBY || platform.nil?
"#{@name}-#{@version}"
else
"#{@name}-#{@version}-#{platform}"
end
end # File lib/bundler/remote_specification.rb, line 86
def git_version
return unless loaded_from && source.is_a?(Bundler::Source::Git)
" #{source.revision[0..6]}"
end # File lib/bundler/remote_specification.rb, line 107 def respond_to?(method, include_all = false) super || _remote_specification.respond_to?(method, include_all) end
Object#respond_to? # File lib/bundler/remote_specification.rb, line 66 def sort_obj [@name, @version, @platform == Gem::Platform::RUBY ? -1 : 1] end
Создайте делегата, используемого для сортировки. Эта стратегия скопирована из RubyGems 2.23 и гарантирует, что описания Bundler можно сравнивать и сортировать с собственными описаниями RubyGems.
@see #<=> @see Gem::Specification#sort_obj
@return [Массив] объект, который вы можете использовать для сравнения и сортировки этого
specification against other specifications
# File lib/bundler/remote_specification.rb, line 70
def to_s
"#<#{self.class} name=#{name} version=#{version} platform=#{platform}>"
end Приватные методы экземпляров
# File lib/bundler/remote_specification.rb, line 97
def _remote_specification
@_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform])
@_remote_specification || raise(GemspecError, "Gemspec data for #{full_name} was" \
" missing from the server! Try installing with `--full-index` as a workaround.")
end # File lib/bundler/remote_specification.rb, line 103 def method_missing(method, *args, &blk) _remote_specification.send(method, *args, &blk) end
# File lib/bundler/remote_specification.rb, line 93 def to_ary nil end
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.