module Shamu::Entities::ListScope::WindowPaging
Limit/offset style paging using first/after naming conventions typical in GraphQL implementations.
“` class UsersListScope < Shamu::Entities::ListScope
include Shamu::Entities::ListScope::WindowPaging
end
scope = UsersListScope.coerce!( params ) scope.first # => 25 scope.after # => 75 “`
Public Class Methods
included( base )
click to toggle source
@!endgroup Attributes
Calls superclass method
# File lib/shamu/entities/list_scope/window_paging.rb, line 38 def self.included( base ) super base.attribute :first, coerce: :to_i, default: ->() { default_first } base.attribute :default_first, coerce: :to_i, serialize: false base.attribute :after, coerce: :to_i base.attribute :last, default: ->() { default_last }, coerce: ->( value ) do ensure_includes_sorting! reverse_sort! value.to_i if value end base.attribute :default_last, serialize: false, coerce: ->( value ) do ensure_includes_sorting! reverse_sort! value.to_i if value end base.attribute :before, coerce: ->( value ) do ensure_includes_sorting! reverse_sort! value.to_i if value end base.validate :only_first_or_last end
Public Instance Methods
window_paged?()
click to toggle source
@return [Boolean] true if the scope is paged.
# File lib/shamu/entities/list_scope/window_paging.rb, line 71 def window_paged? first? || last? end
Private Instance Methods
ensure_includes_sorting!()
click to toggle source
# File lib/shamu/entities/list_scope/window_paging.rb, line 89 def ensure_includes_sorting! raise "Must include Shamu::Entities::ListScope::Sorting to use last/before" unless respond_to?( :reverse_sort!, true ) # rubocop:disable Metrics/LineLength end
first?()
click to toggle source
# File lib/shamu/entities/list_scope/window_paging.rb, line 77 def first? !!first || !!after end
last?()
click to toggle source
# File lib/shamu/entities/list_scope/window_paging.rb, line 81 def last? !!last || !!before end
only_first_or_last()
click to toggle source
# File lib/shamu/entities/list_scope/window_paging.rb, line 85 def only_first_or_last errors.add :base, :only_first_or_last if first? && last? end