@api private @since 1.1.0
# File lib/cinch/pattern.rb, line 33 def self.generate(type, argument) case type when :ctcp Pattern.new(%r^/, %r#{Regexp.escape(argument.to_s)}(?:$| .+)/, nil) else raise ArgumentError, "Unsupported type: #{type.inspect}" end end
# File lib/cinch/pattern.rb, line 45 def initialize(prefix, pattern, suffix) @prefix, @pattern, @suffix = prefix, pattern, suffix end
@param [String, Regexp, NilClass, Proc, to_s] obj The object to
convert to a regexp
@return [Regexp, nil]
# File lib/cinch/pattern.rb, line 8 def self.obj_to_r(obj, anchor = nil) case obj when Regexp, NilClass return obj else escaped = Regexp.escape(obj.to_s) case anchor when :start return Regexp.new("^" + escaped) when :end return Regexp.new(escaped + "$") when nil return Regexp.new(Regexp.escape(obj.to_s)) end end end
# File lib/cinch/pattern.rb, line 25 def self.resolve_proc(obj, msg = nil) if obj.is_a?(Proc) return resolve_proc(obj.call(msg), msg) else return obj end end
# File lib/cinch/pattern.rb, line 49 def to_r(msg = nil) pattern = Pattern.resolve_proc(@pattern, msg) case pattern when Regexp, NilClass prefix = Pattern.obj_to_r(Pattern.resolve_proc(@prefix, msg), :start) suffix = Pattern.obj_to_r(Pattern.resolve_proc(@suffix, msg), :end) %r#{prefix}#{pattern}#{suffix}/ else prefix = Pattern.obj_to_r(Pattern.resolve_proc(@prefix, msg)) suffix = Pattern.obj_to_r(Pattern.resolve_proc(@suffix, msg)) %r^#{prefix}#{Pattern.obj_to_r(pattern)}#{suffix}$/ end end