mirror of
https://github.com/discourse/discourse.git
synced 2025-06-04 11:11:13 +08:00

Toggle the button to enable the experimental site setting from "What's new" announcement. The toggle button is displayed when: - site setting exists and is boolean; - potentially required plugin is enabled.
35 lines
635 B
Ruby
35 lines
635 B
Ruby
# frozen_string_literal: true
|
|
|
|
class Experiments::Toggle
|
|
include Service::Base
|
|
|
|
policy :current_user_is_admin
|
|
|
|
contract do
|
|
attribute :setting_name, :string
|
|
validates :setting_name, presence: true
|
|
end
|
|
|
|
policy :setting_is_available
|
|
|
|
transaction { step :toggle }
|
|
|
|
private
|
|
|
|
def current_user_is_admin(guardian:)
|
|
guardian.is_admin?
|
|
end
|
|
|
|
def setting_is_available(contract:)
|
|
SiteSetting.respond_to?(contract.setting_name)
|
|
end
|
|
|
|
def toggle(contract:, guardian:)
|
|
SiteSetting.set_and_log(
|
|
contract.setting_name,
|
|
!SiteSetting.send(contract.setting_name),
|
|
guardian.user,
|
|
)
|
|
end
|
|
end
|