Class: Bundler::Source::Rubygems
- Inherits:
-
Bundler::Source
- Object
- Bundler::Source
- Bundler::Source::Rubygems
- Defined in:
- lib/bundler/source/rubygems.rb,
lib/bundler/source/rubygems/remote.rb
Defined Under Namespace
Classes: Remote
Constant Summary collapse
- API_REQUEST_LIMIT =
Use the API when installing less than X gems
500
- API_REQUEST_SIZE =
Ask for X gems per API request
50
Instance Attribute Summary collapse
-
#caches ⇒ Object
readonly
Returns the value of attribute caches.
-
#remotes ⇒ Object
readonly
Returns the value of attribute remotes.
Attributes inherited from Bundler::Source
Class Method Summary collapse
Instance Method Summary collapse
- #add_remote(source) ⇒ Object
- #cache(spec, custom_path = nil) ⇒ Object
- #cached! ⇒ Object
- #cached_built_in_gem(spec) ⇒ Object
- #can_lock?(spec) ⇒ Boolean
- #eql?(other) ⇒ Boolean (also: #==)
- #fetchers ⇒ Object
- #hash ⇒ Object
- #include?(o) ⇒ Boolean
-
#initialize(options = {}) ⇒ Rubygems
constructor
A new instance of Rubygems.
- #install(spec, opts = {}) ⇒ Object
- #options ⇒ Object
- #remote! ⇒ Object
- #replace_remotes(other_remotes) ⇒ Object
- #specs ⇒ Object
- #to_lock ⇒ Object
- #to_s ⇒ Object (also: #name)
- #unmet_deps ⇒ Object
Methods inherited from Bundler::Source
Constructor Details
#initialize(options = {}) ⇒ Rubygems
Returns a new instance of Rubygems.
18 19 20 21 22 23 24 25 26 27 |
# File 'lib/bundler/source/rubygems.rb', line 18 def initialize( = {}) @options = @remotes = [] @dependency_names = [] @allow_remote = false @allow_cached = false @caches = [Bundler.app_cache, *Bundler.rubygems.gem_cache] Array(["remotes"] || []).reverse_each {|r| add_remote(r) } end |
Instance Attribute Details
#caches ⇒ Object (readonly)
Returns the value of attribute caches.
16 17 18 |
# File 'lib/bundler/source/rubygems.rb', line 16 def caches @caches end |
#remotes ⇒ Object (readonly)
Returns the value of attribute remotes.
16 17 18 |
# File 'lib/bundler/source/rubygems.rb', line 16 def remotes @remotes end |
Class Method Details
.from_lock(options) ⇒ Object
59 60 61 |
# File 'lib/bundler/source/rubygems.rb', line 59 def self.from_lock() new() end |
Instance Method Details
#add_remote(source) ⇒ Object
207 208 209 210 |
# File 'lib/bundler/source/rubygems.rb', line 207 def add_remote(source) uri = normalize_uri(source) @remotes.unshift(uri) unless @remotes.include?(uri) end |
#cache(spec, custom_path = nil) ⇒ Object
179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/bundler/source/rubygems.rb', line 179 def cache(spec, custom_path = nil) if builtin_gem?(spec) cached_path = cached_built_in_gem(spec) else cached_path = cached_gem(spec) end raise GemNotFound, "Missing gem file '#{spec.full_name}.gem'." unless cached_path return if File.dirname(cached_path) == Bundler.app_cache.to_s Bundler.ui.info " * #{File.basename(cached_path)}" FileUtils.cp(cached_path, Bundler.app_cache(custom_path)) rescue Errno::EACCES => e Bundler.ui.debug(e) raise InstallError, e. end |
#cached! ⇒ Object
33 34 35 |
# File 'lib/bundler/source/rubygems.rb', line 33 def cached! @allow_cached = true end |
#cached_built_in_gem(spec) ⇒ Object
194 195 196 197 198 199 200 201 202 203 204 205 |
# File 'lib/bundler/source/rubygems.rb', line 194 def cached_built_in_gem(spec) cached_path = cached_path(spec) if cached_path.nil? remote_spec = remote_specs.search(spec).first if remote_spec cached_path = fetch_gem(remote_spec) else Bundler.ui.warn "#{spec.full_name} is built in to Ruby, and can't be cached because your Gemfile doesn't have any sources that contain it." end end cached_path end |
#can_lock?(spec) ⇒ Boolean
51 52 53 |
# File 'lib/bundler/source/rubygems.rb', line 51 def can_lock?(spec) spec.source.is_a?(Rubygems) end |
#eql?(other) ⇒ Boolean Also known as: ==
41 42 43 |
# File 'lib/bundler/source/rubygems.rb', line 41 def eql?(other) other.is_a?(Rubygems) && other.credless_remotes == credless_remotes end |
#fetchers ⇒ Object
229 230 231 232 233 234 |
# File 'lib/bundler/source/rubygems.rb', line 229 def fetchers @fetchers ||= remotes.map do |uri| remote = Source::Rubygems::Remote.new(uri) Bundler::Fetcher.new(remote) end end |
#hash ⇒ Object
37 38 39 |
# File 'lib/bundler/source/rubygems.rb', line 37 def hash @remotes.hash end |
#include?(o) ⇒ Boolean
47 48 49 |
# File 'lib/bundler/source/rubygems.rb', line 47 def include?(o) o.is_a?(Rubygems) && (o.credless_remotes - credless_remotes).empty? end |
#install(spec, opts = {}) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/bundler/source/rubygems.rb', line 89 def install(spec, opts = {}) force = opts[:force] ensure_builtin_gems_cached = opts[:ensure_builtin_gems_cached] if ensure_builtin_gems_cached && builtin_gem?(spec) if !cached_path(spec) cached_built_in_gem(spec) unless spec.remote force = true else spec.loaded_from = loaded_from(spec) end end if installed?(spec) && (!force || spec.name.eql?("bundler")) Bundler.ui.info "Using #{(spec)}" return nil # no post-install message end # Download the gem to get the spec, because some specs that are returned # by rubygems.org are broken and wrong. if spec.remote # Check for this spec from other sources uris = [spec.remote.anonymized_uri] uris += remotes_for_spec(spec).map(&:anonymized_uri) uris.uniq! Installer.ambiguous_gems << [spec.name, *uris] if uris.length > 1 s = Bundler.rubygems.spec_from_gem(fetch_gem(spec), Bundler.settings["trust-policy"]) spec.__swap__(s) end unless Bundler.settings[:no_install] = "Installing #{(spec)}" += " with native extensions" if spec.extensions.any? Bundler.ui.confirm path = cached_gem(spec) if Bundler.requires_sudo? install_path = Bundler.tmp(spec.full_name) bin_path = install_path.join("bin") else install_path = Bundler.rubygems.gem_dir bin_path = Bundler.system_bindir end installed_spec = nil Bundler.rubygems.preserve_paths do installed_spec = Bundler::RubyGemsGemInstaller.new( path, :install_dir => install_path.to_s, :bin_dir => bin_path.to_s, :ignore_dependencies => true, :wrappers => true, :env_shebang => true ).install end # SUDO HAX if Bundler.requires_sudo? Bundler.rubygems.repository_subdirectories.each do |name| src = File.join(install_path, name, "*") dst = File.join(Bundler.rubygems.gem_dir, name) if name == "extensions" && Dir.glob(src).any? src = File.join(src, "*/*") ext_src = Dir.glob(src).first ext_src.gsub!(src[0..-6], "") dst = File.dirname(File.join(dst, ext_src)) end SharedHelpers.filesystem_access(dst) do |p| Bundler.mkdir_p(p) end Bundler.sudo "cp -R #{src} #{dst}" if Dir[src].any? end spec.executables.each do |exe| SharedHelpers.filesystem_access(Bundler.system_bindir) do |p| Bundler.mkdir_p(p) end Bundler.sudo "cp -R #{install_path}/bin/#{exe} #{Bundler.system_bindir}/" end end installed_spec.loaded_from = loaded_from(spec) end spec.loaded_from = loaded_from(spec) spec. ensure Bundler.rm_rf(install_path) if Bundler.requires_sudo? end |
#options ⇒ Object
55 56 57 |
# File 'lib/bundler/source/rubygems.rb', line 55 def { "remotes" => @remotes.map(&:to_s) } end |
#remote! ⇒ Object
29 30 31 |
# File 'lib/bundler/source/rubygems.rb', line 29 def remote! @allow_remote = true end |
#replace_remotes(other_remotes) ⇒ Object
212 213 214 215 216 217 218 219 |
# File 'lib/bundler/source/rubygems.rb', line 212 def replace_remotes(other_remotes) return false if other_remotes == @remotes @remotes = [] other_remotes.reverse_each do |r| add_remote r.to_s end end |
#specs ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/bundler/source/rubygems.rb', line 77 def specs @specs ||= begin # remote_specs usually generates a way larger Index than the other # sources, and large_idx.use small_idx is way faster than # small_idx.use large_idx. idx = @allow_remote ? remote_specs.dup : Index.new idx.use(cached_specs, :override_dupes) if @allow_cached || @allow_remote idx.use(installed_specs, :override_dupes) idx end end |
#to_lock ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/bundler/source/rubygems.rb', line 63 def to_lock out = String.new("GEM\n") remotes.reverse_each do |remote| out << " remote: #{suppress_configured_credentials remote}\n" end out << " specs:\n" end |
#to_s ⇒ Object Also known as: name
71 72 73 74 |
# File 'lib/bundler/source/rubygems.rb', line 71 def to_s remote_names = remotes.map(&:to_s).join(", ") "rubygems repository #{remote_names}" end |
#unmet_deps ⇒ Object
221 222 223 224 225 226 227 |
# File 'lib/bundler/source/rubygems.rb', line 221 def unmet_deps if @allow_remote && api_fetchers.any? remote_specs.unmet_dependency_names else [] end end |