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