Class: Bundler::Source::Path

Inherits:
Bundler::Source show all
Defined in:
lib/bundler/source/path.rb,
lib/bundler/source/path/installer.rb

Direct Known Subclasses

Plugin::Installer::Path, Gemspec, Git

Defined Under Namespace

Classes: Installer

Constant Summary collapse

DEFAULT_GLOB =
"{,*,*/*}.gemspec"

Instance Attribute Summary collapse

Attributes inherited from Bundler::Source

#checksum_store, #dependency_names

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Bundler::Source

#add_dependency_names, #can_lock?, #dependency_names_to_double_check, #double_check_for, #extension_cache_path, #identifier, #include?, #inspect, #local!, #local_only!, #path?, #spec_names, #unmet_deps, #version_message

Constructor Details

#initialize(options) ⇒ Path

Returns a new instance of Path.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/bundler/source/path.rb', line 16

def initialize(options)
  @checksum_store = Checksum::Store.new
  @options = options.dup
  @glob = options["glob"] || DEFAULT_GLOB

  @allow_cached = false
  @allow_remote = false

  @root_path = options["root_path"] || root

  if options["path"]
    @path = Pathname.new(options["path"])
    expanded_path = expand(@path)
    @path = if @path.relative?
      expanded_path.relative_path_from(root_path.expand_path)
    else
      expanded_path
    end
  end

  @name    = options["name"]
  @version = options["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

Instance Attribute Details

#nameObject



81
82
83
# File 'lib/bundler/source/path.rb', line 81

def name
  File.basename(expanded_path.to_s)
end

#optionsObject (readonly)

Returns the value of attribute options.



8
9
10
# File 'lib/bundler/source/path.rb', line 8

def options
  @options
end

#pathObject (readonly)

Returns the value of attribute path.



8
9
10
# File 'lib/bundler/source/path.rb', line 8

def path
  @path
end

#root_pathObject (readonly)

Returns the value of attribute root_path.



8
9
10
# File 'lib/bundler/source/path.rb', line 8

def root_path
  @root_path
end

#versionObject

Returns the value of attribute version.



10
11
12
# File 'lib/bundler/source/path.rb', line 10

def version
  @version
end

Class Method Details

.from_lock(options) ⇒ Object



54
55
56
# File 'lib/bundler/source/path.rb', line 54

def self.from_lock(options)
  new(options.merge("path" => options.delete("remote")))
end

Instance Method Details

#app_cache_dirnameObject



119
120
121
# File 'lib/bundler/source/path.rb', line 119

def app_cache_dirname
  name
end

#cache(spec, custom_path = nil) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/bundler/source/path.rb', line 93

def cache(spec, custom_path = nil)
  app_cache_path = app_cache_path(custom_path)
  return unless Bundler.feature_flag.cache_all?
  return if expand(@original_path).to_s.index(root_path.to_s + "/") == 0

  unless @original_path.exist?
    raise GemNotFound, "Can't cache gem #{version_message(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!Object



49
50
51
52
# File 'lib/bundler/source/path.rb', line 49

def cached!
  @local_specs = nil
  @allow_cached = true
end

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


73
74
75
76
77
# File 'lib/bundler/source/path.rb', line 73

def eql?(other)
  return unless other.class == self.class
  expanded_original_path == other.expanded_original_path &&
    version == other.version
end

#expanded_original_pathObject



127
128
129
# File 'lib/bundler/source/path.rb', line 127

def expanded_original_path
  @expanded_original_path ||= expand(original_path)
end

#hashObject



69
70
71
# File 'lib/bundler/source/path.rb', line 69

def hash
  [self.class, expanded_path, version].hash
end

#install(spec, options = {}) ⇒ Object



85
86
87
88
89
90
91
# File 'lib/bundler/source/path.rb', line 85

def install(spec, options = {})
  using_message = "Using #{version_message(spec, options[:previous_spec])} from #{self}"
  using_message += " and installing its executables" unless spec.executables.empty?
  print_using_message using_message
  generate_bin(spec, disable_extensions: true)
  nil # no post-install message
end

#local_specsObject



107
108
109
# File 'lib/bundler/source/path.rb', line 107

def local_specs(*)
  @local_specs ||= load_spec_files
end

#remote!Object



44
45
46
47
# File 'lib/bundler/source/path.rb', line 44

def remote!
  @local_specs = nil
  @allow_remote = true
end

#rootObject



123
124
125
# File 'lib/bundler/source/path.rb', line 123

def root
  Bundler.root
end

#specsObject



111
112
113
114
115
116
117
# File 'lib/bundler/source/path.rb', line 111

def specs
  if has_app_cache?
    @path = app_cache_path
    @expanded_path = nil # Invalidate
  end
  local_specs
end

#to_lockObject



58
59
60
61
62
63
# File 'lib/bundler/source/path.rb', line 58

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_sObject



65
66
67
# File 'lib/bundler/source/path.rb', line 65

def to_s
  "source at `#{@path}`"
end