ruby vim padrino

ruby - Hackeando rails.vim para trabajar con padrino.



(1)

Recientemente he clonado rails.vim (vim-rails) con la esperanza de modificarlo para que funcione con los proyectos de Padrino.

Actualmente estoy intentando que el comando Rcontroller no solo busque en las aplicaciones / controladores (perfecto para rieles) sino también en cualquier carpeta del proyecto que tenga una subcarpeta llamada "controladores". Así que cuando escribo Rcontroller en el modo de comando y presiono la pestaña, debería poder admin/controllers/base.rb , admin/controllers/accounts.rb , app/controllers/events.rb etc. Esto permitirá a los usuarios de el complemento para saltar a los controladores en una ''subapp'' de una aplicación Padrino. por ejemplo, PADRINO_ROOT/admin

La función controllerList actual parece manejar este autocompletado y esto es lo que tengo hasta ahora (solo ligeramente modificado de la fuente original)

function! s:controllerList(A,L,P) let con = padrino#app().relglob("*/controllers/","**/*",".rb") call map(con,''s:sub(v:val,"_controller$","")'') return s:autocamelize(con,a:A) endfunction

Agregué el comodín antes del directorio de controladores, pero esto da resultados como

  • Rcontroller ers/base
  • Rcontroller ers/sessions
  • Rcontroller s/events

para el último parece que hay cosas extrañas pasando con longitudes de cuerdas o superposición ...

Idealmente, me gustaría llegar al punto en el que escribir Rcontroller admin<TAB> debería resultar en autocompletar a Rcontroller admin/controllers/accounts.rb . Del mismo modo, la Rcontroller app<TAB> debería dar como resultado la Rcontroller app/controllers/events.rb

El código para la función viewList tiene algo similar a esto y su código es el siguiente:

function! s:viewList(A,L,P) let c = s:controller(1) let top = padrino#app().relglob("app/views/",s:fuzzyglob(a:A)) call filter(top,''v:val !~# "//~$"'') if c != '''' && a:A !~ ''/'' let local = padrino#app().relglob("app/views/".c."/","*.*[^~]") return s:completion_filter(local+top,a:A) endif return s:completion_filter(top,a:A) endfunction

¿Alguien tiene alguna sugerencia? Gracias por adelantado.


Probablemente quieras que la ruta completa se vea así:

**/controllers/**/*.rb

los globos como "buscar en cualquier directorio para un directorio llamado controladores, luego buscar en cualquier lugar debajo de un archivo que termina en .rb"

Mirando otros usos de "relglob", solo puedo adivinar cómo se supone que funciona, pero mi conjetura es:

  • El primer parámetro es "en qué directorio empezar a buscar"
  • El segundo parámetro es "cómo multiplicar los directorios desde allí".
  • El tercer parámetro es "archivos reales que coincidirán"

basado en este supuesto, mi conjetura sería utilizar:

padrino#app().relglob("app/","**/controllers/**/*",".rb")

Advertencia: esto se basa en mi comprensión de glob, no de vim o relglob, según el uso real.

Nota: agregue "app /" en el supuesto de que es poco probable que desee estar navegando a través de los controladores en proveedor / complemento o proveedor / gemas. Este puede no ser el caso, en cuyo caso, siéntase libre de cambiarlo a "."