You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

175 lines
7.0 KiB

namespace :cartodb do
namespace :features do
# WARNING: For use only at development, opensource and custom installs.
# Refer to https://github.com/CartoDB/cartodb-management/wiki/Feature-Flags
desc "enable feature for all users"
task :enable_feature_for_all_users, [:feature] => :environment do |t, args|
ff = FeatureFlag[:name => args[:feature]]
raise "[ERROR] Feature '#{args[:feature]}' does not exist" if ff.nil?
::User.all.each do |user|
if FeatureFlagsUser[feature_flag_id: ff.id, user_id: user.id].nil?
FeatureFlagsUser.new(feature_flag_id: ff.id, user_id: user.id).save
end
end
end
# WARNING: For use only at development, opensource and custom installs.
# Refer to https://github.com/CartoDB/cartodb-management/wiki/Feature-Flags
desc "enable feature for a given user"
task :enable_feature_for_user, [:feature, :username] => :environment do |t, args|
ff = FeatureFlag[:name => args[:feature]]
raise "[ERROR] Feature '#{args[:feature]}' does not exist" if ff.nil?
user = ::User[username: args[:username]]
raise "[ERROR] User '#{args[:username]}' does not exist" if user.nil?
if FeatureFlagsUser[feature_flag_id: ff.id, user_id: user.id].nil?
FeatureFlagsUser.new(feature_flag_id: ff.id, user_id: user.id).save
else
puts "[INFO] Feature '#{args[:feature]}' was already enabled for user '#{args[:username]}'"
end
end
# WARNING: For use only at development, opensource and custom installs.
# Refer to https://github.com/CartoDB/cartodb-management/wiki/Feature-Flags
desc "enable feature for a given organization"
task :enable_feature_for_organization, [:feature, :org_name] => :environment do |t, args|
ff = FeatureFlag[:name => args[:feature]]
raise "[ERROR] Feature '#{args[:feature]}' does not exist" if ff.nil?
organization = Organization[name: args[:org_name]]
raise "[ERROR] Organization '#{args[:org_name]}' does not exist" if organization.nil?
organization.users.each do |user|
if FeatureFlagsUser[feature_flag_id: ff.id, user_id: user.id].nil?
FeatureFlagsUser.new(feature_flag_id: ff.id, user_id: user.id).save
end
end
end
# WARNING: For use only at development, opensource and custom installs.
# Refer to https://github.com/CartoDB/cartodb-management/wiki/Feature-Flags
desc "disable feature for all users"
task :disable_feature_for_all_users, [:feature] => :environment do |t, args|
ff = FeatureFlag[:name => args[:feature]]
raise "[ERROR] Feature '#{args[:feature]}' does not exist" if ff.nil?
ffus = FeatureFlagsUser[:feature_flag_id => ff.id]
if ffus.nil?
puts "[INFO] No users had feature '#{args[:feature]}' enabled"
else
ffus.destroy
end
end
# WARNING: For use only at development, opensource and custom installs.
# Refer to https://github.com/CartoDB/cartodb-management/wiki/Feature-Flags
desc "disable feature for a given user"
task :disable_feature_for_user, [:feature, :username] => :environment do |t, args|
ff = FeatureFlag[:name => args[:feature]]
raise "[ERROR] Feature '#{args[:feature]}' does not exist" if ff.nil?
user = ::User[username: args[:username]]
raise "[ERROR] User '#{args[:username]}' does not exist" if user.nil?
if FeatureFlagsUser[feature_flag_id: ff.id, user_id: user.id].nil?
puts "[INFO] Feature '#{args[:feature]}' was already disabled for user '#{args[:username]}'"
else
FeatureFlagsUser[feature_flag_id: ff.id, user_id: user.id].destroy
end
end
# WARNING: For use only at development, opensource and custom installs.
# Refer to https://github.com/CartoDB/cartodb-management/wiki/Feature-Flags
desc "disable feature for a given organization"
task :disable_feature_for_organization, [:feature, :org_name] => :environment do |t, args|
ff = FeatureFlag[:name => args[:feature]]
raise "[ERROR] Feature '#{args[:feature]}' does not exist" if ff.nil?
organization = Organization[name: args[:org_name]]
raise "[ERROR] Organization '#{args[:org_name]}' does not exist" if organization.nil?
organization.users.each do |user|
if FeatureFlagsUser[feature_flag_id: ff.id, user_id: user.id].nil?
puts "[INFO] Feature '#{args[:feature]}' was already disabled for user '#{args[:username]}'"
else
FeatureFlagsUser[feature_flag_id: ff.id, user_id: user.id].destroy
end
end
end
# WARNING: For use only at development, opensource and custom installs.
# Refer to https://github.com/CartoDB/cartodb-management/wiki/Feature-Flags
desc "add feature flag and optionally set restricted (default is true)"
task :add_feature_flag, [:feature, :restricted] => :environment do |_task, args|
restricted = args[:restricted] ? args[:restricted].casecmp('false') != 0 : true
ff = FeatureFlag[name: args[:feature]]
if !ff
ff = FeatureFlag.new(name: args[:feature], restricted: restricted)
ff.id = FeatureFlag.any? ? FeatureFlag.order(:id).last.id + 1 : 0
ff.save
puts "[INFO]\tFeature flag '#{args[:feature]}' created and restricted set to '#{ff.restricted}'"
else
raise "[ERROR]\tFeature '#{args[:feature]}' already exists and its restricted set to '#{ff.restricted}'"
end
end
# WARNING: For use only at development, opensource and custom installs.
# Refer to https://github.com/CartoDB/cartodb-management/wiki/Feature-Flags
desc "change feature flag to restricted or unrestricted"
task :change_feature_restricted, [:feature, :restricted] => :environment do |_task, args|
restricted = args[:restricted] ? args[:restricted].casecmp('false') != 0 : true
ff = FeatureFlag[name: args[:feature]]
if ff
ff.restricted = restricted
ff.save
puts "[INFO]\tFeature flag '#{args[:feature]}' restricted set to '#{ff.restricted}'"
else
raise "[ERROR]\tFeature '#{args[:feature]}' doesn't exist"
end
end
# WARNING: For use only at development, opensource and custom installs.
# Refer to https://github.com/CartoDB/cartodb-management/wiki/Feature-Flags
desc "remove feature flag"
task :remove_feature_flag, [:feature] => :environment do |t, args|
ff = FeatureFlag[:name => args[:feature]]
raise "[ERROR] Feature '#{args[:feature]}' does not exist" if ff.nil?
ffus = FeatureFlagsUser[:feature_flag_id => ff.id]
if ffus.nil?
puts "[INFO] No users had feature '#{args[:feature]}' enabled"
else
ffus.destroy
end
ff.destroy()
end
# WARNING: For use only at development, opensource and custom installs.
# Refer to https://github.com/CartoDB/cartodb-management/wiki/Feature-Flags
desc "list all features"
task :list_all_features => :environment do
puts "Available features:"
FeatureFlag.all.each do |feature|
puts " - #{feature.name}"
end
end
end # Features
end # CartoDB