slack-ruby-bot-server 1.2.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce55bd11d1164eaaa7985395b77ac8d104f69adfd1a5d3ccd1e6a195e02aceb2
4
- data.tar.gz: '08700bcdc5768db23d313ac4cdde14c4b315f83f407b26fcff764b0249d5ca31'
3
+ metadata.gz: c2763c471bf4339d40cc6d190d695a0afdf82ae671d33580638fc52d857c4428
4
+ data.tar.gz: fd852824309f190ce382ed605e14e80e60215c5b1daf70969d30d9d78d100a09
5
5
  SHA512:
6
- metadata.gz: 4f2585a8f933f806ff9cb998e58d7a03efda4a0aee1afeccd5f07289156e37c8ccf9092058b19413a22986031c0a82cca7dd35a9f6dbc9d7211d0823b363e708
7
- data.tar.gz: b5139b404dfc9c6c1b5027286126438e81da1c577805aedd3273f07e5e0f2ee9fdb89572d32f652d2e9c8f372c062b74c5ae948b4b2a0347383b908ac29648b9
6
+ metadata.gz: e6bd7d7fee1bb591d6991370292fe56304dfa92a580ea566e6077ddbdbd761c7aa748dbf32a5e4019425e9f66dd24c940833257eccd35a39c0b08968161d2267
7
+ data.tar.gz: d4255577b57693820a47cbffe0fac3bc659c63edb5c5a49023de6e2e757f056ef506a4c4a9e78bc2e6fa1803c19636cf7b69de9b595bfce46346a6a3d7de7014
@@ -19,5 +19,5 @@ jobs:
19
19
  run: |
20
20
  bundle install
21
21
  # the personal token is public, this is ok, base64 encode to avoid tripping Github
22
- TOKEN=$(echo -n NWY1ZmM5MzEyMzNlYWY4OTZiOGU3MmI3MWQ3Mzk0MzgxMWE4OGVmYwo= | base64 --decode)
22
+ TOKEN=$(echo -n Z2hwX0xNQ3VmanBFeTBvYkZVTWh6NVNqVFFBOEUxU25abzBqRUVuaAo= | base64 --decode)
23
23
  DANGER_GITHUB_API_TOKEN=$TOKEN bundle exec danger --verbose
@@ -1,16 +1,16 @@
1
1
  ---
2
- name: test
2
+ name: lint
3
3
  on: [push, pull_request]
4
4
  jobs:
5
5
  lint:
6
6
  name: RuboCop
7
7
  runs-on: ubuntu-latest
8
8
  steps:
9
- - uses: actions/checkout@v2
9
+ - uses: actions/checkout@v3
10
10
  - name: Set up Ruby
11
11
  uses: ruby/setup-ruby@v1
12
12
  with:
13
- ruby-version: 2.7
13
+ ruby-version: '3.1'
14
14
  bundler-cache: true
15
15
  - name: Run RuboCop
16
16
  run: bundle exec rubocop
@@ -10,6 +10,9 @@ jobs:
10
10
  - { ruby: 2.6.2, mongoid: 6.4.8, mongodb: 4.4 }
11
11
  - { ruby: 2.6.2, mongoid: 7.2.3, mongodb: 4.4 }
12
12
  - { ruby: 2.6.2, mongoid: 7.3.0, mongodb: 4.4 }
13
+ - { ruby: 3.1.1, mongoid: 7.3.0, mongodb: 4.4 }
14
+ - { ruby: 3.1.1, mongoid: 7.3.0, mongodb: 5.0 }
15
+ - { ruby: 3.2.1, mongoid: 7.5.2, mongodb: 5.0 }
13
16
  name: test (ruby=${{ matrix.entry.ruby }}, mongoid=${{ matrix.entry.mongoid }}, mongodb=${{ matrix.entry.mongodb }})
14
17
  steps:
15
18
  - uses: actions/checkout@v2
@@ -17,6 +20,8 @@ jobs:
17
20
  with:
18
21
  ruby-version: ${{ matrix.entry.ruby }}
19
22
  - uses: browser-actions/setup-geckodriver@latest
23
+ with:
24
+ token: ${{ secrets.GITHUB_TOKEN }}
20
25
  - run: geckodriver --version
21
26
  - uses: supercharge/mongodb-github-action@1.7.0
22
27
  with:
@@ -7,14 +7,18 @@ jobs:
7
7
  strategy:
8
8
  matrix:
9
9
  entry:
10
- - { ruby: 2.6.2, postgresql: 11 }
11
- name: test (ruby=${{ matrix.entry.ruby }}, postgresql=${{ matrix.entry.postgresql }})
10
+ - { ruby: 2.6.2, postgresql: 11, active_record: '~> 6.0.0' }
11
+ - { ruby: 3.1.1, postgresql: 11, active_record: '~> 6.1.0' }
12
+ - { ruby: 3.1.1, postgresql: 14, active_record: '~> 7.0.0' }
13
+ name: test (ruby=${{ matrix.entry.ruby }}, postgresql=${{ matrix.entry.postgresql }}, active_record=${{ matrix.entry.active_record }})
12
14
  steps:
13
15
  - uses: actions/checkout@v2
14
16
  - uses: ruby/setup-ruby@v1
15
17
  with:
16
18
  ruby-version: ${{ matrix.entry.ruby }}
17
19
  - uses: browser-actions/setup-geckodriver@latest
20
+ with:
21
+ token: ${{ secrets.GITHUB_TOKEN }}
18
22
  - run: geckodriver --version
19
23
  - uses: harmon758/postgresql-action@v1
20
24
  with:
@@ -26,6 +30,7 @@ jobs:
26
30
  uses: GabrielBB/xvfb-action@v1
27
31
  env:
28
32
  DATABASE_ADAPTER: activerecord
33
+ ACTIVERECORD_VERSION: ${{ matrix.entry.active_record }}
29
34
  DATABASE_URL: postgres://test:password@localhost/slack_ruby_bot_server_test
30
35
  with:
31
36
  run: |
data/.gitignore CHANGED
@@ -6,5 +6,6 @@ log
6
6
  .env
7
7
  *.swp
8
8
  Gemfile.lock
9
+ Gemfile.danger.lock
9
10
  .ruby-version
10
11
  pkg
data/.rubocop.yml CHANGED
@@ -1,3 +1,7 @@
1
+ AllCops:
2
+ SuggestExtensions: false
3
+ TargetRubyVersion: 2.6
4
+
1
5
  Metrics:
2
6
  Enabled: false
3
7
 
@@ -12,4 +16,3 @@ Style/FrozenStringLiteralComment:
12
16
  Enabled: false
