moip/moip-sdk-ruby

View on GitHub
lib/moip2/invoice_api.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Moip2
  class InvoiceApi
    attr_reader :client

    def initialize(client)
      @client = client
    end

    def base_path
      "/v2/invoices"
    end

    def show(invoice_external_id)
      Resource::Invoice.new client, client.get("#{base_path}/#{invoice_external_id}")
    end

    def create(invoice)
      Resource::Invoice.new client, client.post(base_path, invoice)
    end

    def update(invoice_external_id, invoice)
      Resource::Invoice.new client, client.put("#{base_path}/#{invoice_external_id}", invoice)
    end

    def list(begin_date, end_date)
      find_all(begin_date: begin_date, end_date: end_date)
    end

    def find_all(email: nil, begin_date: nil, end_date: nil, limit: 20, offset: 0, q: nil, filters: nil)

      encoded_filters = Moip2::Util::FiltersEncoder.encode(filters)

      # `URI.encode...` will accept nil params, but they will pollute the URI
      params = {
        email: email,
        begin_date: begin_date,
        end_date: end_date,
        limit: limit,
        offset: offset,
        q: q,
        filters: encoded_filters,
      }.reject { |_, value| value.nil? }

      query_string = URI.encode_www_form(params)

      Resource::Invoice.new(
        client,
        client.get("#{base_path}?#{query_string}"),
      )
    end
  end
end