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