lita 4.5.0 → 4.8.0.beta1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b05600a1b35088abb38dbb5f4bf68e3f97f3758e
4
- data.tar.gz: d67724a6e50664c074e71729ca0cda9a389fcaa6
2
+ SHA256:
3
+ metadata.gz: f20cc77c412f1649c46ec2b8ffad7ebdf91310ec1c5985983faaabe8888f2c3f
4
+ data.tar.gz: 74d03bf2b6d3ce8b20ae84c3b56f20641a78a439a24bca26d55e952eadd0bc1e
5
5
  SHA512:
6
- metadata.gz: 425041c5ed45f464f8374053f45f85ce0487cba75c6eb5c35e2ae54fbcb48891cae4fc21d5c8732da2984da626c639b1704cd72d74860892837e526241aed7a3
7
- data.tar.gz: 38658b9c6a4bc97c54f79355b49c36e1cb4a6329077554320f4376ed4170d4db3e84763178d989bbb8b7a6999f44425c653a55a27b4f9e564915183b74bbfb71
6
+ metadata.gz: '0926727362e120bb091d2f34721d2d486190acdc78b7f0a0fc92ba032934032bc0f501b04133e953fa6e26f79bb4bb69c9b6fca9bdca711c9f16493ec67f8072'
7
+ data.tar.gz: 2cd9def0da8c9fbb63c9fa96233886f6eb656391a39924d8d9210668b8e47335e35bbd072b393a7d1a7d9e4a8640ed9ab3da3061dd3aee1ef0d163844ae0f2f1
@@ -2,19 +2,18 @@ language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
4
  rvm:
5
- - 2.0
6
- - 2.1
7
- - 2.2
8
- - jruby-9.0.0.0
9
- - rbx-2
5
+ - 2.5
6
+ - 2.6
7
+ - 2.7
8
+ - jruby
10
9
  matrix:
11
10
  allow_failures:
12
11
  - rvm: jruby-9.0.0.0
13
- - rvm: rbx-2
14
12
  fast_finish: true
15
- script: bundle exec rake
13
+ script: script/ci
16
14
  before_install:
17
15
  - gem update --system
16
+ - gem update bundler
18
17
  services:
19
18
  - redis-server
20
19
  branches:
data/Rakefile CHANGED
@@ -1,8 +1 @@
1
1
  require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
- require "rubocop/rake_task"
4
-
5
- RSpec::Core::RakeTask.new
6
- RuboCop::RakeTask.new
7
-
8
- task default: [:spec, :rubocop]
@@ -115,6 +115,7 @@ require_relative "lita/timer"
115
115
  require_relative "lita/robot"
116
116
  require_relative "lita/adapter"
117
117
  require_relative "lita/adapters/shell"
118
+ require_relative "lita/adapters/test"
118
119
  require_relative "lita/plugin_builder"
119
120
  require_relative "lita/route_validator"
120
121
  require_relative "lita/handlers/authorization"
@@ -4,6 +4,7 @@ module Lita
4
4
  # The names of methods that should be implemented by an adapter.
5
5
  # @since 4.4.0
