require 'delegate' require 'flipper/ui/decorators/gate' require 'flipper/ui/util' module Flipper module UI module Decorators class Feature < SimpleDelegator include Comparable # Public: The feature being decorated. alias_method :feature, :__getobj__ # Internal: Used to preload description if descriptions_source is # configured for Flipper::UI. attr_accessor :description # Public: Returns name titleized. def pretty_name @pretty_name ||= Util.titleize(name) end def color_class case feature.state when :on 'text-success' when :off 'text-danger' when :conditional 'text-warning' end end def gates_in_words return "Fully Enabled" if feature.boolean_value statuses = [] if feature.actors_value.count > 0 statuses << %Q() + Util.pluralize(feature.actors_value.count, 'actor', 'actors') + "" end if feature.groups_value.count > 0 statuses << %Q() + Util.pluralize(feature.groups_value.count, 'group', 'groups') + "" end if feature.percentage_of_actors_value > 0 statuses << "#{feature.percentage_of_actors_value}% of actors" end if feature.percentage_of_time_value > 0 statuses << "#{feature.percentage_of_time_value}% of time" end Util.to_sentence(statuses) end def gate_state_title case feature.state when :on "Fully enabled" when :conditional "Conditionally enabled" else "Disabled" end end def pretty_enabled_gate_names enabled_gates.map { |gate| Util.titleize(gate.key) }.sort.join(', ') end StateSortMap = { on: 1, conditional: 2, off: 3, }.freeze def <=>(other) if state == other.state key <=> other.key else StateSortMap[state] <=> StateSortMap[other.state] end end end end end end