stealth 1.1.2 → 2.0.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.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +18 -8
  3. data/CHANGELOG.md +100 -0
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +49 -43
  6. data/LICENSE +4 -17
  7. data/README.md +9 -17
  8. data/VERSION +1 -1
  9. data/lib/stealth/base.rb +62 -13
  10. data/lib/stealth/cli.rb +1 -2
  11. data/lib/stealth/commands/console.rb +1 -1
  12. data/lib/stealth/configuration.rb +0 -3
  13. data/lib/stealth/controller/callbacks.rb +1 -1
  14. data/lib/stealth/controller/catch_all.rb +27 -4
  15. data/lib/stealth/controller/controller.rb +168 -49
  16. data/lib/stealth/controller/dev_jumps.rb +41 -0
  17. data/lib/stealth/controller/dynamic_delay.rb +4 -6
  18. data/lib/stealth/controller/interrupt_detect.rb +100 -0
  19. data/lib/stealth/controller/messages.rb +283 -0
  20. data/lib/stealth/controller/nlp.rb +50 -0
  21. data/lib/stealth/controller/replies.rb +179 -41
  22. data/lib/stealth/controller/unrecognized_message.rb +62 -0
  23. data/lib/stealth/core_ext.rb +5 -0
  24. data/lib/stealth/{flow/core_ext.rb → core_ext/numeric.rb} +0 -1
  25. data/lib/stealth/core_ext/string.rb +18 -0
  26. data/lib/stealth/dispatcher.rb +21 -0
  27. data/lib/stealth/errors.rb +12 -0
  28. data/lib/stealth/flow/base.rb +1 -2
  29. data/lib/stealth/flow/specification.rb +3 -2
  30. data/lib/stealth/flow/state.rb +3 -3
  31. data/lib/stealth/generators/builder/Gemfile +4 -3
  32. data/lib/stealth/generators/builder/bot/controllers/bot_controller.rb +42 -0
  33. data/lib/stealth/generators/builder/bot/controllers/catch_alls_controller.rb +2 -0
  34. data/lib/stealth/generators/builder/bot/controllers/goodbyes_controller.rb +2 -0
  35. data/lib/stealth/generators/builder/bot/controllers/hellos_controller.rb +2 -0
  36. data/lib/stealth/generators/builder/bot/controllers/interrupts_controller.rb +9 -0
  37. data/lib/stealth/generators/builder/bot/controllers/unrecognized_messages_controller.rb +9 -0
  38. data/lib/stealth/generators/builder/config/flow_map.rb +8 -0
  39. data/lib/stealth/generators/builder/config/initializers/autoload.rb +8 -0
  40. data/lib/stealth/generators/builder/config/initializers/inflections.rb +16 -0
  41. data/lib/stealth/generators/builder/config/puma.rb +15 -0
  42. data/lib/stealth/helpers/redis.rb +40 -0
  43. data/lib/stealth/lock.rb +83 -0
  44. data/lib/stealth/logger.rb +27 -18
  45. data/lib/stealth/nlp/client.rb +22 -0
  46. data/lib/stealth/nlp/result.rb +57 -0
  47. data/lib/stealth/reloader.rb +90 -0
  48. data/lib/stealth/reply.rb +17 -0
  49. data/lib/stealth/scheduled_reply.rb +3 -3
  50. data/lib/stealth/server.rb +4 -4
  51. data/lib/stealth/service_message.rb +3 -2
  52. data/lib/stealth/service_reply.rb +5 -1
  53. data/lib/stealth/services/base_reply_handler.rb +2 -2
  54. data/lib/stealth/session.rb +106 -53
  55. data/spec/configuration_spec.rb +9 -2
  56. data/spec/controller/callbacks_spec.rb +23 -28
  57. data/spec/controller/catch_all_spec.rb +81 -29
  58. data/spec/controller/controller_spec.rb +444 -43
  59. data/spec/controller/dynamic_delay_spec.rb +16 -18
  60. data/spec/controller/helpers_spec.rb +1 -2
  61. data/spec/controller/interrupt_detect_spec.rb +171 -0
  62. data/spec/controller/messages_spec.rb +744 -0
  63. data/spec/controller/nlp_spec.rb +93 -0
  64. data/spec/controller/replies_spec.rb +446 -11
  65. data/spec/controller/unrecognized_message_spec.rb +168 -0
  66. data/spec/dispatcher_spec.rb +79 -0
  67. data/spec/flow/flow_spec.rb +1 -2
  68. data/spec/flow/state_spec.rb +14 -3
  69. data/spec/helpers/redis_spec.rb +77 -0
  70. data/spec/lock_spec.rb +100 -0
  71. data/spec/nlp/client_spec.rb +23 -0
  72. data/spec/nlp/result_spec.rb +57 -0
  73. data/spec/replies/messages/say_msgs_without_breaks.yml +4 -0
  74. data/spec/replies/messages/say_randomize_speech.yml +10 -0
  75. data/spec/replies/messages/say_randomize_text.yml +10 -0
  76. data/spec/replies/messages/sub1/sub2/say_nested.yml +10 -0
  77. data/spec/reply_spec.rb +61 -0
  78. data/spec/scheduled_reply_spec.rb +23 -0
  79. data/spec/service_reply_spec.rb +1 -2
  80. data/spec/session_spec.rb +251 -12
  81. data/spec/spec_helper.rb +21 -0
  82. data/spec/support/controllers/vaders_controller.rb +24 -0
  83. data/spec/support/nlp_clients/dialogflow.rb +9 -0
  84. data/spec/support/nlp_clients/luis.rb +9 -0
  85. data/spec/support/nlp_results/luis_result.rb +163 -0
  86. data/spec/version_spec.rb +1 -2
  87. data/stealth.gemspec +6 -6
  88. metadata +83 -39
  89. data/docs/00-introduction.md +0 -37
  90. data/docs/01-getting-started.md +0 -21
  91. data/docs/02-local-development.md +0 -40
  92. data/docs/03-basics.md +0 -171
  93. data/docs/04-sessions.md +0 -29
  94. data/docs/05-controllers.md +0 -179
  95. data/docs/06-models.md +0 -39
  96. data/docs/07-replies.md +0 -114
  97. data/docs/08-catchalls.md +0 -49
  98. data/docs/09-messaging-integrations.md +0 -80
  99. data/docs/10-nlp-integrations.md +0 -13
  100. data/docs/11-analytics.md +0 -13
  101. data/docs/12-commands.md +0 -62
  102. data/docs/13-deployment.md +0 -50
  103. data/lib/stealth/generators/builder/config/initializers/.keep +0 -0
