command_list.rb

 1# frozen_string_literal: true
 2
 3class CommandList
 4	include Enumerable
 5
 6	def self.for(customer)
 7		EMPromise.resolve(customer&.registered?).catch { nil }.then do |reg|
 8			next Registered.for(customer, reg.phone) if reg
 9			CommandList.new
10		end
11	end
12
13	def each
14		yield node: "jabber:iq:register", name: "Register"
15	end
16
17	class Registered < CommandList
18		def self.for(customer, tel)
19			EMPromise.all([
20				REDIS.get("catapult_fwd-#{tel}"),
21				customer.plan_name ? customer.payment_methods : []
22			]).then do |(fwd, payment_methods)|
23				Registered.new(*[
24					(HAS_CREDIT_CARD unless payment_methods.empty?),
25					(HAS_CURRENCY if customer.currency),
26					(HAS_FORWARDING if fwd)
27				].compact)
28			end
29		end
30
31		def initialize(*args)
32			@extra = args
33		end
34
35		ALWAYS = [
36			{ node: "number-display", name: "Display JMP Number" },
37			{ node: "configure-calls", name: "Configure Calls" },
38			{ node: "usage", name: "Show Monthly Usage" },
39			{ node: "reset sip account", name: "Create or Reset SIP Account" },
40			{
41				node: "credit cards",
42				name: "Credit Card Settings and Management"
43			}
44		].freeze
45
46		def each
47			super
48			([ALWAYS] + @extra).each do |commands|
49				commands.each { |x| yield x }
50			end
51		end
52	end
53
54	HAS_CURRENCY = [
55		node: "alt top up",
56		name: "Buy Account Credit by Bitcoin, Mail, or Interac eTransfer"
57	].freeze
58
59	HAS_FORWARDING = [
60		node: "record-voicemail-greeting",
61		name: "Record Voicemail Greeting"
62	].freeze
63
64	HAS_CREDIT_CARD = [
65		node: "top up", name: "Buy Account Credit by Credit Card"
66	].freeze
67end