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".freeze
Class Method Summary
- .from_lock(options)
- .new(options) ⇒ Path constructor
Instance Attribute Summary
- #name rw
- #name=(value) rw
- #options readonly
- #path readonly
- #root_path readonly
- #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)
- #cached!
- #eql?(other) ⇒ Boolean (also: #==)
- #expanded_original_path
- #hash
- #install(spec, options = {})
- #local_specs
- #remote!
- #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
#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, #include?, #inspect, #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( ) @options = .dup @glob = ["glob"] || DEFAULT_GLOB @allow_cached = false @allow_remote = false @root_path = ["root_path"] || Bundler.root if ["path"] @path = Pathname.new( ["path"]) @path = (@path) unless @path.relative? 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 48
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 146
def has_app_cache? SharedHelpers.in_bundle? && app_cache_path.exist? end
#name (rw)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 75
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)
[ 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
#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 73
alias_method :==, :eql?
#app_cache_dirname
[ GitHub ]# File 'lib/bundler/source/path.rb', line 111
def app_cache_dirname name end
#app_cache_path(custom_path = nil) (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 142
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 85
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
#cached!
[ GitHub ]# File 'lib/bundler/source/path.rb', line 43
def cached! @local_specs = nil @allow_cached = true end
#eql?(other) ⇒ Boolean
Also known as: #==
#expand(somepath) (private)
[ GitHub ]#expanded_original_path
[ GitHub ]# File 'lib/bundler/source/path.rb', line 119
def @expanded_original_path ||= (original_path) end
#expanded_path (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 125
def @expanded_path ||= (path) end
#generate_bin(spec, options = {}) (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 211
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.map do |p| next p unless p =~ /\A#{Pathname::SEPARATOR_PAT}/ next if File.directory?(p) begin Pathname.new(p).relative_path_from(gem_dir).to_s rescue ArgumentError p end end.compact 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 63
def hash [self.class, , version].hash end
#install(spec, options = {})
[ GitHub ]# File 'lib/bundler/source/path.rb', line 79
def install(spec, = {}) "Using #{ (spec)} from #{self}" generate_bin(spec, :disable_extensions => true) nil # no post-install message end
#load_gemspec(file) (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 150
def load_gemspec(file) return unless spec = Bundler.load_gemspec(file) Bundler.rubygems.set_installed_by_version(spec) spec end
#load_spec_files (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 160
def load_spec_files index = Index.new if File.directory?( ) # We sort depth-first since `<<` will override the earlier-found specs 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 99
def local_specs(*) @local_specs ||= load_spec_files end
#lockfile_path (private)
[ GitHub ]# File 'lib/bundler/source/path.rb', line 137
def lockfile_path return relative_path(original_path) if original_path.absolute? (original_path).relative_path_from(Bundler.root) end
#relative_path(path = self.path) (private)
[ GitHub ]#remote!
[ GitHub ]# File 'lib/bundler/source/path.rb', line 38
def remote! @local_specs = nil @allow_remote = true end
#root
[ GitHub ]#specs
[ GitHub ]# File 'lib/bundler/source/path.rb', line 103
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 52
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 59
def to_s "source at `#{@path}`" end