@@ -6,6 +6,7 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
6
  require 'rspec'
7
7
 
8
8
  require 'stealth'
9
+ require 'sidekiq/testing'
9
10
  require 'mock_redis'
10
11
 
11
12
  # Requires supporting files with custom matchers and macros, etc,
@@ -13,7 +14,27 @@ require 'mock_redis'
13
14
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
14
15
 
15
16
  $redis = MockRedis.new
17
+ $services_yml = File.read(File.join(File.dirname(__FILE__), 'support', 'services.yml'))
16
18
 
17
19
  RSpec.configure do |config|
18
20
  ENV['STEALTH_ENV'] = 'test'
21
+
22
+ config.before(:each) do |example|
23
+ Sidekiq::Testing.fake!
24
+
25
+ Stealth.load_services_config!($services_yml)
26
+ end
27
+
28
+ config.expect_with :rspec do |expectations|
29
+ # This option will default to `true` in RSpec 4. It makes the `description`
30
+ # and `failure_message` of custom matchers include text for helper methods
31
+ # defined using `chain`, e.g.:
32
+ # be_bigger_than(2).and_smaller_than(4).description
33
+ # # => "be bigger than 2 and smaller than 4"
34
+ # ...rather than:
35
+ # # => "be bigger than 2"
36
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
37
+
38
+ expectations.on_potential_false_positives = :nothing
39
+ end
19
40
  end
