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
- #apply_where(predicate, arguments) ⇒ Object
- #ensure_select ⇒ Object
- #extract_keyset ⇒ Object
- #keyset_attributes_from(record) ⇒ Object
- #quoted_identifiers(table) ⇒ Object
- #typecast(attributes) ⇒ Object
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_select ⇒ Object
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
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 |