6
6
  REQUIRED_METHODS = %i(
7
+ chat_service
7
8
  join
8
9
  part
9
10
  roster
@@ -46,7 +47,7 @@ module Lita
46
47
  # @param hash [Hash] An optional hash of values to be interpolated in the string.
47
48
  # @return [String] The translated string.
48
49
  def translate(key, hash = {})
49
- I18n.translate("lita.adapters.#{namespace}.#{key}", hash)
50
+ I18n.translate("lita.adapters.#{namespace}.#{key}", **hash)
50
51
  end
51
52
 
52
53
  alias_method :t, :translate
@@ -65,6 +66,12 @@ module Lita
65
66
  robot.config.adapters.public_send(self.class.namespace)
66
67
  end
67
68
 
69
+ # @!method chat_service
70
+ # May return an object exposing chat-service-specific APIs.
71
+ # @return [Object, nil] The chat service API object, if any.
72
+ # @abstract This should be implemented by the adapter.
73
+ # @since 4.6.0
74
+
68
75
  # @!method join(room_id)
69
76
  # Joins the room with the specified ID.
70
77
  # @param room_id [String] The ID of the room.
@@ -0,0 +1,43 @@
1
+ module Lita
2
+ # A namespace to hold all subclasses of {Adapter}.
3
+ module Adapters
4
+ # An adapter for testing Lita and Lita plugins.
5
+ # @since 4.6.0
6
+ class Test < Adapter
7
+ # Adapter-specific methods exposed through {Robot}.
8
+ class ChatService
9
+ def initialize(sent_messages)
10
+ @sent_messages = sent_messages
11
+ end
12
+
13
+ # An array of recorded outgoing messages.
14
+ def sent_messages
15
+ @sent_messages.dup
16
+ end
17
+ end
18
+
19
+ def initialize(robot)
20
+ super
21
+
22
+ self.sent_messages = []
23
+ end
24
+
25
+ # Adapter-specific methods available via {Robot#chat_service}.
26
+ def chat_service
27
+ ChatService.new(sent_messages)
28
+ end
29
+
30
+ # Records outgoing messages.
31
+ def send_messages(_target, strings)
32
+ sent_messages.concat(strings)
33
+ end
34
+
35
+ private
36
+
37
+ # An array of recorded outgoing messages.
38
+ attr_accessor :sent_messages
39
+ end
40
+
41
+ Lita.register_adapter(:test, Test)
42
+ end
43
+ end
@@ -95,10 +95,8 @@ module Lita
95
95
  robot.hooks[:trigger_route].each { |hook| hook.call(response: response, route: route) }
96
96
  handler = new(robot)
97
97
  route.callback.call(handler, response)
98
- rescue Exception => e
99
- log_dispatch_error(e)
100
- robot.config.robot.error_handler.call(e)
101
- raise e if Lita.test_mode?
98
+ rescue => error
99
+ log_error(robot, error)
102
100
  end
103
101
 
104
102
  private
@@ -125,16 +123,6 @@ module Lita
125
123
  method: route.callback.method_name || "(block)"
126
124
  )
127
125
  end
128
-
129
- # Logs an error encountered during dispatch.
130
- def log_dispatch_error(e)
131
- Lita.logger.error I18n.t(
132
- "lita.handler.exception",
133
- handler: name,
134
- message: e.message,
135
- backtrace: e.backtrace.join("\n")
136
- )
137
- end
138
126
  end
139
127
  end
140
128
  end
@@ -33,10 +33,22 @@ module Lita
33
33
  # @return [String] The translated string.
34
34
  # @since 3.0.0
35
35
  def translate(key, hash = {})
36
- I18n.translate("lita.handlers.#{namespace}.#{key}", hash)
36
+ I18n.translate("lita.handlers.#{namespace}.#{key}", **hash)
37
37
  end
38
38
 
39
39
  alias_method :t, :translate
40
+
41
+ # Logs an error raised by a plugin.
42
+ def log_error(robot, error)
43
+ robot.config.robot.error_handler.call(error)
44
+ Lita.logger.error I18n.t(
45
+ "lita.handler.exception",
46
+ handler: name,
47
+ message: error.message,
48
+ backtrace: error.backtrace.join("\n")
49
+ )
50
+ raise error if Lita.test_mode?
51
+ end
40
52
  end
41
53
 
42
54
  # A Redis::Namespace scoped to the handler.
@@ -57,7 +57,11 @@ module Lita
57
57
  # @return [Boolean] Whether or not the event triggered any callbacks.
58
58
  def trigger(robot, event_name, payload = {})
59
59
  event_subscriptions_for(event_name).map do |callback|
60
- callback.call(new(robot), payload)
60
+ begin
61
+ callback.call(new(robot), payload)
62
+ rescue => error
63
+ log_error(robot, error)
64
+ end
61
65
  end.any?
62
66
  end
63
67
 
@@ -40,7 +40,11 @@ module Lita
40
40
 
41
41
  # A hash of information about Redis.
42
42
  def redis_info
43
- @redis_info ||= redis.info
43
+ @redis_info ||= begin
44
+ r = redis.redis
45
+ r = r.redis while r.respond_to?(:redis)
46
+ r.info
47
+ end
44
48
  end
45
49
 
46
50
  # The current version of Redis.
@@ -11,6 +11,11 @@ module Lita
11
11
  # @return [Lita::Source] The message source.
12
12
  attr_reader :source