@@ -0,0 +1,24 @@
1
+ class VadersController < Stealth::Controller
2
+ def my_action
3
+ raise "oops"
4
+ end
5
+
6
+ def my_action2
7
+
8
+ end
9
+
10
+ def my_action3
11
+ do_nothing
12
+ end
13
+
14
+ def action_with_unrecognized_msg
15
+ handle_message(
16
+ 'hello' => proc { puts "Hello world!" },
17
+ 'bye' => proc { puts "Goodbye world!" }
18
+ )
19
+ end
20
+
21
+ def action_with_unrecognized_match
22
+ match = get_match(['hello', 'bye'])
23
+ end
24
+ end
@@ -0,0 +1,9 @@
1
+ module Stealth
2
+ module Nlp
3
+ module Dialogflow
4
+ class Client < Stealth::Nlp::Client
5
+
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Stealth
2
+ module Nlp
3
+ module Luis
4
+ class Client < Stealth::Nlp::Client
5
+
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,163 @@
1
+ module TestNlpResult
2
+ class Luis < Stealth::Nlp::Result
3
+
4
+ ENTITY_MAP = {
5
+ 'money' => :currency, 'number' => :number, 'email' => :email,
6
+ 'percentage' => :percentage, 'Calendar.Duration' => :duration,
7
+ 'geographyV2' => :geo, 'age' => :age, 'phonenumber' => :phone,
8
+ 'ordinalV2' => :ordinal, 'url' => :url, 'dimension' => :dimension,
9
+ 'temperature' => :temp, 'keyPhrase' => :key_phrase, 'name' => :name,
10
+ 'datetimeV2' => :datetime
11
+ }
12
+
13
+ attr_reader :result, :intent
14
+
15
+ def initialize(intent:, entity: :single_number_entity)
16
+ @result = test_responses[entity]
17
+ @intent = intent
18
+ end
19
+
20
+ def parsed_result
21
+ @result
22
+ end
23
+
24
+ def intent_score
25
+ rand
26
+ end
27
+
28
+ def raw_entities
29
+ @result.dig('prediction', 'entities')
30
+ end
31
+
32
+ def entities
33
+ return {} if raw_entities.blank?
34
+ _entities = {}
35
+
36
+ raw_entities.each do |type, values|
37
+ if ENTITY_MAP[type]
38
+ _entities[ENTITY_MAP[type]] = values
39
+ else
40
+ # A custom entity
41
+ _entities[type.to_sym] = values
42
+ end
43
+ end
44
+
45
+ _entities
46
+ end
47
+
48
+ def sentiment
49
+ %i(positive neutral negative).sample
50
+ end
51
+
52
+ def sentiment_score
53
+ rand
54
+ end
55
+
56
+ def present?
57
+ parsed_result.present?
58
+ end
59
+
60
+ private
61
+
62
+ def test_responses
63
+ {
64
+ single_number_entity: {
65
+ "query" => "My score was 78",
66
+ "prediction" => {
67
+ "topIntent" => "None",
68
+ "intents" => {
69
+ "None" => {
70
+ "score" => 0.170594558
71
+ }
72
+ },
73
+ "entities" => {
74
+ "keyPhrase" => [
75
+ "score"
76
+ ],
77
+ "number" => [
78
+ 78
79
+ ]
80
+ },
81
+ "sentiment" => {
82
+ "label" => "neutral",
83
+ "score" => 0.5
84
+ }
85
+ }
86
+ },
87
+
88
+ double_number_entity: {
89
+ "query" => "Their scores were 89 and 97, respectively",
90
+ "prediction" => {
91
+ "topIntent" => "None",
92
+ "intents" => {
93
+ "None" => {
94
+ "score" => 0.5280223
95
+ }
96
+ },
97
+ "entities" => {
98
+ "keyPhrase" => [
99
+ "scores"
100
+ ],
101
+ "number" => [
102
+ 89,
103
+ 97
104
+ ]
105
+ },
106
+ "sentiment" => {
107
+ "label" => "negative",
108
+ "score" => 0.309174955
109
+ }
110
+ }
111
+ },
112
+
113
+ triple_number_entity: {
114
+ "query" => "Their scores were 89, 65, and 97, respectively",
115
+ "prediction" => {
116
+ "topIntent" => "None",
117
+ "intents" => {
118
+ "None" => {
119
+ "score" => 0.6703843
120
+ }
121
+ },
122
+ "entities" => {
123
+ "keyPhrase" => [
124
+ "scores"
125
+ ],
126
+ "number" => [
127
+ 89,
128
+ 65,
129
+ 97
130
+ ]
131
+ },
132
+ "sentiment" => {
133
+ "label" => "negative",
134
+ "score" => 0.309174955
135
+ }
136
+ }
137
+ },
138
+
139
+ custom_entity: {
140
+ "query" => "call me right away",
141
+ "prediction" => {
142
+ "topIntent" => "now",
143
+ "intents" => {
144
+ "now" => {
145
+ "score" => 0.781227
146
+ }
147
+ },
148
+ "entities" => {
149
+ "asap" => [
150
+ ["right away"]
151
+ ]
152
+ },
153
+ "sentiment" => {
154
+ "label" => "neutral",
155
+ "score" => 0.5
156
+ }
157
+ }
158
+ }
159
+ }
160
+ end
161
+
162
+ end
163
+ end
@@ -1,7 +1,6 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
+ require 'spec_helper'
5
4
 
