terça-feira, agosto 13, 2013

Ruby method parameters

Encontrei essa ontem: desde a versão 1.9.2-180 existe uma introspecção que retorna quais são os parâmetros de um método.

Confuso? Vai um pouco de código, então:

Ele retorna um array com arrays de 2 elementos, o primeiro symbol é o tipo e o segundo o nome do parâmetro:

  • :req - parâmetro obrigatório
  • :rest - parâmetros variáveis (usando "*" splat)
  • :key - parâmetro nomeado (novo no Ruby 2.0)

sábado, agosto 10, 2013

VIM - "Power of g" + "normal" (massacrando logs)

Essa página aqui me deu a idéia de mostrar uma das coisas que mais gosto no VIM: massacrar logs (e outros arquivos maiores do que minha preguiça permite trabalhar manualmente).

Aqui nesse site aqui tem alguns exemplos de logs legais para brincar: http://www.monitorware.com/en/logsamples. Eu peguei os do PostFix (e-mail) para usar de exemplo.

Copiar todas as linhas com "reject:" para o final do arquivo

:g/reject:/t$

":g" executa comandos em todas as linhas em que a expressão regular der match. O comando "t" copia a linha para um certo endereço. "$" é o endereço para "fim do arquivo".

Se você quiser mover a linha ao invés de copiá-la, troque o "t" por "m".

Copiar todas as linhas com "reject:" para o registrador "a" (para colar onde quiser depois com "ap)

qaq (isso limpa o registrador "a") 
:g/reject:/yA ("y" copia a linha e "A" adiciona ao registrador "a")
ou
:g/reject:/normal "Ayy

Tudo o que vier a seguir do comando "normal" é tratado como instruções do VIM. Ou seja, no exemplo acima "Ayy adiciona a linha no registrador "a" da mesma maneira que você faria na edição normal do vi. "normal" é o comando mais cabeludamente ninja do VIM, pois permite que vocẽ execute macros nas linhas que deram match!.

Aí sim!!!!

Copiar as linhas com "Domain not found" para o final e ficar apenas com o endereço de destino

:g/Domain not found/t$ | s/.*to=<// | s/>.*//

Dá para separar comandos com "|" (pipe). No caso acima, dupliquei para o fim do arquivo e já removi começo e fim de linha que não interessavam. Quando as operações são mais complicadas, o pipe é indispensável ;)

É isso! Eu gosto de pensar no VIM não é um editor de textos, mas como um editor de código com uma linguagem de programação interativa (e suscinta) embutida :D