command_list.rb

 1# frozen_string_literal: true
 2
 3class CommandList
 4	include Enumerable
 5
 6	def self.for(jid)
 7		Customer.for_jid(jid).then(&:registered?).catch { nil }.then { |reg|
 8			next [] unless reg
 9			REDIS.get("catapult_fwd-#{reg.phone}").then { |fwd| [reg, fwd] }
10		}.then do |(reg, fwd)|
11			next RegisteredAndHasForwarding.new if reg && fwd
12			next Registered.new if reg
13			CommandList.new
14		end
15	end
16
17	def each
18		yield node: "jabber:iq:register", name: "Register"
19	end
20
21	class Registered < CommandList
22		def each
23			super
24			yield node: "number-display", name: "Display JMP Number"
25			yield node: "configure-calls", name: "Configure Calls"
26			# TODO: don't show this item if no braintree methods available
27			# TODO: don't show this item if no plan for this customer
28			yield node: "buy-credit", name: "Buy account credit"
29			yield node: "usage", name: "Show Monthly Usage"
30			yield node: "reset sip account", name: "Create or Reset SIP Account"
31		end
32	end
33
34	class RegisteredAndHasForwarding < Registered
35		def each
36			super
37			yield(
38				node: "record-voicemail-greeting",
39				name: "Record Voicemail Greeting"
40			)
41		end
42	end
43end