6
5
  describe "Stealth::Version" do
7
6
 
@@ -13,16 +13,16 @@ Gem::Specification.new do |s|
13
13
  s.email = 'mauricio@edge14.com'
14
14
 
15
15
  s.add_dependency 'sinatra', '~> 2.0'
16
- s.add_dependency 'puma', '~> 3.10'
17
- s.add_dependency 'thor', '~> 0.20'
16
+ s.add_dependency 'puma', '>= 4.2', '< 5.0'
17
+ s.add_dependency 'thor', '~> 1.0'
18
18
  s.add_dependency 'multi_json', '~> 1.12'
19
- s.add_dependency 'sidekiq', '~> 5.0'
20
- s.add_dependency 'activesupport', '~> 5.2'
19
+ s.add_dependency 'sidekiq', '~> 6.0'
20
+ s.add_dependency 'activesupport', '~> 6.0'
21
21
 
22
- s.add_development_dependency 'rspec', '~> 3.6'
22
+ s.add_development_dependency 'rspec', '~> 3.9'
23
23
  s.add_development_dependency 'rspec_junit_formatter', '~> 0.3'
24
24
  s.add_development_dependency 'rack-test', '~> 1.1'
25
- s.add_development_dependency 'mock_redis', '~> 0.17'
25
+ s.add_development_dependency 'mock_redis', '~> 0.22'
26
26
 
27
27
  s.files = `git ls-files`.split("\n")
28
28
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stealth
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 2.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mauricio Gomes
8
8
  - Matthew Black
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-12-17 00:00:00.000000000 Z
12
+ date: 2020-09-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
@@ -29,30 +29,36 @@ dependencies:
29
29
  name: puma
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '4.2'
35
+ - - "<"
33
36
  - !ruby/object:Gem::Version
34
- version: '3.10'
37
+ version: '5.0'
35
38
  type: :runtime
36
39
  prerelease: false
37
40
  version_requirements: !ruby/object:Gem::Requirement
38
41
  requirements:
39
- - - "~>"
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '4.2'
45
+ - - "<"
40
46
  - !ruby/object:Gem::Version
41
- version: '3.10'
47
+ version: '5.0'
42
48
  - !ruby/object:Gem::Dependency
43
49
  name: thor
44
50
  requirement: !ruby/object:Gem::Requirement
45
51
  requirements:
46
52
  - - "~>"
47
53
  - !ruby/object:Gem::Version
48
- version: '0.20'
54
+ version: '1.0'
49
55
  type: :runtime
50
56
  prerelease: false
51
57
  version_requirements: !ruby/object:Gem::Requirement
52
58
  requirements:
53
59
  - - "~>"
54
60
  - !ruby/object:Gem::Version
55
- version: '0.20'
61
+ version: '1.0'
56
62
  - !ruby/object:Gem::Dependency
57
63
  name: multi_json
58
64
  requirement: !ruby/object:Gem::Requirement
@@ -73,42 +79,42 @@ dependencies:
73
79
  requirements:
74
80
  - - "~>"
75
81
  - !ruby/object:Gem::Version
76
- version: '5.0'
82
+ version: '6.0'
77
83
  type: :runtime
78
84
  prerelease: false
79
85
  version_requirements: !ruby/object:Gem::Requirement
80
86
  requirements:
81
87
  - - "~>"
82
88
  - !ruby/object:Gem::Version
83
- version: '5.0'
89
+ version: '6.0'
84
90
  - !ruby/object:Gem::Dependency
85
91
  name: activesupport
86
92
  requirement: !ruby/object:Gem::Requirement
87
93
  requirements:
88
94
  - - "~>"
89
95
  - !ruby/object:Gem::Version
90
- version: '5.2'
96
+ version: '6.0'
91
97
  type: :runtime
92
98
  prerelease: false
93
99
  version_requirements: !ruby/object:Gem::Requirement
94
100
  requirements:
95
101
  - - "~>"
96
102
  - !ruby/object:Gem::Version
97
- version: '5.2'
103
+ version: '6.0'
98
104
  - !ruby/object:Gem::Dependency
99
105
  name: rspec
100
106
  requirement: !ruby/object:Gem::Requirement
101
107
  requirements:
102
108
  - - "~>"
103
109
  - !ruby/object:Gem::Version
104
- version: '3.6'
110
+ version: '3.9'
105
111
  type: :development
106
112
  prerelease: false
107
113
  version_requirements: !ruby/object:Gem::Requirement
108
114
  requirements:
109
115
  - - "~>"
110
116
  - !ruby/object:Gem::Version
111
- version: '3.6'
117
+ version: '3.9'
112
118
  - !ruby/object:Gem::Dependency
113
119
  name: rspec_junit_formatter
114
120
  requirement: !ruby/object:Gem::Requirement
@@ -143,14 +149,14 @@ dependencies:
143
149
  requirements:
144
150
  - - "~>"
145
151
  - !ruby/object:Gem::Version
146
- version: '0.17'
152
+ version: '0.22'
147
153
  type: :development
148
154
  prerelease: false
149
155
  version_requirements: !ruby/object:Gem::Requirement
150
156
  requirements:
151
157
  - - "~>"
152
158
  - !ruby/object:Gem::Version
153
- version: '0.17'
159
+ version: '0.22'
154
160
  description: Ruby framework for building conversational bots.
155
161
  email: mauricio@edge14.com
156
162
  executables:
@@ -167,20 +173,6 @@ files:
167
173
  - README.md
168
174
  - VERSION
169
175
  - bin/stealth
170
- - docs/00-introduction.md
171
- - docs/01-getting-started.md
172
- - docs/02-local-development.md
173
- - docs/03-basics.md
174
- - docs/04-sessions.md
175
- - docs/05-controllers.md
176
- - docs/06-models.md
177
- - docs/07-replies.md
178
- - docs/08-catchalls.md
179
- - docs/09-messaging-integrations.md
180
- - docs/10-nlp-integrations.md
181
- - docs/11-analytics.md
182
- - docs/12-commands.md
183
- - docs/13-deployment.md
184
176
  - lib/stealth.rb
185
177
  - lib/stealth/base.rb
186
178
  - lib/stealth/cli.rb
@@ -192,13 +184,20 @@ files:
192
184
  - lib/stealth/controller/callbacks.rb
193
185
  - lib/stealth/controller/catch_all.rb
194
186
  - lib/stealth/controller/controller.rb
187
+ - lib/stealth/controller/dev_jumps.rb
195
188
  - lib/stealth/controller/dynamic_delay.rb
196
189
  - lib/stealth/controller/helpers.rb
190
+ - lib/stealth/controller/interrupt_detect.rb
191
+ - lib/stealth/controller/messages.rb
192
+ - lib/stealth/controller/nlp.rb
197
193
  - lib/stealth/controller/replies.rb
194
+ - lib/stealth/controller/unrecognized_message.rb
195
+ - lib/stealth/core_ext.rb
196
+ - lib/stealth/core_ext/numeric.rb
197
+ - lib/stealth/core_ext/string.rb
198
198
  - lib/stealth/dispatcher.rb
199
199
  - lib/stealth/errors.rb
200
200
  - lib/stealth/flow/base.rb
201
- - lib/stealth/flow/core_ext.rb
202
201
  - lib/stealth/flow/specification.rb
203
202
  - lib/stealth/flow/state.rb
204
203
  - lib/stealth/generators/builder.rb
@@ -212,6 +211,8 @@ files:
212
211
  - lib/stealth/generators/builder/bot/controllers/concerns/.keep
213
212
  - lib/stealth/generators/builder/bot/controllers/goodbyes_controller.rb
214
213
  - lib/stealth/generators/builder/bot/controllers/hellos_controller.rb
