diff options
author | Fire Demon <firedemon@creature.cafe> | 2020-11-19 12:10:36 -0600 |
---|---|---|
committer | Fire Demon <firedemon@creature.cafe> | 2020-11-19 12:10:36 -0600 |
commit | dd3cea4ef6fc759543c6457e419c31dc7df6140a (patch) | |
tree | 88c151942418e2d686e7637c92e9c1c63f327e15 /app/lib/command_tag/commands/variables.rb | |
parent | 930f7145374adb79e92e9bdfcbc0d0044690b6c8 (diff) |
More robust loading of command interpreter modules
Diffstat (limited to 'app/lib/command_tag/commands/variables.rb')
-rw-r--r-- | app/lib/command_tag/commands/variables.rb | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/app/lib/command_tag/commands/variables.rb b/app/lib/command_tag/commands/variables.rb new file mode 100644 index 000000000..36ba0abd3 --- /dev/null +++ b/app/lib/command_tag/commands/variables.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +module CommandTag::Commands::Variables + def handle_000_variables_startup + @vars.merge!(persistent_vars_from(@account.metadata.fields)) if @account.metadata.present? + end + + def handle_999_variables_shutdown + @account.metadata.update!(fields: nonpersistent_vars_from(@account.metadata.fields).merge(persistent_vars_from(@vars))) + end + + def handle_set_at_start(args) + return if args.blank? + + args[0] = normalize(args[0]) + + case args.count + when 1 + @vars.delete(args[0]) + else + @vars[args[0]] = args[1..-1] + end + end + + def do_unset_at_start(args) + args.each do |arg| + @vars.delete(normalize(arg)) + end + end + + private + + def persistent_vars_from(vars) + vars.select { |key, value| key.start_with?('persist:') && value.present? && value.is_a?(Array) } + end + + def nonpersistent_vars_from(vars) + vars.reject { |key, value| key.start_with?('persist:') || value.blank? } + end +end |