Module: Pagy::Keyset::Adapters::ActiveRecord
- Defined in:
- lib/pagy/classes/keyset/adapters/active_record.rb
Overview
Keyset adapter for ActiveRecord
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
42 43 44 45 46 |
# File 'lib/pagy/classes/keyset/adapters/active_record.rb', line 42 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
38 39 40 |
# File 'lib/pagy/classes/keyset/adapters/active_record.rb', line 38 def apply_where(predicate, arguments) @set = @set.where(predicate, **arguments) end |
#ensure_select ⇒ Object
32 33 34 35 36 |
# File 'lib/pagy/classes/keyset/adapters/active_record.rb', line 32 def ensure_select return if @set.select_values.empty? @set = @set.select(*@keyset.keys) end |
#extract_keyset ⇒ Object
8 9 10 11 12 |
# File 'lib/pagy/classes/keyset/adapters/active_record.rb', line 8 def extract_keyset @set.order_values.each_with_object({}) do |node, keyset| keyset[node.value.name.to_sym] ||= node.direction end end |
#keyset_attributes_from(record) ⇒ Object
14 15 16 |
# File 'lib/pagy/classes/keyset/adapters/active_record.rb', line 14 def keyset_attributes_from(record) record.slice(*@keyset.keys) end |
#quoted_identifiers(table) ⇒ Object
18 19 20 21 |
# File 'lib/pagy/classes/keyset/adapters/active_record.rb', line 18 def quoted_identifiers(table) connection = @set.connection @keyset.to_h { |column| [column, "#{connection.quote_table_name(table)}.#{connection.quote_column_name(column)}"] } end |
#typecast(attributes) ⇒ Object
23 24 25 26 27 28 29 30 |
# File 'lib/pagy/classes/keyset/adapters/active_record.rb', line 23 def typecast(attributes) model = @set.model {}.tap do |result| @keyset.each_key do |k| result[k] = model.type_for_attribute(k).cast(attributes[k]) end end end |