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
-
#identifier
Alias for #to_s.
- #install(spec, options = {})
- #local_specs
- #root
- #specs
- #to_lock
- #to_s (also: #identifier)
- #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!, #prefer_local!, #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 145
def has_app_cache? SharedHelpers.in_bundle? && app_cache_path.exist? end
#name (rw)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 72
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 58
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 70
alias_method :==, :eql?
#app_cache_dirname
[ GitHub ]# File 'lib/bundler/source/path.rb', line 110
def app_cache_dirname name end
#app_cache_path(custom_path = nil) (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 141
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 84
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 ]#expanded_original_path
[ GitHub ]# File 'lib/bundler/source/path.rb', line 118
def @expanded_original_path ||= (original_path) end
#expanded_path (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 124
def @expanded_path ||= (path) end
#generate_bin(spec, options = {}) (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 217
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 60
def hash [self.class, , version].hash end
#identifier
Alias for #to_s.
# File 'lib/bundler/source/path.rb', line 56
alias_method :identifier, :to_s
#install(spec, options = {})
[ GitHub ]# File 'lib/bundler/source/path.rb', line 76
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 149
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 159
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 # The ignore attribute is for ignoring installed gems that don't # have extensions correctly compiled for activation. In the case of # path sources, there's a single version of each gem in the path # source available to Bundler, so we always certainly want to # consider that for activation and never makes sense to ignore it. spec.ignored = false # 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 98
def local_specs(*) @local_specs ||= load_spec_files end
#lockfile_path (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 136
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 102
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 Also known as: #identifier
[ GitHub ]# File 'lib/bundler/source/path.rb', line 52
def to_s "source at `#{@path}`" end