stealth 2.0.0.beta7 → 2.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
  SHA256:
3
- metadata.gz: df932db1ce6adab511eb5ebae31e647e3b5c547e7de0ef92ee427d0b592e250b
4
- data.tar.gz: 74b9b5099125da94363c2f475062b62fdae543f4a5c40418d0d28293b2a6ca18
3
+ metadata.gz: ac41b0515e5073d79de1d4c5abdc76ec7ab57eccbc3ba5b8ce0e081f4ef8de51
4
+ data.tar.gz: 88621a529af26a406f02e65b8f757a0969d3a936577b522b2589e781e676a987
5
5
  SHA512:
6
- metadata.gz: 589a9e5064cb490e861528edcd32a3da4ff5859fd0405308d73db36a246ebdab437f4f4bd0510eea765a49f1ac292ec4cd1eb0c8cf43fd0d05404f67c6a91566
7
- data.tar.gz: b7e58cd020e541ba183150c27f4cdfc528c70bd47dbb2760d09084822e0334e747d50291672e18a21b68399fa423876f26ab02d94d9c532e2538b9dac7d30dac
6
+ metadata.gz: 78ece1a059e95b7df55ed430f35adb79cb1bb8e7a9b5df659def6513cf670db0123525f026855b31f96d00d15506478f77a6aa567a99597df122297dad8c979d
7
+ data.tar.gz: 92e908365e8256fa2264609224b9a136254bec5fd91aea08bf277f6b2e2173c9b09774fac1da3762617ac29df08ac56cbcb4ae9178f02674b927a5d24667e0db
@@ -11,13 +11,11 @@ jobs:
11
11
  strategy:
12
12
  fail-fast: false
13
13
  matrix:
14
- os: [ubuntu-18.04, ubuntu-20.04, ubuntu-22.04, macos-latest]
15
- ruby: [ 2.7, 3.0, 3.1, truffleruby-head ]
14
+ os: [ubuntu-22.04, macos-latest]
15
+ ruby: [ 3.3, truffleruby ]
16
16
  exclude:
17
17
  - os: ubuntu-22.04
18
- ruby: 2.7
19
- - os: ubuntu-22.04
20
- ruby: truffleruby-head
18
+ ruby: truffleruby
21
19
 
22
20
  runs-on: ${{ matrix.os }}
23
21
 
@@ -0,0 +1,29 @@
1
+ name: Release Gem
2
+ on:
3
+ # Triggers the workflow on push with a tag prefixed with v*
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ # Allows you to run this workflow manually from the Actions tab
9
+ workflow_dispatch:
10
+
11
+ jobs:
12
+ release:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v3
16
+ - uses: ruby/setup-ruby@v1
17
+ with:
18
+ ruby-version: 2.7
19
+ bundler-cache: true
20
+ - name: Publish gem
21
+ env:
22
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
23
+ run: |
24
+ mkdir -p $HOME/.gem
25
+ touch $HOME/.gem/credentials
26
+ chmod 0600 $HOME/.gem/credentials
27
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
28
+ gem build *.gemspec
29
+ gem push *.gem
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  .yardoc
11
11
  doc/
12
12
  *.gem
13
+ /.idea
data/CHANGELOG.md CHANGED
@@ -14,9 +14,9 @@
14
14
  * [Logging] `primary_session`, `previous_session`, and `back_to_session` now explicitly logged
15
15
  * [Sessions] The session is no longer set on update or stepping witht destination flow and state match the existing session.
16
16
  * [Scheduled Replies] The `service_message.target_id` is now set for scheduled replies. NOTE: scheduled replies that are already enqueued will NOT have this set.
17
- * [Server] Updated to Puma 5.5
18
- * [Server] Updated to Sidekiq 6.3
19
- * [Server] Updated to Sinatra 2.1
17
+ * [Server] Updated to Puma 6.x
18
+ * [Server] Updated to Sidekiq 7.x
19
+ * [Server] Updated to Sinatra 3.x
20
20
  * [Sessions] Added `to_s` for sessions to pretty print the slug. Useful when debugging.
