1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
require 'flipper/api/action'
require 'flipper/api/v1/decorators/feature'
module Flipper
module Api
module V1
module Actions
class GroupsGate < Api::Action
include FeatureNameFromRoute
route %r{\A/features/(?<feature_name>.*)/groups/?\Z}
def post
ensure_valid_params
feature = flipper[feature_name]
feature.enable_group(group_name)
decorated_feature = Decorators::Feature.new(feature)
json_response(decorated_feature.as_json, 200)
end
def delete
ensure_valid_params
feature = flipper[feature_name]
feature.disable_group(group_name)
decorated_feature = Decorators::Feature.new(feature)
json_response(decorated_feature.as_json, 200)
end
private
def ensure_valid_params
if group_name.nil? || group_name.empty?
json_error_response(:name_invalid)
end
return if allow_unregistered_groups?
return if Flipper.group_exists?(group_name)
json_error_response(:group_not_registered)
end
def allow_unregistered_groups?
allow_unregistered_groups = params['allow_unregistered_groups']
allow_unregistered_groups && allow_unregistered_groups == 'true'
end
def disallow_unregistered_groups?
!allow_unregistered_groups?
end
def group_name
@group_name ||= params['name']
end
end
end
end
end
end
|