feat: add rake task to toggle account-level feature defaults
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# rubocop:disable Metrics/BlockLength
|
||||
namespace :feature_defaults do
|
||||
desc 'Interactively toggle a feature on/off in ACCOUNT_LEVEL_FEATURE_DEFAULTS (affects new account signups only)'
|
||||
task toggle: :environment do
|
||||
config = InstallationConfig.find_by!(name: 'ACCOUNT_LEVEL_FEATURE_DEFAULTS')
|
||||
|
||||
loop do
|
||||
features = config.value
|
||||
print_feature_list(features)
|
||||
|
||||
print "\nEnter the number of the feature to toggle (or 'q' to quit): "
|
||||
input = $stdin.gets.chomp
|
||||
break if input.casecmp('q').zero?
|
||||
|
||||
feature = select_feature(features, input)
|
||||
if feature.nil?
|
||||
puts 'Invalid selection.'
|
||||
next
|
||||
end
|
||||
|
||||
toggle_feature(config, features, feature)
|
||||
end
|
||||
|
||||
puts 'Done.'
|
||||
end
|
||||
|
||||
def print_feature_list(features)
|
||||
puts "\n#{'#'.ljust(4)}#{'name'.ljust(35)}#{'display_name'.ljust(30)}enabled"
|
||||
features.each_with_index do |feature, index|
|
||||
puts "#{(index + 1).to_s.ljust(4)}#{feature['name'].to_s.ljust(35)}#{feature['display_name'].to_s.ljust(30)}#{feature['enabled']}"
|
||||
end
|
||||
end
|
||||
|
||||
def select_feature(features, input)
|
||||
index = Integer(input, exception: false)
|
||||
return nil if index.nil?
|
||||
|
||||
features[index - 1]
|
||||
end
|
||||
|
||||
def toggle_feature(config, features, feature)
|
||||
print "#{feature['name']} is currently enabled: #{feature['enabled']}. Type 'true' or 'false' to set (anything else cancels): "
|
||||
input = $stdin.gets.chomp
|
||||
|
||||
case input
|
||||
when 'true'
|
||||
new_state = true
|
||||
when 'false'
|
||||
new_state = false
|
||||
else
|
||||
puts 'Cancelled.'
|
||||
return
|
||||
end
|
||||
|
||||
feature['enabled'] = new_state
|
||||
config.value = features
|
||||
config.save!
|
||||
GlobalConfig.clear_cache
|
||||
puts "Updated #{feature['name']} to enabled: #{new_state}"
|
||||
end
|
||||
end
|
||||
# rubocop:enable Metrics/BlockLength
|
||||
Reference in New Issue
Block a user