Sha256: d2c93d0993f0d3b06c3ed25cbe578fecbb7ac29eca2efb7cd65bd282b9fd4324

Contents?: true

Size: 924 Bytes

Versions: 3

Compression:

Stored size: 924 Bytes

Contents

require 'base64'
require 'active_support/json'

module GearedPagination
  class Cursor
    class << self
      def from_param(key)
        key.present? ? decode(key) : new
      rescue ArgumentError, JSON::ParserError
        new
      end

      def decode(key)
        if attributes = ActiveSupport::JSON.decode(Base64.urlsafe_decode64(key))
          new **attributes.deep_symbolize_keys
        end
      end

      def encode(page_number: 1, values: {})
        Base64.urlsafe_encode64 ActiveSupport::JSON.encode(page_number: page_number, values: values)
      end
    end

    attr_reader :values

    def initialize(page_number: 1, values: {})
      @page_number, @values = page_number, values
    end

    def page_number
      @page_number > 0 ? @page_number : 1
    end

    def fetch(attribute)
      values.fetch(attribute)
    end

    def include?(attribute)
      values.include?(attribute)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
geared_pagination-1.2.0 lib/geared_pagination/cursor.rb
geared_pagination-1.1.2 lib/geared_pagination/cursor.rb
geared_pagination-1.1.1 lib/geared_pagination/cursor.rb