Sha256: 372ba31dbcc674415ad04deef190afcbf7cc6dcc626d987681f7cea145ac1921

Contents?: true

Size: 866 Bytes

Versions: 4

Compression:

Stored size: 866 Bytes

Contents

require 'base64'
require 'active_support/json'

module GearedPagination
  class Cursor
    class << self
      def from_param(key)
        key.present? ? decode(key) : 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

4 entries across 4 versions & 1 rubygems

Version Path
geared_pagination-1.1.0 lib/geared_pagination/cursor.rb
geared_pagination-1.0.2 lib/geared_pagination/cursor.rb
geared_pagination-1.0.1 lib/geared_pagination/cursor.rb
geared_pagination-1.0.0 lib/geared_pagination/cursor.rb