summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPablo Carranza <pcarranza@gmail.com>2015-12-02 23:22:11 +0000
committerPablo Carranza <pcarranza@gmail.com>2015-12-27 22:19:54 +0100
commitbc4bb7b8c82fc406e5c6445d2e54b0afbe6d776c (patch)
tree4e8aeb1bf83ef3d265acf43669663d2d10fbc5a6
parentabc92bf609863a1fc8045461d3b4d88bead92322 (diff)
downloadbundler-bc4bb7b8c82fc406e5c6445d2e54b0afbe6d776c.tar.gz
Add mirrors class to simplify config parsing and collecting
-rw-r--r--lib/bundler.rb1
-rw-r--r--lib/bundler/mirror.rb15
-rw-r--r--lib/bundler/settings.rb13
-rw-r--r--spec/bundler/settings_spec.rb10
4 files changed, 26 insertions, 13 deletions
diff --git a/lib/bundler.rb b/lib/bundler.rb
index fe1704b40b..6e6636d2f5 100644
--- a/lib/bundler.rb
+++ b/lib/bundler.rb
@@ -35,6 +35,7 @@ module Bundler
autoload :LockfileParser, "bundler/lockfile_parser"
autoload :MatchPlatform, "bundler/match_platform"
autoload :Mirror, "bundler/mirror"
+ autoload :Mirrors, "bundler/mirror"
autoload :RemoteSpecification, "bundler/remote_specification"
autoload :Resolver, "bundler/resolver"
autoload :Retry, "bundler/retry"
diff --git a/lib/bundler/mirror.rb b/lib/bundler/mirror.rb
index b0e98fea6a..5805d89bdf 100644
--- a/lib/bundler/mirror.rb
+++ b/lib/bundler/mirror.rb
@@ -2,4 +2,19 @@ class Mirror < Struct.new(:uri, :fallback_timeout)
end
class Mirrors
+ def initialize
+ @mirrors = Hash.new { |h, k| h[k] = Mirror.new }
+ end
+
+ def [](key)
+ @mirrors[key]
+ end
+
+ def fetch(key, &block)
+ @mirrors.fetch(key, &block)
+ end
+
+ def to_h
+ @mirrors
+ end
end
diff --git a/lib/bundler/settings.rb b/lib/bundler/settings.rb
index 3bf280dd37..853ee3aff8 100644
--- a/lib/bundler/settings.rb
+++ b/lib/bundler/settings.rb
@@ -66,7 +66,7 @@ module Bundler
# Settings keys are all downcased
normalized_key = normalize_uri(uri.to_s.downcase)
- (gem_mirrors[normalized_key] || Mirror.new(uri)).uri
+ (gem_mirrors.fetch(normalized_key) { Mirror.new(uri) }).uri
end
def credentials_for(uri)
@@ -74,21 +74,18 @@ module Bundler
end
def gem_mirrors
- all.inject({}) do |h, k|
+ all.inject(Mirrors.new) do |mirrors, k|
if k =~ /^mirror\./
uri = $'
if uri =~ /\.fallback_timeout\/$/
uri = normalize_uri($`)
- mirror = h[uri] || Mirror.new()
- mirror.fallback_timeout = self[k].to_i
+ mirrors[uri].fallback_timeout = self[k].to_i
else
uri = normalize_uri(uri)
- mirror = h[uri] || Mirror.new()
- mirror.uri = normalize_uri(self[k])
+ mirrors[uri].uri = normalize_uri(self[k])
end
- h[uri] = mirror
end
- h
+ mirrors
end
end
diff --git a/spec/bundler/settings_spec.rb b/spec/bundler/settings_spec.rb
index 74ac1b4afe..4f7b3c0283 100644
--- a/spec/bundler/settings_spec.rb
+++ b/spec/bundler/settings_spec.rb
@@ -110,13 +110,13 @@ describe Bundler::Settings do
expect(settings.mirror_for(uri)).to eq(mirror_uri)
end
- # it "makes sense" do
- # expect(settings.gem_mirrors).to eq({})
- # end
-
it "returns the fallback timeout" do
expect(settings.gem_mirrors[uri].fallback_timeout).to eq(1)
end
+
+ it "has the uri and the fallback timeout" do
+ expect(settings.gem_mirrors.to_h).to eq(uri => Mirror.new(mirror_uri, 1))
+ end
end
end
end
@@ -181,7 +181,7 @@ describe Bundler::Settings do
it "reads older keys without trailing slashes" do
settings["mirror.https://rubygems.org"] = "http://rubygems-mirror.org"
- expect(settings.gem_mirrors).to eq(URI("https://rubygems.org/") => Mirror.new(URI("http://rubygems-mirror.org/")))
+ expect(settings.gem_mirrors.to_h).to eq(URI("https://rubygems.org/") => Mirror.new(URI("http://rubygems-mirror.org/")))
end
end