13
17
 
14
18
  inherit_from: .rubocop_todo.yml
15
-
data/.rubocop_todo.yml CHANGED
@@ -1,32 +1,46 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2020-11-16 09:56:54 -0500 using RuboCop version 0.81.0.
3
+ # on 2023-03-02 20:56:34 UTC using RuboCop version 1.47.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
9
  # Offense count: 1
10
- # Cop supports --auto-correct.
11
- # Configuration parameters: EnforcedStyle.
12
- # SupportedStyles: squiggly, active_support, powerpack, unindent
10
+ # Configuration parameters: Severity, Include.
11
+ # Include: **/*.gemspec
12
+ Gemspec/RequiredRubyVersion:
13
+ Exclude:
14
+ - 'slack-ruby-bot-server.gemspec'
15
+
16
+ # Offense count: 1
17
+ # This cop supports safe autocorrection (--autocorrect).
13
18
  Layout/HeredocIndentation:
14
19
  Exclude:
15
20
  - 'lib/slack-ruby-bot-server/info.rb'
16
21
 
17
22
  # Offense count: 1
23
+ # This cop supports safe autocorrection (--autocorrect).
24
+ Layout/RescueEnsureAlignment:
25
+ Exclude:
26
+ - 'lib/slack-ruby-bot-server/models/team/methods.rb'
27
+
28
+ # Offense count: 1
29
+ # This cop supports safe autocorrection (--autocorrect).
18
30
  Lint/AmbiguousOperator:
19
31
  Exclude:
20
32
  - 'spec/slack-ruby-bot-server/service_spec.rb'
21
33
 
22
- # Offense count: 2
23
- # Cop supports --auto-correct.
24
- Lint/NonDeterministicRequireOrder:
34
+ # Offense count: 1
35
+ # Configuration parameters: AllowedMethods.
36
+ # AllowedMethods: enums
37
+ Lint/ConstantDefinitionInBlock:
25
38
  Exclude:
26
- - 'spec/spec_helper.rb'
39
+ - 'lib/slack-ruby-bot-server/models/team/methods.rb'
27
40
 
28
41
  # Offense count: 1
29
- # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
42
+ # Configuration parameters: ExpectMatchingDefinition, CheckDefinitionPathHierarchy, CheckDefinitionPathHierarchyRoots, Regex, IgnoreExecutableScripts, AllowedAcronyms.
43
+ # CheckDefinitionPathHierarchyRoots: lib, spec, test, src
30
44
  # AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
31
45
  Naming/FileName:
32
46
  Exclude:
@@ -34,33 +48,126 @@ Naming/FileName:
34
48
 
35
49
  # Offense count: 1
36
50
  # Configuration parameters: ForbiddenDelimiters.
37
- # ForbiddenDelimiters: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$))
51
+ # ForbiddenDelimiters: (?i-mx:(^|\s)(EO[A-Z]{1}|END)(\s|$))
38
52
  Naming/HeredocDelimiterNaming:
39
53
  Exclude:
40
54
  - 'lib/slack-ruby-bot-server/info.rb'
41
55
 
42
56
  # Offense count: 3
43
57
  # Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
44
- # AllowedNames: io, id, to, by, on, in, at, ip, db, os, pp
58
+ # AllowedNames: as, at, by, cc, db, id, if, in, io, ip, of, on, os, pp, to
45
59
  Naming/MethodParameterName:
46
60
  Exclude:
47
61
  - 'lib/slack-ruby-bot-server/models/team/activerecord.rb'
48
62
  - 'lib/slack-ruby-bot-server/models/team/mongoid.rb'
49
63
  - 'lib/slack-ruby-bot-server/service.rb'
50
64
 
65
+ # Offense count: 5
66
+ # This cop supports safe autocorrection (--autocorrect).
67
+ # Configuration parameters: EnforcedStyle.
68
+ # SupportedStyles: separated, grouped
69
+ Style/AccessorGrouping:
70
+ Exclude:
71
+ - 'lib/slack-ruby-bot-server/config.rb'
72
+
73
+ # Offense count: 3
74
+ # This cop supports unsafe autocorrection (--autocorrect-all).
75
+ Style/GlobalStdStream:
76
+ Exclude:
77
+ - 'spec/database_adapters/activerecord/activerecord.rb'
78
+ - 'tasks/db.rake'
79
+
80
+ # Offense count: 18
81
+ # This cop supports safe autocorrection (--autocorrect).
82
+ # Configuration parameters: EnforcedStyle, EnforcedShorthandSyntax, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
83
+ # SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
84
+ # SupportedShorthandSyntax: always, never, either, consistent
85
+ Style/HashSyntax:
86
+ Exclude:
87
+ - 'lib/slack-ruby-bot-server/api/endpoints/teams_endpoint.rb'
88
+ - 'lib/slack-ruby-bot-server/models/team/methods.rb'
89
+
90
+ # Offense count: 1
91
+ # This cop supports unsafe autocorrection (--autocorrect-all).
92
+ Style/HashTransformKeys:
93
+ Exclude:
94
+ - 'lib/slack-ruby-bot-server/api/helpers/error_helpers.rb'
95
+
96
+ # Offense count: 1
97
+ # This cop supports unsafe autocorrection (--autocorrect-all).
98
+ Style/HashTransformValues:
99
+ Exclude:
100
+ - 'lib/slack-ruby-bot-server/api/helpers/error_helpers.rb'
101
+
51
102
  # Offense count: 1
52
- # Cop supports --auto-correct.
103
+ # This cop supports unsafe autocorrection (--autocorrect-all).
53
104
  # Configuration parameters: EnforcedStyle, Autocorrect.
54
105
  # SupportedStyles: module_function, extend_self, forbidden
55
106
  Style/ModuleFunction:
56
107
  Exclude:
57
108
  - 'lib/slack-ruby-bot-server/config.rb'
58
109
 
110
+ # Offense count: 2
111
+ # This cop supports safe autocorrection (--autocorrect).
112
+ Style/MultilineWhenThen:
113
+ Exclude:
114
+ - 'Gemfile'
115
+
59
116
  # Offense count: 1
60
- # Cop supports --auto-correct.
61
- # Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
117
+ # This cop supports unsafe autocorrection (--autocorrect-all).
118
+ # Configuration parameters: EnforcedStyle, AllowedMethods, AllowedPatterns.
62
119
  # SupportedStyles: predicate, comparison
63
120
  Style/NumericPredicate:
64
121
  Exclude:
65
122
  - 'spec/**/*'