214
+ - lib/stealth/generators/builder/bot/controllers/interrupts_controller.rb
215
+ - lib/stealth/generators/builder/bot/controllers/unrecognized_messages_controller.rb
215
216
  - lib/stealth/generators/builder/bot/helpers/bot_helper.rb
216
217
  - lib/stealth/generators/builder/bot/models/bot_record.rb
217
218
  - lib/stealth/generators/builder/bot/models/concerns/.keep
@@ -223,7 +224,8 @@ files:
223
224
  - lib/stealth/generators/builder/config/database.yml
224
225
  - lib/stealth/generators/builder/config/environment.rb
225
226
  - lib/stealth/generators/builder/config/flow_map.rb
226
- - lib/stealth/generators/builder/config/initializers/.keep
227
+ - lib/stealth/generators/builder/config/initializers/autoload.rb
228
+ - lib/stealth/generators/builder/config/initializers/inflections.rb
227
229
  - lib/stealth/generators/builder/config/puma.rb
228
230
  - lib/stealth/generators/builder/config/services.yml
229
231
  - lib/stealth/generators/builder/config/sidekiq.yml
@@ -232,12 +234,17 @@ files:
232
234
  - lib/stealth/generators/generate/flow/controllers/controller.tt
233
235
  - lib/stealth/generators/generate/flow/helpers/helper.tt
234
236
  - lib/stealth/generators/generate/flow/replies/ask_example.tt
237
+ - lib/stealth/helpers/redis.rb
235
238
  - lib/stealth/jobs.rb
239
+ - lib/stealth/lock.rb
236
240
  - lib/stealth/logger.rb
237
241
  - lib/stealth/migrations/configurator.rb
238
242
  - lib/stealth/migrations/generators.rb
239
243
  - lib/stealth/migrations/railtie_config.rb
240
244
  - lib/stealth/migrations/tasks.rb
245
+ - lib/stealth/nlp/client.rb
246
+ - lib/stealth/nlp/result.rb
247
+ - lib/stealth/reloader.rb
241
248
  - lib/stealth/reply.rb
242
249
  - lib/stealth/scheduled_reply.rb
243
250
  - lib/stealth/server.rb
@@ -256,27 +263,46 @@ files:
256
263
  - spec/controller/controller_spec.rb
257
264
  - spec/controller/dynamic_delay_spec.rb
258
265
  - spec/controller/helpers_spec.rb
266
+ - spec/controller/interrupt_detect_spec.rb
267
+ - spec/controller/messages_spec.rb
268
+ - spec/controller/nlp_spec.rb
259
269
  - spec/controller/replies_spec.rb
270
+ - spec/controller/unrecognized_message_spec.rb
271
+ - spec/dispatcher_spec.rb
260
272
  - spec/flow/flow_spec.rb
261
273
  - spec/flow/state_spec.rb
274
+ - spec/helpers/redis_spec.rb
275
+ - spec/lock_spec.rb
276
+ - spec/nlp/client_spec.rb
277
+ - spec/nlp/result_spec.rb
262
278
  - spec/replies/hello.yml.erb
263
279
  - spec/replies/messages/say_hola.yml+facebook.erb
264
280
  - spec/replies/messages/say_hola.yml+twilio.erb
265
281
  - spec/replies/messages/say_hola.yml.erb
266
282
  - spec/replies/messages/say_howdy_with_dynamic.yml
283
+ - spec/replies/messages/say_msgs_without_breaks.yml
267
284
  - spec/replies/messages/say_offer.yml
268
285
  - spec/replies/messages/say_offer_with_dynamic.yml
269
286
  - spec/replies/messages/say_oi.yml.erb
287
+ - spec/replies/messages/say_randomize_speech.yml
288
+ - spec/replies/messages/say_randomize_text.yml
270
289
  - spec/replies/messages/say_yo.yml
271
290
  - spec/replies/messages/say_yo.yml+twitter
291
+ - spec/replies/messages/sub1/sub2/say_nested.yml
292
+ - spec/reply_spec.rb
293
+ - spec/scheduled_reply_spec.rb
272
294
  - spec/service_reply_spec.rb
273
295
  - spec/session_spec.rb
274
296
  - spec/spec_helper.rb
275
297
  - spec/support/alternate_helpers/foo_helper.rb
298
+ - spec/support/controllers/vaders_controller.rb
276
299
  - spec/support/helpers/fun/games_helper.rb
