class Yanapiri::CLI

Public Class Methods

exit_on_failure?() click to toggle source
# File lib/yanapiri/cli.rb, line 14
def self.exit_on_failure?
  true
end
new(args = [], local_options = {}, config = {}) click to toggle source
Calls superclass method
# File lib/yanapiri/cli.rb, line 9
def initialize(args = [], local_options = {}, config = {})
  super(args, local_options, config)
  @bot = crear_bot options
end

Public Instance Methods

actualizar(nombre) click to toggle source
# File lib/yanapiri/cli.rb, line 63
def actualizar(nombre)
  path_repo_base = "#{nombre}-base"
  `git clone git@github.com:#{options.repo_base}.git #{path_repo_base}`

  foreach_repo(nombre) do
    `git remote rm base`
    `git remote add base ../../#{path_repo_base}`
    `git pull base master`
    `git push origin master`
  end

  `rm -rf #{path_repo_base}`
end
clonar(nombre) click to toggle source
# File lib/yanapiri/cli.rb, line 57
def clonar(nombre)
  @bot.clonar_entrega!(nombre)
end
config_file_name() click to toggle source
# File lib/yanapiri/cli.rb, line 163
def config_file_name
  '.yanapiri'
end
corregir(nombre) click to toggle source
# File lib/yanapiri/cli.rb, line 88
def corregir(nombre)
  info "Comenzando corrección de #{nombre}. #{opciones_correccion}"
  foreach_entrega(nombre) do |entrega|
    @bot.preparar_correccion! entrega, options.renombrar_proyecto_wollok ? [TransformacionWollok] : []
  end
end
crear_bot(config) click to toggle source
# File lib/yanapiri/cli.rb, line 112
def crear_bot(config)
  Bot.new config.orga, Octokit::Client.new(access_token: config.github_token)
end
debug(message) click to toggle source
# File lib/yanapiri/cli.rb, line 208
def debug(message)
  say message, :clear
end
dump_config!(destination, config) click to toggle source
# File lib/yanapiri/cli.rb, line 175
def dump_config!(destination, config)
  File.write destination, config.to_h.stringify_keys.to_yaml
end
dump_global_config!(config) click to toggle source
# File lib/yanapiri/cli.rb, line 167
def dump_global_config!(config)
  dump_config! global_config_file, config
end
dump_local_config!(config) click to toggle source
# File lib/yanapiri/cli.rb, line 171
def dump_local_config!(config)
  dump_config! local_config_file, config
end
entregas(nombre) click to toggle source
# File lib/yanapiri/cli.rb, line 149
def entregas(nombre)
  resultado = []
  foreach_entrega(nombre) { |e| resultado << e }
  resultado
end
fila_ultimo_commit(entrega) click to toggle source
# File lib/yanapiri/cli.rb, line 116
def fila_ultimo_commit(entrega)
  fecha = if entrega.hay_cambios?
            "hace #{time_ago_in_words entrega.fecha} (#{entrega.fecha.strftime "%d/%m/%Y %H:%M"})"
          else
            '(no hay cambios)'
          end

  fila = [entrega.autor, fecha, if entrega.fuera_de_termino? then '---> Fuera de término' else '' end]
  color = if entrega.fuera_de_termino? then :red else :white end
  fila.map {|s| set_color s, color }
end
foreach_entrega(nombre) { |entrega| ... } click to toggle source
# File lib/yanapiri/cli.rb, line 141
def foreach_entrega(nombre)
  foreach_repo(nombre) do |repo, base_path|
    entrega = Entrega.new "#{base_path}/#{repo}", options.commit_base, Time.parse(options.fecha_limite), options.modo_estricto
    debug "Trabajando con #{entrega}..."
    yield entrega
  end
end
foreach_repo(dir_base) { |repo, working_dir| ... } click to toggle source
# File lib/yanapiri/cli.rb, line 128
def foreach_repo(dir_base)
  Dir.chdir(dir_base) do
    working_dir = Dir.pwd
    repos = Dir.glob('*').select {|f| File.directory? f}.sort

    for repo in repos
      Dir.chdir "#{working_dir}/#{repo}" do
        yield repo, working_dir
      end
    end
  end
