diff options
author | Pablo Carranza <pcarranza@gmail.com> | 2015-12-02 23:22:11 +0000 |
---|---|---|
committer | Pablo Carranza <pcarranza@gmail.com> | 2015-12-27 22:19:54 +0100 |
commit | bc4bb7b8c82fc406e5c6445d2e54b0afbe6d776c (patch) | |
tree | 4e8aeb1bf83ef3d265acf43669663d2d10fbc5a6 | |
parent | abc92bf609863a1fc8045461d3b4d88bead92322 (diff) | |
download | bundler-bc4bb7b8c82fc406e5c6445d2e54b0afbe6d776c.tar.gz |
Add mirrors class to simplify config parsing and collecting
-rw-r--r-- | lib/bundler.rb | 1 | ||||
-rw-r--r-- | lib/bundler/mirror.rb | 15 | ||||
-rw-r--r-- | lib/bundler/settings.rb | 13 | ||||
-rw-r--r-- | spec/bundler/settings_spec.rb | 10 |
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 |