wevtimoteo

kairos _ sharing _ tech _ learning _ kaizen _ path


Configurando ruby correto dentro de plugins do vim

Posted on Monday, 6 Oct 2014 by Weverton Timoteo

Tags:

Primeiro post de 2015 e primeiro post na plataforma Pelican depois da migração do Octopress para o Pelican. Depois escrevo sobre como foi essa migração.

Já tinha lido muitos artigos a respeito de Cyclomatic Complexity, mas nunca tentei colocar algum script para avaliar meu código.

Antes tarde que nunca, encontrei o plugin vim-flog que é um fork do vim-ruby-complexity; que como o nome já diz, serve para avaliar a Complexidade Ciclomática dentro de scripts .rb.

Acontece que esse plugin executa código ruby dentro do arquivo .vim (caso queira saber mais: Scripting Vim with Ruby).

Até então, isso não deveria ser um problema. Acontece que quando o script rodava:

ruby << EOF

require 'rubygems'
require 'flog'

class Flog

Ocorria um erro na linha require 'flog' que não encontrava a gem, apesar de eu já ter instalado no meu ruby local usando gem install flog.

Tentei entender o problema olhando o $GEM_PATH, $GEM_ROOT e $GEM_HOME dentro do código do plugin, no entanto, ambos estavam vazios.

Parti para outro caminho e olhei o path do ruby executado adicionando:

puts $:

require 'rubygems'
require 'flog'

O $: serve para imprimir o path de onde o ruby é procurado (tente rodar isso dentro do irb).

Nesse comando, percebi que o ruby que estava sendo executado era o que vem juntamente do OS X Yosemite (2.x) e não o meu ruby do rbenv (alternativa ao rvm).

Como eu sempre fiz upgrade nos releases do OS X e nunca um clean install. Achei um report do bug no path_helper, para resolver isso, basta:

sudo chmod ugo-x /usr/libexec/path_helper

Segue trecho do link acima caso o link se torne obsoleto:

path_helper is intended to make it easier for installers to add new paths to the environment without having to edit shell configuration files by adding a file with a path to the /etc/paths.d directory.

Unfortunately, path_helper always reads paths from /etc/paths set by Apple then paths from /etc/paths.d set by third party installers, and lastly paths from the PATH environment variable set by the parent process, which ultimately is set by the user with export PATH=... Thus, it reorders path priorities, and user /bin directories meant to override system /bin directories end up at the tail of the array.