end
global_config_file() click to toggle source
# File lib/yanapiri/cli.rb, line 155
def global_config_file
  File.expand_path "~/#{config_file_name}"
end
info(message) click to toggle source
# File lib/yanapiri/cli.rb, line 204
def info(message)
  say message, :yellow
end
init() click to toggle source
# File lib/yanapiri/cli.rb, line 43
def init
  config = OpenStruct.new
  config.orga = ask 'Nombre de la organización:', default: File.basename(Dir.pwd)
  leer_opciones_comunes! config
  success "De ahora en más, trabajaré con la organización #{config.orga} siempre que estés dentro de esta carpeta. #{opciones_correccion config}"
  dump_local_config! config
end
leer_opciones_comunes!(config) click to toggle source
# File lib/yanapiri/cli.rb, line 183
def leer_opciones_comunes!(config)
  config.modo_estricto = yes? '¿Usar modo estricto? [y/N]'
  config.renombrar_proyecto_wollok = !(no? '¿Renombrar proyectos Wollok al corregir? [Y/n]')
end
load_config(source) click to toggle source
# File lib/yanapiri/cli.rb, line 179
def load_config(source)
  if File.exist? source then YAML.load_file source else {} end
end
local_config_file() click to toggle source
# File lib/yanapiri/cli.rb, line 159
def local_config_file
  File.expand_path config_file_name
end
opciones_correccion(config = options) click to toggle source
# File lib/yanapiri/cli.rb, line 108
def opciones_correccion(config = options)
  "Al corregir, utilizaré el modo #{config.modo_estricto ? 'estricto' : 'relajado'} y #{config.renombrar_proyecto_wollok ? '' : 'no '}renombraré los proyectos Wollok."
end
options() click to toggle source
Calls superclass method
# File lib/yanapiri/cli.rb, line 188
def options
  original_options = super
  defaults_global = load_config global_config_file
  defaults_local = load_config local_config_file

  MultiSourceConfig.new defaults_global, defaults_local, original_options
end
preparar(nombre) click to toggle source
# File lib/yanapiri/cli.rb, line 79
def preparar(nombre)
  @bot.preparar_entrega! nombre, options.repo_base
end
raise(message) click to toggle source
Calls superclass method
# File lib/yanapiri/cli.rb, line 196
def raise(message)
  super Thor::Error, set_color(message, :red)
end
setup() click to toggle source
# File lib/yanapiri/cli.rb, line 25
def setup
  say '¡Kamisaraki! Yo soy Yanapiri, tu ayudante, y necesito algunos datos antes de empezar:', :bold

  config = OpenStruct.new
  config.github_token = ask 'Token de GitHub (lo necesito para armar los pull requests):', default: options.github_token
  config.orga = ask 'Organización por defecto:', default: options.orga
  leer_opciones_comunes! config

  begin
    bot = crear_bot config
    success "Los pull requests serán creados por @#{bot.github_user.login}, asegurate de que tenga los permisos necesarios en las organizaciones que uses."
    dump_global_config! config
  rescue Octokit::Unauthorized
    raise 'El access token de GitHub no es correcto, revisalo por favor.'
  end
end
success(message) click to toggle source
# File lib/yanapiri/cli.rb, line 200
def success(message)
  say "Yuspagara. #{message}", :green
end
ultimo_commit(nombre) click to toggle source
# File lib/yanapiri/cli.rb, line 99
def ultimo_commit(nombre)
  print_table entregas(nombre)
      .select {|e| not options.solo_excedidos or e.fuera_de_termino?}
      .sort_by(&:fecha)
      .reverse!
      .map(&method(:fila_ultimo_commit))
end
version() click to toggle source
# File lib/yanapiri/cli.rb, line 20
def version
  say "yanapiri version #{VERSION}"
end
whoami() click to toggle source
# File lib/yanapiri/cli.rb, line 52
def whoami
  say "Estoy trabajando en la organización #{@bot.organization}, commiteando con el usuario #{@bot.git_author}."
end