class Babik::Selection::Operation::Regex

Match by case sensitive regex

Public Class Methods

new(field, value) click to toggle source
Calls superclass method Babik::Selection::Operation::Base::new
# File lib/babik/queryset/lib/selection/operation/regex.rb, line 12
def initialize(field, value)
  value = value.inspect[1..-2] if value.class == Regexp
  value = value[1..-2] if value.class == String && value[0] == '/' && value[-1] == '/'
  value = _mysql2_convert_regex(value) if db_engine == 'mysql2'
  super(field, "?field #{operator} ?value", value)
end

Public Instance Methods

_mysql2_convert_regex(value) click to toggle source
# File lib/babik/queryset/lib/selection/operation/regex.rb, line 27
def _mysql2_convert_regex(value)
  replacements = { '\\d' => '[0-9]', '\\w' => '[a-zA-Z]' }
  replacements.each do |pcre_pattern, mysql_pattern|
    value = value.gsub(pcre_pattern, mysql_pattern)
  end
  value
end
operator() click to toggle source
# File lib/babik/queryset/lib/selection/operation/regex.rb, line 19
def operator
  dbms_adapter = db_engine
  return 'REGEXP' if dbms_adapter == 'mysql2'
  return '~' if dbms_adapter == 'postgresql'
  return 'REGEXP' if dbms_adapter == 'sqlite3'
  raise NotImplementedError, "Invalid dbms #{dbms_adapter}. Only mysql, postgresql, and sqlite3 are accepted"
end