13
13
 
14
+ # A hash of arbitrary data that can be populated by Lita adapters and extensions.
15
+ # @return [Hash] The extension data.
16
+ # @since 4.7.0
17
+ attr_reader :extensions
18
+
14
19
  # @!method user
15
20
  # The user who sent the message.
16
21
  # @return [Lita::User] The user.
@@ -34,6 +39,7 @@ module Lita
34
39
  @robot = robot
35
40
  @body = body
36
41
  @source = source
42
+ @extensions = {}
37
43
 
38
44
  name_pattern = "@?#{Regexp.escape(@robot.mention_name)}[:,]?\\s+"
39
45
  alias_pattern = "#{Regexp.escape(@robot.alias)}\\s*" if @robot.alias
@@ -36,13 +36,16 @@ module Lita
36
36
 
37
37
  def_delegators :registry, :config, :adapters, :handlers, :hooks
38
38
 
39
+ # @!method chat_service
40
+ # @see Lita::Adapter#chat_service
41
+ # @since 4.6.0
39
42
  # @!method mention_format(name)
40
43
  # @see Lita::Adapter#mention_format
41
44
  # @since 4.4.0
42
45
  # @!method roster(room)
43
46
  # @see Lita::Adapter#roster
44
47
  # @since 4.4.1
45
- def_delegators :adapter, :mention_format, :roster
48
+ def_delegators :adapter, :chat_service, :mention_format, :roster
46
49
 
47
50
  # @param registry [Lita::Registry] The registry for the robot's configuration and plugins.
48
51
  def initialize(registry = Lita)
@@ -18,13 +18,27 @@ module Lita
18
18
  base.send(:include, Lita::RSpec)
19
19
 
20
20
  prepare_handlers(base)
21
+ prepare_adapter(base)
21
22
  prepare_let_blocks(base)
22
23
  prepare_subject(base)
23
- prepare_robot(base)
24
24
  end
25
25
 
26
26
  private
27
27
 
28
+ # Stub Lita.adapters
29
+ def prepare_adapter(base)
30
+ base.class_eval do
31
+ before do
32
+ if Lita.version_3_compatibility_mode?
33
+ Lita.config.robot.adapter = :test
34
+ else
35
+ registry.register_adapter(:test, Lita::Adapters::Test)
36
+ registry.config.robot.adapter = :test
37
+ end
38
+ end
39
+ end
40
+ end
41
+
28
42
  # Stub Lita.handlers.
29
43
  def prepare_handlers(base)
30
44
  base.class_eval do
@@ -50,20 +64,6 @@ module Lita
50
64
  let(:robot) { Robot.new(registry) }
51
65
  let(:source) { Source.new(user: user) }
52
66
  let(:user) { User.create("1", name: "Test User") }
53
- let(:replies) { [] }
54
- end
55
- end
56
-
57
- # Stub Lita::Robot#send_messages.
58
- def prepare_robot(base)
59
- base.class_eval do
60
- before do
61
- [:send_messages, :send_message].each do |message|
62
- allow(robot).to receive(message) do |_target, *strings|
63
- replies.concat(strings)
64
- end
65
- end
66
- end
67
67
  end
68
68
  end
69
69
 
@@ -71,18 +71,27 @@ module Lita
71
71
  def prepare_subject(base)
72
72
  base.class_eval do
73
73
  subject { described_class.new(robot) }
74
- before { allow(described_class).to receive(:new).and_return(subject) }
75
74
  end
76
75
  end
77
76
  end
78
77
 
78
+ # An array of strings that have been sent by the robot during the course of a test.
79
+ # @return [Array<String>] The replies.
80
+ def replies
81
+ robot.chat_service.sent_messages
82
+ end
83
+
79
84
  # Sends a message to the robot.
80
85
  # @param body [String] The message to send.
81
86
  # @param as [Lita::User] The user sending the message.
82
87
  # @param from [Lita::Room] The room where the message is received from.
83
88
  # @return [void]
84
- def send_message(body, as: user, from: nil)
85
- message = Message.new(robot, body, Source.new(user: as, room: from))
89
+ def send_message(body, as: user, from: nil, privately: false)
90
+ message = Message.new(
91
+ robot,
92
+ body,
93
+ Source.new(user: as, room: from, private_message: privately)
94
+ )
86
95
 
87
96
  robot.receive(message)
88
97
  end
@@ -92,8 +101,8 @@ module Lita
92
101
  # @param as [Lita::User] The user sending the message.
93
102
  # @param from [Lita::Room] The room where the message is received from.
94
103
  # @return [void]
95
- def send_command(body, as: user, from: nil)
96
- send_message("#{robot.mention_name}: #{body}", as: as, from: from)
104
+ def send_command(body, as: user, from: nil, privately: false)
105
+ send_message("#{robot.mention_name}: #{body}", as: as, from: from, privately: privately)
97
106
  end
98
107
 
99
108
  # Returns a Faraday connection hooked up to the currently running robot's Rack app.
@@ -23,7 +23,7 @@ module Lita
23
23
 
24
24
  # @param source [String] A string to use as the template's content.
25
25
  def initialize(source)
26
- @erb = ERB.new(source, $SAFE, "<>")
26
+ @erb = ERB.new(source, trim_mode: "<>")
27
27
  self.helpers = Set.new
28
28
  end
29
29
 
@@ -1,4 +1,4 @@
1
1
  module Lita
2
2
  # The current version of Lita.
3
- VERSION = "4.5.0"
3
+ VERSION = "4.8.0.beta1"
4
4
  end
@@ -18,23 +18,23 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.required_ruby_version = ">= 2.0.0"
21
+ spec.required_ruby_version = ">= 2.5.0"
22
22
 
23
- spec.add_runtime_dependency "bundler", ">= 1.3"
24
- spec.add_runtime_dependency "faraday", ">= 0.8.7"
25
- spec.add_runtime_dependency "http_router", ">= 0.11.2"
26
- spec.add_runtime_dependency "ice_nine", ">= 0.11.0"
27
- spec.add_runtime_dependency "i18n", ">= 0.6.9"
28
- spec.add_runtime_dependency "multi_json", ">= 1.7.7"
29
- spec.add_runtime_dependency "puma", ">= 2.7.1"
30
- spec.add_runtime_dependency "rack", ">= 1.5.2"
31
- spec.add_runtime_dependency "rb-readline", ">= 0.5.1"
32
- spec.add_runtime_dependency "redis-namespace", ">= 1.3.0"
33
- spec.add_runtime_dependency "thor", ">= 0.18.1"
23
+ spec.add_runtime_dependency "bundler", ">= 2.0"
24
+ spec.add_runtime_dependency "faraday", ">= 1.0"
25
+ spec.add_runtime_dependency "http_router", ">= 0.11"
26
+ spec.add_runtime_dependency "ice_nine", ">= 0.11"
27
+ spec.add_runtime_dependency "i18n", ">= 1.8"
28
+ spec.add_runtime_dependency "multi_json", ">= 1.15"
29
+ spec.add_runtime_dependency "puma", ">= 4.3"
30
+ spec.add_runtime_dependency "rack", ">= 2.2"
31
+ spec.add_runtime_dependency "rb-readline", ">= 0.5"
32
+ spec.add_runtime_dependency "redis-namespace", ">= 1.7"
33
+ spec.add_runtime_dependency "thor", ">= 1.0"
34
34
 
35
35
  spec.add_development_dependency "rake"
36
36
  spec.add_development_dependency "rack-test"
37
- spec.add_development_dependency "rspec", ">= 3.0.0"
37
+ spec.add_development_dependency "rspec"
38
38
  spec.add_development_dependency "simplecov"
39
39
  spec.add_development_dependency "coveralls"
40
40
  spec.add_development_dependency "pry"
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+
3
+ bundle exec rspec
4
+ bundle exec rubocop
@@ -3,6 +3,15 @@ require "spec_helper"
3
3
  describe Lita::ConfigurationBuilder do
4
4
  let(:config) { subject.build }
5
5
 
6
+ # For some reason RSpec is no longer capturing tracebacks to
7
+ # stderr, so we do it manually to avoid cluttering the test output.
8
+ around do |example|
9
+ stderr = $stderr
10
+ $stderr = StringIO.new
11
+ example.run
12
+ $stderr = stderr
13
+ end
14
+
6
15
  describe ".load_user_config" do
7
16
  it "loads and evals lita_config.rb" do
8
17
  allow(File).to receive(:exist?).and_return(true)
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Lita::Handler::EventRouter do
4
- let(:robot) { instance_double("Lita::Robot", name: "Lita") }
3
+ describe Lita::Handler::EventRouter, lita: true do
4
+ let(:robot) { Lita::Robot.new(registry) }
5
5
 
6
6
  subject do
7
7
  Class.new do
@@ -27,6 +27,16 @@ describe Lita::Handler::EventRouter do
27
27
 
28
28
  on(:multiple_callbacks) { robot.send_message("first callback") }
29
29
  on(:multiple_callbacks) { robot.send_message("second callback") }
30
+
31
+ on(:multiple_errors) do
32
+ robot.send_message("first error")
33
+ raise ArgumentError, "first"
34
+ end
35
+
36
+ on(:multiple_errors) do
37
+ robot.send_message("second error")
38
+ raise ArgumentError, "second"
39
+ end
30
40
  end
31
41
  end
32
42
 
@@ -61,5 +71,47 @@ describe Lita::Handler::EventRouter do
61
71
  subject.trigger(robot, "connected")
62
72
  subject.trigger(robot, " ConNected ")
63
73
  end
74
+
75
+ context "not in test mode" do
76
+ around do |example|
77
+ test_mode = Lita.test_mode?
78
+ Lita.test_mode = false
79
+ begin
80
+ example.run
81
+ ensure
82
+ Lita.test_mode = test_mode
83
+ end
84
+ end
85
+
86
+ it "doesn't stop triggering callbacks after an exception is raised" do
87
+ expect(robot).to receive(:send_message).with("first error").once
88
+ expect(robot).to receive(:send_message).with("second error").once
89
+ subject.trigger(robot, :multiple_errors)
90
+ end
91
+
92
+ it "reports callback exceptions to the error handler" do
93
+ allow(robot).to receive(:send_message)
94
+ expect(registry.config.robot.error_handler).to receive(:call).twice
95
+ subject.trigger(robot, :multiple_errors)
96
+ end
97
+ end
98
+
99
+ context "in test mode" do
100
+ around do |example|
101
+ test_mode = Lita.test_mode?
102
+ Lita.test_mode = true
103
+ begin
104
+ example.run
105
+ ensure
106
+ Lita.test_mode = test_mode
107
+ end
108
+ end
109
+
110
+ it "re-raises callback exceptions immediately" do
111
+ allow(robot).to receive(:send_message)
112
+ expect(registry.config.robot.error_handler).to receive(:call).once
113
+ expect { subject.trigger(robot, :multiple_errors) }.to raise_error(ArgumentError, "first")
114
+ end
115
+ end
64
116
  end
65
117
  end
@@ -92,7 +92,7 @@ describe handler, lita_handler: true do
92
92
  it "calls the error handler with the exception as argument" do
93
93
  expect(registry.config.robot.error_handler).to receive(:call).with(instance_of(TypeError))
94
94
 
95
- expect { http.get("/boom") }.to raise_error(TypeError, "String can't be coerced into Fixnum")
95
+ expect { http.get("/boom") }.to raise_error(TypeError, "String can't be coerced into Integer")
96
96
  end
97
97
  end
98
98
  end
@@ -39,7 +39,7 @@ describe Lita::Handlers::Info, lita_handler: true do
39
39
 
40
40
  it "includes the adapter being used" do
41
41
  subject.web(request, response)
42
- expect(json).to include("adapter" => Lita.config.robot.adapter.to_s)
42
+ expect(json).to include("adapter" => registry.config.robot.adapter.to_s)
43
43
  end
44
44
 
45
45
  it "includes the robot's name" do
@@ -21,6 +21,14 @@ describe Lita::Message do
21
21
  expect(subject.source).to eq(source)
22
22
  end
23
23
 
24
+ describe "#extensions" do
25
+ it "can be populated with arbitrary data" do
26
+ subject.extensions[:foo] = :bar
27
+
28
+ expect(subject.extensions[:foo]).to eq(:bar)
29
+ end
30
+ end
31
+
24
32
  describe "#args" do
25
33
  it "returns an array of the 2nd through nth word in the message" do
26
34
  subject = described_class.new(robot, "args foo bar", source)
@@ -44,6 +44,10 @@ describe Lita::Robot, lita: true do
44
44
  subject.roster(instance_double("Lita::Room"))
45
45
  end
46
46
 
47
+ it "exposes Adapter#chat_service" do
48
+ expect { subject.chat_service }.not_to raise_error
49
+ end
50
+
47
51
  context "with registered handlers" do
48
52
  let(:handler1) { Class.new(Lita::Handler) { namespace :test } }
49
53
  let(:handler2) { Class.new(Lita::Handler) { namespace :test } }
@@ -73,6 +77,15 @@ describe Lita::Robot, lita: true do
73
77
  describe "#run" do
74
78
  let(:thread) { instance_double("Thread", :abort_on_exception= => true, join: nil) }
75
79
 
80
+ # For some reason RSpec is no longer capturing tracebacks to
81
+ # stderr, so we do it manually to avoid cluttering the test output.
82
+ around do |example|
83
+ stderr = $stderr
84
+ $stderr = StringIO.new
85
+ example.run
86
+ $stderr = stderr
87
+ end
88
+
76
89
  before do
77
90
  allow_any_instance_of(Lita::Adapters::Shell).to receive(:run)
78
91
  allow_any_instance_of(Puma::Server).to receive(:run)
@@ -3,6 +3,7 @@ require "spec_helper"
3
3
  handler_class = Class.new(Lita::Handler) do
4
4
  route(/^message$/, :message)
5
5
  route(/^channel$/, :channel)
6
+ route(/^private message$/, :private_message)
6
7
  route(/^command$/, :command, command: true)
7
8
  route("restricted", :restricted, restrict_to: :some_group)
8
9
  route("admins only", :admins_only, restrict_to: :admins)
@@ -24,6 +25,14 @@ handler_class = Class.new(Lita::Handler) do
24
25
  end
25
26
  end
26
27
 
28
+ def private_message(response)
29
+ if response.private_message?
30
+ response.reply("Private")
31
+ else
32
+ response.reply("Public")
33
+ end
34
+ end
35
+
27
36
  def command(response)
28
37
  response.reply("a", "command")
29
38
  end
@@ -108,6 +117,12 @@ describe handler_class, lita_handler: true do
108
117
  send_message("message")
109
118
  expect(replies).to eq(["Test User"])
110
119
  end
120
+
121
+ it "does not memoize #replies on first access" do
122
+ replies
123
+ send_message("message")
124
+ expect(replies).to eq(["Test User"])
125
+ end
111
126
  end
112
127
 
113
128
  describe "#channel" do
@@ -116,12 +131,40 @@ describe handler_class, lita_handler: true do
116
131
  send_message("channel", from: room)
117
132
  expect(replies).to eq(%w(1 Room))
118
133
  end
134
+
119
135
  it "replies with no channel if not sent from room" do
120
136
  send_message("channel")
121
137
  expect(replies).to eq(["No room"])
122
138
  end
123
139
  end
124
140
 
141
+ describe "#private_message" do
142
+ let(:another_user) do
143
+ Lita::User.create(2, name: "Another User")
144
+ end
145
+
146
+ let(:room) do
147
+ Lita::Room.create_or_update(1, name: "Room")
148
+ end
149
+
150
+ it "replies with Private in response to a private message" do
151
+ send_message("private message", as: another_user, privately: true)
152
+ expect(source).to be_a_private_message
153
+ expect(replies.last).to eq("Private")
154
+ end
155
+
156
+ it "replies with Private in response to a private command" do
157
+ send_command("private message", as: another_user, privately: true)
158
+ expect(source).to be_a_private_message
159
+ expect(replies.last).to eq("Private")
160
+ end
161
+
162
+ it "replies with Public in response to a public message" do
163
+ send_message("private message", as: another_user, from: room)
164
+ expect(replies.last).to eq("Public")
165
+ end
166
+ end
167
+
125
168
  describe "#command" do
126
169
  it "replies with two strings" do
127
170
  send_command("command")
@@ -84,8 +84,15 @@ describe Lita do
84
84
  around do |example|
85
85
  test_mode = Lita.test_mode?
86
86
  Lita.test_mode = false
87
+
88
+ stderr = $stderr
89
+ $stderr = StringIO.new
90
+
87
91
  example.run
