Module: ActiveRecord::Refined::AST

Defined in:
lib/active_record/refined/ast.rb

Defined Under Namespace

Modules: Arithmetics, BitwiseOperands, JsonSteps, Predications, SetSubquery, Windowing Classes: Aggregate, And, Arithmetic, ArrayPredicate, As, Bitwise, BitwiseNot, Case, Cast, Column, Comparison, DatetimeValueFunction, DistinctFrom, Exists, Extract, Function, GroupingSets, In, JsonContains, JsonHasKey, JsonPath, JsonSet, Like, Match, Node, Not, Or, Ordering, Over, Predicate, Quantified, TruthValue, Value, WindowFunction

Constant Summary collapse

NAME =
/[[:alpha:]_][[:alnum:]_$]*/
ALIAS_NAME =
/\A#{NAME}\z/
FUNCTION_NAME =
/\A#{NAME}(\.#{NAME})?\z/
TYPE_NAME =

A SQL type as cast writes it: words, at most parenthesized with lengths -- double precision, decimal(10,2).

/\A[[:alpha:]_][[:alnum:]_ ]*(\(\d+(, ?\d+)?\))?\z/
ADAPTER_FAMILIES =

Which family of spellings an adapter belongs to. MariaDB answers to the mysql2 adapter and is counted with MySQL, though the two part company over JSON. An adapter nobody has classified keeps the standard spellings and is left to say for itself what it cannot do.

{
  'sqlite3' => :sqlite,
  'postgresql' => :postgresql,
  'postgis' => :postgresql,
  'mysql2' => :mysql,
  'trilogy' => :mysql,
}.freeze

Class Method Summary collapse

Class Method Details

.adapter_family(model) ⇒ Object



26
27
28
# File 'lib/active_record/refined/ast.rb', line 26

def self.adapter_family(model)
  ADAPTER_FAMILIES[model.connection_db_config.adapter] || :unknown
end

.check_name(name, pattern, what) ⇒ Object

Raises:

  • (ArgumentError)


30
31
32
33
# File 'lib/active_record/refined/ast.rb', line 30

def self.check_name(name, pattern, what)
  return name if pattern.match?(name.to_s)
  raise ArgumentError, "#{name.inspect} is not a plain #{what}"
end