diff options
author | Tim Moore <tmoore@incrementalism.net> | 2013-08-28 21:23:28 +1000 |
---|---|---|
committer | Tim Moore <tmoore@incrementalism.net> | 2014-07-30 14:16:35 +1000 |
commit | edccf04e0442d2b63e8e1bac569eccec486ca3d9 (patch) | |
tree | b1095e05c72031d488acbb4e63cdf81a969cfebe /lib/bundler/source_list.rb | |
parent | ca2a8fa969982322732a969fff18f1ba1f4eadcf (diff) | |
download | bundler-edccf04e0442d2b63e8e1bac569eccec486ca3d9.tar.gz |
Extract SourceList class from Definition.
Diffstat (limited to 'lib/bundler/source_list.rb')
-rw-r--r-- | lib/bundler/source_list.rb | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/lib/bundler/source_list.rb b/lib/bundler/source_list.rb new file mode 100644 index 0000000000..6b794359d0 --- /dev/null +++ b/lib/bundler/source_list.rb @@ -0,0 +1,70 @@ +module Bundler + class SourceList + attr_reader :path_sources, + :git_sources, + :rubygems_source + + def initialize + @path_sources = [] + @git_sources = [] + @rubygems_source = Source::Rubygems.new + end + + def add_path_source(options = {}) + add_source_to_list Source::Path.new(options), path_sources + end + + def add_git_source(options = {}) + add_source_to_list Source::Git.new(options), git_sources + end + + def add_rubygems_remote(uri) + @rubygems_source.add_remote(uri) + @rubygems_source + end + + def all_sources + path_sources + git_sources << rubygems_source + end + + def get(source) + if source.is_a?(Source::Rubygems) + rubygems_source + else + source_list_for(source).find { |s| source == s } + end + end + + def replace_sources!(replacement_sources) + [path_sources, git_sources].each do |source_list| + source_list.map! do |source| + replacement_sources.find { |s| s == source } || source + end + end + @rubygems_source = replacement_sources.find { |s| s == rubygems_source } || rubygems_source + end + + def cached! + all_sources.each(&:cached!) + end + + def remote! + all_sources.each(&:remote!) + end + + private + + def add_source_to_list(source, list) + list.unshift(source).uniq! + source + end + + def source_list_for(source) + case source + when Source::Git then git_sources + when Source::Path then path_sources + else raise ArgumentError, "Invalid source: #{source.inspect}" + end + end + end +end |