Sha256: 2cbc6471e19f83a513cb88d917c6f090858172bb90e6136f5899b02d4d0facf3

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

module PayPro
  class List < Entity
    include Enumerable

    attr_accessor :filters

    def [](key)
      data[key]
    end

    def each(&block)
      data.each(&block)
    end

    def next(params: {})
      return List.create_from_data({ data: [] }, api_client: api_client) if next_link.nil?

      params = filters.merge(params).merge(cursor: next_id)

      response = api_client.request(method: 'get', uri: next_uri.path, params: params)
      Util.to_entity(response.data, api_client: api_client)
    end

    def previous(params: {})
      return List.create_from_data({ data: [] }, api_client: api_client) if previous_link.nil?

      params = filters.merge(params).merge(cursor: previous_id)

      response = api_client.request(method: 'get', uri: previous_uri.path, params: params)
      Util.to_entity(response.data, api_client: api_client)
    end

    def empty?
      data.empty?
    end

    private

    def next_id
      CGI.parse(next_uri.query)['cursor'].first
    end

    def next_uri
      @next_uri ||= URI.parse(next_link)
    end

    def next_link
      links['next']
    end

    def previous_id
      CGI.parse(previous_uri.query)['cursor'].first
    end

    def previous_uri
      @previous_uri ||= URI.parse(previous_link)
    end

    def previous_link
      @previous_link ||= links['prev']
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
paypro-2.0.0 lib/pay_pro/entities/list.rb