Module: ActiveStash::Backports::Rails6::RelationMonkeyPatch

Defined in:
lib/active_stash/backports/rails6.rb

Instance Method Summary collapse

Instance Method Details

#column_references(order_args) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/active_stash/backports/rails6.rb', line 27

def column_references(order_args)
  references = order_args.flat_map do |arg|
    case arg
    when String, Symbol
      arg
    when Hash
      arg.keys.map do |key|
        key if key.is_a?(String) || key.is_a?(Symbol)
      end
    end
  end
  references.map! { |arg| arg =~ /^\W?(\w+)\W?\./ && $1 }.compact!
  references
end

#in_order_of(column, values) ⇒ Object

This code is pilfered from Rails 7



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/active_stash/backports/rails6.rb', line 12

def in_order_of(column, values)
  klass.disallow_raw_sql!([column], permit: connection.column_name_with_order_matcher)
  return spawn.none! if values.empty?

  references = column_references([column])
  self.references_values |= references unless references.empty?

  values = values.map { |value| type_caster.type_cast_for_database(column, value) }
  arel_column = column.is_a?(Symbol) ? order_column(column.to_s) : column

  spawn
    .order!(connection.field_ordered_value(arel_column, values))
    .where!(arel_column.in(values))
end