summaryrefslogtreecommitdiff
path: root/controllers/interfaces/repl.rb
diff options
context:
space:
mode:
Diffstat (limited to 'controllers/interfaces/repl.rb')
-rw-r--r--controllers/interfaces/repl.rb63
1 files changed, 36 insertions, 27 deletions
diff --git a/controllers/interfaces/repl.rb b/controllers/interfaces/repl.rb
index 7b53eb2..5477c33 100644
--- a/controllers/interfaces/repl.rb
+++ b/controllers/interfaces/repl.rb
@@ -10,20 +10,17 @@ module NanoBot
module Interfaces
module REPL
def self.start(cartridge, session)
- if Logic::Helpers::Hash.fetch(
- cartridge, %i[interfaces repl prefix]
- )
- session.print(Logic::Helpers::Hash.fetch(cartridge,
- %i[interfaces repl prefix]))
- end
-
- session.boot(mode: 'repl')
+ prefix = build_prefix(cartridge)
+ postfix = build_postfix(cartridge)
- session.print(Logic::Helpers::Hash.fetch(cartridge, %i[interfaces repl postfix]) || "\n")
-
- session.flush
+ if Logic::Helpers::Hash.fetch(cartridge, %i[behaviors boot instruction])
+ session.print(prefix) unless prefix.nil?
+ session.boot(mode: 'repl')
+ session.print(postfix) unless postfix.nil?
+ session.print("\n")
+ end
- prompt = build_prompt(cartridge[:interfaces][:repl][:prompt])
+ prompt = build_prompt(Logic::Helpers::Hash.fetch(cartridge, %i[interfaces repl prompt]))
Pry.config.prompt = Pry::Prompt.new(
'REPL',
@@ -32,31 +29,43 @@ module NanoBot
)
Pry.commands.block_command(/(.*)/, 'handler') do |line|
- if Logic::Helpers::Hash.fetch(
- cartridge, %i[interfaces repl prefix]
- )
- session.print(Logic::Helpers::Hash.fetch(
- cartridge, %i[interfaces repl prefix]
- ))
- end
-
+ session.print(postfix) unless postfix.nil?
session.evaluate_and_print(line, mode: 'repl')
- session.print(Logic::Helpers::Hash.fetch(cartridge, %i[interfaces repl postfix]) || "\n")
+ session.print(postfix) unless postfix.nil?
+ session.print("\n")
session.flush
end
Pry.start
end
+ def self.build_prefix(cartridge)
+ repl = Logic::Helpers::Hash.fetch(cartridge, %i[interfaces repl])
+ return "\n" if repl.nil? || !repl.key?(:prefix) # default
+ repl[:prefix]
+ end
+
+ def self.build_postfix(cartridge)
+ repl = Logic::Helpers::Hash.fetch(cartridge, %i[interfaces repl])
+ return "\n" if repl.nil? || !repl.key?(:postfix) # default
+ repl[:postfix]
+ end
+
def self.build_prompt(prompt)
result = ''
- prompt.each do |partial|
- result += if partial[:color]
- Rainbow(partial[:text]).send(partial[:color])
- else
- partial[:text]
- end
+ if prompt.is_a?(Array)
+ prompt.each do |partial|
+ result += if partial[:color]
+ Rainbow(partial[:text]).send(partial[:color])
+ else
+ partial[:text]
+ end
+ end
+ elsif prompt.is_a?(String)
+ result = prompt
+ else
+ result = '🤖' + Rainbow('> ').blue
end
result