50 lines
999 B
Ruby
50 lines
999 B
Ruby
class Rock
|
|
def self.on(flag_name)
|
|
enable(flag_name, true)
|
|
end
|
|
|
|
def self.off(flag_name)
|
|
enable(flag_name, false)
|
|
end
|
|
|
|
def self.on?(flag_name)
|
|
result = sql <<-SQL
|
|
SELECT enabled FROM feature_flags
|
|
WHERE name = '#{flag_name}';
|
|
SQL
|
|
result&.first&.dig("enabled") || false
|
|
end
|
|
|
|
def self.off?(flag_name)
|
|
!on?(flag_name)
|
|
end
|
|
|
|
def self.delete(flag_name)
|
|
sql <<-SQL
|
|
DELETE FROM feature_flags
|
|
WHERE name = '#{flag_name}';
|
|
SQL
|
|
end
|
|
|
|
def self.delete_all_disabled
|
|
sql <<-SQL
|
|
DELETE FROM feature_flags
|
|
WHERE enabled = false;
|
|
SQL
|
|
end
|
|
|
|
private
|
|
|
|
def self.enable(flag_name, enabled)
|
|
sql <<-SQL
|
|
INSERT INTO feature_flags (name, enabled, created_at, updated_at)
|
|
VALUES ('#{flag_name}', #{enabled}, now(), now())
|
|
ON CONFLICT (name) DO UPDATE SET enabled = #{enabled};
|
|
SQL
|
|
end
|
|
|
|
def self.sql(query_string)
|
|
ActiveRecord::Base.connection.execute(query_string)
|
|
end
|
|
end
|