class ParamsReady::Parameter::State

Public Class Methods

relation_delegator(name) click to toggle source
# File lib/params_ready/parameter/state.rb, line 17
def self.relation_delegator(name)
  define_method name do |relation_name, *args|
    relation(relation_name).send(name, *args)
  end
  ruby2_keywords name
end

Public Instance Methods

after_page(relation_name, keyset) click to toggle source
# File lib/params_ready/parameter/state.rb, line 78
def after_page(relation_name, keyset)
  value = relation(relation_name).pagination.after_page_value(keyset)
  update_in(value, [relation_name, :pagination])
end
before_page(relation_name, keyset) click to toggle source
# File lib/params_ready/parameter/state.rb, line 73
def before_page(relation_name, keyset)
  value = relation(relation_name).pagination.before_page_value(keyset)
  update_in(value, [relation_name, :pagination])
end
current_page() click to toggle source
# File lib/params_ready/parameter/state.rb, line 46
def current_page
  page
end
first_page(relation_name) click to toggle source
# File lib/params_ready/parameter/state.rb, line 50
def first_page(relation_name)
  value = relation(relation_name).pagination.first_page_value
  update_in(value, [relation_name, :pagination])
end
last_page(relation_name, *args, **opts) click to toggle source
# File lib/params_ready/parameter/state.rb, line 55
def last_page(relation_name, *args, **opts)
  value = relation(relation_name).pagination.last_page_value(*args, **opts)
  return if value.nil?
  update_in(value, [relation_name, :pagination])
end
limited_at(relation_name, limit) click to toggle source
# File lib/params_ready/parameter/state.rb, line 83
def limited_at(relation_name, limit)
  limit_key = relation(relation_name).pagination.limit_key
  update_in(limit, [relation_name, :pagination, limit_key])
end
next_page(relation_name, delta = 1, count: nil) click to toggle source
# File lib/params_ready/parameter/state.rb, line 67
def next_page(relation_name, delta = 1, count: nil)
  value = relation(relation_name).pagination.next_page_value(delta, count: count)
  return if value.nil?
  update_in(value, [relation_name, :pagination])
end
page(relation_name = nil, delta = 0, count: nil) click to toggle source
# File lib/params_ready/parameter/state.rb, line 34
def page(relation_name = nil, delta = 0, count: nil)
  if delta == 0
    clone
  else
    raise ParamsReadyError, "Relation must be specified when delta is not 0" if relation_name.nil?

    return nil unless relation(relation_name).pagination.can_yield_page? delta, count: count
    new_offset = relation(relation_name).new_offset(delta)
    update_in(new_offset, [relation_name, :pagination, 0])
  end
end
previous_page(relation_name, delta = 1) click to toggle source
# File lib/params_ready/parameter/state.rb, line 61
def previous_page(relation_name, delta = 1)
  value = relation(relation_name).pagination.previous_page_value(delta)
  return if value.nil?
  update_in(value, [relation_name, :pagination])
end
relation(name) click to toggle source
# File lib/params_ready/parameter/state.rb, line 12
def relation(name)
  raise ParamsReadyError, "Relation not defined: '#{name}'" unless relations.include? name
  child(name)
end
reordered(relation_name, column, direction) click to toggle source
# File lib/params_ready/parameter/state.rb, line 94
def reordered(relation_name, column, direction)
  new_order = relation(relation_name).ordering.reordered_value(column, direction)
  reordered = update_in(new_order, [relation_name, :ordering])
  reordered.first_page(relation_name)
end
toggled_order(relation_name, column) click to toggle source
# File lib/params_ready/parameter/state.rb, line 88
def toggled_order(relation_name, column)
  new_order = relation(relation_name).ordering.toggled_order_value(column)
  toggled = update_in(new_order, [relation_name, :ordering])
  toggled.first_page(relation_name)
end