Module: AiCli::Helpers::ScriptEditor

Defined in:
lib/aicli/helpers/script_editor.rb

Class Method Summary collapse

Class Method Details

.ask(script) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/aicli/helpers/script_editor.rb', line 11

def ask(script)
  text = script.to_s
  return nil if text.strip.empty?

  puts ''
  puts I18n.t('Edit script')
  puts Theme.dim(I18n.t('Edit with arrow keys, Enter to confirm, Ctrl+C to cancel'))
  puts ''

  if text.include?("\n")
    ask_multiline(text)
  else
    ask_line(text)
  end
rescue Interrupt, TTY::Reader::InputInterrupt
  quit!
ensure
  clear_reline_hook
end

.ask_line(script) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/aicli/helpers/script_editor.rb', line 31

def ask_line(script)
  require 'reline'

  Reline.pre_input_hook = proc do
    Reline.insert_text(script.dup)
    Reline.pre_input_hook = nil
  end

  line = Reline.readline('$ ', true)
  line&.strip
rescue Interrupt
  quit!
end

.ask_multiline(script) ⇒ Object



45
46
47
48
49
50
51
# File 'lib/aicli/helpers/script_editor.rb', line 45

def ask_multiline(script)
  prompt = Helpers::Theme.prompt(interrupt: :exit)
  edited = prompt.editor(I18n.t('Edit script'), script, ext: 'sh')
  edited&.strip
rescue TTY::Reader::InputInterrupt
  quit!
end

.clear_reline_hookObject



58
59
60
61
62
# File 'lib/aicli/helpers/script_editor.rb', line 58

def clear_reline_hook
  return unless defined?(Reline)

  Reline.pre_input_hook = nil
end

.quit!Object



53
54
55
56
# File 'lib/aicli/helpers/script_editor.rb', line 53

def quit!
  puts I18n.t('Goodbye!')
  exit 0
end