diff options
Diffstat (limited to 'autoload/languages/ruby.kak')
| -rw-r--r-- | autoload/languages/ruby.kak | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/autoload/languages/ruby.kak b/autoload/languages/ruby.kak new file mode 100644 index 0000000..b4e08f4 --- /dev/null +++ b/autoload/languages/ruby.kak @@ -0,0 +1,33 @@ +hook global KakBegin .* %{ + declare-user-mode code-ruby + map global code r ': enter-user-mode code-ruby<ret>' -docstring 'Ruby' +} + +hook global BufSetOption filetype=(?:ruby) %{ + map global code-ruby t ': rails-edit-test<ret>' -docstring 'Open relevant spec file' +} + +define-command rails-edit-test %{ + evaluate-commands %sh{ + open_spec_matching() { + in_pattern="$1" + out_pattern="$2" + pattern=$(sed -E "s#.*/app/${in_pattern}[.]rb#${out_pattern}#" <<< "$kak_buffile"); + if [ ! -z "$pattern" ] && [ ! "$kak_buffile" = "$pattern" ]; then + echo "findfzf-filtered 'spec/.*$pattern.*'" + else + echo "info 'unrecognized file'" + fi + } + + case "$kak_buffile" in + *_controller.rb) open_spec_matching '.*/(\w+)_controller' 'requests/.*\1' ;; + *) + open_spec_matching \ + '(queries|interactors|domain|mailers|dashboards|presenters|validators|models|lib).*/((\w+/)?\w+)' \ + '\1.*\2' + ;; + esac + } +} + |
