lib/cyberarm_engine/console/command.rb in cyberarm_engine-0.19.0 vs lib/cyberarm_engine/console/command.rb in cyberarm_engine-0.19.1
- old
+ new
@@ -1,158 +1,158 @@
-# frozen_string_literal: true
-
-module CyberarmEngine
- class Console
- module Style
- def self.error(string)
- "<c=ff5555>#{string}</c>"
- end
-
- def self.warn(string)
- "<c=ff7700>#{string}</c>"
- end
-
- def self.notice(string)
- "<c=55ff55>#{string}</c>"
- end
-
- def self.highlight(string, color = "5555ff")
- "<c=#{color}>#{string}</c>"
- end
- end
-
- class Command
- def self.inherited(subclass)
- @list ||= []
- @commands ||= []
- @list << subclass
- end
-
- def self.setup
- @list ||= []
- @commands = []
- @list.each do |subclass|
- cmd = subclass.new
- if @commands.detect { |c| c.command == cmd.command }
- raise "Command '#{cmd.command}' from '#{cmd.class}' already exists!"
- end
-
- @commands << cmd
- end
- end
-
- def self.use(command, arguments, console)
- found_command = @commands.detect { |cmd| cmd.command == command.to_sym }
-
- if found_command
- found_command.handle(arguments, console)
- else
- console.stdin("Command #{Style.error(command)} not found.")
- end
- end
-
- def self.find(command)
- @commands.detect { |cmd| cmd.command == command.to_sym }
- end
-
- def self.list_commands
- @commands
- end
-
- def initialize
- @store = {}
- @subcommands = []
-
- setup
- end
-
- def setup
- end
-
- def subcommand(command, type)
- if @subcommands.detect { |subcmd| subcmd.command == command.to_sym }
- raise "Subcommand '#{command}' for '#{self.command}' already exists!"
- end
-
- @subcommands << SubCommand.new(self, command, type)
- end
-
- def get(key)
- @store[key]
- end
-
- def set(key, value)
- @store[key] = value
- end
-
- def group
- raise NotImplementedError
- end
-
- def command
- raise NotImplementedError
- end
-
- def handle(arguments, console)
- raise NotImplementedError
- end
-
- def autocomplete(console)
- split = console.text_input.text.split(" ")
-
- if @subcommands.size.positive?
- if !console.text_input.text.end_with?(" ") && split.size == 2
- list = console.abbrev_search(@subcommands.map { |cmd| cmd.command.to_s }, split.last)
-
- if list.size == 1
- console.text_input.text = "#{split.first} #{list.first} "
- else
- return unless list.size.positive?
-
- console.stdin(list.map { |cmd| Console::Style.highlight(cmd) }.join(", ").to_s)
- end
-
- # List available options on subcommand
- elsif (console.text_input.text.end_with?(" ") && split.size == 2) || !console.text_input.text.end_with?(" ") && split.size == 3
- subcommand = @subcommands.detect { |cmd| cmd.command.to_s == (split[1]) }
-
- if subcommand
- if split.size == 2
- console.stdin("Available options: #{subcommand.values.map { |value| Console::Style.highlight(value) }.join(',')}")
- else
- list = console.abbrev_search(subcommand.values, split.last)
- if list.size == 1
- console.text_input.text = "#{split.first} #{split[1]} #{list.first} "
- elsif list.size.positive?
- console.stdin("Available options: #{list.map { |value| Console::Style.highlight(value) }.join(',')}")
- end
- end
- end
-
- # List available subcommands if command was entered and has only a space after it
- elsif console.text_input.text.end_with?(" ") && split.size == 1
- console.stdin("Available subcommands: #{@subcommands.map { |cmd| Console::Style.highlight(cmd.command) }.join(', ')}")
- end
- end
- end
-
- def handle_subcommand(arguments, console)
- if arguments.size.zero?
- console.stdin(usage)
- return
- end
- subcommand = arguments.delete_at(0)
-
- found_command = @subcommands.detect { |cmd| cmd.command == subcommand.to_sym }
- if found_command
- found_command.handle(arguments, console)
- else
- console.stdin("Unknown subcommand #{Style.error(subcommand)} for #{Style.highlight(command)}")
- end
- end
-
- def usage
- raise NotImplementedError
- end
- end
- end
+# frozen_string_literal: true
+
+module CyberarmEngine
+ class Console
+ module Style
+ def self.error(string)
+ "<c=ff5555>#{string}</c>"
+ end
+
+ def self.warn(string)
+ "<c=ff7700>#{string}</c>"
+ end
+
+ def self.notice(string)
+ "<c=55ff55>#{string}</c>"
+ end
+
+ def self.highlight(string, color = "5555ff")
+ "<c=#{color}>#{string}</c>"
+ end
+ end
+
+ class Command
+ def self.inherited(subclass)
+ @list ||= []
+ @commands ||= []
+ @list << subclass
+ end
+
+ def self.setup
+ @list ||= []
+ @commands = []
+ @list.each do |subclass|
+ cmd = subclass.new
+ if @commands.detect { |c| c.command == cmd.command }
+ raise "Command '#{cmd.command}' from '#{cmd.class}' already exists!"
+ end
+
+ @commands << cmd
+ end
+ end
+
+ def self.use(command, arguments, console)
+ found_command = @commands.detect { |cmd| cmd.command == command.to_sym }
+
+ if found_command
+ found_command.handle(arguments, console)
+ else
+ console.stdin("Command #{Style.error(command)} not found.")
+ end
+ end
+
+ def self.find(command)
+ @commands.detect { |cmd| cmd.command == command.to_sym }
+ end
+
+ def self.list_commands
+ @commands
+ end
+
+ def initialize
+ @store = {}
+ @subcommands = []
+
+ setup
+ end
+
+ def setup
+ end
+
+ def subcommand(command, type)
+ if @subcommands.detect { |subcmd| subcmd.command == command.to_sym }
+ raise "Subcommand '#{command}' for '#{self.command}' already exists!"
+ end
+
+ @subcommands << SubCommand.new(self, command, type)
+ end
+
+ def get(key)
+ @store[key]
+ end
+
+ def set(key, value)
+ @store[key] = value
+ end
+
+ def group
+ raise NotImplementedError
+ end
+
+ def command
+ raise NotImplementedError
+ end
+
+ def handle(arguments, console)
+ raise NotImplementedError
+ end
+
+ def autocomplete(console)
+ split = console.text_input.text.split(" ")
+
+ if @subcommands.size.positive?
+ if !console.text_input.text.end_with?(" ") && split.size == 2
+ list = console.abbrev_search(@subcommands.map { |cmd| cmd.command.to_s }, split.last)
+
+ if list.size == 1
+ console.text_input.text = "#{split.first} #{list.first} "
+ else
+ return unless list.size.positive?
+
+ console.stdin(list.map { |cmd| Console::Style.highlight(cmd) }.join(", ").to_s)
+ end
+
+ # List available options on subcommand
+ elsif (console.text_input.text.end_with?(" ") && split.size == 2) || !console.text_input.text.end_with?(" ") && split.size == 3
+ subcommand = @subcommands.detect { |cmd| cmd.command.to_s == (split[1]) }
+
+ if subcommand
+ if split.size == 2
+ console.stdin("Available options: #{subcommand.values.map { |value| Console::Style.highlight(value) }.join(',')}")
+ else
+ list = console.abbrev_search(subcommand.values, split.last)
+ if list.size == 1
+ console.text_input.text = "#{split.first} #{split[1]} #{list.first} "
+ elsif list.size.positive?
+ console.stdin("Available options: #{list.map { |value| Console::Style.highlight(value) }.join(',')}")
+ end
+ end
+ end
+
+ # List available subcommands if command was entered and has only a space after it
+ elsif console.text_input.text.end_with?(" ") && split.size == 1
+ console.stdin("Available subcommands: #{@subcommands.map { |cmd| Console::Style.highlight(cmd.command) }.join(', ')}")
+ end
+ end
+ end
+
+ def handle_subcommand(arguments, console)
+ if arguments.size.zero?
+ console.stdin(usage)
+ return
+ end
+ subcommand = arguments.delete_at(0)
+
+ found_command = @subcommands.detect { |cmd| cmd.command == subcommand.to_sym }
+ if found_command
+ found_command.handle(arguments, console)
+ else
+ console.stdin("Unknown subcommand #{Style.error(subcommand)} for #{Style.highlight(command)}")
+ end
+ end
+
+ def usage
+ raise NotImplementedError
+ end
+ end
+ end
end
\ No newline at end of file