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

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

Overview

Keyset adapter for Sequel ORM

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(including) ⇒ Object



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

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



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

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

#ensure_selectObject



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



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

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



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

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

#quoted_identifiers(table) ⇒ Object



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

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

#typecast(attributes) ⇒ Object



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

def typecast(attributes)
  model = @set.model
  db    = @set.db
  {}.tap do |result|
    @keyset.each_key do |k|
      type      = model.db_schema[k].fetch(:type)
      result[k] = db.typecast_value(type, attributes[k])
    end
  end
end