277
300
  - spec/support/helpers/fun/pdf_helper.rb
278
301
  - spec/support/helpers/standalone_helper.rb
279
302
  - spec/support/helpers_typo/users_helper.rb
303
+ - spec/support/nlp_clients/dialogflow.rb
304
+ - spec/support/nlp_clients/luis.rb
305
+ - spec/support/nlp_results/luis_result.rb
280
306
  - spec/support/sample_messages.rb
281
307
  - spec/support/services.yml
282
308
  - spec/support/services_with_erb.yml
@@ -286,7 +312,7 @@ homepage: https://github.com/hellostealth/stealth
286
312
  licenses:
287
313
  - MIT
288
314
  metadata: {}
289
- post_install_message:
315
+ post_install_message:
290
316
  rdoc_options: []
291
317
  require_paths:
292
318
  - lib
@@ -297,13 +323,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
297
323
  version: '0'
298
324
  required_rubygems_version: !ruby/object:Gem::Requirement
299
325
  requirements:
300
- - - ">="
326
+ - - ">"
301
327
  - !ruby/object:Gem::Version
302
- version: '0'
328
+ version: 1.3.1
303
329
  requirements: []
304
- rubyforge_project:
305
- rubygems_version: 2.7.7
306
- signing_key:
330
+ rubygems_version: 3.1.2
331
+ signing_key:
307
332
  specification_version: 4
308
333
  summary: Ruby framework for conversational bots
309
334
  test_files:
@@ -313,27 +338,46 @@ test_files:
313
338
  - spec/controller/controller_spec.rb
314
339
  - spec/controller/dynamic_delay_spec.rb
315
340
  - spec/controller/helpers_spec.rb
341
+ - spec/controller/interrupt_detect_spec.rb
342
+ - spec/controller/messages_spec.rb
343
+ - spec/controller/nlp_spec.rb
316
344
  - spec/controller/replies_spec.rb
345
+ - spec/controller/unrecognized_message_spec.rb
346
+ - spec/dispatcher_spec.rb
317
347
  - spec/flow/flow_spec.rb
318
348
  - spec/flow/state_spec.rb
349
+ - spec/helpers/redis_spec.rb
350
+ - spec/lock_spec.rb
351
+ - spec/nlp/client_spec.rb
352
+ - spec/nlp/result_spec.rb
319
353
  - spec/replies/hello.yml.erb
320
354
  - spec/replies/messages/say_hola.yml+facebook.erb
321
355
  - spec/replies/messages/say_hola.yml+twilio.erb
322
356
  - spec/replies/messages/say_hola.yml.erb
323
357
  - spec/replies/messages/say_howdy_with_dynamic.yml
358
+ - spec/replies/messages/say_msgs_without_breaks.yml
324
359
  - spec/replies/messages/say_offer.yml
325
360
  - spec/replies/messages/say_offer_with_dynamic.yml
326
361
  - spec/replies/messages/say_oi.yml.erb
362
+ - spec/replies/messages/say_randomize_speech.yml
363
+ - spec/replies/messages/say_randomize_text.yml
327
364
  - spec/replies/messages/say_yo.yml
328
365
  - spec/replies/messages/say_yo.yml+twitter
366
+ - spec/replies/messages/sub1/sub2/say_nested.yml
367
+ - spec/reply_spec.rb
368
+ - spec/scheduled_reply_spec.rb
329
369
  - spec/service_reply_spec.rb
330
370
  - spec/session_spec.rb
331
371
  - spec/spec_helper.rb
332
372
  - spec/support/alternate_helpers/foo_helper.rb
373
+ - spec/support/controllers/vaders_controller.rb
333
374
  - spec/support/helpers/fun/games_helper.rb
334
375
  - spec/support/helpers/fun/pdf_helper.rb
335
376
  - spec/support/helpers/standalone_helper.rb
336
377
  - spec/support/helpers_typo/users_helper.rb
378
+ - spec/support/nlp_clients/dialogflow.rb
379
+ - spec/support/nlp_clients/luis.rb
380
+ - spec/support/nlp_results/luis_result.rb
337
381
  - spec/support/sample_messages.rb
338
382
  - spec/support/services.yml
339
383
  - spec/support/services_with_erb.yml