Class: Bundler::Source::Path
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
::Bundler::Source
|
|
Instance Chain:
self,
::Bundler::Source
|
|
Inherits: |
Bundler::Source
|
Defined in: | lib/bundler/source/path.rb, lib/bundler/source/path/installer.rb |
Constant Summary
-
DEFAULT_GLOB =
# File 'lib/bundler/source/path.rb', line 14"{,*,*/*}.gemspec"
Class Method Summary
- .from_lock(options)
- .new(options) ⇒ Path constructor
Instance Attribute Summary
- #name rw
- #name=(value) rw
- #options readonly
- #path (also: #to_gemfile) readonly
- #root_path readonly
-
#to_gemfile
readonly
Alias for #path.
- #version rw
- #original_path readonly protected
- #has_app_cache? ⇒ Boolean readonly private
::Bundler::Source
- Inherited
Instance Method Summary
-
#==(other)
Alias for #eql?.
- #app_cache_dirname
- #cache(spec, custom_path = nil)
- #eql?(other) ⇒ Boolean (also: #==)
- #expanded_original_path
- #hash
- #install(spec, options = {})
- #local_specs
- #root
- #specs
- #to_lock
- #to_s
- #app_cache_path(custom_path = nil) private
- #expand(somepath) private
- #expanded_path private
- #generate_bin(spec, options = {}) private
- #load_gemspec(file) private
- #load_spec_files private
- #lockfile_path private
- #relative_path(path = self.path) private
- #validate_spec(spec) private
::Bundler::Source
- Inherited
#add_dependency_names, #cached!, #can_lock?, #dependency_names_to_double_check, | |
#double_check_for | it’s possible that gems from one source depend on gems from some other source, so now we download gemspecs and iterate over those dependencies, looking for gems we don’t have info on yet. |
#extension_cache_path, #identifier, #include?, #inspect, #local!, #local_only!, #remote!, #spec_names, #unmet_deps, #version_message, #earlier_version?, #extension_cache_slug, #print_using_message, #version_color |
Constructor Details
.new(options) ⇒ Path
# File 'lib/bundler/source/path.rb', line 16
def initialize( ) @checksum_store = Checksum::Store.new @options = .dup @glob = ["glob"] || DEFAULT_GLOB @root_path = ["root_path"] || root if ["path"] @path = Pathname.new( ["path"]) = (@path) @path = if @path.relative? .relative_path_from(root_path. ) else end end @name = ["name"] @version = ["version"] # Stores the original path. If at any point we move to the # cached directory, we still have the original path to copy from. @original_path = @path end
Class Method Details
.from_lock(options)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 41
def self.from_lock( ) new( .merge("path" => .delete("remote"))) end
Instance Attribute Details
#has_app_cache? ⇒ Boolean
(readonly, private)
[ GitHub ]
# File 'lib/bundler/source/path.rb', line 147
def has_app_cache? SharedHelpers.in_bundle? && app_cache_path.exist? end
#name (rw)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 70
def name File.basename( .to_s) end
#name=(value) (rw)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 9
attr_writer :name
#options (readonly)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 8
attr_reader :path, :, :root_path, :original_path
#original_path (readonly, protected)
[ GitHub ]#path (readonly) Also known as: #to_gemfile
[ GitHub ]# File 'lib/bundler/source/path.rb', line 8
attr_reader :path, :, :root_path, :original_path
#root_path (readonly)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 8
attr_reader :path, :, :root_path, :original_path
#to_gemfile (readonly)
Alias for #path.
# File 'lib/bundler/source/path.rb', line 56
alias_method :to_gemfile, :path
#version (rw)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 10
attr_accessor :version
Instance Method Details
#==(other)
Alias for #eql?.
# File 'lib/bundler/source/path.rb', line 68
alias_method :==, :eql?
#app_cache_dirname
[ GitHub ]# File 'lib/bundler/source/path.rb', line 108
def app_cache_dirname name end
#app_cache_path(custom_path = nil) (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 143
def app_cache_path(custom_path = nil) @app_cache_path ||= Bundler.app_cache(custom_path).join(app_cache_dirname) end
#cache(spec, custom_path = nil)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 82
def cache(spec, custom_path = nil) app_cache_path = app_cache_path(custom_path) return unless Bundler.feature_flag.cache_all? return if (@original_path).to_s.index(root_path.to_s + "/") == 0 unless @original_path.exist? raise GemNotFound, "Can't cache gem #{ (spec)} because #{self} is missing!" end FileUtils.rm_rf(app_cache_path) FileUtils.cp_r("#{@original_path}/.", app_cache_path) FileUtils.touch(app_cache_path.join(".bundlecache")) end
#eql?(other) ⇒ Boolean
Also known as: #==
#expand(somepath) (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 126
def (somepath) if Bundler.current_ruby.jruby? # TODO: Unify when https://github.com/rubygems/bundler/issues/7598 fixed upstream and all supported jrubies include the fix somepath. (root_path). else somepath. (root_path) end rescue ArgumentError => e Bundler.ui.debug(e) raise PathError, "There was an error while trying to use the path " \ "`#{somepath}`.\nThe error message was: #{e.}." end
#expanded_original_path
[ GitHub ]# File 'lib/bundler/source/path.rb', line 116
def @expanded_original_path ||= (original_path) end
#expanded_path (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 122
def @expanded_path ||= (path) end
#generate_bin(spec, options = {}) (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 212
def generate_bin(spec, = {}) gem_dir = Pathname.new(spec.full_gem_path) # Some gem authors put absolute paths in their gemspec # and we have to save them from themselves spec.files = spec.files.filter_map do |path| next path unless /\A#{Pathname::SEPARATOR_PAT}/o.match?(path) next if File.directory?(path) begin Pathname.new(path).relative_path_from(gem_dir).to_s rescue ArgumentError path end end installer = Path::Installer.new( spec, env_shebang: false, disable_extensions: [:disable_extensions], build_args: [:build_args], bundler_extension_cache_path: extension_cache_path(spec) ) installer.post_install rescue Gem::InvalidSpecificationException => e Bundler.ui.warn "\n#{spec.name} at #{spec.full_gem_path} did not have a valid gemspec.\n" \ "This prevents bundler from installing bins or native extensions, but " \ "that may not affect its functionality." if !spec.extensions.empty? && !spec.email.empty? Bundler.ui.warn "If you need to use this package without installing it from a gem " \ "repository, please contact #{spec.email} and ask them " \ "to modify their .gemspec so it can work with `gem build`." end Bundler.ui.warn "The validation message from RubyGems was:\n #{e.}" end
#hash
[ GitHub ]# File 'lib/bundler/source/path.rb', line 58
def hash [self.class, , version].hash end
#install(spec, options = {})
[ GitHub ]# File 'lib/bundler/source/path.rb', line 74
def install(spec, = {}) = "Using #{ (spec, [:previous_spec])} from #{self}" += " and installing its executables" unless spec.executables.empty? generate_bin(spec, disable_extensions: true) nil # no post-install message end
#load_gemspec(file) (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 151
def load_gemspec(file) return unless spec = Bundler.load_gemspec(file) spec.installed_by_version = Gem::VERSION spec end
#load_spec_files (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 161
def load_spec_files index = Index.new if File.directory?( ) # We sort depth-first since `<<` will override the earlier-found specs Gem::Util.glob_files_in_dir(@glob, ).sort_by {|p| -p.split(File::SEPARATOR).size }.each do |file| next unless spec = load_gemspec(file) spec.source = self # Validation causes extension_dir to be calculated, which depends # on #source, so we validate here instead of load_gemspec validate_spec(spec) index << spec end if index.empty? && @name && @version index << Gem::Specification.new do |s| s.name = @name s.source = self s.version = Gem::Version.new(@version) s.platform = Gem::Platform::RUBY s.summary = "Fake gemspec for #{@name}" s.relative_loaded_from = "#{@name}.gemspec" s. = ["no one"] if .join("bin").exist? executables = .join("bin").children executables.reject! {|p| File.directory?(p) } s.executables = executables.map {|c| c.basename.to_s } end end end else = String.new("The path `#{}` ") << if File.exist?( ) "is not a directory." else "does not exist." end raise PathError, end index end
#local_specs
[ GitHub ]# File 'lib/bundler/source/path.rb', line 96
def local_specs(*) @local_specs ||= load_spec_files end
#lockfile_path (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 138
def lockfile_path return relative_path(original_path) if original_path.absolute? (original_path).relative_path_from(root) end
#relative_path(path = self.path) (private)
[ GitHub ]#root
[ GitHub ]#specs
[ GitHub ]# File 'lib/bundler/source/path.rb', line 100
def specs if has_app_cache? @path = app_cache_path @expanded_path = nil # Invalidate end local_specs end
#to_lock
[ GitHub ]# File 'lib/bundler/source/path.rb', line 45
def to_lock out = String.new("PATH\n") out << " remote: #{lockfile_path}\n" out << " glob: #{@glob}\n" unless @glob == DEFAULT_GLOB out << " specs:\n" end
#to_s
[ GitHub ]# File 'lib/bundler/source/path.rb', line 52
def to_s "source at `#{@path}`" end