66
123
  - 'lib/slack-ruby-bot-server/service.rb'
124
+
125
+ # Offense count: 1
126
+ # This cop supports safe autocorrection (--autocorrect).
127
+ Style/RedundantAssignment:
128
+ Exclude:
129
+ - 'lib/slack-ruby-bot-server/api/helpers/sort_helpers.rb'
130
+
131
+ # Offense count: 3
132
+ # This cop supports safe autocorrection (--autocorrect).
133
+ Style/RedundantBegin:
134
+ Exclude:
135
+ - 'lib/slack-ruby-bot-server/models/team/activerecord.rb'
136
+ - 'lib/slack-ruby-bot-server/models/team/mongoid.rb'
137
+ - 'lib/slack-ruby-bot-server/service.rb'
138
+
139
+ # Offense count: 2
140
+ # This cop supports safe autocorrection (--autocorrect).
141
+ Style/RedundantFileExtensionInRequire:
142
+ Exclude:
143
+ - 'lib/slack-ruby-bot-server/config/database_adapters/activerecord.rb'
144
+ - 'lib/slack-ruby-bot-server/config/database_adapters/mongoid.rb'
145
+
146
+ # Offense count: 6
147
+ # This cop supports safe autocorrection (--autocorrect).
148
+ Style/RedundantRegexpEscape:
149
+ Exclude:
150
+ - 'Rakefile'
151
+ - 'lib/slack-ruby-bot-server/api/middleware.rb'
152
+ - 'spec/support/api/endpoints/it_behaves_like_a_cursor_api.rb'
153
+
154
+ # Offense count: 1
155
+ # This cop supports unsafe autocorrection (--autocorrect-all).
156
+ # Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength.
157
+ # AllowedMethods: present?, blank?, presence, try, try!
158
+ Style/SafeNavigation:
159
+ Exclude:
160
+ - 'lib/slack-ruby-bot-server/api/endpoints/teams_endpoint.rb'
161
+
162
+ # Offense count: 1
163
+ # This cop supports unsafe autocorrection (--autocorrect-all).
164
+ Style/SlicingWithRange:
165
+ Exclude:
166
+ - 'lib/slack-ruby-bot-server/api/helpers/sort_helpers.rb'
167
+
168
+ # Offense count: 1
169
+ # This cop supports unsafe autocorrection (--autocorrect-all).
170
+ # Configuration parameters: Mode.
171
+ Style/StringConcatenation:
172
+ Exclude:
173
+ - 'lib/slack-ruby-bot-server/api/helpers/error_helpers.rb'
data/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  ### Changelog
2
2
 
