Skip to content

Paginated requests Enumerator #10

@arturictus

Description

@arturictus

Example of code using pagination as enumerator

 def self.paginated_get(path, options = {})
      Enumerator.new do |y|
        params  = options.dup
        page    = nil
        total   = 0
        size    = params.delete(:size) { 50 }

        loop do
          response = get(path, { page: page, size: size }.merge(params))
          data = JSON.parse(response.body)
          objects = data["_embedded"].present? ?
                      data["_embedded"]["intelligenceObjects"] :
                      []
          total += objects.length

          objects.each do |element|
            y.yield element
          end

          break if (data["page"]["number"] >= (data["page"]["totalPages"] - 1) ||
                    objects.empty? ||
                    total >= MAX_OBJECTS)

          page = data["page"]["number"] + 1
        end
      end
    end

usage:

Endpoint.paginated_get(params) do |response|
# do somthing
end

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions