slack-ruby-bot 0.11.2 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +1 -0
- data/.gitignore +3 -2
- data/.rubocop.yml +14 -1
- data/.rubocop_todo.yml +14 -42
- data/.travis.yml +11 -13
- data/CHANGELOG.md +39 -6
- data/CONTRIBUTING.md +5 -1
- data/DEPLOYMENT.md +63 -9
- data/Dangerfile +4 -0
- data/Gemfile +11 -7
- data/LICENSE.md +1 -1
- data/MIGRATION.md +13 -0
- data/README.md +133 -65
- data/Rakefile +2 -0
- data/TUTORIAL.md +23 -0
- data/UPGRADING.md +50 -0
- data/examples/inventory/Gemfile +2 -0
- data/examples/inventory/inventorybot.rb +5 -1
- data/examples/market/Gemfile +4 -3
- data/examples/market/marketbot.rb +22 -15
- data/examples/minimal/Gemfile +3 -1
- data/examples/minimal/pongbot.rb +2 -0
- data/examples/weather/Gemfile +2 -0
- data/examples/weather/weatherbot.rb +2 -0
- data/lib/config/application.rb +4 -2
- data/lib/config/boot.rb +2 -0
- data/lib/config/environment.rb +3 -1
- data/lib/slack-ruby-bot.rb +3 -1
- data/lib/slack-ruby-bot/about.rb +3 -1
- data/lib/slack-ruby-bot/app.rb +18 -12
- data/lib/slack-ruby-bot/bot.rb +3 -1
- data/lib/slack-ruby-bot/client.rb +25 -23
- data/lib/slack-ruby-bot/commands.rb +2 -0
- data/lib/slack-ruby-bot/commands/about.rb +3 -1
- data/lib/slack-ruby-bot/commands/base.rb +13 -21
- data/lib/slack-ruby-bot/commands/help.rb +10 -8
- data/lib/slack-ruby-bot/commands/hi.rb +3 -1
- data/lib/slack-ruby-bot/commands/support/attrs.rb +2 -0
- data/lib/slack-ruby-bot/commands/support/help.rb +4 -0
- data/lib/slack-ruby-bot/commands/support/match.rb +4 -3
- data/lib/slack-ruby-bot/commands/unknown.rb +3 -1
- data/lib/slack-ruby-bot/config.rb +7 -7
- data/lib/slack-ruby-bot/hooks.rb +2 -0
- data/lib/slack-ruby-bot/hooks/hello.rb +22 -3
- data/lib/slack-ruby-bot/hooks/hook_support.rb +2 -6
- data/lib/slack-ruby-bot/hooks/message.rb +11 -10
- data/lib/slack-ruby-bot/hooks/set.rb +3 -1
- data/lib/slack-ruby-bot/mvc.rb +2 -0
- data/lib/slack-ruby-bot/mvc/controller/base.rb +4 -3
- data/lib/slack-ruby-bot/mvc/model/base.rb +2 -0
- data/lib/slack-ruby-bot/mvc/mvc.rb +2 -0
- data/lib/slack-ruby-bot/mvc/view/base.rb +2 -0
- data/lib/slack-ruby-bot/rspec.rb +3 -1
- data/lib/slack-ruby-bot/rspec/support/bots_for_tests.rb +2 -0
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/it_behaves_like_a_slack_bot.rb +4 -1
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/not_respond.rb +3 -5
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/respond_with_error.rb +3 -7
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/respond_with_slack_message.rb +15 -14
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/respond_with_slack_messages.rb +26 -19
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/start_typing.rb +32 -0
- data/lib/slack-ruby-bot/rspec/support/slack_api_key.rb +3 -1
- data/lib/slack-ruby-bot/rspec/support/slack_ruby_bot_configure.rb +2 -0
- data/lib/slack-ruby-bot/rspec/support/spec_helpers.rb +2 -0
- data/lib/slack-ruby-bot/server.rb +5 -28
- data/lib/slack-ruby-bot/support/loggable.rb +2 -0
- data/lib/slack-ruby-bot/version.rb +3 -1
- data/lib/slack_ruby_bot.rb +2 -0
- data/screenshots/create-classic-app.png +0 -0
- data/slack-ruby-bot.gemspec +6 -3
- data/spec/slack-ruby-bot/app_spec.rb +64 -1
- data/spec/slack-ruby-bot/client_spec.rb +103 -28
- data/spec/slack-ruby-bot/commands/about_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/aliases_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/attachment_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/bot_message_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/bot_messages_spec.rb +26 -0
- data/spec/slack-ruby-bot/commands/bot_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_command_classes_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_permitted_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_precedence_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_regexp_escape_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_regexp_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_spaces_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_with_block_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_with_expression_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/direct_messages_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/empty_text_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/help_spec.rb +15 -13
- data/spec/slack-ruby-bot/commands/hi_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/match_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/message_loop_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/nil_message_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/non_breaking_space_spec.rb +29 -0
- data/spec/slack-ruby-bot/commands/not_implemented_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/operators_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/operators_with_block_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/scan_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/send_message_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/support/attrs_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/support/help_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/support/match_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/unknown_spec.rb +2 -0
- data/spec/slack-ruby-bot/config_spec.rb +2 -57
- data/spec/slack-ruby-bot/hooks/hello_spec.rb +51 -0
- data/spec/slack-ruby-bot/hooks/hook_support_spec.rb +2 -5
- data/spec/slack-ruby-bot/hooks/message_spec.rb +8 -35
- data/spec/slack-ruby-bot/hooks/set_spec.rb +2 -0
- data/spec/slack-ruby-bot/mvc/controller/controller_to_command_spec.rb +2 -0
- data/spec/slack-ruby-bot/rspec/respond_with_error_spec.rb +2 -0
- data/spec/slack-ruby-bot/rspec/respond_with_slack_message_spec.rb +20 -0
- data/spec/slack-ruby-bot/rspec/respond_with_slack_messages_spec.rb +36 -0
- data/spec/slack-ruby-bot/rspec/start_typing_spec.rb +36 -0
- data/spec/slack-ruby-bot/server_spec.rb +6 -33
- data/spec/slack-ruby-bot/support/loggable_spec.rb +2 -0
- data/spec/slack-ruby-bot/version_spec.rb +2 -0
- data/spec/spec_helper.rb +3 -6
- data/{lib/slack-ruby-bot/rspec → spec}/support/fixtures/slack/migration_in_progress.yml +0 -0
- data/{lib/slack-ruby-bot/rspec → spec}/support/vcr.rb +2 -0
- metadata +28 -29
- data/lib/initializers/giphy.rb +0 -8
- data/lib/initializers/giphy_client.rb +0 -39
- data/lib/slack-ruby-bot/rspec/support/fixtures/slack/giphy_burrito.yml +0 -69
- data/lib/slack-ruby-bot/rspec/support/fixtures/slack/giphy_client_burrito.yml +0 -71
- data/lib/slack-ruby-bot/rspec/support/fixtures/slack/giphy_client_burrito_rated_y.yml +0 -71
- data/screenshots/register-bot.png +0 -0
- data/spec/slack-ruby-bot/commands/send_gif_spec.rb +0 -25
- data/spec/slack-ruby-bot/commands/send_message_with_gif_spec.rb +0 -38
- data/spec/slack-ruby-bot/initializers/giphy_client_spec.rb +0 -28
- data/spec/slack-ruby-bot/initializers/giphy_spec.rb +0 -18
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackRubyBot
|
|
2
4
|
module Commands
|
|
3
5
|
class Help < Base
|
|
@@ -15,7 +17,7 @@ module SlackRubyBot
|
|
|
15
17
|
general_text
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
client.say(channel: data.channel, text: text
|
|
20
|
+
client.say(channel: data.channel, text: text)
|
|
19
21
|
end
|
|
20
22
|
|
|
21
23
|
class << self
|
|
@@ -24,16 +26,16 @@ module SlackRubyBot
|
|
|
24
26
|
def general_text
|
|
25
27
|
bot_desc = Support::Help.instance.bot_desc_and_commands
|
|
26
28
|
other_commands_descs = Support::Help.instance.other_commands_descs
|
|
27
|
-
|
|
28
|
-
#{bot_desc.join("\n")}
|
|
29
|
+
<<~TEXT
|
|
30
|
+
#{bot_desc.join("\n")}
|
|
29
31
|
|
|
30
|
-
*Other commands:*
|
|
31
|
-
#{other_commands_descs.join("\n")}
|
|
32
|
+
*Other commands:*
|
|
33
|
+
#{other_commands_descs.join("\n")}
|
|
32
34
|
|
|
33
|
-
For getting description of the command use: *help <command>*
|
|
35
|
+
For getting description of the command use: *help <command>*
|
|
34
36
|
|
|
35
|
-
For more information see https://github.com/slack-ruby/slack-ruby-bot, please.
|
|
36
|
-
TEXT
|
|
37
|
+
For more information see https://github.com/slack-ruby/slack-ruby-bot, please.
|
|
38
|
+
TEXT
|
|
37
39
|
end
|
|
38
40
|
end
|
|
39
41
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackRubyBot
|
|
2
4
|
module Commands
|
|
3
5
|
class Hi < Base
|
|
@@ -7,7 +9,7 @@ module SlackRubyBot
|
|
|
7
9
|
end
|
|
8
10
|
|
|
9
11
|
def self.call(client, data, _match)
|
|
10
|
-
client.say(channel: data.channel, text: "Hi <@#{data.user}>!"
|
|
12
|
+
client.say(channel: data.channel, text: "Hi <@#{data.user}>!")
|
|
11
13
|
end
|
|
12
14
|
end
|
|
13
15
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'singleton'
|
|
2
4
|
require_relative 'attrs'
|
|
3
5
|
|
|
@@ -34,12 +36,14 @@ module SlackRubyBot
|
|
|
34
36
|
help_attrs = find_command_help_attrs(unescaped_name)
|
|
35
37
|
return "There's no command *#{unescaped_name}*" unless help_attrs
|
|
36
38
|
return "There's no description for command *#{unescaped_name}*" if help_attrs.command_long_desc.blank?
|
|
39
|
+
|
|
37
40
|
"#{command_name_and_desc(help_attrs)}\n\n#{help_attrs.command_long_desc}"
|
|
38
41
|
end
|
|
39
42
|
|
|
40
43
|
def find_command_help_attrs(name)
|
|
41
44
|
help_attrs = commands_help_attrs.find { |k| k.command_name == name }
|
|
42
45
|
return help_attrs if help_attrs
|
|
46
|
+
|
|
43
47
|
commands_help_attrs.each { |k| k.commands.each { |c| return c if c.command_name == name } }
|
|
44
48
|
nil
|
|
45
49
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackRubyBot
|
|
2
4
|
module Commands
|
|
3
5
|
module Support
|
|
@@ -9,9 +11,8 @@ module SlackRubyBot
|
|
|
9
11
|
attr_reader :attachment, :attachment_field
|
|
10
12
|
|
|
11
13
|
def initialize(match_data, attachment = nil, attachment_field = nil)
|
|
12
|
-
unless match_data.is_a? MatchData
|
|
13
|
-
|
|
14
|
-
end
|
|
14
|
+
raise ArgumentError, 'match_data should be a type of MatchData' unless match_data.is_a? MatchData
|
|
15
|
+
|
|
15
16
|
@match_data = match_data
|
|
16
17
|
@attachment = attachment
|
|
17
18
|
@attachment_field = attachment_field
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackRubyBot
|
|
2
4
|
module Commands
|
|
3
5
|
class Unknown < Base
|
|
4
6
|
match(/^(?<bot>\S*)[\s]*(?<expression>.*)$/)
|
|
5
7
|
|
|
6
8
|
def self.call(client, data, _match)
|
|
7
|
-
client.say(channel: data.channel, text: "Sorry <@#{data.user}>, I don't understand that command!"
|
|
9
|
+
client.say(channel: data.channel, text: "Sorry <@#{data.user}>, I don't understand that command!")
|
|
8
10
|
end
|
|
9
11
|
end
|
|
10
12
|
end
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackRubyBot
|
|
2
4
|
module Config
|
|
3
5
|
extend self
|
|
4
6
|
|
|
5
|
-
ATTRS = %i[token url aliases user user_id team team_id allow_message_loops
|
|
7
|
+
ATTRS = %i[token url aliases user user_id team team_id allow_bot_messages allow_message_loops logger].freeze
|
|
6
8
|
attr_accessor(*ATTRS)
|
|
7
9
|
|
|
8
|
-
def
|
|
9
|
-
|
|
10
|
+
def allow_bot_messages?
|
|
11
|
+
!!allow_bot_messages
|
|
10
12
|
end
|
|
11
13
|
|
|
12
|
-
def
|
|
13
|
-
|
|
14
|
-
v = boolean_from_env('SLACK_RUBY_BOT_SEND_GIFS')
|
|
15
|
-
send_gifs.nil? ? (v.nil? || v) : send_gifs
|
|
14
|
+
def allow_message_loops?
|
|
15
|
+
!!allow_message_loops
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def reset!
|
data/lib/slack-ruby-bot/hooks.rb
CHANGED
|
@@ -1,15 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackRubyBot
|
|
2
4
|
module Hooks
|
|
3
5
|
class Hello
|
|
4
|
-
attr_accessor :logger
|
|
6
|
+
attr_accessor :logger, :connected_at
|
|
5
7
|
|
|
6
8
|
def initialize(logger)
|
|
7
9
|
self.logger = logger
|
|
8
10
|
end
|
|
9
11
|
|
|
10
12
|
def call(client, _data)
|
|
11
|
-
return unless client
|
|
12
|
-
|
|
13
|
+
return unless client&.team
|
|
14
|
+
|
|
15
|
+
new_connected_at = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
16
|
+
log = [
|
|
17
|
+
'Successfully',
|
|
18
|
+
connected_at ? 'reconnected' : 'connected',
|
|
19
|
+
"team #{client.team.name} (#{client.team.id}) to https://#{client.team.domain}.slack.com",
|
|
20
|
+
connected_at ? "after #{last_connection_till(new_connected_at)}s" : nil
|
|
21
|
+
].compact.join(' ') + '.'
|
|
22
|
+
|
|
23
|
+
logger.info log
|
|
24
|
+
|
|
25
|
+
self.connected_at = new_connected_at
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def last_connection_till(time)
|
|
31
|
+
(time - connected_at).round(2)
|
|
13
32
|
end
|
|
14
33
|
end
|
|
15
34
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackRubyBot
|
|
2
4
|
module Hooks
|
|
3
5
|
module HookSupport
|
|
@@ -16,12 +18,6 @@ module SlackRubyBot
|
|
|
16
18
|
end
|
|
17
19
|
end
|
|
18
20
|
|
|
19
|
-
# Instance stuff
|
|
20
|
-
def hooks
|
|
21
|
-
warn Kernel.caller.first + ' [DEPRECATION] `hooks` method is deprecated. Please use `server.on` instead to register a hook.'
|
|
22
|
-
_hooks
|
|
23
|
-
end
|
|
24
|
-
|
|
25
21
|
def on(event_name, handler)
|
|
26
22
|
_hooks.add(event_name, handler)
|
|
27
23
|
end
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackRubyBot
|
|
2
4
|
module Hooks
|
|
3
5
|
class Message
|
|
4
6
|
def call(client, data)
|
|
5
|
-
return if
|
|
6
|
-
|
|
7
|
+
return if !client.allow_message_loops? && client.message_to_self?(data)
|
|
8
|
+
return if !client.allow_bot_messages? && client.bot_message?(data)
|
|
9
|
+
|
|
10
|
+
prepare!(data)
|
|
11
|
+
|
|
7
12
|
result = child_command_classes.detect { |d| d.invoke(client, data) }
|
|
8
13
|
result ||= built_in_command_classes.detect { |d| d.invoke(client, data) }
|
|
9
14
|
result ||= SlackRubyBot::Commands::Unknown.tap { |d| d.invoke(client, data) }
|
|
@@ -12,12 +17,8 @@ module SlackRubyBot
|
|
|
12
17
|
|
|
13
18
|
private
|
|
14
19
|
|
|
15
|
-
def
|
|
16
|
-
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def message_to_self?(client, data)
|
|
20
|
-
client.self && client.self.id == data.user
|
|
20
|
+
def prepare!(data)
|
|
21
|
+
data.text = data.text.strip if data.text
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
#
|
|
@@ -36,7 +37,7 @@ module SlackRubyBot
|
|
|
36
37
|
#
|
|
37
38
|
def child_command_classes
|
|
38
39
|
command_classes.reject do |k|
|
|
39
|
-
k.name
|
|
40
|
+
k.name&.starts_with?('SlackRubyBot::Commands::')
|
|
40
41
|
end
|
|
41
42
|
end
|
|
42
43
|
|
|
@@ -47,7 +48,7 @@ module SlackRubyBot
|
|
|
47
48
|
#
|
|
48
49
|
def built_in_command_classes
|
|
49
50
|
command_classes.select do |k|
|
|
50
|
-
k.name
|
|
51
|
+
k.name&.starts_with?('SlackRubyBot::Commands::') && k != SlackRubyBot::Commands::Unknown
|
|
51
52
|
end
|
|
52
53
|
end
|
|
53
54
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackRubyBot
|
|
2
4
|
module Hooks
|
|
3
5
|
class Set
|
|
@@ -36,7 +38,7 @@ module SlackRubyBot
|
|
|
36
38
|
end
|
|
37
39
|
|
|
38
40
|
def flush_handlers
|
|
39
|
-
handlers.
|
|
41
|
+
handlers.each_key { |hook| register_callback(hook) }
|
|
40
42
|
end
|
|
41
43
|
end
|
|
42
44
|
end
|
data/lib/slack-ruby-bot/mvc.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackRubyBot
|
|
2
4
|
module MVC
|
|
3
5
|
module Controller
|
|
@@ -45,9 +47,7 @@ module SlackRubyBot
|
|
|
45
47
|
def inherited(klass) # :nodoc:
|
|
46
48
|
# Define the abstract ivar on subclasses so that we don't get
|
|
47
49
|
# uninitialized ivar warnings
|
|
48
|
-
unless klass.instance_variable_defined?(:@abstract)
|
|
49
|
-
klass.instance_variable_set(:@abstract, false)
|
|
50
|
-
end
|
|
50
|
+
klass.instance_variable_set(:@abstract, false) unless klass.instance_variable_defined?(:@abstract)
|
|
51
51
|
super
|
|
52
52
|
end
|
|
53
53
|
|
|
@@ -64,6 +64,7 @@ module SlackRubyBot
|
|
|
64
64
|
|
|
65
65
|
methods.each do |name|
|
|
66
66
|
next if name[0] == '_'
|
|
67
|
+
|
|
67
68
|
commands = lookup_command_name(name)
|
|
68
69
|
|
|
69
70
|
# Generates a command for each controller method *and* its aliases
|
data/lib/slack-ruby-bot/rspec.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..'))
|
|
2
4
|
|
|
3
5
|
require 'rubygems'
|
|
@@ -7,6 +9,6 @@ require 'rack/test'
|
|
|
7
9
|
require 'config/environment'
|
|
8
10
|
require 'slack-ruby-bot'
|
|
9
11
|
|
|
10
|
-
Dir[File.join(File.dirname(__FILE__), 'rspec/support', '**/*.rb')].each do |file|
|
|
12
|
+
Dir[File.join(File.dirname(__FILE__), 'rspec/support', '**/*.rb')].sort.each do |file|
|
|
11
13
|
require file
|
|
12
14
|
end
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
shared_examples 'a slack ruby bot' do
|
|
2
4
|
context 'not configured' do
|
|
3
5
|
before do
|
|
4
6
|
@slack_api_token = ENV.delete('SLACK_API_TOKEN')
|
|
7
|
+
SlackRubyBot.configure { |config| config.token = nil }
|
|
5
8
|
end
|
|
6
9
|
after do
|
|
7
10
|
ENV['SLACK_API_TOKEN'] = @slack_api_token
|
|
8
11
|
end
|
|
9
12
|
it 'requires SLACK_API_TOKEN' do
|
|
10
|
-
expect {
|
|
13
|
+
expect { described_class.instance }.to raise_error RuntimeError, 'Missing Slack API Token.'
|
|
11
14
|
end
|
|
12
15
|
end
|
|
13
16
|
end
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'rspec/expectations'
|
|
2
4
|
|
|
3
5
|
RSpec::Matchers.define :not_respond do
|
|
4
6
|
match do |actual|
|
|
5
|
-
client =
|
|
6
|
-
send(:client)
|
|
7
|
-
else
|
|
8
|
-
SlackRubyBot::Client.new
|
|
9
|
-
end
|
|
7
|
+
client = respond_to?(:client) ? send(:client) : SlackRubyBot::Client.new
|
|
10
8
|
|
|
11
9
|
message_command = SlackRubyBot::Hooks::Message.new
|
|
12
10
|
channel, user, message, attachments = parse(actual)
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'rspec/expectations'
|
|
2
4
|
|
|
3
5
|
RSpec::Matchers.define :respond_with_error do |error, error_message|
|
|
4
6
|
match do |actual|
|
|
5
|
-
client =
|
|
6
|
-
send(:client)
|
|
7
|
-
else
|
|
8
|
-
SlackRubyBot::Client.new
|
|
9
|
-
end
|
|
7
|
+
client = respond_to?(:client) ? send(:client) : SlackRubyBot::Client.new
|
|
10
8
|
|
|
11
9
|
message_command = SlackRubyBot::Hooks::Message.new
|
|
12
10
|
channel, user, message, attachments = parse(actual)
|
|
13
11
|
|
|
14
|
-
allow(Giphy).to receive(:random) if defined?(Giphy)
|
|
15
|
-
|
|
16
12
|
begin
|
|
17
13
|
expect do
|
|
18
14
|
message_command.call(client, Hashie::Mash.new(text: message, channel: channel, user: user, attachments: attachments))
|
|
@@ -1,33 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'rspec/expectations'
|
|
4
|
+
|
|
2
5
|
RSpec::Matchers.define :respond_with_slack_message do |expected|
|
|
3
6
|
include SlackRubyBot::SpecHelpers
|
|
7
|
+
|
|
4
8
|
match do |actual|
|
|
5
9
|
client = respond_to?(:client) ? send(:client) : SlackRubyBot::Client.new
|
|
6
|
-
def client.test_messages
|
|
7
|
-
@test_received_messages
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def client.say(options = {})
|
|
11
|
-
super
|
|
12
|
-
@test_received_messages = @test_received_messages.nil? ? [] : @test_received_messages
|
|
13
|
-
@test_received_messages.push options
|
|
14
|
-
end
|
|
15
10
|
|
|
16
11
|
message_command = SlackRubyBot::Hooks::Message.new
|
|
17
12
|
channel, user, message, attachments = parse(actual)
|
|
18
13
|
|
|
19
|
-
allow(
|
|
14
|
+
allow(client).to receive(:message) do |options|
|
|
15
|
+
@messages ||= []
|
|
16
|
+
@messages.push options
|
|
17
|
+
end
|
|
20
18
|
|
|
21
|
-
allow(client).to receive(:message)
|
|
22
19
|
message_command.call(client, Hashie::Mash.new(text: message, channel: channel, user: user, attachments: attachments))
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
|
|
21
|
+
matcher = have_received(:message).once
|
|
22
|
+
matcher = matcher.with(hash_including(channel: channel, text: expected)) if channel && expected
|
|
23
|
+
|
|
24
|
+
expect(client).to matcher
|
|
25
|
+
|
|
25
26
|
true
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
failure_message do |_actual|
|
|
29
30
|
message = "expected to receive message with text: #{expected} once,\n received:"
|
|
30
|
-
message += @messages
|
|
31
|
+
message += @messages&.any? ? @messages.inspect : 'none'
|
|
31
32
|
message
|
|
32
33
|
end
|
|
33
34
|
end
|