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
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_select ⇒ Object
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_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 |
# 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 |