Sha256: e626f0f8f8a1572d59f15ddfcc2c91d7d4e3c93671665b38d54400a1d5137eb9

Contents?: true

Size: 1.79 KB

Versions: 3

Compression:

Stored size: 1.79 KB

Contents

module Boty
  module MatchHandler
    include Boty::Logger

    attr_reader :trigger_message

    def listeners
      @listeners ||= []
    end

    def commands
      @commands ||= []
    end

    def desc(command, description = nil)
      @current_desc = ActionDescription.new command,
                                            description: description
    end

    def match(*regexes, &block)
      create_action_on_collection listeners, regexes, &block
    end

    def respond(*regexes, &block)
      create_action_on_collection commands, regexes, &block
    end

    def no_match(regex, &block)
      remove_action listeners, regex, block
    end

    def no_respond(regex, &block)
      remove_action commands, regex, block
    end

    def no(command)
      remove_action listeners, command: command
      remove_action commands, command: command
    end

    def execute_matches(message)
      execute_actions message, listeners
    end

    def execute_commands(message)
      execute_actions message, commands
    end

    private

    def create_action_on_collection(collection, regexes, &block)
      regexes.each do |regex|
        collection << create_action(regex, &block)
      end
    end

    def execute_actions(message, actions)
      @trigger_message = message
      Array(actions).each do |action|
        action.execute @trigger_message
      end
    ensure
      @trigger_message = nil
    end

    def remove_action(collection, regex = nil, block = nil, command: nil)
      collection.delete_if do |action|
        action.desc.command == command || action.this?(regex, block)
      end
    end

    def create_action(regex, &block)
      regex = Regexp.new(regex) if regex.is_a? String
      Boty::Action.new(self, regex, @current_desc, &block).tap {
        @current_desc = nil
      }
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
boty-1.0.1 lib/boty/match_handler.rb
boty-1.0.0 lib/boty/match_handler.rb
boty-0.2.0 lib/boty/match_handler.rb