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 59 60 61 62 63
|
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__
# Public: Returns name titleized.
def pretty_name
@pretty_name ||= Util.titleize(name)
end
# Public: Returns instance as hash that is ready to be json dumped.
def as_json
gate_values = feature.gate_values
{
'id' => name.to_s,
'name' => pretty_name,
'state' => state.to_s,
'gates' => gates.map do |gate|
Decorators::Gate.new(gate, gate_values[gate.key]).as_json
end,
}
end
def color_class
case feature.state
when :on
'text-success'
when :off
'text-danger'
when :conditional
'text-warning'
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
|