aboutsummaryrefslogtreecommitdiff
path: root/autoload/languages/ruby.kak
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2026-06-21 21:57:14 +0530
committerAkshay Nair <phenax5@gmail.com>2026-06-21 21:57:14 +0530
commit24bac5d317757ae3cb0f390869fceef58cae5fa8 (patch)
tree7b1449a566d89136b9238bdc92c8647afd73368b /autoload/languages/ruby.kak
parented0e8f48b59607c138f8d9a6ecdbf7dd5c011c95 (diff)
downloadkakoune-config-24bac5d317757ae3cb0f390869fceef58cae5fa8.tar.gz
kakoune-config-24bac5d317757ae3cb0f390869fceef58cae5fa8.zip
Add rails open spec cmd + code-ruby mode
Diffstat (limited to 'autoload/languages/ruby.kak')
-rw-r--r--autoload/languages/ruby.kak33
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
+ }
+}
+