lita 3.0.4 → 3.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 72bfc92024ae2bb828d19ddaa51b6234465522d8
4
- data.tar.gz: 6849ff7eb590365266e4fa89c8f17a5c4c075e52
3
+ metadata.gz: b317185fd4bf51c66e01de3aef18547d27d154ef
4
+ data.tar.gz: 0ee25a799c8b033fb82e0e58fe3654ebaf974eea
5
5
  SHA512:
6
- metadata.gz: bd119e2dfff11a6e2bdaafe556c03fd8ab9ce2d89f760474a96588dde7c0bc6316f6fd37de78df4fc9a1bd40ce4f7ea9208cb682d3ea65bead748f843d0f44c3
7
- data.tar.gz: 3d3b9be32bca1ed13a2dcf9b4ad3b85df51530532f4e1e89fd10749fd7b7a56bd4cda1fda1a461125c953b11ede6d864159d33325c9281fad5a3d155704171ac
6
+ metadata.gz: 23c70beb7798a316f725225c17a0b75f8e0fdd2d104e9d9f4c611ae6c423300810adb1c1a9805629287a0db1d27b60071779bd4bf7ecebfbef302a3fde3623f3
7
+ data.tar.gz: 0498b930d44e0057058a25df985b8117d97de953f76ed89c414c7902482f889db1333b4376665aab01409f60fbcc55ae6fb3159594432cbfac0944b4bd8c9168
data/README.md CHANGED
@@ -13,13 +13,13 @@ Automate your business and have fun with your very own robot companion.
13
13
 
14
14
  ## Documentation
15
15
 
