@@ -123,7 +123,11 @@ function! s:app_path(...) dict
123123endfunction 
124124
125125function !  s: app_has_path (path ) dict 
126-   return  getftime (self .path (a: path )) !=  -1 
126+   if  a: path  = ~# ' \%(^\|:\)[\/]' 
127+     return  getftime (a: path ) !=  -1 
128+   else 
129+     return  getftime (self .path (a: path )) !=  -1 
130+   endif 
127131endfunction 
128132
129133function !  s: app_has_file (file ) dict 
@@ -2150,6 +2154,11 @@ function! s:findfromview(func,repl)
21502154  return  s: findit (' \s*\%(<%\)\==\=\s*\<\%('  .a: func .' \)\s*(\=\s*[@:'  ." '"  .' "]\(\f\+\)\>['  ." '"  .' "]\=\s*\%(%>\s*\)\='  ,a: repl )
21512155endfunction 
21522156
2157+ function !  s: findasset (path , ext, pre , post) abort 
2158+   let  asset =  rails#app ().resolve_asset (a: path , a: ext )
2159+   return  len (asset) ? asset : rails#app ().path (a: pre  . a: path  . a: post )
2160+ endfunction 
2161+ 
21532162function !  s: RailsFind ()
21542163  if  filereadable (expand (" <cfile>"  ))
21552164    return  expand (" <cfile>"  )
@@ -2162,10 +2171,12 @@ function! s:RailsFind()
21622171  let  ssext =  [' css'  , ' css.*'  , ' scss'  , ' sass'  ]
21632172  if  buffer .type_name (' stylesheet'  )
21642173    let  res  =  s: findit (' ^\s*\*=\s*require\s*["'' ]\=\([^"''  ]*\)'  , ' \1'  )
2165-     if  res  !=  " "  |return  rails#app ().resolve_asset (res , ssext)." \n app/assets/stylesheets/"  .res ." .css"  |endif 
2174+     if  ! empty (res )
2175+       return  s: findasset (res , ssext, " app/assets/stylesheets/"  , " .css"  )
2176+     endif 
21662177    let  res  =  s: findit (' ^\s*@import\s*\%(url(\)\=["'' ]\=\([^"''  ]*\)'  , ' \1'  )
21672178    if  res  !=  " " 
2168-       let  base =  expand (' %:h'  )
2179+       let  base =  expand (' %:p: h'  )
21692180      let  rel =  s: sub (res , ' \ze[^/]*$'  , ' _'  )
21702181      for  ext in  [' css'  , ' css.scss'  , ' css.sass'  , ' scss'  , ' sass'  ]
21712182        for  name in  [res .' .'  .ext, res .' .'  .ext.' .erb'  , rel.' .'  .ext, rel.' .'  .ext.' .erb'  ]
@@ -2185,7 +2196,9 @@ function! s:RailsFind()
21852196  let  jsext =  [' js'  , ' js.*'  , ' jst'  , ' jst.*'  , ' coffee'  ]
21862197  if  buffer .type_name (' javascript'  )
21872198    let  res  =  s: findit (' ^\s*//=\s*require\s*["'' ]\=\([^"''  ]*\)'  , ' \1'  )
2188-     if  res  !=  " "  |return  rails#app ().resolve_asset (res , jsext)." \n app/assets/javascripts/"  .res ." .js"  |endif 
2199+     if  ! empty (res )
2200+       return  s: findasset (res , jsext, " app/assets/javascript/"  , " .js"  )
2201+     endif 
21892202    return  expand (" <cfile>"  )
21902203  endif 
21912204
@@ -2281,17 +2294,17 @@ function! s:RailsFind()
22812294
22822295  let  res  =  s: findfromview (' image[_-]\%(\|path\|url\)\|\%(path\|url\)_to_image'  ,' \1'  )
22832296  if  res  !=  " " 
2284-     return  rails#app (). resolve_asset ( res ). " \n public /images/" . res 
2297+     return  s: findasset ( res , [],  ' public /images/' ,  ' ' ) 
22852298  endif 
22862299
22872300  let  res  =  s: findfromview (' stylesheet[_-]\%(link_tag\|path\|url\)\|\%(path\|url\)_to_stylesheet'  ,' \1'  )
22882301  if  res  !=  " " 
2289-     return  rails#app (). resolve_asset ( res , ssext). " \n public /stylesheets/" . res . " . css" 
2302+     return  s: findasset ( res , ssext,  ' public /stylesheets/' ,  ' . css' ) 
22902303  endif 
22912304
22922305  let  res  =  s: sub (s: findfromview (' javascript_\%(include_tag\|path\|url\)\|\%(path\|url\)_to_javascript'  ,' \1'  ),' /defaults>'  ,' /application'  )
22932306  if  res  !=  " " 
2294-     return  rails#app (). resolve_asset ( res , jsext). " \n public /javascripts/" . res . " .js " 
2307+     return  s: findasset ( res , jsext,  ' public /javascripts/' ,  ' .js ' ) 
22952308  endif 
22962309
22972310  if  buffer .type_name (' controller'  , ' mailer'  )
@@ -2859,7 +2872,6 @@ let s:view_types = split('rhtml,erb,rxml,builder,rjs,haml',',')
28592872
28602873function !  s: readable_resolve_view (name, ... ) dict  abort 
28612874  let  name =  a: name
2862-   let  pre  =  ' app/views/' 
28632875  if  name !~#  ' /' 
28642876    let  controller =  self .controller_name (1 )
28652877    let  found =  ' ' 
@@ -2874,13 +2886,13 @@ function! s:readable_resolve_view(name, ...) dict abort
28742886  if  name = ~# ' /'   &&  ! self .app ().has_path (fnamemodify (' app/views/'  .name, ' :h'  ))
28752887    return  ' ' 
28762888  elseif  name = ~# ' \.[[:alnum:]_+]\+\.\w\+$'   ||  name = ~# ' \.\%('  .join (s: view_types ,' \|'  ).' \)$' 
2877-     return  pre . name
2889+     return  self . app (). path ( ' app/views/ ' . name) 
28782890  else 
28792891    for  format in  [' .'  .self .format (a: 0  ? a: 1  : 0 ), ' '  ]
28802892      let  found =  self .app ().relglob (' '  , ' app/views/'  .name.format.' .*'  )
28812893      call  sort (found, s: function (' s:dotcmp'  ))
28822894      if  ! empty (found)
2883-         return  found[0 ]
2895+         return  self . app (). path ( found[0 ]) 
28842896      endif 
28852897    endfor 
28862898  endif 
@@ -2907,9 +2919,9 @@ function! s:app_resolve_asset(name, ...) dict abort
29072919  let  path  =  join (map (paths, ' escape(v:val, " ,")'  ), ' ,'  )
29082920  let  exact =  findfile (a: name , path )
29092921  if  ! empty (exact)
2910-     return  exact
2922+     return  fnamemodify ( exact,  ' :p ' ) 
29112923  endif 
2912-   if  a: 0
2924+   if  a: 0  &&   ! empty ( a: 1 ) 
29132925    for  candidate in  map (split (globpath (path , a: name  . ' .*'  ), " \n "  ), ' fnamemodify(v:val, ":p")'  )
29142926      for  ext in  a: 1
29152927        let  pat =  ' [\\/]'  .s: gsub (s: gsub (a: name .' .'  .ext, ' \.'  , ' \\.'  ), ' \*'  , ' .*'  ) . ' \%(\.erb\)\=$' 
@@ -2925,7 +2937,7 @@ endfunction
29252937call  s: add_methods (' readable'  , [' resolve_view'  , ' resolve_layout'  ])
29262938call  s: add_methods (' app'  , [' resolve_asset'  ])
29272939
2928- function !  s: findview (name)
2940+ function !  s: findview (name)  abort 
29292941  return  rails#buffer ().resolve_view (a: name , line (' .'  ))
29302942endfunction 
29312943
@@ -3179,7 +3191,7 @@ function! s:findedit(cmd,files,...) abort
31793191  if  len (files ) ==  1 
31803192    let  file  =  files [0 ]
31813193  else 
3182-     let  file  =  get (filter (copy (files ),' rails#app().has_file (s:sub(v:val,"#.*|:\\d*$",""))'  ),0 ,get (files ,0 ,' '  ))
3194+     let  file  =  get (filter (copy (files ),' rails#app().has_path (s:sub(v:val,"#.*|:\\d*$",""))'  ),0 ,get (files ,0 ,' '  ))
31833195  endif 
31843196  if  file  = ~ ' [#!]\|:\d*\%(:in\)\=$' 
31853197    let  djump  =  matchstr (file ,' !.*\|#\zs.*\|:\zs\d*\ze\%(:in\)\=$'  )
0 commit comments