lib/flipper/api/v1/actions/features.rb in flipper-api-0.10.2 vs lib/flipper/api/v1/actions/features.rb in flipper-api-0.11.0.beta1
- old
+ new
@@ -1,32 +1,50 @@
require 'flipper/api/action'
require 'flipper/api/v1/decorators/feature'
-require 'json'
module Flipper
module Api
module V1
module Actions
class Features < Api::Action
+ route(/features\Z/)
- route %r{api/v1/features\Z}
-
def get
- features = flipper.features.map { |feature|
+ keys = params['keys']
+ features = if keys
+ names = keys.split(',')
+ if names.empty?
+ []
+ else
+ existing_feature_names = names.keep_if do |feature_name|
+ feature_exists?(feature_name)
+ end
+
+ flipper.preload(existing_feature_names)
+ end
+ else
+ flipper.features
+ end
+
+ decorated_features = features.map do |feature|
Decorators::Feature.new(feature).as_json
- }
+ end
- json_response({
- features: features
- })
+ json_response(features: decorated_features)
end
def post
feature_name = params.fetch('name') { json_error_response(:name_invalid) }
feature = flipper[feature_name]
flipper.adapter.add(feature)
decorated_feature = Decorators::Feature.new(feature)
json_response(decorated_feature.as_json, 200)
+ end
+
+ private
+
+ def feature_exists?(feature_name)
+ flipper.features.map(&:key).include?(feature_name)
end
end
end
end
end