Class: Bundler::Source::Path
| Relationships & Source Files | |
| Namespace Children | |
|
Classes:
| |
| Extension / Inclusion / Inheritance Descendants | |
|
Subclasses:
|
|
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Source
|
|
|
Instance Chain:
self,
Source
|
|
| Inherits: |
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
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
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(File.(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.settings[: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