flaggle_rock/lib/flaggle_rock.rb

50 lines
1009 B
Ruby

class Rock
def self.turn_on(flag_name)
enable(flag_name, true)
end
def self.turn_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