21
21
  * `send_reples` now supports two additional options for replies:
22
22
  `send_replies(custom_reply: 'hello/say_hello')`
data/Gemfile CHANGED
@@ -2,5 +2,5 @@ source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
4
  platforms :mri do
5
- gem 'oj', '~> 3.10'
5
+ gem 'oj', '~> 3.14'
6
6
  end
data/Gemfile.lock CHANGED
@@ -1,44 +1,51 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- stealth (2.0.0.beta7)
5
- activesupport (~> 6.0)
4
+ stealth (2.1.0)
5
+ activesupport (~> 7.0)
6
+ connection_pool (~> 2.4)
6
7
  multi_json (~> 1.12)
7
- puma (>= 4.2, < 6.0)
8
- sidekiq (< 7)
9
- sinatra (~> 2.0)
8
+ puma (~> 6.0)
9
+ redis (~> 5.0)
10
+ sidekiq (~> 7.0)
11
+ sinatra (>= 2, < 4)
10
12
  thor (~> 1.0)
13
+ zeitwerk (~> 2.6)
11
14
 
12
15
  GEM
13
16
  remote: https://rubygems.org/
14
17
  specs:
15
- activesupport (6.1.7)
18
+ activesupport (7.0.5)
16
19
  concurrent-ruby (~> 1.0, >= 1.0.2)
17
20
  i18n (>= 1.6, < 2)
18
21
  minitest (>= 5.1)
19
22
  tzinfo (~> 2.0)
20
- zeitwerk (~> 2.3)
21
- concurrent-ruby (1.1.10)
22
- connection_pool (2.3.0)
23
+ base64 (0.3.0)
24
+ concurrent-ruby (1.3.5)
25
+ connection_pool (2.5.3)
23
26
  diff-lcs (1.5.0)
24
- i18n (1.12.0)
27
+ i18n (1.13.0)
25
28
  concurrent-ruby (~> 1.0)
26
- minitest (5.16.3)
27
- mock_redis (0.34.0)
29
+ logger (1.7.0)
30
+ minitest (5.18.0)
31
+ mock_redis (0.36.0)
28
32
  ruby2_keywords
29
33
  multi_json (1.15.0)
30
- mustermann (2.0.2)
34
+ mustermann (3.0.0)
31
35
  ruby2_keywords (~> 0.0.1)
32
- nio4r (2.5.8)
33
- oj (3.13.22)
34
- puma (5.6.5)
36
+ nio4r (2.5.9)
37
+ oj (3.14.3)
38
+ puma (6.3.0)
35
39
  nio4r (~> 2.0)
36
- rack (2.2.4)
37
- rack-protection (2.2.2)
40
+ rack (2.2.17)
41
+ rack-protection (3.0.6)
38
42
  rack
39
- rack-test (2.0.2)
43
+ rack-test (2.1.0)
40
44
  rack (>= 1.3)
41
- redis (4.8.0)
45
+ redis (5.4.1)
46
+ redis-client (>= 0.22.0)
47
+ redis-client (0.25.1)
48
+ connection_pool
42
49
  rspec (3.12.0)
43
50
  rspec-core (~> 3.12.0)
44
51
  rspec-expectations (~> 3.12.0)
@@ -53,30 +60,32 @@ GEM
53
60
  rspec-support (~> 3.12.0)
54
61
  rspec-support (3.12.0)
55
62
  ruby2_keywords (0.0.5)
56
- sidekiq (6.5.8)
57
- connection_pool (>= 2.2.5, < 3)
58
- rack (~> 2.0)
59
- redis (>= 4.5.0, < 5)
60
- sinatra (2.2.2)
61
- mustermann (~> 2.0)
62
- rack (~> 2.2)
63
- rack-protection (= 2.2.2)
63
+ sidekiq (7.3.9)
64
+ base64
65
+ connection_pool (>= 2.3.0)
66
+ logger
67
+ rack (>= 2.2.4)
68
+ redis-client (>= 0.22.2)
69
+ sinatra (3.0.6)
70
+ mustermann (~> 3.0)
71
+ rack (~> 2.2, >= 2.2.4)
72
+ rack-protection (= 3.0.6)
64
73
  tilt (~> 2.0)
