module BaseCRM class PaginatedResource include Enumerable attr_reader :current_page def initialize(service, *args) raise TypeError unless service.respond_to?(:where) @service = service @args = args @options = args.last.kind_of?(Hash) ? args.pop : {} end def each(&block) return to_enum(:each) unless block_given? current_page = 1 per_page = 25 search_options = @options.merge(page: current_page, per_page: per_page) until (resources = @service.where(*@args, search_options)).empty? resources.each(&block) current_page += 1 search_options[:page] = current_page end self end end end