# frozen_string_literal: true class CommandList include Enumerable def self.for(jid) Customer.for_jid(jid).then(&:registered?).catch { nil }.then { |reg| next [] unless reg REDIS.get("catapult_fwd-#{reg.phone}").then { |fwd| [reg, fwd] } }.then do |(reg, fwd)| next RegisteredAndHasForwarding.new if reg && fwd next Registered.new if reg CommandList.new end end def each yield node: "jabber:iq:register", name: "Register" end class Registered < CommandList def each super yield node: "number-display", name: "Display JMP Number" yield node: "configure-calls", name: "Configure Calls" # TODO: don't show this item if no braintree methods available # TODO: don't show this item if no plan for this customer yield node: "buy-credit", name: "Buy account credit" yield node: "usage", name: "Show Monthly Usage" yield node: "reset sip account", name: "Create or Reset SIP Account" end end class RegisteredAndHasForwarding < Registered def each super yield( node: "record-voicemail-greeting", name: "Record Voicemail Greeting" ) end end end