Module: Pagy::Keyset::Adapters::Sequel

Defined in:
lib/pagy/classes/keyset/adapters/sequel.rb

Overview

Keyset adapter for sequel

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(including) ⇒ Object



55
56
57
58
59
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 55

def self.included(including)
  instance_methods(false).each do |method_name|
    including.send(:protected, method_name)
  end
end

Instance Method Details

#apply_where(predicate, arguments) ⇒ Object

Apply the where predicate to the set



51
52
53
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 51

def apply_where(predicate, arguments)
  @set = @set.where(::Sequel.lit(predicate, **arguments))
end

#ensure_selectObject

Append the missing keyset keys, if the set is restricted by select



43
44
45
46
47
48
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 43

def ensure_select
  return if @set.opts[:select].nil?

  selected = @set.opts[:select]
  @set = @set.select_append(*@keyset.keys.reject { |c| selected.include?(c) })
end

#extract_keysetObject

Extract the keyset from the set



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 9

def extract_keyset
  return {} unless @set.opts[:order]

  @set.opts[:order].each_with_object({}) do |item, keyset|
    case item
    when Symbol
      keyset[item] = :asc
    when ::Sequel::SQL::OrderedExpression
      keyset[item.expression] = item.descending ? :desc : :asc
    else
      raise TypeError, "#{item.class.inspect} is not a supported Sequel::SQL::OrderedExpression"
    end
  end
end

#keyset_attributes_from(record) ⇒ Object

Get the keyset attributes from a record



25
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 25

def keyset_attributes_from(record) = record.to_hash.slice(*@keyset.keys)

#quoted_identifiers(table) ⇒ Object

Get the hash of quoted keyset identifiers



28
29
30
31
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 28

def quoted_identifiers(table)
  db = @set.db
  @keyset.to_h { |column| [column, "#{db.quote_identifier(table)}.#{db.quote_identifier(column)}"] }
end

#typecast(attributes) ⇒ Object

Typecast the attributes



34
35
36
37
38
39
40
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 34

def typecast(attributes)
  model = @set.opts[:model]
  model.unrestrict_primary_key if (primary_key_is_restricted = model.restrict_primary_key?)
  attributes = model.new(attributes).to_hash.slice(*attributes.keys.map(&:to_sym))
  model.restrict_primary_key if primary_key_is_restricted
  attributes
end