class Travis::CLI::Settings

def all_settings?

def all_settings?
  agree("Really #{setting ? 'enable' : 'disable'} all settings? ") do |q|
    q.default = 'no'
  end
end

def boolean?(key)

def boolean?(key)
  key.to_sym != :maximum_number_of_builds
end

def describe(key, description = key)

def describe(key, description = key)
  return description if keys?
  desc = DESCRIPTIONS[key.to_sym]
  desc &&= yield(desc) if block_given?
  desc || description
end

def format_value(value)

def format_value(value)
  case value
  when false, nil then color('[-]', %i[bold red])
  when true       then color('[+]', %i[bold green])
  else color(value.to_s.rjust(3), %i[bold blue])
  end
end

def run(*keys)

def run(*keys)
  exit 1 if interactive? && keys.empty? && !setting.nil? && !all_settings? && !configure?
  authenticate
  say repository.slug, 'Settings for %s:'
  repository.settings.to_h.each do |key, value|
    next unless keys.empty? || keys.include?(key)
    if configure?
      repository.settings[key] = if boolean? key
                                   agree("#{describe(key, "enable #{key}")}? ") do |q|
                                     default   = setting.nil? ? value : setting
                                     q.default = default ? 'yes' : 'no'
                                   end
                                 else
                                   ask("#{describe(key, "Value for #{key}")}: ", Integer) do |q|
                                     default   = setting.to_i if setting && setting.respond_to?(:to_i)
                                     default ||= value
                                     default ||= 0
                                     q.default = default
                                   end
                                 end
    else
      value  = repository.settings[key] = setting unless setting.nil?
      descr  = color(describe(key, color(key, :info)) do |s|
                       "#{key.ljust(30)} #{color(s, %i[reset bold])}"
                     end, :info)
      say format_value(value) << ' ' << descr
    end
  end
  repository.settings.save if configure? || !setting.nil?
end