lib/gdk/command/config.rb (61 lines of code) (raw):

# frozen_string_literal: true module GDK module Command # Handles `gdk config` command execution # # This command accepts the following subcommands: # - list # - get <config key> # - set <config key> <value> class Config < BaseCommand # We need to handle conflicting configuration (Vite vs. webpack). # Config is validated before saving. def self.validate_config? false end def run(args = []) case args.shift when 'get' config_get(*args) when 'set' GDK::Output.abort('Usage: gdk config set <name> <value>', report_error: false) if args.length != 2 config_set(*args) when 'list' GDK::Output.puts(config) true else GDK::Output.warn('Usage: gdk config [<get>|set] <name> [<value>]') GDK::Output.warn(' gdk config list') abort end end private def config_get(*name) GDK::Output.abort('Usage: gdk config get <name>', report_error: false) if name.empty? GDK::Output.puts(config.dig(*name)) true rescue GDK::ConfigSettings::SettingUndefined GDK::Output.abort("Cannot get config for #{name.join('.')}", report_error: false) rescue GDK::ConfigSettings::UnsupportedConfiguration, GDK::ConfigType::SettingsArray::ArrayAccessError => e GDK::Output.abort("#{e.message}.", e, report_error: false) end def config_set(slug, value) value_stored_in_gdk_yml = config.user_defined?(*slug) old_value = config.dig(*slug) new_value = config.bury!(slug, value) Command.validate_config! if old_value == new_value && value_stored_in_gdk_yml GDK::Output.warn("'#{slug}' is already set to '#{old_value}'") return true elsif old_value == new_value && !value_stored_in_gdk_yml GDK::Output.success("'#{slug}' is now set to '#{new_value}' (explicitly setting '#{old_value}').") elsif old_value != new_value && value_stored_in_gdk_yml GDK::Output.success("'#{slug}' is now set to '#{new_value}' (previously '#{old_value}').") else GDK::Output.success("'#{slug}' is now set to '#{new_value}' (previously using default '#{old_value}').") end config.save_yaml! GDK::Output.info("Don't forget to run 'gdk reconfigure'.") true rescue GDK::ConfigSettings::SettingUndefined => e GDK::Output.abort("Cannot get config for '#{slug}'.", e, report_error: false) rescue TypeError => e GDK::Output.abort(e.message, e, report_error: false) rescue StandardError => e GDK::Output.error(e.message, e) abort end end end end