class WeChat::Bot::Pattern
消息匹配
Attributes
pattern[R]
prefix[R]
suffix[R]
Public Class Methods
generate(type, argument)
click to toggle source
# File lib/wechat/bot/pattern.rb, line 31 def self.generate(type, argument) case type when :ctcp Pattern.new(/^/, /#{Regexp.escape(argument.to_s)}(?:$| .+)/, nil) else raise ArgumentError, "Unsupported type: #{type.inspect}" end end
new(prefix, pattern, suffix)
click to toggle source
# File lib/wechat/bot/pattern.rb, line 44 def initialize(prefix, pattern, suffix) @prefix, @pattern, @suffix = prefix, pattern, suffix end
obj_to_r(obj, anchor = nil)
click to toggle source
@param [String, Regexp, NilClass, Proc, to_s] obj 匹配规则 @return [Regexp, nil]
# File lib/wechat/bot/pattern.rb, line 6 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
resolve_proc(obj, msg = nil)
click to toggle source
# File lib/wechat/bot/pattern.rb, line 23 def self.resolve_proc(obj, msg = nil) if obj.is_a?(Proc) return resolve_proc(obj.call(msg), msg) else return obj end end
Public Instance Methods
to_r(msg = nil)
click to toggle source
# File lib/wechat/bot/pattern.rb, line 48 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) /#{prefix}#{pattern}#{suffix}/ else prefix = Pattern.obj_to_r(Pattern.resolve_proc(@prefix, msg)) suffix = Pattern.obj_to_r(Pattern.resolve_proc(@suffix, msg)) /^#{prefix}#{Pattern.obj_to_r(pattern)}#{suffix}$/ end end