# frozen_string_literal: true class CommandList include Enumerable def self.register(command) @commands ||= [] @commands << command end def self.for(customer, from_jid) args_for(customer, from_jid).then do |kwargs| new(@commands.select { |c| c.list_for?(**kwargs) }) end end def self.args_for(customer, from_jid) args = { from_jid: from_jid, customer: customer, tel: customer&.registered? ? customer&.registered?&.phone : nil, fwd: customer&.fwd, payment_methods: [] } return EMPromise.resolve(args) unless customer&.plan_name customer.payment_methods.then do |payment_methods| args.merge(payment_methods: payment_methods) end end def initialize(commands) @commands = commands end def each(&blk) @commands.map { |c| { node: c.node, name: c.name } }.each(&blk) end end