class WCC::API::BaseQuery

Constants

MAX_LIMIT

Attributes

filter[RW]
limit[R]
offset[R]
paging[R]
scope[R]

Public Class Methods

new(params, scope: default_scope, paging: true) click to toggle source
# File lib/wcc/api/base_query.rb, line 26
def initialize(params, scope: default_scope, paging: true)
  @scope = scope
  @paging = paging
  set_defaults
  permitted_keys.each do |key|
    public_send("#{key}=", params[key]) if params.key?(key)
  end
end

Public Instance Methods

call(scope = self.scope) click to toggle source
# File lib/wcc/api/base_query.rb, line 35
def call(scope = self.scope)
  scope = scope.dup
  scope = paged(scope)
  scope = ordered(scope)
  scope = filtered(scope)
  scope
end
default() click to toggle source
# File lib/wcc/api/base_query.rb, line 10
def default
  {
    limit: 20,
    offset: 0,
    filter: {}
  }
end
default_scope() click to toggle source
# File lib/wcc/api/base_query.rb, line 22
def default_scope
  raise NotImplementedError
end
filtered(scope = self.scope) click to toggle source
# File lib/wcc/api/base_query.rb, line 57
def filtered(scope = self.scope)
  scope
end
limit=(new_limit) click to toggle source
# File lib/wcc/api/base_query.rb, line 67
def limit=(new_limit)
  new_limit = new_limit.to_i
  @limit = new_limit > MAX_LIMIT ? MAX_LIMIT : new_limit
end
offset=(new_offset) click to toggle source
# File lib/wcc/api/base_query.rb, line 72
def offset=(new_offset)
  @offset = new_offset.to_i
end
ordered(scope = self.scope) click to toggle source
# File lib/wcc/api/base_query.rb, line 53
def ordered(scope = self.scope)
  scope
end
paged(scope = self.scope) click to toggle source
# File lib/wcc/api/base_query.rb, line 43
def paged(scope = self.scope)
  if paging
    scope
      .limit(limit)
      .offset(offset)
  else
    scope
  end
end
permitted_keys() click to toggle source
# File lib/wcc/api/base_query.rb, line 18
def permitted_keys
  %i[limit offset filter]
end
set_defaults() click to toggle source
# File lib/wcc/api/base_query.rb, line 61
def set_defaults
  default.each do |key, value|
    public_send("#{key}=", value)
  end
end
size() click to toggle source
# File lib/wcc/api/base_query.rb, line 80
def size
  if total - offset < limit
    total - offset
  else
    limit
  end
end
total() click to toggle source
# File lib/wcc/api/base_query.rb, line 76
def total
  @total ||= filtered.count
end