Skip to content

Commit 7732c4f

Browse files
committed
Fix directory creation in :Eview ...!
Closes tpope#334.
1 parent e00fe1a commit 7732c4f

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

autoload/rails.vim

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2800,7 +2800,7 @@ endfunc
28002800

28012801
let s:view_types = split('rhtml,erb,rxml,builder,rjs,haml',',')
28022802

2803-
function! s:readable_resolve_view(name,...) dict abort
2803+
function! s:readable_resolve_view(name, ...) dict abort
28042804
let name = a:name
28052805
let pre = 'app/views/'
28062806
if name !~# '/'
@@ -2809,7 +2809,9 @@ function! s:readable_resolve_view(name,...) dict abort
28092809
let name = controller.'/'.name
28102810
endif
28112811
endif
2812-
if name =~# '\.\w\+\.\w\+$' || name =~# '\.\%('.join(s:view_types,'\|').'\)$'
2812+
if name =~# '/' && !self.app().has_path(fnamemodify('app/views/'.name, ':h'))
2813+
return ''
2814+
elseif name =~# '\.\w\+\.\w\+$' || name =~# '\.\%('.join(s:view_types,'\|').'\)$'
28132815
return pre.name
28142816
else
28152817
for format in ['.'.self.format(a:0 ? a:1 : 0), '']
@@ -2846,7 +2848,7 @@ function! s:findlayout(name)
28462848
return rails#buffer().resolve_layout(a:name, line('.'))
28472849
endfunction
28482850

2849-
function! s:viewEdit(cmd,...)
2851+
function! s:viewEdit(cmd, ...) abort
28502852
if a:0 && a:1 =~ '^[^!#:]'
28512853
let view = matchstr(a:1,'[^!#:]*')
28522854
elseif rails#buffer().type_name('controller','mailer')
@@ -2866,12 +2868,16 @@ function! s:viewEdit(cmd,...)
28662868
endif
28672869
let found = rails#buffer().resolve_view(view, line('.'))
28682870
let djump = a:0 ? matchstr(a:1,'!.*\|#\zs.*\|:\zs\d*\ze\%(:in\)\=$') : ''
2869-
if found != ''
2871+
if !empty(found)
28702872
call s:edit(a:cmd,found)
28712873
call s:djump(djump)
28722874
return ''
28732875
elseif a:0 && a:1 =~# '!'
2874-
call s:edit(a:cmd,'app/views/'.view)
2876+
let file = 'app/views/'.view
2877+
if !rails#app().has_path(fnamemodify(file, ':h'))
2878+
call mkdir(rails#app().path(fnamemodify(file, ':h')), 'p')
2879+
endif
2880+
call s:edit(a:cmd, file)
28752881
call s:djump(djump)
28762882
return ''
28772883
else

0 commit comments

Comments
 (0)