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("[-]", [ :bold, :red   ])
  when true       then color("[+]", [ :bold, :green ])
  else color(value.to_s.rjust(3),    [ :bold, :blue  ])
  end
end

def run(*keys)

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