16
- Please visit [lita.io](http://www.lita.io/) for comprehensive documentation.
16
+ Please visit [lita.io](https://www.lita.io/) for comprehensive documentation.
17
17
 
18
18
  ## Plugins
19
19
 
20
- A list of all publicly available Lita plugins is available on the [lita.io plugins page](http://www.lita.io/plugins).
20
+ A list of all publicly available Lita plugins is available on the [lita.io plugins page](https://www.lita.io/plugins).
21
21
 
22
- The plugins page automatically updates daily with information from RubyGems. See [publishing](http://www.lita.io/plugin-authoring#publishing) for more information.
22
+ The plugins page automatically updates daily with information from RubyGems. See [publishing](https://www.lita.io/plugin-authoring#publishing) for more information.
23
23
 
24
24
  ## Contributing
25
25
 
data/lib/lita/adapter.rb CHANGED
@@ -94,6 +94,16 @@ module Lita
94
94
  end
95
95
  end
96
96
 
97
+ # Formats a name for "mentioning" a user in a group chat. Override this
98
+ # method in child classes to customize the mention format for the chat
99
+ # service.
100
+ # @param name [String] The name to format as a mention name.
101
+ # @return [String] The formatted mention name.
102
+ # @since 3.1.0
103
+ def mention_format(name)
104
+ "#{name}:"
105
+ end
106
+
97
107
  # @see .translate
98
108
  def translate(*args)
99
109
  self.class.translate(*args)
data/lib/lita/message.rb CHANGED
@@ -81,5 +81,14 @@ module Lita
81
81
  private_source.private_message!
82
82
  @robot.send_messages(private_source, *strings)
83
83
  end
84
+
85
+ # Replies by sending the given strings back to the source of the message.
86
+ # Each message is prefixed with the user's mention name.
87
+ # @param strings [String, Array<String>] The strings to send back.
88
+ # @return [void]
89
+ # @since 3.1.0
90
+ def reply_with_mention(*strings)
91
+ @robot.send_messages_with_mention(source, *strings)
92
+ end
84
93
  end
85
94
  end
data/lib/lita/response.rb CHANGED
@@ -18,9 +18,12 @@ module Lita
18
18
  # @see Lita::Message#reply
19
19
  # @!method reply_privately
20
20
  # @see Lita::Message#reply_privately
21
+ # @!method reply_with_mention
22
+ # @see Lita::Message#reply_with_mention
21
23
  # @!method user
22
24
  # @see Lita::Message#user
23
- def_delegators :message, :args, :reply, :reply_privately, :user, :command?
25
+ def_delegators :message, :args, :reply, :reply_privately,
26
+ :reply_with_mention, :user, :command?
24
27
 
25
28
  # @param message [Lita::Message] The incoming message.
26
29
  # @param pattern [Regexp] The pattern the incoming message matched.
data/lib/lita/robot.rb CHANGED
@@ -76,6 +76,26 @@ module Lita
76
76
  end
77
77
  alias_method :send_message, :send_messages
78
78
 
79
+ # Sends one or more messages to a user or room. If sending to a room,
80
+ # prefixes each message with the user's mention name.
81
+ # @param target [Lita::Source] The user or room to send to. If the Source
82
+ # has a room, it will choose the room. Otherwise, it will send to the
83
+ # user.
84
+ # @param strings [String, Array<String>] One or more strings to send.
85
+ # @return [void]
86
+ # @since 3.1.0
87
+ def send_messages_with_mention(target, *strings)
88
+ return send_messages(target, *strings) if target.private_message?
89
+
90
+ mention_name = target.user.mention_name
91
+ prefixed_strings = strings.map do |s|
92
+ "#{@adapter.mention_format(mention_name).strip} #{s}"
93
+ end
94
+
95
+ send_messages(target, *prefixed_strings)
96
+ end
97
+ alias_method :send_message_with_mention, :send_messages_with_mention
98
+
79
99
  # Sets the topic for a chat room.
80
100
  # @param target [Lita::Source] A source object specifying the room.
81
101
  # @param topic [String] The new topic message to set.
data/lib/lita/user.rb CHANGED
@@ -99,6 +99,13 @@ module Lita
99
99
  ensure_name_metadata_set
100
100
  end
101
101
 
102
+ # The name used to "mention" the user in a group chat.
103
+ # @return [String] The user's mention name.
104
+ # @since 3.1.0
105
+ def mention_name
106
+ metadata["mention_name"] || name
107
+ end
108
+
102
109
  # Saves the user record to Redis, overwriting an previous data for the
103
110
  # current ID and user name.
104
111
  # @return [void]
data/lib/lita/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Lita
2
2
  # The current version of Lita.
3
- VERSION = "3.0.4"
3
+ VERSION = "3.1.0"
4
4
  end
@@ -42,4 +42,10 @@ describe Lita::Adapter do
42
42
  end.to raise_error(RuntimeError)
43
43
  end
44
44
  end
45
+
46
+ describe "#mention_format" do
47
+ it "formats the provided name for mentioning the user" do
48
+ expect(subject.mention_format("carl")).to eq("carl:")
49
+ end
50
+ end
45
51
  end
@@ -5,8 +5,10 @@ describe Lita::Message do
5
5
  instance_double("Lita::Robot", name: "Lita", mention_name: "LitaBot", alias: ".")
6
6
  end
7
7
 
8
+ let(:source) { instance_double("Lita::Source") }
9
+
8
10
  subject do
9
- described_class.new(robot, "Hello", "Carl")
11
+ described_class.new(robot, "Hello", source)
10
12
  end
11
13
 
12
14
  it "has a body" do
@@ -14,17 +16,17 @@ describe Lita::Message do
14
16
  end
15
17
 
16
18
  it "has a source" do
17
- expect(subject.source).to eq("Carl")
19
+ expect(subject.source).to eq(source)
18
20
  end
19
21
 
20
22
  describe "#args" do
21
23
  it "returns an array of the 2nd through nth word in the message" do
22
- subject = described_class.new(robot, "args foo bar", "Carl")
24
+ subject = described_class.new(robot, "args foo bar", source)
23
25
  expect(subject.args).to eq(%w(foo bar))
24
26
  end
25
27
 
26
28
  it "escapes messages that have mismatched quotes" do
27
- subject = described_class.new(robot, "args it's working", "Carl")
29
+ subject = described_class.new(robot, "args it's working", source)
28
30
  expect(subject.args).to eq(%w(it's working))
29
31
  end
30
32
  end
@@ -41,7 +43,7 @@ describe Lita::Message do
41
43
  subject = described_class.new(
42
44
  robot,
43
45
  "#{robot.mention_name}: hello",
44
- "Carl"
46
+ source
45
47
  )
46
48
  expect(subject).to be_a_command
47
49
  end
@@ -50,7 +52,7 @@ describe Lita::Message do
50
52
  subject = described_class.new(
51
53
  robot,
52
54
  "#{robot.mention_name.upcase}: hello",
53
- "Carl"
55
+ source
54
56
  )
55
57
  expect(subject).to be_a_command
56
58
  end
@@ -59,7 +61,7 @@ describe Lita::Message do
59
61
  subject = described_class.new(
60
62
  robot,
61
63
  "#{robot.alias}hello",
62
- "Carl"
64
+ source
63
65
  )
64
66
  expect(subject).to be_a_command
65
67
  end
@@ -78,7 +80,7 @@ describe Lita::Message do
78
80
 
79
81
  describe "#reply" do
80
82
  it "sends strings back to the source through the robot" do
81
- expect(robot).to receive(:send_messages).with("Carl", "foo", "bar")
83
+ expect(robot).to receive(:send_messages).with(source, "foo", "bar")
82
84
  subject.reply("foo", "bar")
83
85
  end
84
86
  end
@@ -97,4 +99,11 @@ describe Lita::Message do
97
99
  subject.reply_privately("foo", "bar")
98
100
  end
99
101
  end
102
+
103
+ describe "#reply_with_mention" do
104
+ it "prefixes strings with a user mention and sends them back to the source" do
105
+ expect(robot).to receive(:send_messages_with_mention).with(source, "foo", "bar")
106
+ subject.reply_with_mention("foo", "bar")
107
+ end
108
+ end
100
109
  end
@@ -5,7 +5,7 @@ describe Lita::Response do
5
5
 
6
6
  let(:message) { instance_double("Lita::Message").as_null_object }
7
7
 
8
- [:args, :reply, :user, :command?].each do |method|
8
+ [:args, :reply, :reply_privately, :reply_with_mention, :user, :command?].each do |method|
9
9
  it "delegates :#{method} to #message" do
10
10
  expect(message).to receive(method)
11
11
  subject.public_send(method)
@@ -99,6 +99,45 @@ describe Lita::Robot do
99
99
  end
100
100
  end
101
101
 
102
+ describe "#send_message_with_mention" do
103
+ let(:user) { instance_double("Lita::User", mention_name: "carl") }
104
+ let(:source) { instance_double("Lita::Source", private_message?: false, user: user) }
105
+
106
+ it "calls #send_message with the strings, prefixed with the user's mention name" do
107
+ allow_any_instance_of(Lita::Adapters::Shell).to receive(:mention_format).with(
108
+ "carl"
109
+ ).and_return("carl:")
110
+ expect_any_instance_of(Lita::Adapters::Shell).to receive(:send_messages).with(
111
+ source,
112
+ ["carl: foo", "carl: bar"]
113
+ )
114
+
115
+ subject.send_messages_with_mention(source, "foo", "bar")
116
+ end
117
+
118
+ it "strips whitespace from both sides of the formatted mention name" do
119
+ allow_any_instance_of(Lita::Adapters::Shell).to receive(:mention_format).with(
120
+ "carl"
121
+ ).and_return(" carl: ")
122
+ expect_any_instance_of(Lita::Adapters::Shell).to receive(:send_messages).with(
123
+ source,
124
+ ["carl: foo", "carl: bar"]
125
+ )
126
+
127
+ subject.send_messages_with_mention(source, "foo", "bar")
128
+ end
129
+
130
+ it "calls #send_message directly if the original message was sent privately" do
131
+ allow(source).to receive(:private_message?).and_return(true)
132
+ expect_any_instance_of(Lita::Adapters::Shell).to receive(:send_messages).with(
133
+ source,
134
+ %w(foo bar)
135
+ )
136
+
137
+ subject.send_messages_with_mention(source, "foo", "bar")
138
+ end
139
+ end
140
+
102
141
  describe "#set_topic" do
103
142
  let(:source) { instance_double("Lita::Source") }
104
143
 
@@ -96,6 +96,18 @@ describe Lita::User, lita: true do
96
96
  end
97
97
  end
98
98
 
99
+ describe "#mention_name" do
100
+ it "returns the user's mention name from metadata" do
101
+ subject = described_class.new(1, name: "Carl", mention_name: "carlthepug")
102
+ expect(subject.mention_name).to eq("carlthepug")
103
+ end
104
+
105
+ it "returns the user's name if there is no mention name in the metadata" do
106
+ subject = described_class.new(1, name: "Carl")
107
+ expect(subject.mention_name).to eq("Carl")
108
+ end
109
+ end
110
+
99
111
  describe "#save" do
100
112
  subject { described_class.new(1, name: "Carl", mention_name: "carlthepug") }
101
113
 
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: 3.0.4
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jimmy Cuadra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-20 00:00:00.000000000 Z
11
+ date: 2014-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler