Sha256: e9f99df4f96273e82d04f77a299bd4dfeaa57b0fd61667b40a573d19badfe5bd

Contents?: true

Size: 1.24 KB

Versions: 15

Compression:

Stored size: 1.24 KB

Contents

module Myfinance
  module Entities
    #
    # A wrapper to Myfinance collection returns from API.
    # This wrapper represents a collection and it's responsible for
    # processing pagination information as well.
    #
    class Collection < Base
      PAGE_REGEX = /page=(\d+)/

      attr_reader :response, :collection, :headers

      def initialize(response)
        @response = response
        @collection = []
        @headers = begin
                     response.headers["Link"].split(",")
                   rescue
                     []
                   end
      end

      def self.build(response)
        new(response).build
      end

      def build
        build_collection
        self
      end

      def next_page
        page_for(:next)
      end

      def last_page
        page_for(:last)
      end

      def previous_page
        page_for(:prev)
      end

      def first_page
        page_for(:first)
      end

      private

      def page_for(page_rel)
        header_link_for(page_rel).match(PAGE_REGEX)[1].to_i
      rescue
        nil
      end

      def header_link_for(rel)
        headers.select { |n| n =~ /rel=#{rel}/ }.first
      end

      def build_collection
        raise NotImplementedError
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
myfinance-1.8.2 lib/myfinance/entities/collection.rb
myfinance-1.8.1 lib/myfinance/entities/collection.rb
myfinance-1.8.0 lib/myfinance/entities/collection.rb
myfinance-1.7.0 lib/myfinance/entities/collection.rb
myfinance-1.6.6 lib/myfinance/entities/collection.rb
myfinance-1.6.5 lib/myfinance/entities/collection.rb
myfinance-1.6.4 lib/myfinance/entities/collection.rb
myfinance-1.6.3 lib/myfinance/entities/collection.rb
myfinance-1.6.1 lib/myfinance/entities/collection.rb
myfinance-1.6.0 lib/myfinance/entities/collection.rb
myfinance-1.5.0 lib/myfinance/entities/collection.rb
myfinance-1.4.1 lib/myfinance/entities/collection.rb
myfinance-1.4.0 lib/myfinance/entities/collection.rb
myfinance-1.3.1 lib/myfinance/entities/collection.rb
myfinance-1.3.0 lib/myfinance/entities/collection.rb