Class: Bundler::EndpointSpecification
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
::Gem::Specification
|
|
|
Instance Chain:
|
|
| Inherits: |
Gem::Specification
|
| Defined in: | lib/bundler/endpoint_specification.rb |
Overview
used for Creating Specifications from the Gemcutter Endpoint
Constant Summary
-
FOUR_DIGIT_YEAR =
private
# File 'lib/bundler/endpoint_specification.rb', line 210
See
Gem::Cooldown::FOUR_DIGIT_YEAR./\A\d{4}-/ -
TIME_ZONE_SUFFIX =
private
# File 'lib/bundler/endpoint_specification.rb', line 206
Matches an ISO 8601 time zone designator at the end of a timestamp.
/(?:Z|z|[+-]\d{2}(?::?\d{2})?)\z/
Class Method Summary
Instance Attribute Summary
- #checksum readonly
- #content_address readonly
- #created_at readonly
- #dependencies (also: #runtime_dependencies) rw
- #dependencies=(value) rw
- #insecurely_materialized? ⇒ Boolean readonly
- #locked_platform rw
- #name readonly
- #platform readonly
- #remote rw
-
#runtime_dependencies
readonly
Alias for #dependencies.
- #version readonly
FetchMetadata - Included
| #matches_current_ruby? | A fallback is included because the original version of the specification API didn't include that field, so some marshalled specs in the index have it set to |
| #matches_current_rubygems? | |
::Gem::Specification - Inherited
::Gem::Specification::FixPathSourceMissingExtensions - Included
::Gem::Specification::AllowSettingSource - Included
MatchMetadata - Included
Instance Method Summary
- #__swap__(spec)
- #_local_specification
-
#bindir
needed for bundle clean.
-
#executables
needed for binstubs.
-
#extensions
needed for "with native extensions" during install.
- #fetch_platform
- #inspect
-
#load_paths
needed for inline.
-
#metadata
needed for
bundle fund. -
#post_install_message
needed for post_install_messages during install.
-
#raw_require_paths
#require_paths is overridden above, but
full_require_paths(and so #load_paths) is computed from #raw_require_paths, which would otherwise report the defaultlibfor every gem. -
#require_paths
needed for standalone, load required_paths from local gemspec after the gem is installed.
- #_remote_specification private
- #build_dependency(name, requirements) private
- #local_specification_path private
-
#parse_created_at(value)
private
A timestamp without a time zone offset is read as UTC, because reading it as local time would shift the cooldown window by the environment's offset.
- #parse_metadata(data) private
- #required_platform_from(value) private
FetchMetadata - Included
| #matches_current_ruby_with_overrides?, #matches_current_rubygems_with_overrides?, #ensure_required_ruby_version_loaded, #ensure_required_rubygems_version_loaded |
::Gem::Specification - Inherited
MatchMetadata - Included
Constructor Details
.new(name, version, suffix, spec_fetcher, dependencies, metadata = nil) ⇒ EndpointSpecification
# File 'lib/bundler/endpoint_specification.rb', line 12
def initialize(name, version, suffix, spec_fetcher, dependencies, = nil) super() @name = name @version = Gem::Version.create version @spec_fetcher = spec_fetcher @dependencies = nil @unbuilt_dependencies = dependencies @content_address = nil @required_platform = nil @loaded_from = nil @remote_specification = nil @locked_platform = nil () if Gem::ContentAddress.content_addressed_row?(suffix, @required_platform, @required_ruby_version) @content_address = suffix @platform = @required_platform @required_rubygems_version ||= Gem::Requirement.default else @platform = Gem::Platform.new(suffix) end end
Instance Attribute Details
#checksum (readonly)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 8
attr_reader :name, :version, :platform, :checksum, :created_at, :content_address
#content_address (readonly)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 8
attr_reader :name, :version, :platform, :checksum, :created_at, :content_address
#created_at (readonly)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 8
attr_reader :name, :version, :platform, :checksum, :created_at, :content_address
#dependencies (rw) Also known as: #runtime_dependencies
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 45
def dependencies @dependencies ||= @unbuilt_dependencies.map! {|dep, reqs| build_dependency(dep, reqs) } end
#dependencies=(value) (rw)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 9
attr_writer :dependencies
#insecurely_materialized? ⇒ Boolean (readonly)
[ GitHub ]
# File 'lib/bundler/endpoint_specification.rb', line 37
def insecurely_materialized? @locked_platform.to_s != @platform.to_s end
#locked_platform (rw)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 10
attr_accessor :remote, :locked_platform
#name (readonly)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 8
attr_reader :name, :version, :platform, :checksum, :created_at, :content_address
#platform (readonly)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 8
attr_reader :name, :version, :platform, :checksum, :created_at, :content_address
#remote (rw)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 10
attr_accessor :remote, :locked_platform
#runtime_dependencies (readonly)
Alias for #dependencies.
# File 'lib/bundler/endpoint_specification.rb', line 48
alias_method :runtime_dependencies, :dependencies
#version (readonly)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 8
attr_reader :name, :version, :platform, :checksum, :created_at, :content_address
Instance Method Details
#__swap__(spec)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 147
def __swap__(spec) SharedHelpers.ensure_same_dependencies(self, dependencies, spec.dependencies) @remote_specification = spec end
#_local_specification
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 140
def _local_specification return unless @loaded_from && File.exist?(local_specification_path) eval(File.read(local_specification_path), nil, local_specification_path).tap do |spec| spec.loaded_from = @loaded_from end end
#_remote_specification (private)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 158
def _remote_specification suffix = @content_address || @platform @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, suffix]) end
#bindir
needed for bundle clean
# File 'lib/bundler/endpoint_specification.rb', line 97
def bindir if @remote_specification @remote_specification.bindir elsif _local_specification _local_specification.bindir else super end end
#build_dependency(name, requirements) (private)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 228
def build_dependency(name, requirements) Dependency.new(name, requirements) end
#executables
needed for binstubs
# File 'lib/bundler/endpoint_specification.rb', line 86
def executables if @remote_specification @remote_specification.executables elsif _local_specification _local_specification.executables else super end end
#extensions
needed for "with native extensions" during install
# File 'lib/bundler/endpoint_specification.rb', line 119
def extensions if @remote_specification @remote_specification.extensions elsif _local_specification _local_specification.extensions else super end end
#fetch_platform
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 41
def fetch_platform @platform end
#inspect
[ GitHub ]#load_paths
needed for inline
# File 'lib/bundler/endpoint_specification.rb', line 76
def load_paths # remote specs aren't installed, and can't have load_paths if _local_specification _local_specification.load_paths else super end end
#local_specification_path (private)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 163
def local_specification_path File.join(Gem::SpecificationRecord.specification_dir_for(self, base_dir), "#{full_name}.gemspec") end
#metadata
needed for bundle fund
# File 'lib/bundler/endpoint_specification.rb', line 130
def if @remote_specification @remote_specification. elsif _local_specification _local_specification. else super end end
#parse_created_at(value) (private)
A timestamp without a time zone offset is read as UTC, because reading it as local time would shift the cooldown window by the environment's offset. Unparsable values and years outside four digits become nil so the cooldown fails open.
# File 'lib/bundler/endpoint_specification.rb', line 217
def parse_created_at(value) return unless value.is_a?(String) && value.match?(FOUR_DIGIT_YEAR) require "time" begin Time.iso8601(value.match?(TIME_ZONE_SUFFIX) ? value : "#{value}Z") rescue ArgumentError nil end end
#parse_metadata(data) (private)
[ GitHub ]# File 'lib/bundler/endpoint_specification.rb', line 168
def (data) @created_at = nil unless data @required_ruby_version = nil @required_rubygems_version = nil return end data.each do |k, v| next unless v case k.to_s when "checksum" # Some registries send empty checksum values, treat them as if the # checksum was not included at all checksum = v.last next unless checksum begin @checksum = Checksum.from_api(checksum, @spec_fetcher.uri) rescue ArgumentError => e raise ArgumentError, "Invalid checksum for #{full_name}: #{e.}" end when "rubygems" @required_rubygems_version = Gem::Requirement.new(v) when "ruby" @required_ruby_version = Gem::Requirement.new(v) when "created_at" @created_at = parse_created_at(v.is_a?(Array) ? v.last : v)&.freeze when "platform" @required_platform = required_platform_from(Array(v).last) end end rescue StandardError => e raise GemspecError, "There was an error parsing the metadata for the gem #{name} (#{version}): #{e.class}\n#{e}\nThe metadata was #{data.inspect}" end
#post_install_message
needed for post_install_messages during install
# File 'lib/bundler/endpoint_specification.rb', line 108
def if @remote_specification @remote_specification. elsif _local_specification _local_specification. else super end end
#raw_require_paths
#require_paths is overridden above, but full_require_paths (and so
#load_paths) is computed from raw_require_paths, which would otherwise
report the default lib for every gem
# File 'lib/bundler/endpoint_specification.rb', line 65
def raw_require_paths if @remote_specification @remote_specification.raw_require_paths elsif _local_specification _local_specification.raw_require_paths else super end end
#require_paths
needed for standalone, load required_paths from local gemspec after the gem is installed
# File 'lib/bundler/endpoint_specification.rb', line 52
def require_paths if @remote_specification @remote_specification.require_paths elsif _local_specification _local_specification.require_paths else super end end