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
-
#apply_where(predicate, arguments) ⇒ Object
Apply the where predicate to the set.
-
#ensure_select ⇒ Object
Append the missing keyset keys, if the set is restricted by select.
-
#extract_keyset ⇒ Object
Extract the keyset from the set.
-
#keyset_attributes_from(record) ⇒ Object
Get the keyset attributes from a record.
-
#quoted_identifiers(table) ⇒ Object
Get the hash of quoted keyset identifiers.
-
#typecast(attributes) ⇒ Object
Typecast the attributes.
Class Method Details
.included(including) ⇒ Object
57 58 59 60 61 |
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 57 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
53 54 55 |
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 53 def apply_where(predicate, arguments) @set = @set.where(::Sequel.lit(predicate, **arguments)) end |
#ensure_select ⇒ Object
Append the missing keyset keys, if the set is restricted by select
45 46 47 48 49 50 |
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 45 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_keyset ⇒ Object
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 26 27 |
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 25 def keyset_attributes_from(record) record.to_hash.slice(*@keyset.keys) end |
#quoted_identifiers(table) ⇒ Object
Get the hash of quoted keyset identifiers
30 31 32 33 |
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 30 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
36 37 38 39 40 41 42 |
# File 'lib/pagy/classes/keyset/adapters/sequel.rb', line 36 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 |