# frozen_string_literal: true module OpenFoodNetwork # Feature toggles are configured via Flipper. # # - config/initializers/flipper.rb # - http://localhost:3000/admin/feature-toggle/features # module FeatureToggle # Please add your new feature here to appear in the Flipper UI. # We way move this to a YAML file when it becomes too awkward. # **WARNING:** Features not in this list will be removed. CURRENT_FEATURES = { "admin_style_v3" => <<~DESC, Test the work-in-progress design updates. DESC "api_reports" => <<~DESC, An API endpoint for reports at /api/v0/reports/:report_type(/:report_subtype) DESC "api_v1" => <<~DESC, Enable the new API at /api/v1 DESC "background_reports" => <<~DESC, Generate reports in a background process to limit memory consumption. DESC "match_shipping_categories" => <<~DESC, During checkout, show only shipping methods that support all shipping categories. Activating this feature for an enterprise owner will activate it for all shops of this enterprise. DESC "vouchers" => <<~DESC, Add voucher functionality. Voucher can be managed via Enterprise settings. This is activated per enterprise. Enter actors as Enterprise;1234. DESC "invoices" => <<~DESC, Preserve the state of generated invoices and enable multiple invoice numbers instead of only one live-updating invoice. DESC }.freeze def self.setup! CURRENT_FEATURES.each_key do |name| feature = Flipper.feature(name) feature.add unless feature.exist? end Flipper.features.each do |feature| feature.remove unless CURRENT_FEATURES.key?(feature.name) end end # Checks weather a feature is enabled for any of the given actors. def self.enabled?(feature_name, *actors) return Flipper.enabled?(feature_name) if actors.empty? actors.any? do |actor| Flipper.enabled?(feature_name, actor) end end # Checks weather a feature is disabled for all given actors. def self.disabled?(feature_name, *actors) !enabled?(feature_name, *actors) end end end