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