Class: Noiseless::Pagination::Cursor
- Inherits:
-
Object
- Object
- Noiseless::Pagination::Cursor
- Defined in:
- lib/noiseless/pagination.rb
Overview
Keyset pagination cursor
Instance Attribute Summary collapse
-
#direction ⇒ Object
readonly
Returns the value of attribute direction.
-
#field ⇒ Object
readonly
Returns the value of attribute field.
-
#value ⇒ Object
readonly
Returns the value of attribute value.
Class Method Summary collapse
-
.decode(encoded) ⇒ Object
Decode cursor from API request.
-
.from_record(record, field:, direction: :asc) ⇒ Object
Build next cursor from last record.
Instance Method Summary collapse
-
#encode ⇒ Object
Encode cursor for API response.
-
#initialize(field:, value:, direction: :asc) ⇒ Cursor
constructor
A new instance of Cursor.
Constructor Details
#initialize(field:, value:, direction: :asc) ⇒ Cursor
Returns a new instance of Cursor.
70 71 72 73 74 |
# File 'lib/noiseless/pagination.rb', line 70 def initialize(field:, value:, direction: :asc) @field = field.to_s @value = value @direction = direction.to_sym end |
Instance Attribute Details
#direction ⇒ Object (readonly)
Returns the value of attribute direction.
68 69 70 |
# File 'lib/noiseless/pagination.rb', line 68 def direction @direction end |
#field ⇒ Object (readonly)
Returns the value of attribute field.
68 69 70 |
# File 'lib/noiseless/pagination.rb', line 68 def field @field end |
#value ⇒ Object (readonly)
Returns the value of attribute value.
68 69 70 |
# File 'lib/noiseless/pagination.rb', line 68 def value @value end |
Class Method Details
.decode(encoded) ⇒ Object
Decode cursor from API request
82 83 84 85 86 87 88 89 |
# File 'lib/noiseless/pagination.rb', line 82 def self.decode(encoded) return nil if encoded.blank? data = JSON.parse(Base64.urlsafe_decode64(encoded)) new(field: data["f"], value: data["v"], direction: data["d"]&.to_sym || :asc) rescue StandardError nil end |
.from_record(record, field:, direction: :asc) ⇒ Object
Build next cursor from last record
92 93 94 95 |
# File 'lib/noiseless/pagination.rb', line 92 def self.from_record(record, field:, direction: :asc) value = record.respond_to?(field) ? record.send(field) : record[field.to_s] new(field: field, value: value, direction: direction) end |
Instance Method Details
#encode ⇒ Object
Encode cursor for API response
77 78 79 |
# File 'lib/noiseless/pagination.rb', line 77 def encode Base64.urlsafe_encode64(JSON.generate({ f: field, v: value, d: direction })) end |