class ActiveRecord::HashOptions::LIKE

Ruby doesn't have like, so I converted regex to like best I could We could also do the reverse for database operations

Public Class Methods

arel_proc() click to toggle source
# File lib/active_record/hash_options/operators.rb, line 78
def self.arel_proc
  proc { |column, op| Arel::Nodes::Matches.new(column, GenericOp.quote(op.expression, column), nil, true) }
end

Public Instance Methods

call(val) click to toggle source
# File lib/active_record/hash_options/operators.rb, line 82
def call(val)
  expression2 ||= like_to_regex(expression)
  val && val =~ expression2
end
like_to_regex(lk, extra = nil) click to toggle source

escape . * ^ $ (this.gif => thisgif - so it won't match this_gif) leave [] as [] (use by like and regular expressions) convert % => .*, _ => . convert ^.*abc$ => abc$ convert ^abc.*$ => ^abc @param extra ilike passes in Regexp::IGNORECASE

# File lib/active_record/hash_options/operators.rb, line 93
def like_to_regex(lk, extra = nil)
  exp = lk.gsub(/([.*^$])/) {"[#{$1}]"} # escape special characters
  exp = "^#{exp}$".gsub("%", '.*').gsub("_", ".").gsub(/^\.\*/, '').gsub(/\.\*$/, '')
  Regexp.new(exp, extra)
end