3
+ ### 2.1.0 (2023/03/06)
4
+
5
+ * [#163](https://github.com/slack-ruby/slack-ruby-bot-server/pull/163): Updated releasing documentation - [@crazyoptimist](https://github.com/crazyoptimist).
6
+ * [#164](https://github.com/slack-ruby/slack-ruby-bot-server/pull/164): Added support for ActiveRecord 6.1 and 7.0 - [@maths22](https://github.com/maths22).
7
+ * [#165](https://github.com/slack-ruby/slack-ruby-bot-server/pull/165): Upgraded Rubocop to v1.47 - [@crazyoptimist](https://github.com/crazyoptimist).
8
+ * [#167](https://github.com/slack-ruby/slack-ruby-bot-server/pull/167): Added `once_and_every` timer - [@dblock](https://github.com/dblock).
9
+ * [#168](https://github.com/slack-ruby/slack-ruby-bot-server/pull/168): Added support for Ruby 3.2.1 - [@dblock](https://github.com/dblock).
10
+
11
+ #### 2.0.1 (2023/02/20)
12
+
13
+ * [#145](https://github.com/slack-ruby/slack-ruby-bot-server/pull/145): Added support for Ruby 3.1 - [@dblock](https://github.com/dblock).
14
+ * [#146](https://github.com/slack-ruby/slack-ruby-bot-server/pull/146): Added support for MongoDB 5.0 - [@dblock](https://github.com/dblock).
15
+ * [#147](https://github.com/slack-ruby/slack-ruby-bot-server/pull/147): Added support for PostgreSQL 14 - [@dblock](https://github.com/dblock).
16
+ * [#155](https://github.com/slack-ruby/slack-ruby-bot-server/pull/155): Enable mongoid to get connection URI from ENV for test - [@crazyoptimist](https://github.com/crazyoptimist).
17
+ * [#157](https://github.com/slack-ruby/slack-ruby-bot-server/pull/157): Added test env setup guide for linux users - [@crazyoptimist](https://github.com/crazyoptimist).
18
+ * [#158](https://github.com/slack-ruby/slack-ruby-bot-server/pull/158): Replace `cursor_pagination` with `pagy_cursor` - [@crazyoptimist](https://github.com/crazyoptimist).
19
+ * [#160](https://github.com/slack-ruby/slack-ruby-bot-server/pull/160): Document upgrading to 2.0.0 - [@crazyoptimist](https://github.com/crazyoptimist).
20
+ * [#161](https://github.com/slack-ruby/slack-ruby-bot-server/pull/161): Removed unused `ext` module - [@dblock](https://github.com/dblock).
21
+ * [#162](https://github.com/slack-ruby/slack-ruby-bot-server/pull/162): Fix: scopes are comma-separated - [@dblock](https://github.com/dblock).
22
+
3
23
  #### 1.2.1 (2022/03/06)
4
24
 
5
25
  * [#140](https://github.com/slack-ruby/slack-ruby-bot-server/pull/140): Fix: `NameError` for `Boolean` types with mongoid >= 7.3.0 - [@dblock](https://github.com/dblock).
data/CONTRIBUTING.md CHANGED
@@ -35,6 +35,13 @@ bundle install
35
35
  bundle exec rake
36
36
  ```
37
37
 
38
+ If you are a linux user, you will need to install [geckodriver](https://github.com/mozilla/geckodriver/releases), [firefox](https://download-installer.cdn.mozilla.net/pub/firefox/releases/), and `Xvfb`.
39
+ And, to get a display for the headless browser, run `Xvfb` manually. You can see more explanations [here](http://elementalselenium.com/tips/38-headless).
40
+
41
+ ```
42
+ xvfb-run --auto-servernum bundle exec rake
43
+ ```
44
+
38
45
  ## Write Tests
39
46
 
40
47
  Try to write a test that reproduces the problem you're trying to fix or describes a feature that you want to build.
data/Gemfile CHANGED
@@ -7,9 +7,9 @@ when 'mongoid' then
7
7
  gem 'mongoid-scroll'
8
8
  gem 'mongoid-shell'
9
9
  when 'activerecord' then
10
- gem 'activerecord', '~> 5.0.0'
11
- gem 'otr-activerecord', '~> 1.2.1'
12
- gem 'cursor_pagination' # rubocop:disable Bundler/OrderedGems
10
+ gem 'activerecord', ENV['ACTIVERECORD_VERSION'] || '~> 6.0.0'
11
+ gem 'otr-activerecord'
12
+ gem 'pagy_cursor'
13
13
  gem 'pg'
14
14
  when nil
15
15
  warn "Missing ENV['DATABASE_ADAPTER']."
@@ -22,18 +22,19 @@ gemspec
22
22
  group :development, :test do
23
23
  gem 'bundler'
24
24
  gem 'byebug'
25
- gem 'capybara', '~> 2.15.1'
25
+ gem 'capybara', '~> 3.36.0'
26
26
  gem 'database_cleaner', '~> 1.8.5'
27
27
  gem 'fabrication'
28
28
  gem 'faker'
29
29
  gem 'faraday', '0.17.5'
30
30
  gem 'hyperclient', '~> 0.9.3'
31
+ gem 'rack', '~> 2.2.3'
31
32
  gem 'rack-server-pages'
32
33
  gem 'rack-test'
33
34
  gem 'rake'
34
35
  gem 'rspec'
35
- gem 'rubocop', '0.81.0'
36
- gem 'selenium-webdriver', '~> 3.4.4'
36
+ gem 'rubocop', '1.47'
37
+ gem 'selenium-webdriver', '~> 4.1.0'
37
38
  gem 'vcr'
38
39
  gem 'webmock'
39
40
  gem 'webrick', '~> 1.6.1'
data/README.md CHANGED
@@ -40,7 +40,7 @@ A library that contains a web server and a RESTful [Grape](http://github.com/rub
40
40
 
41
41
  ## Stable Release
42
42
 
43
- You're reading the documentation for the **stable** release of slack-ruby-bot-server. See [UPGRADING](UPGRADING.md) when upgrading from an older version. See [MIGRATING](MIGRATING.md) for help with migrating Legacy Slack Apps to Granular Scopes.
43
+ You're reading the documentation for the **stable** release of slack-ruby-bot-server, 2.1.0. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
44
44
 
45
45
  ## Make Your Own
46
46
 
@@ -65,14 +65,15 @@ gem 'slack-ruby-bot-server'
65
65
 
66
66
  #### ActiveRecord
67
67
 
68
- Use ActiveRecord with, for example, PostgreSQL via [pg](https://github.com/ged/ruby-pg). Add the `activerecord`, `pg`, `otr-activerecord` and `cursor_pagination` gems to your Gemfile.
68
+ Use ActiveRecord with, for example, PostgreSQL via [pg](https://github.com/ged/ruby-pg). Add the `activerecord`, `pg`, `otr-activerecord` and `pagy_cursor` gems to your Gemfile.
69
+ Currently supports ActiveRecord/Rails major versions 6.0, 6.1 and 7.0.
69
70
 
70
71
  ```
71
72
  gem 'pg'
72
73
  gem 'activerecord', require: 'active_record'
73
74
  gem 'slack-ruby-bot-server'
74
75
  gem 'otr-activerecord'
75
- gem 'cursor_pagination'
76
+ gem 'pagy_cursor'
76
77
  ```
77
78
 
78
79
  Configure the database connection in `config/postgresql.yml`.
@@ -237,9 +238,7 @@ end
237
238
 
238
239
  ##### Service Timers
239
240
 
240
- You can introduce custom behavior into the service lifecycle on a timer. For example, check whether a team's trial has expired, or periodically cleanup data.
241
-
242
- Note that unlike callbacks, timers are global for the entire service.
241
+ You can introduce custom behavior into the service lifecycle on a timer. For example, check whether a team's trial has expired, or periodically clean-up data. Timers can run once on start (`once_and_every`) and start running after a certain period (`every`).
243
242
 
244
243
  ```ruby
245
244
  instance = SlackRubyBotServer::Service.instance
@@ -253,6 +252,10 @@ instance.every :hour do
253
252
  end
254
253
  end
255
254
 
255
+ instance.once_and_every :minute do
256
+ # called once on start, then every minute
257
+ end
258
+
256
259
  instance.every :minute do
257
260
  # called every minute
258
261
  end
@@ -266,6 +269,8 @@ instance.every 30 do
266
269
  end
267
270
  ```
268
271
 
272
+ Note that, unlike callbacks, timers are global for the entire service. Timers are independent, and a failing timer will not terminate other timers.
273
+
269
274
  ##### Extensions
270
275
 
271
276
  A number of extensions use service manager callbacks and service timers to implement useful functionality.
data/RELEASING.md CHANGED
@@ -11,12 +11,12 @@ bundle install
11
11
  rake
12
12
  ```
13
13
 
14
- Check that the last build succeeded in [Travis CI](https://travis-ci.org/slack-ruby/slack-ruby-bot-server) for all supported platforms.
14
+ Check that the last build succeeded in [Github Actions](https://github.com/slack-ruby/slack-ruby-bot-server/actions) for all supported platforms.
15
15
 
16
16
  Change "Next" in [CHANGELOG.md](CHANGELOG.md) to the current date.
17
17
 
18
18
  ```
19
- ### 0.2.2 (7/10/2015)
19
+ ### 2.0.1 (2023/02/20)
20
20
  ```
21
21
 
22
22
  Remove the line with "Your contribution here.", since there will be no more contributions to this release.
@@ -26,14 +26,14 @@ Change `**next**` in the "Stable Release" section in README that warns users tha
26
26
  ```
27
27
  ## Stable Release
28
28
 
29
- You're reading the documentation for the **stable** release of slack-ruby-bot-server, 0.2.2. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
29
+ You're reading the documentation for the **stable** release of slack-ruby-bot-server, 2.0.1. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
30
30
  ```
31
31
 
32
32
  Commit your changes.
33
33
 
34
34
  ```
35
35
  git add README.md CHANGELOG.md
36
- git commit -m "Preparing for release, 0.2.2."
36
+ git commit -m "Preparing for release, 2.0.1."
37
37
  git push origin master
38
38
  ```
39
39
 
@@ -42,10 +42,10 @@ Release.
42
42
  ```
43
43
  $ rake release
44
44
 
45
- slack-ruby-bot-server 0.2.2 built to pkg/slack-ruby-bot-server-0.2.2.gem.
46
- Tagged v0.2.2.
45
+ slack-ruby-bot-server 2.0.1 built to pkg/slack-ruby-bot-server-2.0.1.gem.
46
+ Tagged v2.0.1.
47
47
  Pushed git commits and tags.
48
- Pushed slack-ruby-bot-server 0.2.2 to rubygems.org.
48
+ Pushed slack-ruby-bot-server 2.0.1 to rubygems.org.
49
49
  ```
50
50
 
51
51
  ### Prepare for the Next Version
@@ -53,7 +53,7 @@ Pushed slack-ruby-bot-server 0.2.2 to rubygems.org.
53
53
  Add the next release to [CHANGELOG.md](CHANGELOG.md).
54
54
 
55
55
  ```
56
- ### 0.2.3 (Next)
56
+ ### 2.0.2 (Next)
57
57
 
58
58
  * Your contribution here.
59
59
  ```
@@ -65,13 +65,13 @@ Undo your change in README about the stable release.
65
65
  ```
66
66
  ## Stable Release
67
67
 
68
- You're reading the documentation for the **next** release of slack-ruby-bot-server. Please see the documentation for the [last stable release, v0.2.2](https://github.com/slack-ruby/slack-ruby-bot-server/blob/v0.2.2/README.md) unless you're integrating with HEAD. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
68
+ You're reading the documentation for the **next** release of slack-ruby-bot-server. Please see the documentation for the [last stable release, v2.0.1](https://github.com/slack-ruby/slack-ruby-bot-server/blob/v2.0.1/README.md) unless you're integrating with HEAD. See [UPGRADING](UPGRADING.md) when upgrading from an older version. See [MIGRATING](MIGRATING.md) for help with migrating Legacy Slack Apps to Granular Scopes.
69
69
  ```
70
70
 
71
71
  Commit your changes.
72
72
 
73
73
  ```
74
74
  git add README.md CHANGELOG.md lib/slack-ruby-bot-server/version.rb
75
- git commit -m "Preparing for next development iteration, 0.2.3."
75
+ git commit -m "Preparing for next development iteration, 2.0.2."
76
76
  git push origin master
77
77
  ```
data/UPGRADING.md CHANGED
@@ -1,6 +1,18 @@
1
1
  Upgrading Slack-Ruby-Bot-Server
2
2
  ===============================
3
3
 
4
+ ### Upgrading to >= 2.0.0
5
+
6
+ #### Replaced Pagination Gem for ActiveRecord
7
+
8
+ [`cursor_pagination`](https://github.com/Kukunin/cursor_pagination) is abandoned and no longer maintained. It is replaced with [`pagy_cursor`](https://github.com/Uysim/pagy-cursor).
9
+
10
+ If you're using ActiveRecord, replace `cursor_pagination` with `pagy_cursor` in the Gemfile.
11
+
12
+ ```ruby
13
+ gem 'pagy_cursor'
14
+ ```
15
+
4
16
  ### Upgrading to >= 1.2.0
5
17
 
6
18
  #### New Team Fields
@@ -84,7 +84,7 @@ module SlackRubyBotServer
84
84
  if team
85
85
  team.ping_if_active!
86
86
 
87
- team.update_attributes!(
87
+ team.update!(
88
88
  oauth_version: oauth_version,
89
89
  oauth_scope: oauth_scope,
90
90
  activated_user_id: user_id,
@@ -25,6 +25,8 @@ module SlackRubyBotServer
25
25
  results
26
26
  end
27
27
  elsif SlackRubyBotServer::Config.activerecord?
28
+ include Pagy::Cursor::Backend
29
+
28
30
  def paginate_by_cursor(coll, options)
29
31
  raise 'Both cursor and offset parameters are present, these are mutually exclusive.' if params.key?(:offset) && params.key?(:cursor)
30
32
 
@@ -33,12 +35,16 @@ module SlackRubyBotServer
33
35
  results[:total_count] = coll.count(:all) if params[:total_count]
34
36
  coll = coll.offset(params[:offset].to_i) if params.key?(:offset)
35
37
  sort_options = {}
38
+ cursor_direction = :after
36
39
  sort_order(options).each do |order|
37
40
  sort_options[order[:column]] = { reverse: true } if order[:direction] == :desc
41
+ cursor_direction = :before if order[:column] == coll.primary_key && order[:direction] == :desc
38
42
  end
39
- coll = coll.cursor(params[:cursor], columns: sort_options).per(size)
43
+ cursor_vars = { items: size }
44
+ cursor_vars[cursor_direction] = params[:cursor].to_i if params.key?(:cursor)
45
+ pagy_cursor, coll = pagy_cursor(coll, cursor_vars, { order: sort_options })
40
46
  results[:results] = coll.to_a
41
- results[:next] = coll.next_cursor.to_s unless coll.last_page?
47
+ results[:next] = coll.last[:id].to_s if pagy_cursor.has_more?
42
48
  results
43
49
  end
44
50
  end
@@ -1,5 +1,8 @@
1
1
  require_relative '../../models/team/activerecord.rb'
2
2
 
3
+ require 'pagy'
4
+ require 'pagy_cursor/pagy/extras/cursor'
5
+
3
6
  module SlackRubyBotServer
4
7
  module DatabaseAdapter
5
8
  def self.check!
@@ -0,0 +1,236 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Pagy initializer file (6.0.0)
4
+ # Customize only what you really need and notice that the core Pagy works also without any of the following lines.
5
+ # Should you just cherry pick part of this file, please maintain the require-order of the extras
6
+
7
+ # Pagy DEFAULT Variables
8
+ # See https://ddnexus.github.io/pagy/docs/api/pagy#variables
9
+ # All the Pagy::DEFAULT are set for all the Pagy instances but can be overridden per instance by just passing them to
10
+ # Pagy.new|Pagy::Countless.new|Pagy::Calendar::*.new or any of the #pagy* controller methods
11
+
12
+ # Instance variables
13
+ # See https://ddnexus.github.io/pagy/docs/api/pagy#instance-variables
14
+ # Pagy::DEFAULT[:page] = 1 # default
15
+ # Pagy::DEFAULT[:items] = 20 # default
16
+ # Pagy::DEFAULT[:outset] = 0 # default
17
+
18
+ # Other Variables
19
+ # See https://ddnexus.github.io/pagy/docs/api/pagy#other-variables
20
+ # Pagy::DEFAULT[:size] = [1,4,4,1] # default
21
+ # Pagy::DEFAULT[:page_param] = :page # default
22
+ # The :params can be also set as a lambda e.g ->(params){ params.exclude('useless').merge!('custom' => 'useful') }
23
+ # Pagy::DEFAULT[:params] = {} # default
24
+ # Pagy::DEFAULT[:fragment] = '#fragment' # example
25
+ # Pagy::DEFAULT[:link_extra] = 'data-remote="true"' # example
26
+ # Pagy::DEFAULT[:i18n_key] = 'pagy.item_name' # default
27
+ # Pagy::DEFAULT[:cycle] = true # example
28
+ # Pagy::DEFAULT[:request_path] = "/foo" # example
29
+
30
+ # Extras
31
+ # See https://ddnexus.github.io/pagy/docs/extras
32
+
33
+ # Backend Extras
34
+
35
+ # Array extra: Paginate arrays efficiently, avoiding expensive array-wrapping and without overriding
36
+ # See https://ddnexus.github.io/pagy/docs/extras/array
37
+ # require 'pagy/extras/array'
38
+
39
+ # Calendar extra: Add pagination filtering by calendar time unit (year, quarter, month, week, day)
40
+ # See https://ddnexus.github.io/pagy/docs/extras/calendar
41
+ # require 'pagy/extras/calendar'
42
+ # Default for each unit
43
+ # Pagy::Calendar::Year::DEFAULT[:order] = :asc # Time direction of pagination
44
+ # Pagy::Calendar::Year::DEFAULT[:format] = '%Y' # strftime format
45
+ #
46
+ # Pagy::Calendar::Quarter::DEFAULT[:order] = :asc # Time direction of pagination
47
+ # Pagy::Calendar::Quarter::DEFAULT[:format] = '%Y-Q%q' # strftime format
48
+ #
49
+ # Pagy::Calendar::Month::DEFAULT[:order] = :asc # Time direction of pagination
50
+ # Pagy::Calendar::Month::DEFAULT[:format] = '%Y-%m' # strftime format
51
+ #
52
+ # Pagy::Calendar::Week::DEFAULT[:order] = :asc # Time direction of pagination
53
+ # Pagy::Calendar::Week::DEFAULT[:format] = '%Y-%W' # strftime format
54
+ #
55
+ # Pagy::Calendar::Day::DEFAULT[:order] = :asc # Time direction of pagination
56
+ # Pagy::Calendar::Day::DEFAULT[:format] = '%Y-%m-%d' # strftime format
57
+ #
58
+ # Uncomment the following lines, if you need calendar localization without using the I18n extra
59
+ # module LocalizePagyCalendar
60
+ # def localize(time, opts)
61
+ # ::I18n.l(time, **opts)
62
+ # end
63
+ # end
64
+ # Pagy::Calendar.prepend LocalizePagyCalendar
65
+
66
+ # Countless extra: Paginate without any count, saving one query per rendering
67
+ # See https://ddnexus.github.io/pagy/docs/extras/countless
68
+ # require 'pagy/extras/countless'
69
+ # Pagy::DEFAULT[:countless_minimal] = false # default (eager loading)
70
+
71
+ # Elasticsearch Rails extra: Paginate `ElasticsearchRails::Results` objects
72
+ # See https://ddnexus.github.io/pagy/docs/extras/elasticsearch_rails
73
+ # Default :pagy_search method: change only if you use also
74
+ # the searchkick or meilisearch extra that defines the same
75
+ # Pagy::DEFAULT[:elasticsearch_rails_pagy_search] = :pagy_search
76
+ # Default original :search method called internally to do the actual search
77
+ # Pagy::DEFAULT[:elasticsearch_rails_search] = :search
78
+ # require 'pagy/extras/elasticsearch_rails'
79
+
80
+ # Headers extra: http response headers (and other helpers) useful for API pagination
81
+ # See http://ddnexus.github.io/pagy/extras/headers
82
+ # require 'pagy/extras/headers'
83
+ # Pagy::DEFAULT[:headers] = { page: 'Current-Page',
84
+ # items: 'Page-Items',
85
+ # count: 'Total-Count',
86
+ # pages: 'Total-Pages' } # default
87
+
88
+ # Meilisearch extra: Paginate `Meilisearch` result objects
89
+ # See https://ddnexus.github.io/pagy/docs/extras/meilisearch
90
+ # Default :pagy_search method: change only if you use also
91
+ # the elasticsearch_rails or searchkick extra that define the same method
92
+ # Pagy::DEFAULT[:meilisearch_pagy_search] = :pagy_search
93
+ # Default original :search method called internally to do the actual search
94
+ # Pagy::DEFAULT[:meilisearch_search] = :ms_search
95
+ # require 'pagy/extras/meilisearch'
96
+
97
+ # Metadata extra: Provides the pagination metadata to Javascript frameworks like Vue.js, react.js, etc.
98
+ # See https://ddnexus.github.io/pagy/docs/extras/metadata
99
+ # you must require the frontend helpers internal extra (BEFORE the metadata extra) ONLY if you need also the :sequels
100
+ # require 'pagy/extras/frontend_helpers'
101
+ # require 'pagy/extras/metadata'
102
+ # For performance reasons, you should explicitly set ONLY the metadata you use in the frontend
103
+ # Pagy::DEFAULT[:metadata] = %i[scaffold_url page prev next last] # example
104
+
105
+ # Searchkick extra: Paginate `Searchkick::Results` objects
106
+ # See https://ddnexus.github.io/pagy/docs/extras/searchkick
107
+ # Default :pagy_search method: change only if you use also
108
+ # the elasticsearch_rails or meilisearch extra that defines the same
109
+ # DEFAULT[:searchkick_pagy_search] = :pagy_search
110
+ # Default original :search method called internally to do the actual search
111
+ # Pagy::DEFAULT[:searchkick_search] = :search
112
+ # require 'pagy/extras/searchkick'
113
+ # uncomment if you are going to use Searchkick.pagy_search
114
+ # Searchkick.extend Pagy::Searchkick
115
+
116
+ # Frontend Extras
117
+
118
+ # Bootstrap extra: Add nav, nav_js and combo_nav_js helpers and templates for Bootstrap pagination
119
+ # See https://ddnexus.github.io/pagy/docs/extras/bootstrap
120
+ # require 'pagy/extras/bootstrap'
121
+
122
+ # Bulma extra: Add nav, nav_js and combo_nav_js helpers and templates for Bulma pagination
123
+ # See https://ddnexus.github.io/pagy/docs/extras/bulma
124
+ # require 'pagy/extras/bulma'
125
+
126
+ # Foundation extra: Add nav, nav_js and combo_nav_js helpers and templates for Foundation pagination
127
+ # See https://ddnexus.github.io/pagy/docs/extras/foundation
128
+ # require 'pagy/extras/foundation'
129
+
130
+ # Materialize extra: Add nav, nav_js and combo_nav_js helpers for Materialize pagination
131
+ # See https://ddnexus.github.io/pagy/docs/extras/materialize
132
+ # require 'pagy/extras/materialize'
133
+
134
+ # Navs extra: Add nav_js and combo_nav_js javascript helpers
135
+ # Notice: the other frontend extras add their own framework-styled versions,
136
+ # so require this extra only if you need the unstyled version
137
+ # See https://ddnexus.github.io/pagy/docs/extras/navs
138
+ # require 'pagy/extras/navs'
139
+
140
+ # Semantic extra: Add nav, nav_js and combo_nav_js helpers for Semantic UI pagination
141
+ # See https://ddnexus.github.io/pagy/docs/extras/semantic
142
+ # require 'pagy/extras/semantic'
143
+
144
+ # UIkit extra: Add nav helper and templates for UIkit pagination
145
+ # See https://ddnexus.github.io/pagy/docs/extras/uikit
146
+ # require 'pagy/extras/uikit'
147
+
148
+ # Multi size var used by the *_nav_js helpers
149
+ # See https://ddnexus.github.io/pagy/docs/extras/navs#steps
150
+ # Pagy::DEFAULT[:steps] = { 0 => [2,3,3,2], 540 => [3,5,5,3], 720 => [5,7,7,5] } # example
151
+
152
+ # Feature Extras
153
+
154
+ # Gearbox extra: Automatically change the number of items per page depending on the page number
155
+ # See https://ddnexus.github.io/pagy/docs/extras/gearbox
156
+ # require 'pagy/extras/gearbox'
157
+ # set to false only if you want to make :gearbox_extra an opt-in variable
158
+ # Pagy::DEFAULT[:gearbox_extra] = false # default true
159
+ # Pagy::DEFAULT[:gearbox_items] = [15, 30, 60, 100] # default
160
+
161
+ # Items extra: Allow the client to request a custom number of items per page with an optional selector UI
162
+ # See https://ddnexus.github.io/pagy/docs/extras/items
163
+ # require 'pagy/extras/items'
164
+ # set to false only if you want to make :items_extra an opt-in variable
165
+ # Pagy::DEFAULT[:items_extra] = false # default true
166
+ # Pagy::DEFAULT[:items_param] = :items # default
167
+ # Pagy::DEFAULT[:max_items] = 100 # default
168
+
169
+ # Overflow extra: Allow for easy handling of overflowing pages
170
+ # See https://ddnexus.github.io/pagy/docs/extras/overflow
171
+ # require 'pagy/extras/overflow'
172
+ # Pagy::DEFAULT[:overflow] = :empty_page # default (other options: :last_page and :exception)
173
+
174
+ # Support extra: Extra support for features like: incremental, infinite, auto-scroll pagination
175
+ # See https://ddnexus.github.io/pagy/docs/extras/support
176
+ # require 'pagy/extras/support'
177
+
178
+ # Trim extra: Remove the page=1 param from links
179
+ # See https://ddnexus.github.io/pagy/docs/extras/trim
180
+ # require 'pagy/extras/trim'
181
+ # set to false only if you want to make :trim_extra an opt-in variable
182
+ # Pagy::DEFAULT[:trim_extra] = false # default true
183
+
184
+ # Standalone extra: Use pagy in non Rack environment/gem
185
+ # See https://ddnexus.github.io/pagy/docs/extras/standalone
186
+ # require 'pagy/extras/standalone'
187
+ # Pagy::DEFAULT[:url] = 'http://www.example.com/subdir' # optional default
188
+
189
+ # Rails
190
+ # Enable the .js file required by the helpers that use javascript
191
+ # (pagy*_nav_js, pagy*_combo_nav_js, and pagy_items_selector_js)
192
+ # See https://ddnexus.github.io/pagy/docs/extras#javascript
193
+
194
+ # With the asset pipeline
195
+ # Sprockets need to look into the pagy javascripts dir, so add it to the assets paths
196
+ # Rails.application.config.assets.paths << Pagy.root.join('javascripts')
197
+
198
+ # I18n
199
+
200
+ # Pagy internal I18n: ~18x faster using ~10x less memory than the i18n gem
201
+ # See https://ddnexus.github.io/pagy/docs/api/frontend#i18n
202
+ # Notice: No need to configure anything in this section if your app uses only "en"
203
+ # or if you use the i18n extra below
204
+ #
205
+ # Examples:
206
+ # load the "de" built-in locale:
207
+ # Pagy::I18n.load(locale: 'de')
208
+ #
209
+ # load the "de" locale defined in the custom file at :filepath:
210
+ # Pagy::I18n.load(locale: 'de', filepath: 'path/to/pagy-de.yml')
211
+ #
212
+ # load the "de", "en" and "es" built-in locales:
213
+ # (the first passed :locale will be used also as the default_locale)
214
+ # Pagy::I18n.load({ locale: 'de' },
215
+ # { locale: 'en' },
216
+ # { locale: 'es' })
217
+ #
218
+ # load the "en" built-in locale, a custom "es" locale,
219
+ # and a totally custom locale complete with a custom :pluralize proc:
220
+ # (the first passed :locale will be used also as the default_locale)
221
+ # Pagy::I18n.load({ locale: 'en' },
222
+ # { locale: 'es', filepath: 'path/to/pagy-es.yml' },
223
+ # { locale: 'xyz', # not built-in
224
+ # filepath: 'path/to/pagy-xyz.yml',
225
+ # pluralize: lambda{ |count| ... } )
226
+
227
+ # I18n extra: uses the standard i18n gem which is ~18x slower using ~10x more memory
228
+ # than the default pagy internal i18n (see above)
229
+ # See https://ddnexus.github.io/pagy/docs/extras/i18n
230
+ # require 'pagy/extras/i18n'
231
+
232
+ # Default i18n key
233
+ # Pagy::DEFAULT[:i18n_key] = 'pagy.item_name' # default
234
+
235
+ # When you are done setting your own default freeze it, so it will not get changed accidentally
236
+ Pagy::DEFAULT.freeze
@@ -53,7 +53,7 @@ module SlackRubyBotServer
53
53
  end
54
54
 
55
55
  def oauth_scope_s
56
- oauth_scope&.join('+')
56
+ oauth_scope&.join(',')
57
57
  end
58
58
 
59
59
  def activerecord?
@@ -1,12 +1,14 @@
1
1
  # see https://groups.google.com/forum/#!msg/mongoid/MaXFVw7D_4s/T3sl6Flg428J
2
- module BSON
3
- class ObjectId
4
- def as_json(_options = {})
5
- to_s
6
- end
2
+ if defined?(:BSON)
3
+ module BSON
4
+ class ObjectId
5
+ def as_json(_options = {})
6
+ to_s
7
+ end
7
8
 
8
- def to_bson_key(encoded = ''.force_encoding(BINARY))
9
- to_s.to_bson_key(encoded)
9
+ def to_bson_key(encoded = ''.force_encoding(BINARY))
10
+ to_s.to_bson_key(encoded)
11
+ end
10
12
  end
11
13
  end
12
14
  end
@@ -1,3 +1,2 @@
1
- %w[bson/object_id grape/sort_extension].each do |ext|
2
- require_relative "ext/#{ext}"
3
- end
1
+ require_relative 'ext/bson/object_id'
2
+ require_relative 'ext/grape/sort_extension'
@@ -13,11 +13,11 @@ module Methods
13
13
  validates_presence_of :team_id
14
14
 
15
15
  def deactivate!
16
- update_attributes!(active: false)
16
+ update!(active: false)
17
17
  end
18
18
 
19
19
  def activate!(token)
20
- update_attributes!(active: true, token: token)
20
+ update!(active: true, token: token)
21
21
  end
22
22
 
23
23
  def to_s
@@ -24,19 +24,15 @@ module SlackRubyBotServer
24
24
  end
25
25
  end
26
26
 
27
- def every(*intervals, &block)
27
+ def once_and_every(*intervals, &block)
28
28
  Array(intervals).each do |interval|
29
- case interval
30
- when :minute
31
- interval = 60
32
- when :hour
33
- interval = 60 * 60
34
- when :day
35
- interval = 60 * 60 * 24
36
- end
37
- raise "Invalid interval \"#{interval}\"." unless interval.is_a?(Integer) && interval > 0
29
+ @intervals[_validate_interval(interval)] << [block, { run_on_start: true }]
30
+ end
31
+ end
38
32
 
39
- @intervals[interval] << block
33
+ def every(*intervals, &block)
34
+ Array(intervals).each do |interval|
35
+ @intervals[_validate_interval(interval)] << [block, {}]
40
36
  end
41
37
  end
42
38
 
@@ -83,9 +79,12 @@ module SlackRubyBotServer
83
79
  end
84
80
 
85
81
  def start_intervals!
86
- @intervals.each_pair do |period, calls|
87
- _every period do
88
- calls.each(&:call)
82
+ @intervals.each_pair do |period, calls_with_options|
83
+ calls_with_options.each do |call_with_options|
84
+ call, options = *call_with_options
85
+ _every period, options do
86
+ call.call
87
+ end
89
88
  end
90
89
  end
91
90
  end
@@ -105,10 +104,28 @@ module SlackRubyBotServer
105
104
 
106
105
  private
107
106
 
108
- def _every(tt, &_block)
107
+ def _validate_interval(interval)
108
+ case interval
109
+ when :minute
110
+ interval = 60
111
+ when :hour
112
+ interval = 60 * 60
113
+ when :day
114
+ interval = 60 * 60 * 24
115
+ end
116
+ raise "Invalid interval \"#{interval}\"." unless interval.is_a?(Integer) && interval > 0
117
+
118
+ interval
119
+ end
120
+
121
+ def _every(tt, options = {}, &_block)
109
122
  ::Async::Reactor.run do |task|
110
123
  loop do
111
124
  begin
125
+ if options[:run_on_start]
126
+ options = {}
127
+ yield
128
+ end
112
129
  task.sleep tt
113
130
  yield
114
131
  rescue StandardError => e
@@ -1,3 +1,3 @@
1
1
  module SlackRubyBotServer
2
- VERSION = '1.2.1'.freeze
2
+ VERSION = '2.1.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack-ruby-bot-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Doubrovkine
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-07 00:00:00.000000000 Z
11
+ date: 2023-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async
@@ -150,7 +150,7 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
- description:
153
+ description:
154
154
  email:
155
155
  - dblock@dblock.org
156
156
  executables: []
@@ -202,10 +202,10 @@ files:
202
202
  - lib/slack-ruby-bot-server/config.rb
203
203
  - lib/slack-ruby-bot-server/config/database_adapters/activerecord.rb
204
204
  - lib/slack-ruby-bot-server/config/database_adapters/mongoid.rb
205
+ - lib/slack-ruby-bot-server/config/pagy.rb
205
206
  - lib/slack-ruby-bot-server/ext.rb
206
207
  - lib/slack-ruby-bot-server/ext/bson/object_id.rb
207
208
  - lib/slack-ruby-bot-server/ext/grape/sort_extension.rb
208
- - lib/slack-ruby-bot-server/ext/mongoid/slack-ruby-bot/commands/base.rb
209
209
  - lib/slack-ruby-bot-server/info.rb
210
210
  - lib/slack-ruby-bot-server/loggable.rb
211
211
  - lib/slack-ruby-bot-server/models/team/activerecord.rb
@@ -230,7 +230,7 @@ files:
230
230
  homepage: https://github.com/slack-ruby/slack-ruby-bot-server
231
231
  licenses: []
232
232
  metadata: {}
233
- post_install_message:
233
+ post_install_message:
234
234
  rdoc_options: []
235
235
  require_paths:
236
236
  - lib
@@ -245,8 +245,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
245
245
  - !ruby/object:Gem::Version
246
246
  version: '0'
247
247
  requirements: []
248
- rubygems_version: 3.1.3
249
- signing_key:
248
+ rubygems_version: 3.1.6
249
+ signing_key:
250
250
  specification_version: 4
251
251
  summary: A Grape API serving a Slack bot to multiple teams.
252
252
  test_files: []
@@ -1,22 +0,0 @@
1
- module SlackRubyBot
2
- module Commands
3
- class Base
4
- class << self
5
- alias _invoke invoke
6
-
7
- def invoke(client, data)
8
- _invoke client, data
9
- rescue Mongoid::Errors::Validations => e
10
- logger.info "#{name.demodulize.upcase}: #{client.owner}, error - #{e.document.class}, #{e.document.errors.to_hash}"
11
- client.say(channel: data.channel, text: e.document.errors.first[1])
12
- true
13
- rescue StandardError => e
14
- logger.info "#{name.demodulize.upcase}: #{client.owner}, #{e.class}: #{e}"
15
- logger.debug e.backtrace.join("\n")
16
- client.say(channel: data.channel, text: e.message)
17
- true
18
- end
19
- end
20
- end
21
- end
22
- end