diff options
author | Tim Moore <tmoore@incrementalism.net> | 2014-08-24 13:43:01 +1000 |
---|---|---|
committer | Tim Moore <tmoore@incrementalism.net> | 2014-08-24 13:43:01 +1000 |
commit | 1ce22ac8e0f3417f3ac89f799a1b80751ac7afe4 (patch) | |
tree | 3dc21055135f7d8f47ecc52ef2b6e1509aa4e8aa /lib/bundler/source_list.rb | |
parent | 473770c143ac720f5b115d3e82d395b01f12cb93 (diff) | |
parent | ea143105677c4e38a2ce57bf6faa3cb8b782ef68 (diff) | |
download | bundler-1ce22ac8e0f3417f3ac89f799a1b80751ac7afe4.tar.gz |
Merge tag 'v1.7.1'
Version 1.7.1
Conflicts:
CHANGELOG.md
lib/bundler/dsl.rb
lib/bundler/index.rb
lib/bundler/lockfile_parser.rb
lib/bundler/source/rubygems.rb
man/gemfile.5.ronn
Diffstat (limited to 'lib/bundler/source_list.rb')
-rw-r--r-- | lib/bundler/source_list.rb | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/lib/bundler/source_list.rb b/lib/bundler/source_list.rb new file mode 100644 index 00000000..235f75a2 --- /dev/null +++ b/lib/bundler/source_list.rb @@ -0,0 +1,86 @@ +module Bundler + class SourceList + attr_reader :path_sources, + :git_sources, + :svn_sources, + :rubygems_sources + + def initialize + @path_sources = [] + @git_sources = [] + @svn_sources = [] + @rubygems_aggregate = Source::Rubygems.new + @rubygems_sources = [@rubygems_aggregate] + 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_svn_source(options = {}) + add_source_to_list Source::SVN.new(options), svn_sources + end + + def add_rubygems_source(options = {}) + add_source_to_list Source::Rubygems.new(options), @rubygems_sources + end + + def add_rubygems_remote(uri) + @rubygems_aggregate.add_remote(uri) + @rubygems_aggregate + end + + def all_sources + path_sources + git_sources + svn_sources + rubygems_sources + end + + def get(source) + source_list_for(source).find { |s| source == s } + end + + def lock_sources + (path_sources + git_sources + svn_sources) << combine_rubygems_sources + end + + def replace_sources!(replacement_sources) + [path_sources, git_sources, svn_sources, rubygems_sources].each do |source_list| + source_list.map! do |source| + replacement_sources.find { |s| s == source } || source + end + end + 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::SVN then svn_sources + when Source::Path then path_sources + when Source::Rubygems then rubygems_sources + else raise ArgumentError, "Invalid source: #{source.inspect}" + end + end + + def combine_rubygems_sources + Source::Rubygems.new("remotes" => rubygems_sources.map(&:remotes).flatten.uniq.reverse) + end + end +end |