aboutsummaryrefslogtreecommitdiffstats
path: root/lib/bundler/cli/config.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bundler/cli/config.rb')
-rw-r--r--lib/bundler/cli/config.rb128
1 files changed, 70 insertions, 58 deletions
diff --git a/lib/bundler/cli/config.rb b/lib/bundler/cli/config.rb
index 0caabfb0..cfb8b660 100644
--- a/lib/bundler/cli/config.rb
+++ b/lib/bundler/cli/config.rb
@@ -1,88 +1,100 @@
module Bundler
class CLI::Config
- attr_reader :options, :thor
+ attr_reader :name, :options, :scope, :thor
attr_accessor :args
def initialize(options, args, thor)
@options = options
@args = args
@thor = thor
+ @name = peek = args.shift
+ @scope = "global"
+ if peek && peek =~ /^\-\-/
+ @name = args.shift
+ @scope = $'
+ end
end
def run
- peek = args.shift
+ unless name
+ confirm_all
+ return
+ end
- if peek && peek =~ /^\-\-/
- name = args.shift
- scope = $'
- else
- name = peek
- scope = "global"
+ unless valid_scope?(scope)
+ Bundler.ui.error "Invalid scope --#{scope} given. Please use --local or --global."
+ exit 1
end
- unless name
- Bundler.ui.confirm "Settings are listed in order of priority. The top value will be used.\n"
+ if scope == "delete"
+ Bundler.settings.set_local(name, nil)
+ Bundler.settings.set_global(name, nil)
+ return
+ end
- Bundler.settings.all.each do |setting|
- Bundler.ui.confirm "#{setting}"
- thor.with_padding do
- Bundler.settings.pretty_values_for(setting).each do |line|
- Bundler.ui.info line
- end
- end
- Bundler.ui.confirm ""
- end
+ if args.empty?
+ confirm(name)
return
end
- case scope
- when "delete"
- Bundler.settings.set_local(name, nil)
- Bundler.settings.set_global(name, nil)
- when "local", "global"
- if args.empty?
- Bundler.ui.confirm "Settings for `#{name}` in order of priority. The top value will be used"
- thor.with_padding do
- Bundler.settings.pretty_values_for(name).each {|line| Bundler.ui.info line }
- end
- return
- end
+ Bundler.ui.info(message) if message
+ Bundler.settings.send("set_#{scope}", name, new_value)
+ end
- new_value = args.join(" ")
- locations = Bundler.settings.locations(name)
+ private
- if scope == "global"
- if locations[:local]
- Bundler.ui.info "Your application has set #{name} to #{locations[:local].inspect}. " \
- "This will override the global value you are currently setting"
- end
+ def confirm_all
+ Bundler.ui.confirm "Settings are listed in order of priority. The top value will be used.\n"
+ Bundler.settings.all.each do |setting|
+ Bundler.ui.confirm "#{setting}"
+ show_pretty_values_for(setting)
+ Bundler.ui.confirm ""
+ end
+ end
- if locations[:env]
- Bundler.ui.info "You have a bundler environment variable for #{name} set to " \
- "#{locations[:env].inspect}. This will take precedence over the global value you are setting"
- end
+ def confirm(name)
+ Bundler.ui.confirm "Settings for `#{name}` in order of priority. The top value will be used"
+ show_pretty_values_for(name)
+ end
- if locations[:global] && locations[:global] != new_value
- Bundler.ui.info "You are replacing the current global value of #{name}, which is currently " \
- "#{locations[:global].inspect}"
- end
- end
+ def new_value
+ pathname = Pathname.new(args.join(" "))
+ if name.match(/\Alocal\./) && pathname.directory?
+ pathname.expand_path.to_s
+ else
+ args.join(" ")
+ end
+ end
- if scope == "local" && locations[:local] != new_value
- Bundler.ui.info "You are replacing the current local value of #{name}, which is currently " \
- "#{locations[:local].inspect}"
+ def message
+ locations = Bundler.settings.locations(name)
+ if scope == "global"
+ if locations[:local]
+ "Your application has set #{name} to #{locations[:local].inspect}. " \
+ "This will override the global value you are currently setting"
+ elsif locations[:env]
+ "You have a bundler environment variable for #{name} set to " \
+ "#{locations[:env].inspect}. This will take precedence over the global value you are setting"
+ elsif locations[:global] && locations[:global] != args.join(" ")
+ "You are replacing the current global value of #{name}, which is currently " \
+ "#{locations[:global].inspect}"
end
+ elsif scope == "local" && locations[:local] != args.join(" ")
+ "You are replacing the current local value of #{name}, which is currently " \
+ "#{locations[:local].inspect}"
+ end
+ end
- if name.match(/\Alocal\./)
- pathname = Pathname.new(args.join(" "))
- new_value = pathname.expand_path.to_s if pathname.directory?
+ def show_pretty_values_for(setting)
+ thor.with_padding do
+ Bundler.settings.pretty_values_for(setting).each do |line|
+ Bundler.ui.info line
end
-
- Bundler.settings.send("set_#{scope}", name, new_value)
- else
- Bundler.ui.error "Invalid scope --#{scope} given. Please use --local or --global."
- exit 1
end
end
+
+ def valid_scope?(scope)
+ %w(delete local global).include?(scope)
+ end
end
end