65
- thor (1.2.1)
66
- tilt (2.0.11)
67
- tzinfo (2.0.5)
74
+ thor (1.2.2)
75
+ tilt (2.2.0)
76
+ tzinfo (2.0.6)
68
77
  concurrent-ruby (~> 1.0)
69
- zeitwerk (2.6.4)
78
+ zeitwerk (2.6.8)
70
79
 
71
80
  PLATFORMS
72
81
  ruby
73
82
 
74
83
  DEPENDENCIES
75
84
  mock_redis (~> 0.22)
76
- oj (~> 3.10)
85
+ oj (~> 3.14)
77
86
  rack-test (~> 2.0)
78
87
  rspec (~> 3.9)
79
88
  stealth!
80
89
 
81
90
  BUNDLED WITH
82
- 2.2.32
91
+ 2.3.26
data/README.md CHANGED
@@ -55,4 +55,4 @@ Stealth is versioned using [Semantic Versioning](https://semver.org), but it's m
55
55
 
56
56
  ## License
57
57
 
58
- "Stealth" and the Stealth logo are Copyright (c) 2017-2022 MAV Automated Ventures Inc.
58
+ "Stealth" and the Stealth logo are Copyright (c) 2017-2024 MAV Automated Ventures Inc.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0.beta7
1
+ 2.1.0
data/lib/stealth/base.rb CHANGED
@@ -4,6 +4,7 @@
4
4
  # base requirements
5
5
  require 'yaml'
6
6
  require 'sidekiq'
7
+ require 'redis'
7
8
  require 'active_support/all'
8
9
 
9
10
  begin
@@ -20,6 +21,7 @@ require 'stealth/core_ext'
20
21
  require 'stealth/logger'
21
22
  require 'stealth/configuration'
22
23
  require 'stealth/reloader'
24
+ require 'stealth/redis'
23
25
 
24
26
  # helpers
25
27
  require 'stealth/helpers/redis'
@@ -123,7 +125,9 @@ module Stealth
123
125
 
124
126
  load_bot!
125
127
 
126
- Sidekiq[:reloader] = Stealth.bot_reloader
128
+ Sidekiq.configure_server do |config|
129
+ config[:reloader] = Stealth.bot_reloader
130
+ end
127
131
 
128
132
  if defined?(ActiveRecord)
129
133
  if ENV['DATABASE_URL'].present?
@@ -131,7 +135,7 @@ module Stealth
131
135
  else
132
136
  database_config = File.read(File.join(Stealth.root, 'config', 'database.yml'))
133
137
  ActiveRecord::Base.establish_connection(
134
- YAML.load(ERB.new(database_config).result)[Stealth.env]
138
+ YAML.load(ERB.new(database_config).result, aliases: true)[Stealth.env]
135
139
  )
136
140
  end
137
141
  end
@@ -52,7 +52,7 @@ module Stealth
52
52
  private
53
53
 
54
54
  def fetch_error_level
55
- if fail_attempts = $redis.get(error_slug)
55
+ if fail_attempts = Stealth::RedisSupport.with { |r| r.get(error_slug) }
56
56
  begin
57
57
  fail_attempts = Integer(fail_attempts)
58
58
  rescue ArgumentError
@@ -65,7 +65,7 @@ module Stealth
65
65
  end
66
66
 
67
67
  # Set the error with an expiration to avoid filling Redis
68
- $redis.setex(error_slug, 15.minutes.to_i, fail_attempts)
68
+ Stealth::RedisSupport.with { |r| r.setex(error_slug, 15.minutes.to_i, fail_attempts) }
69
69
 
70
70
  fail_attempts
71
71
  end
@@ -2,8 +2,8 @@ source 'https://rubygems.org'
2
2
 
3
3
  gem 'stealth', '~> 2.0'
4
4
 
5
- gem 'railties', '~> 6.0'
6
- gem 'activerecord', '~> 6.0'
5
+ gem 'railties', '~> 7.0'
6
+ gem 'activerecord', '~> 7.0'
7
7
  # Use sqlite3 as the database for Active Record
8
8
  gem 'sqlite3'
9
9
 
@@ -12,26 +12,28 @@ module Stealth
12
12
  if expiration > 0
13
13
  getex(key, expiration)
14
14
  else
15
- $redis.get(key)
15
+ Stealth::RedisSupport.with { |r| r.get(key) }
16
16
  end
17
17
  end
18
18
 
19
19
  def delete_key(key)
20
- $redis.del(key)
20
+ Stealth::RedisSupport.with { |r| r.del(key) }
21
21
  end
22
22
 
23
23
  def getex(key, expiration=Stealth.config.session_ttl)
24
- $redis.multi do |pipeline|
25
- pipeline.expire(key, expiration)
26
- pipeline.get(key)
27
- end.last
24
+ Stealth::RedisSupport.with do |r|
25
+ r.multi do |pipeline|
26
+ pipeline.expire(key, expiration)
27
+ pipeline.get(key)
28
+ end.last
29
+ end
28
30
  end
29
31
 
30
32
  def persist_key(key:, value:, expiration: Stealth.config.session_ttl)
31
33
  if expiration > 0
32
- $redis.setex(key, expiration, value)
34
+ Stealth::RedisSupport.with { |r| r.setex(key, expiration, value) }
33
35
  else
34
- $redis.set(key, value)
36
+ Stealth::RedisSupport.with { |r| r.set(key, value) }
35
37
  end
36
38
  end
37
39
 
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "redis"
4
+ require "connection_pool"
5
+
6
+ module Stealth
7
+ class RedisConfig
8
+ attr_accessor :url, :pool_size, :pool_timeout
9
+
10
+ def initialize
11
+ @url = Stealth.env.development? ? "redis://localhost:6379/0" : ENV["STEALTH_REDIS_URL"] || ENV["REDIS_URL"]
12
+ @pool_size = Integer(ENV["STEALTH_REDIS_POOL"] || 5)
13
+ @pool_timeout = Integer(ENV["STEALTH_REDIS_TIMEOUT"] || 5)
14
+ end
15
+
16
+ def to_redis_kwargs
17
+ { url: url }
18
+ end
19
+ end
20
+
21
+ module RedisSupport
22
+ class << self
23
+ def config
24
+ @config ||= RedisConfig.new
25
+ end
26
+
27
+ def configure
28
+ yield(config)
29
+ reset_pool!
30
+ end
31
+
32
+ def pool
33
+ @pool ||= build_pool
34
+ end
35
+
36
+ def with(&blk)
37
+ pool.with(&blk)
38
+ end
39
+
40
+ def connection_pool
41
+ pool
42
+ end
43
+
44
+ def reset_pool!
45
+ if defined?(@pool) && @pool
46
+ @pool.shutdown(&:close) rescue nil
47
+ end
48
+ @pool = nil
49
+ end
50
+
51
+ private
52
+
53
+ def build_pool
54
+ ConnectionPool.new(size: config.pool_size, timeout: config.pool_timeout) do
55
+ ::Redis.new(**config.to_redis_kwargs)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+
@@ -41,6 +41,7 @@ module Stealth
41
41
 
42
42
  def enable_eager_load!
43
43
  if Stealth.config.eager_load
44
+ @loader.setup
44
45
  @loader.eager_load
45
46
  Stealth::Logger.l(topic: 'stealth', message: 'Eager loading enabled.')
46
47
  end
@@ -37,7 +37,11 @@ module Stealth
37
37
  json_params = MultiJson.load(request.body.read)
38
38
 
39
39
  if bandwidth?
40
- params.merge!(json_params.first)
40
+ if json_params.is_a?(Array)
41
+ params.merge!(json_params.first)
42
+ else
43
+ return [200, 'Ok']
44
+ end
41
45
  else
42
46
  params.merge!(json_params)
43
47
  end
@@ -20,10 +20,10 @@ module Stealth
20
20
  @type = type
21
21
 
22
22
  if id.present?
23
- unless defined?($redis) && $redis.present?
23
+ unless defined?(Stealth::RedisSupport) && Stealth::RedisSupport.connection_pool.present?
24
24
  raise(
25
25
  Stealth::Errors::RedisNotConfigured,
26
- "Please make sure REDIS_URL is configured before using sessions"
26
+ "Please make sure STEALTH_REDIS_URL or REDIS_URL is configured before using sessions"
27
27
  )
28
28
  end
29
29
 
@@ -91,7 +91,7 @@ module Stealth
91
91
  end
92
92
 
93
93
  def clear_session
94
- $redis.del(session_key)
94
+ Stealth::RedisSupport.with { |r| r.del(session_key) }
95
95
  end
96
96
 
97
97
  def present?
data/spec/session_spec.rb CHANGED
@@ -20,14 +20,12 @@ end
20
20
  describe "Stealth::Session" do
21
21
  let(:id) { '0xDEADBEEF' }
22
22
 
23
- it "should raise an error if $redis is not set" do
24
- $redis = nil
23
+ it "should raise an error if Stealth::RedisSupport connection_pool is not set" do
24
+ allow(Stealth::RedisSupport).to receive(:connection_pool).and_return(nil)
25
25
 
26
26
  expect {
27
27
  Stealth::Session.new(id: id)
28
28
  }.to raise_error(Stealth::Errors::RedisNotConfigured)
29
-
30
- $redis = MockRedis.new
31
29
  end
32
30
 
33
31
  describe "without a session" do
data/spec/spec_helper.rb CHANGED
@@ -4,18 +4,41 @@
4
4
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
5
  $LOAD_PATH.unshift(File.dirname(__FILE__))
6
6
  require 'rspec'
7
+ require 'connection_pool'
8
+ require 'mock_redis'
9
+
10
+ REDIS_TEST_CLIENT = MockRedis.new
11
+ REDIS_TEST_WRAPPER = ConnectionPool::Wrapper.new(size: 1, timeout: 1) { REDIS_TEST_CLIENT }
12
+
13
+ $redis = REDIS_TEST_WRAPPER
7
14
 
8
15
  require 'stealth'
9
16
  require 'sidekiq/testing'
10
- require 'mock_redis'
17
+
18
+ module Stealth
19
+ module RedisSupport
20
+ class << self
21
+ def with(&blk)
22
+ REDIS_TEST_WRAPPER.with(&blk)
23
+ end
24
+ def pool
25
+ REDIS_TEST_WRAPPER
26
+ end
27
+ def reset_pool!
28
+ nil
29
+ end
30
+ end
31
+ end
32
+ end
11
33
 
12
34
  # Requires supporting files with custom matchers and macros, etc,
13
35
  # in ./support/ and its subdirectories.
14
36
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
15
37
 
16
- $redis = MockRedis.new
17
38
  $services_yml = File.read(File.join(File.dirname(__FILE__), 'support', 'services.yml'))
18
39
 
40
+ Sidekiq.logger.level = Logger::ERROR
41
+
19
42
  RSpec.configure do |config|
20
43
  ENV['STEALTH_ENV'] = 'test'
21
44
 
data/stealth.gemspec CHANGED
@@ -12,12 +12,15 @@ Gem::Specification.new do |s|
12
12
  s.authors = ['Mauricio Gomes', 'Matthew Black']
13
13
  s.email = 'mauricio@edge14.com'
14
14
 
15
- s.add_dependency 'sinatra', '~> 2.0'
16
- s.add_dependency 'puma', '>= 4.2', '< 6.0'
17
- s.add_dependency 'thor', '~> 1.0'
15
+ s.add_dependency 'activesupport', '~> 7.0'
18
16
  s.add_dependency 'multi_json', '~> 1.12'
19
- s.add_dependency 'sidekiq', '< 7'
20
- s.add_dependency 'activesupport', '~> 6.0'
17
+ s.add_dependency 'puma', '~> 6.0'
18
+ s.add_dependency 'redis', '~> 5.0'
19
+ s.add_dependency "connection_pool", "~> 2.4"
20
+ s.add_dependency 'sidekiq', '~> 7.0'
21
+ s.add_dependency 'sinatra', '>= 2', '< 4'
22
+ s.add_dependency 'thor', '~> 1.0'
23
+ s.add_dependency 'zeitwerk', '~> 2.6'
21
24
 
22
25
  s.add_development_dependency 'rspec', '~> 3.9'
23
26
  s.add_development_dependency 'rack-test', '~> 2.0'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stealth
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta7
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mauricio Gomes
@@ -9,98 +9,140 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-11-06 00:00:00.000000000 Z
12
+ date: 2025-08-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: sinatra
15
+ name: activesupport
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '2.0'
20
+ version: '7.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '2.0'
27
+ version: '7.0'
28
28
  - !ruby/object:Gem::Dependency
29
- name: puma
29
+ name: multi_json
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ">="
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '4.2'
35
- - - "<"
34
+ version: '1.12'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.12'
42
+ - !ruby/object:Gem::Dependency
43
+ name: puma
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
36
47
  - !ruby/object:Gem::Version
37
48
  version: '6.0'
38
49
  type: :runtime
39
50
  prerelease: false
40
51
  version_requirements: !ruby/object:Gem::Requirement
41
52
  requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- version: '4.2'
45
- - - "<"
53
+ - - "~>"
46
54
  - !ruby/object:Gem::Version
47
55
  version: '6.0'
48
56
  - !ruby/object:Gem::Dependency
49
- name: thor
57
+ name: redis
50
58
  requirement: !ruby/object:Gem::Requirement
51
59
  requirements:
52
60
  - - "~>"
53
61
  - !ruby/object:Gem::Version
54
- version: '1.0'
62
+ version: '5.0'
55
63
  type: :runtime
56
64
  prerelease: false
57
65
  version_requirements: !ruby/object:Gem::Requirement
58
66
  requirements:
59
67
  - - "~>"
60
68
  - !ruby/object:Gem::Version
61
- version: '1.0'
69
+ version: '5.0'
62
70
  - !ruby/object:Gem::Dependency
63
- name: multi_json
71
+ name: connection_pool
64
72
  requirement: !ruby/object:Gem::Requirement
65
73
  requirements:
66
74
  - - "~>"
67
75
  - !ruby/object:Gem::Version
68
- version: '1.12'
76
+ version: '2.4'
69
77
  type: :runtime
70
78
  prerelease: false
71
79
  version_requirements: !ruby/object:Gem::Requirement
72
80
  requirements:
73
81
  - - "~>"
74
82
  - !ruby/object:Gem::Version
75
- version: '1.12'
83
+ version: '2.4'
76
84
  - !ruby/object:Gem::Dependency
77
85
  name: sidekiq
78
86
  requirement: !ruby/object:Gem::Requirement
79
87
  requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '7.0'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '7.0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: sinatra
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '2'
80
105
  - - "<"
81
106
  - !ruby/object:Gem::Version
82
- version: '7'
107
+ version: '4'
83
108
  type: :runtime
84
109
  prerelease: false
85
110
  version_requirements: !ruby/object:Gem::Requirement
86
111
  requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '2'
87
115
  - - "<"
88
116
  - !ruby/object:Gem::Version
89
- version: '7'
117
+ version: '4'
90
118
  - !ruby/object:Gem::Dependency
91
- name: activesupport
119
+ name: thor
92
120
  requirement: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: '6.0'
124
+ version: '1.0'
97
125
  type: :runtime
98
126
  prerelease: false
99
127
  version_requirements: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: '6.0'
131
+ version: '1.0'
132
+ - !ruby/object:Gem::Dependency
133
+ name: zeitwerk
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '2.6'
139
+ type: :runtime
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.6'
104
146
  - !ruby/object:Gem::Dependency
105
147
  name: rspec
106
148
  requirement: !ruby/object:Gem::Requirement
@@ -153,6 +195,7 @@ files:
153
195
  - ".gitbook.yaml"
154
196
  - ".github/dependabot.yml"
155
197
  - ".github/workflows/ci.yml"
198
+ - ".github/workflows/release.yml"
156
199
  - ".gitignore"
157
200
  - CHANGELOG.md
158
201
  - Gemfile
@@ -306,6 +349,7 @@ files:
306
349
  - lib/stealth/migrations/tasks.rb
307
350
  - lib/stealth/nlp/client.rb
308
351
  - lib/stealth/nlp/result.rb
352
+ - lib/stealth/redis.rb
309
353
  - lib/stealth/reloader.rb
310
354
  - lib/stealth/reply.rb
311
355
  - lib/stealth/scheduled_reply.rb
@@ -386,63 +430,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
386
430
  version: '0'
387
431
  required_rubygems_version: !ruby/object:Gem::Requirement
388
432
  requirements:
389
- - - ">"
433
+ - - ">="
390
434
  - !ruby/object:Gem::Version
391
- version: 1.3.1
435
+ version: '0'
392
436
  requirements: []
393
- rubygems_version: 3.3.7
437
+ rubygems_version: 3.1.6
394
438
  signing_key:
395
439
  specification_version: 4
396
440
  summary: Ruby framework for conversational bots
397
- test_files:
398
- - spec/configuration_spec.rb
399
- - spec/controller/callbacks_spec.rb
400
- - spec/controller/catch_all_spec.rb
401
- - spec/controller/controller_spec.rb
402
- - spec/controller/dynamic_delay_spec.rb
403
- - spec/controller/helpers_spec.rb
404
- - spec/controller/interrupt_detect_spec.rb
405
- - spec/controller/messages_spec.rb
406
- - spec/controller/nlp_spec.rb
407
- - spec/controller/replies_spec.rb
408
- - spec/controller/unrecognized_message_spec.rb
409
- - spec/dispatcher_spec.rb
410
- - spec/flow/flow_spec.rb
411
- - spec/flow/state_spec.rb
412
- - spec/helpers/redis_spec.rb
413
- - spec/lock_spec.rb
414
- - spec/nlp/client_spec.rb
415
- - spec/nlp/result_spec.rb
416
- - spec/replies/hello.yml.erb
417
- - spec/replies/messages/say_hola.yml+facebook.erb
418
- - spec/replies/messages/say_hola.yml+twilio.erb
419
- - spec/replies/messages/say_hola.yml.erb
420
- - spec/replies/messages/say_howdy_with_dynamic.yml
421
- - spec/replies/messages/say_msgs_without_breaks.yml
422
- - spec/replies/messages/say_offer.yml
423
- - spec/replies/messages/say_offer_with_dynamic.yml
424
- - spec/replies/messages/say_oi.yml.erb
425
- - spec/replies/messages/say_randomize_speech.yml
426
- - spec/replies/messages/say_randomize_text.yml
427
- - spec/replies/messages/say_simple_hello.yml
428
- - spec/replies/messages/say_yo.yml
429
- - spec/replies/messages/say_yo.yml+twitter
430
- - spec/replies/messages/sub1/sub2/say_nested.yml
431
- - spec/reply_spec.rb
432
- - spec/scheduled_reply_spec.rb
433
- - spec/service_reply_spec.rb
434
- - spec/session_spec.rb
435
- - spec/spec_helper.rb
436
- - spec/support/alternate_helpers/foo_helper.rb
437
- - spec/support/controllers/vaders_controller.rb
438
- - spec/support/helpers/fun/games_helper.rb
439
- - spec/support/helpers/fun/pdf_helper.rb
440
- - spec/support/helpers/standalone_helper.rb
441
- - spec/support/helpers_typo/users_helper.rb
442
- - spec/support/nlp_clients/dialogflow.rb
443
- - spec/support/nlp_clients/luis.rb
444
- - spec/support/nlp_results/luis_result.rb
445
- - spec/support/sample_messages.rb
446
- - spec/support/services.yml
447
- - spec/support/services_with_erb.yml
448
- - spec/version_spec.rb
441
+ test_files: []