92
+
88
93
  Lita.test_mode = test_mode
94
+
95
+ $stderr = stderr
89
96
  end
90
97
 
91
98
  it "logs a fatal warning and raises an exception if it can't connect to Redis" do
@@ -1,9 +1,4 @@
1
1
  require "simplecov"
2
- require "coveralls"
3
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
4
- SimpleCov::Formatter::HTMLFormatter,
5
- Coveralls::SimpleCov::Formatter
6
- ]
7
2
  SimpleCov.start { add_filter "/spec/" }
8
3
 
9
4
  require "pry"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.5.0
4
+ version: 4.8.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jimmy Cuadra
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-21 00:00:00.000000000 Z
11
+ date: 2020-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,154 +16,154 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: faraday
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.8.7
33
+ version: '1.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 0.8.7
40
+ version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: http_router
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.11.2
47
+ version: '0.11'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 0.11.2
54
+ version: '0.11'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: ice_nine
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 0.11.0
61
+ version: '0.11'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 0.11.0
68
+ version: '0.11'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: i18n
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 0.6.9
75
+ version: '1.8'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 0.6.9
82
+ version: '1.8'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: multi_json
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 1.7.7
89
+ version: '1.15'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: 1.7.7
96
+ version: '1.15'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: puma
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: 2.7.1
103
+ version: '4.3'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: 2.7.1
110
+ version: '4.3'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rack
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: 1.5.2
117
+ version: '2.2'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: 1.5.2
124
+ version: '2.2'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rb-readline
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: 0.5.1
131
+ version: '0.5'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: 0.5.1
138
+ version: '0.5'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: redis-namespace
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ">="
144
144
  - !ruby/object:Gem::Version
145
- version: 1.3.0
145
+ version: '1.7'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
- version: 1.3.0
152
+ version: '1.7'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: thor
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
158
158
  - !ruby/object:Gem::Version
159
- version: 0.18.1
159
+ version: '1.0'
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
- version: 0.18.1
166
+ version: '1.0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: rake
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -198,14 +198,14 @@ dependencies:
198
198
  requirements:
199
199
  - - ">="
200
200
  - !ruby/object:Gem::Version
201
- version: 3.0.0
201
+ version: '0'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - ">="
207
207
  - !ruby/object:Gem::Version
208
- version: 3.0.0
208
+ version: '0'
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: simplecov
211
211
  requirement: !ruby/object:Gem::Requirement
@@ -282,6 +282,7 @@ files:
282
282
  - lib/lita.rb
283
283
  - lib/lita/adapter.rb
284
284
  - lib/lita/adapters/shell.rb
285
+ - lib/lita/adapters/test.rb
285
286
  - lib/lita/authorization.rb
286
287
  - lib/lita/callback.rb
287
288
  - lib/lita/cli.rb
@@ -331,6 +332,7 @@ files:
331
332
  - lib/lita/util.rb
332
333
  - lib/lita/version.rb
333
334
  - lita.gemspec
335
+ - script/ci
334
336
  - spec/lita/adapter_spec.rb
335
337
  - spec/lita/adapters/shell_spec.rb
336
338
  - spec/lita/authorization_spec.rb
@@ -389,7 +391,7 @@ homepage: https://github.com/jimmycuadra/lita
389
391
  licenses:
390
392
  - MIT
391
393
  metadata: {}
392
- post_install_message:
394
+ post_install_message:
393
395
  rdoc_options: []
394
396
  require_paths:
395
397
  - lib
@@ -397,16 +399,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
397
399
  requirements:
398
400
  - - ">="
399
401
  - !ruby/object:Gem::Version
400
- version: 2.0.0
402
+ version: 2.5.0
401
403
  required_rubygems_version: !ruby/object:Gem::Requirement
402
404
  requirements:
403
- - - ">="
405
+ - - ">"
404
406
  - !ruby/object:Gem::Version
405
- version: '0'
407
+ version: 1.3.1
406
408
  requirements: []
407
- rubyforge_project:
408
- rubygems_version: 2.4.5.1
409
- signing_key:
409
+ rubygems_version: 3.1.2
410
+ signing_key:
410
411
  specification_version: 4
411
412
  summary: ChatOps framework for Ruby. Lita is a robot companion for your chat room.
412
413
  test_files: