class Attentive::Listener

Attributes

listeners[R]
phrases[R]

Public Class Methods

new(listeners, phrases, options, callback) click to toggle source
# File lib/attentive/listener.rb, line 8
def initialize(listeners, phrases, options, callback)
  context_options = options.fetch(:context, {})
  @required_contexts = context_options.fetch(:in, Attentive.default_required_contexts)
  @required_contexts = [] if @required_contexts == :any
  @required_contexts = Set[*@required_contexts]
  @prohibited_contexts = context_options.fetch(:not_in, Attentive.default_prohibited_contexts)
  @prohibited_contexts = Set[*@prohibited_contexts]

  @listeners = listeners
  @phrases = tokenize_phrases!(phrases)
  @callback = callback
end

Public Instance Methods

call(e) click to toggle source
# File lib/attentive/listener.rb, line 32
def call(e)
  @callback.call(e)
end
matches_context?(message) click to toggle source
# File lib/attentive/listener.rb, line 21
def matches_context?(message)
  return false unless message.contexts.superset? @required_contexts
  return false unless message.contexts.disjoint? @prohibited_contexts
  true
end
stop_listening!() click to toggle source
# File lib/attentive/listener.rb, line 27
def stop_listening!
  listeners.delete self
  self
end

Private Instance Methods

tokenize_phrase!(phrase) click to toggle source
# File lib/attentive/listener.rb, line 45
def tokenize_phrase!(phrase)
  Attentive::Tokenizer.tokenize(phrase, entities: true, regexps: true)
end
tokenize_phrases!(phrases) click to toggle source
# File lib/attentive/listener.rb, line 39
def tokenize_phrases!(phrases)
  phrases.map do |phrase|
    tokenize_phrase!(phrase)
  end
end