# frozen_string_literal: true class CommandList include Enumerable def self.for(jid) Customer.for_jid(jid).catch { nil }.then do |customer| EMPromise.resolve(customer&.registered?).catch { nil }.then do |reg| next Registered.for(customer, reg.phone) if reg CommandList.new end end end def each yield node: "jabber:iq:register", name: "Register" end class Registered < CommandList def self.for(customer, tel) EMPromise.all([ REDIS.get("catapult_fwd-#{tel}"), customer.plan_name ? customer.payment_methods : [] ]).then do |(fwd, payment_methods)| Registered.new(*[ (HAS_CREDIT_CARD unless payment_methods.empty?), (HAS_FORWARDING if fwd) ].compact) end end def initialize(*args) @extra = args end ALWAYS = [ { node: "number-display", name: "Display JMP Number" }, { node: "configure-calls", name: "Configure Calls" }, { node: "usage", name: "Show Monthly Usage" }, { node: "reset sip account", name: "Create or Reset SIP Account" }, { node: "credit cards", name: "Credit Card Settings and Management" } ].freeze def each super ([ALWAYS] + @extra).each do |commands| commands.each { |x| yield x } end end end HAS_FORWARDING = [ node: "record-voicemail-greeting", name: "Record Voicemail Greeting" ].freeze HAS_CREDIT_CARD = [ node: "top up", name: "Buy Account Credit by Credit Card" ].freeze end