module OrderQuery::NullsDirection

Handles nulls :first and :last direction.

Constants

DIRECTIONS

Public Instance Methods

all() click to toggle source
# File lib/order_query/nulls_direction.rb, line 10
def all
  DIRECTIONS
end
connection_adapter(scope) click to toggle source
# File lib/order_query/nulls_direction.rb, line 44
def connection_adapter(scope)
  if scope.respond_to?(:connection_db_config)
    # Rails >= 6.1.0
    scope.connection_db_config.adapter
  else
    scope.connection_config[:adapter]
  end
end
default(scope, dir) click to toggle source

@param scope [ActiveRecord::Relation] @param dir [:asc, :desc] @return [:first, :last] the default nulls order, based on the given

scope's connection adapter name.
# File lib/order_query/nulls_direction.rb, line 34
def default(scope, dir)
  case connection_adapter(scope)
  when /mysql|maria|sqlite|sqlserver/i
    (dir == :asc ? :first : :last)
  else
    # Oracle, Postgres
    (dir == :asc ? :last : :first)
  end
end
parse!(direction) click to toggle source

@param [:first, :last] direction @raise [ArgumentError] @return [:first, :last]

# File lib/order_query/nulls_direction.rb, line 23
def parse!(direction)
  all.include?(direction) && direction or
    fail ArgumentError,
         "`nulls` must be in #{all.map(&:inspect).join(', ')}, "\
         "is #{direction.inspect}"
end
reverse(direction) click to toggle source

@param [:first, :last] direction @return [:first, :last]

# File lib/order_query/nulls_direction.rb, line 16
def reverse(direction)
  all[(all.index(direction) + 1) % 2].to_sym
end