mirror of https://github.com/mastodon/mastodon
Add simple feature flag system
Allows specifying enabled features as a comma separated list in `ENV['EXPERIMENTAL_FEATURES']`. Can be queries as `Mastodon::Feature.<name>_enabled?`.
This commit is contained in:
parent
bdc9cb27e2
commit
502ad52c75
|
@ -35,6 +35,7 @@ require_relative '../lib/paperclip/type_corrector'
|
|||
require_relative '../lib/paperclip/response_with_limit_adapter'
|
||||
require_relative '../lib/terrapin/multi_pipe_extensions'
|
||||
require_relative '../lib/mastodon/snowflake'
|
||||
require_relative '../lib/mastodon/feature'
|
||||
require_relative '../lib/mastodon/version'
|
||||
require_relative '../lib/mastodon/rack_middleware'
|
||||
require_relative '../lib/public_file_server_middleware'
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Mastodon::Feature
|
||||
class << self
|
||||
def enabled_features
|
||||
@enabled_features ||=
|
||||
(ENV['EXPERIMENTAL_FEATURES'] || '').split(',').map(&:strip)
|
||||
end
|
||||
|
||||
def method_missing(name)
|
||||
if respond_to_missing?(name)
|
||||
feature = name.to_s.sub(/_enabled\?$/, '')
|
||||
enabled = enabled_features.include?(feature)
|
||||
define_singleton_method(name) { enabled }
|
||||
|
||||
return enabled
|
||||
end
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def respond_to_missing?(name)
|
||||
name.to_s.end_with?('_enabled?')
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,29 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Mastodon::Feature do
|
||||
around do |example|
|
||||
ClimateControl.modify EXPERIMENTAL_FEATURES: 'fasp,fetch_all_replies' do
|
||||
example.run
|
||||
end
|
||||
end
|
||||
|
||||
describe '::fasp_enabled?' do
|
||||
subject { described_class.fasp_enabled? }
|
||||
|
||||
it { is_expected.to be true }
|
||||
end
|
||||
|
||||
describe '::fetch_all_replies_enabled?' do
|
||||
subject { described_class.fetch_all_replies_enabled? }
|
||||
|
||||
it { is_expected.to be true }
|
||||
end
|
||||
|
||||
describe '::unspecified_feature_enabled?' do
|
||||
subject { described_class.unspecified_feature_enabled? }
|
||||
|
||||
it { is_expected.to be false }
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue