class Tenios::API::CallDetailRecords
Attributes
client[R]
Public Class Methods
new(client)
click to toggle source
# File lib/tenios/api/call_detail_records.rb, line 8 def initialize(client) @client = client end
Public Instance Methods
retrieve(date_range, page_size: 100)
click to toggle source
# File lib/tenios/api/call_detail_records.rb, line 12 def retrieve(date_range, page_size: 100) stream do |page| payload = build_payload(date_range, page: page, page_size: page_size) client.post("/cdrs/retrieve", payload) end end
Private Instance Methods
build_payload(date_range, page:, page_size:)
click to toggle source
# File lib/tenios/api/call_detail_records.rb, line 21 def build_payload(date_range, page:, page_size:) expect_date_range! date_range { start_date_from: format_datetime(date_range.begin), start_date_to: format_datetime(date_range.end), page: page, page_size: page_size } end
expect_date_range!(date_range)
click to toggle source
# File lib/tenios/api/call_detail_records.rb, line 32 def expect_date_range!(date_range) return if %i[begin end].all? { |method| date_range.respond_to? method } raise TypeError, <<~ERR.strip Expect date_range to be Range-like (respond_to methods #begin and #end), but was: #{date_range.class} ERR end
format_datetime(time)
click to toggle source
# File lib/tenios/api/call_detail_records.rb, line 40 def format_datetime(time) time.utc.strftime("%FT%H:%M:%S.0Z") end
stream() { |page| ... }
click to toggle source
# File lib/tenios/api/call_detail_records.rb, line 44 def stream Enumerator.new { |records| (1..Float::INFINITY).each do |page| res = yield page res["items"].each { |item| records << item } break if res["total_items"] <= page * res["page_size"] end }.lazy end