lita-wizard 1.0.1 → 1.0.2
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/lib/lita/extensions/wizard.rb +48 -12
- data/lib/lita/handlers/wizard.rb +2 -0
- data/lib/lita/wizard.rb +4 -2
- data/lita-wizard.gemspec +1 -1
- data/spec/lita/extensions/wizard_spec.rb +97 -33
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab9acf73075c026c14e907ded9fd64e07c9cdd4d
|
4
|
+
data.tar.gz: 134919eb9e5f687814242df8f0bc000b99ea2ca2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 640902ef6a1478b404041d1542ed22b62da9368f58883ac8a2a847c90afd2a504b972ca9648a545d3eaaac4710583a14ed701bcecbe5d0b1e7b672f46056d4d7
|
7
|
+
data.tar.gz: 3342bc3bc7e9f7d8e60cd67790917a9dad3c7b0a3ec01cb29cf9c63821985dab25bbd7eac0e5a5782674cd550c433a7188ae1379b7c317ae1a54b31ddf4aa624
|
@@ -1,23 +1,59 @@
|
|
1
1
|
module Lita
|
2
2
|
module Extensions
|
3
3
|
class Wizard
|
4
|
+
attr_reader :message, :route, :robot
|
5
|
+
|
4
6
|
def self.call(payload)
|
5
|
-
|
6
|
-
|
7
|
-
robot = payload[:robot]
|
7
|
+
new(payload).call
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
10
|
+
def initialize(payload)
|
11
|
+
@message = payload[:message]
|
12
|
+
@route = payload[:route]
|
13
|
+
@robot = payload[:robot]
|
14
|
+
Lita.logger.debug "Initializing Lita::Extensions::Wizard with:\nMessage: #{message.body}\nRoute: #{route.inspect}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def call
|
18
|
+
process_message if should_process_message?
|
19
|
+
Lita.logger.debug "Handled by wizard: #{!!message.extensions[:handled_by_wizard]}"
|
20
|
+
Lita.logger.debug "Dummy route: #{route.extensions[:dummy] == true}"
|
21
|
+
ret = compute_return_value
|
22
|
+
Lita.logger.debug "Returning #{ret.inspect}"
|
23
|
+
ret
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
def process_message
|
29
|
+
Lita.logger.debug "Processing message"
|
11
30
|
message.extensions[:processed_by_wizard] = true
|
31
|
+
message.extensions[:handled_by_wizard] = Lita::Wizard.handle_message(robot, message)
|
32
|
+
Lita.logger.debug "Message processed: #{message.extensions.inspect}"
|
33
|
+
end
|
12
34
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
35
|
+
def should_process_message?
|
36
|
+
!already_processed? && private_message? && user_has_pending_wizard?
|
37
|
+
end
|
38
|
+
|
39
|
+
def already_processed?
|
40
|
+
message.extensions[:processed_by_wizard]
|
41
|
+
end
|
42
|
+
|
43
|
+
def private_message?
|
44
|
+
message.private_message?
|
45
|
+
end
|
46
|
+
|
47
|
+
def user_has_pending_wizard?
|
48
|
+
Lita::Wizard.pending_wizard?(message.user.id)
|
49
|
+
end
|
18
50
|
|
19
|
-
|
20
|
-
|
51
|
+
def compute_return_value
|
52
|
+
if message.extensions[:handled_by_wizard]
|
53
|
+
route.extensions[:dummy] == true
|
54
|
+
else
|
55
|
+
!route.extensions[:dummy]
|
56
|
+
end
|
21
57
|
end
|
22
58
|
|
23
59
|
Lita.register_hook(:validate_route, self)
|
data/lib/lita/handlers/wizard.rb
CHANGED
data/lib/lita/wizard.rb
CHANGED
data/lita-wizard.gemspec
CHANGED
@@ -17,48 +17,112 @@ describe Lita::Extensions::Wizard, lita: true do
|
|
17
17
|
route: route
|
18
18
|
}
|
19
19
|
end
|
20
|
+
subject { described_class.new(payload) }
|
20
21
|
|
21
|
-
|
22
|
-
message
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
context "deciding if it should process the message" do
|
23
|
+
it "shouldn't process the message if it was already processed" do
|
24
|
+
allow(subject).to receive(:private_message?).and_return(true)
|
25
|
+
allow(subject).to receive(:user_has_pending_wizard?).and_return(true)
|
26
|
+
message.extensions[:processed_by_wizard] = true
|
27
|
+
expect(subject).to receive(:process_message).never
|
28
|
+
subject.call
|
29
|
+
end
|
26
30
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
+
it "shouldn't process the message if it's a public message" do
|
32
|
+
allow(subject).to receive(:already_processed?).and_return(false)
|
33
|
+
allow(subject).to receive(:user_has_pending_wizard?).and_return(true)
|
34
|
+
expect(subject).to receive(:process_message).never
|
35
|
+
subject.call
|
36
|
+
end
|
31
37
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
38
|
+
it "shouldn't process the message if the user doesn't have a pending wizard" do
|
39
|
+
allow(subject).to receive(:already_processed?).and_return(false)
|
40
|
+
allow(subject).to receive(:private_message?).and_return(true)
|
41
|
+
Lita::Wizard.cancel_wizard("42")
|
42
|
+
expect(subject).to receive(:process_message).never
|
43
|
+
subject.call
|
44
|
+
end
|
36
45
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
46
|
+
it "should process the message only once" do
|
47
|
+
allow(subject).to receive(:private_message?).and_return(true)
|
48
|
+
allow(subject).to receive(:user_has_pending_wizard?).and_return(true)
|
49
|
+
expect(Lita::Wizard).to receive(:handle_message).once
|
50
|
+
subject.call
|
51
|
+
subject.call
|
52
|
+
end
|
42
53
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
54
|
+
it "should process the message if not processed, private message and user has pending wizard" do
|
55
|
+
message.extensions.delete :processed_by_wizard
|
56
|
+
message.source.private_message!
|
57
|
+
allow(Lita::Wizard).to receive(:pending_wizard?).and_return(true)
|
58
|
+
expect(subject).to receive(:process_message).once
|
59
|
+
subject.call
|
60
|
+
end
|
47
61
|
end
|
48
62
|
|
49
|
-
|
50
|
-
allow(
|
51
|
-
allow(Lita::Wizard).to receive(:pending_wizard?).and_return(true)
|
52
|
-
expect(Lita::Wizard).to receive(:handle_message)
|
53
|
-
described_class.call(payload)
|
54
|
-
end
|
63
|
+
context "processing the message" do
|
64
|
+
before { allow(subject).to receive(:should_process_message?).and_return(true) }
|
55
65
|
|
56
|
-
|
57
|
-
|
58
|
-
|
66
|
+
it "should mark the message as processed" do
|
67
|
+
allow(Lita::Wizard).to receive(:handle_message)
|
68
|
+
subject.call
|
69
|
+
expect(message.extensions[:processed_by_wizard]).to be_truthy
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should set on the message the return value from handle_message" do
|
73
|
+
allow(Lita::Wizard).to receive(:handle_message).and_return("42")
|
74
|
+
subject.call
|
75
|
+
expect(message.extensions[:handled_by_wizard]).to eq("42")
|
76
|
+
end
|
59
77
|
end
|
60
78
|
|
61
|
-
|
62
|
-
|
79
|
+
context "return value" do
|
80
|
+
it "should return true if the message is not processable for a non dummy route" do
|
81
|
+
allow(subject).to receive(:should_process_message?).and_return(false)
|
82
|
+
expect(subject.call).to be_truthy
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should return false if the message is not processable for a dummy route" do
|
86
|
+
allow(subject).to receive(:should_process_message?).and_return(false)
|
87
|
+
route.extensions[:dummy] = true
|
88
|
+
expect(subject.call).to be_falsey
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should return false if called on a processable and handled message for a non dummy route" do
|
92
|
+
message.extensions.delete :processed_by_wizard
|
93
|
+
message.source.private_message!
|
94
|
+
allow(Lita::Wizard).to receive(:pending_wizard?).and_return(true)
|
95
|
+
expect(Lita::Wizard).to receive(:handle_message).once.and_return(true)
|
96
|
+
expect(subject.call).to be_falsey
|
97
|
+
expect(subject.call).to be_falsey
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should return true if called on a processable and handled message for a dummy route" do
|
101
|
+
message.extensions.delete :processed_by_wizard
|
102
|
+
message.source.private_message!
|
103
|
+
allow(Lita::Wizard).to receive(:pending_wizard?).and_return(true)
|
104
|
+
expect(Lita::Wizard).to receive(:handle_message).once.and_return(true)
|
105
|
+
route.extensions[:dummy] = true
|
106
|
+
expect(subject.call).to be_truthy
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should return true if the message couldn't be handled by the wizard for a non dummy route" do
|
110
|
+
message.extensions.delete :processed_by_wizard
|
111
|
+
message.source.private_message!
|
112
|
+
allow(Lita::Wizard).to receive(:pending_wizard?).and_return(true)
|
113
|
+
expect(Lita::Wizard).to receive(:handle_message).once.and_return(false)
|
114
|
+
expect(subject.call).to be_truthy
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should return false if the message couldn't be handled by the wizard for a dummy route" do
|
118
|
+
message.extensions.delete :processed_by_wizard
|
119
|
+
message.source.private_message!
|
120
|
+
allow(Lita::Wizard).to receive(:pending_wizard?).and_return(true)
|
121
|
+
expect(Lita::Wizard).to receive(:handle_message).once.and_return(false)
|
122
|
+
route.extensions[:dummy] = true
|
123
|
+
expect(subject.call).to be_falsey
|
124
|
+
end
|
63
125
|
end
|
126
|
+
|
127
|
+
|
64
128
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lita-wizard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cristian Bica
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lita
|