slack-ruby-bot-server 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +11 -9
- data/CHANGELOG.md +7 -1
- data/Gemfile +16 -0
- data/README.md +31 -4
- data/UPGRADING.md +25 -0
- data/lib/slack-ruby-bot-server.rb +6 -5
- data/lib/slack-ruby-bot-server/api/endpoints/teams_endpoint.rb +1 -1
- data/lib/slack-ruby-bot-server/api/helpers/cursor_helpers.rb +31 -18
- data/lib/slack-ruby-bot-server/api/helpers/error_helpers.rb +12 -10
- data/lib/slack-ruby-bot-server/api/helpers/sort_helpers.rb +5 -1
- data/lib/slack-ruby-bot-server/api/middleware.rb +6 -1
- data/lib/slack-ruby-bot-server/api/presenters/status_presenter.rb +7 -3
- data/lib/slack-ruby-bot-server/app.rb +4 -23
- data/lib/slack-ruby-bot-server/config.rb +16 -0
- data/lib/slack-ruby-bot-server/config/database_adapters/activerecord.rb +27 -0
- data/lib/slack-ruby-bot-server/config/database_adapters/mongoid.rb +24 -0
- data/lib/slack-ruby-bot-server/models/team/activerecord.rb +13 -0
- data/lib/slack-ruby-bot-server/models/team/methods.rb +55 -0
- data/lib/slack-ruby-bot-server/models/team/mongoid.rb +22 -0
- data/lib/slack-ruby-bot-server/version.rb +1 -1
- data/sample_apps/README.md +11 -0
- data/{sample_app → sample_apps/sample_app_activerecord}/.rspec +0 -0
- data/sample_apps/sample_app_activerecord/.standalone_migrations +3 -0
- data/sample_apps/sample_app_activerecord/Gemfile +23 -0
- data/{sample_app → sample_apps/sample_app_activerecord}/Procfile +0 -0
- data/sample_apps/sample_app_activerecord/README.md +11 -0
- data/sample_apps/sample_app_activerecord/Rakefile +13 -0
- data/{sample_app → sample_apps/sample_app_activerecord}/commands.rb +0 -0
- data/{sample_app → sample_apps/sample_app_activerecord}/commands/help.rb +0 -0
- data/{sample_app → sample_apps/sample_app_activerecord}/commands/whoami.rb +0 -0
- data/sample_apps/sample_app_activerecord/config.ru +21 -0
- data/{sample_app → sample_apps/sample_app_activerecord}/config/newrelic.yml +0 -0
- data/sample_apps/sample_app_activerecord/config/postgresql.yml +17 -0
- data/sample_apps/sample_app_activerecord/db/migrate/20170307164946_create_teams_table.rb +13 -0
- data/sample_apps/sample_app_activerecord/db/schema.rb +26 -0
- data/sample_apps/sample_app_activerecord/spec/api/root_spec.rb +16 -0
- data/{sample_app → sample_apps/sample_app_activerecord}/spec/commands/help_spec.rb +0 -0
- data/{sample_app → sample_apps/sample_app_activerecord}/spec/commands/whoami_spec.rb +0 -0
- data/sample_apps/sample_app_activerecord/spec/spec_helper.rb +19 -0
- data/sample_apps/sample_app_mongoid/.rspec +3 -0
- data/{sample_app → sample_apps/sample_app_mongoid}/Gemfile +6 -1
- data/sample_apps/sample_app_mongoid/Procfile +1 -0
- data/{sample_app → sample_apps/sample_app_mongoid}/README.md +13 -0
- data/{sample_app → sample_apps/sample_app_mongoid}/Rakefile +0 -0
- data/sample_apps/sample_app_mongoid/commands.rb +2 -0
- data/sample_apps/sample_app_mongoid/commands/help.rb +19 -0
- data/sample_apps/sample_app_mongoid/commands/whoami.rb +6 -0
- data/{sample_app → sample_apps/sample_app_mongoid}/config.ru +0 -0
- data/{sample_app → sample_apps/sample_app_mongoid}/config/mongoid.yml +0 -0
- data/sample_apps/sample_app_mongoid/config/newrelic.yml +217 -0
- data/sample_apps/sample_app_mongoid/spec/api/root_spec.rb +16 -0
- data/sample_apps/sample_app_mongoid/spec/commands/help_spec.rb +14 -0
- data/sample_apps/sample_app_mongoid/spec/commands/whoami_spec.rb +14 -0
- data/{sample_app → sample_apps/sample_app_mongoid}/spec/spec_helper.rb +2 -0
- data/slack-ruby-bot-server.gemspec +1 -5
- metadata +43 -76
- data/lib/slack-ruby-bot-server/models/team.rb +0 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b91c82bc0a49452c0b3871786fb739b763c8a25
|
4
|
+
data.tar.gz: 12e73c3db13dcaba4da39f499f0acb797e2db122
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbf49bff1a3f7723468cc5841c68df08de3598451f1868ba4084262faa89a5a044ccbd1ea5a6a57cbbc8aadce2841681fb4e31c82a3d25c151af4099e13c3a5c
|
7
|
+
data.tar.gz: d9a0fa731ec1b9da48f4ef0e73189ebd6acf473e2f3bb5416e39acc5c1c0385aeea922b1e6d99d137cf2d8101a32356100822741f835b50df7a67a9e0062ba21
|
data/.travis.yml
CHANGED
@@ -2,22 +2,24 @@ language: ruby
|
|
2
2
|
|
3
3
|
cache: bundler
|
4
4
|
|
5
|
-
services:
|
6
|
-
- mongodb
|
7
|
-
|
8
5
|
matrix:
|
9
6
|
include:
|
10
7
|
- rvm: 2.3.1
|
11
8
|
script:
|
12
9
|
- bundle exec danger
|
13
10
|
- rvm: 2.3.1
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
env: DATABASE_ADAPTER=activerecord
|
12
|
+
services:
|
13
|
+
- postgresql
|
14
|
+
- rvm: 2.3.1
|
15
|
+
env: DATABASE_ADAPTER=mongoid
|
16
|
+
services:
|
17
|
+
- mongodb
|
20
18
|
|
21
19
|
before_install:
|
22
20
|
- "export DISPLAY=:99.0"
|
23
21
|
- "sh -e /etc/init.d/xvfb start"
|
22
|
+
|
23
|
+
script:
|
24
|
+
- bundle exec rake
|
25
|
+
- BUNDLE_GEMFILE=Gemfile && cd sample_apps/sample_app_$DATABASE_ADAPTER && bundle && bundle exec rake
|
data/CHANGELOG.md
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
### Changelog
|
2
2
|
|
3
|
+
#### 0.6.0 (3/12/2017)
|
4
|
+
|
5
|
+
* [#38](https://github.com/slack-ruby/slack-ruby-bot-server/issues/7): Added ActiveRecord support - [@zachfeldman](https://github.com/zachfeldman), [@spencerldixon](https://github.com/spencerldixon), [@dblock](https://github.com/dblock).
|
6
|
+
* [#45](https://github.com/slack-ruby/slack-ruby-bot-server/pull/45): Updated grape-roar to 0.4.0 - [@swalberg](https://github.com/swalberg).
|
7
|
+
* [#49](https://github.com/slack-ruby/slack-ruby-bot-server/pull/49): Run tests in the sample apps part of CI - [@dblock](https://github.com/dblock).
|
8
|
+
|
3
9
|
#### 0.5.0 (2/9/2017)
|
4
10
|
|
5
11
|
* [#43](https://github.com/slack-ruby/slack-ruby-bot-server/pull/43): Fix: `cannot load kaminari/grape` - [@dblock](https://github.com/dblock).
|
6
|
-
* [#43](https://github.com/slack-ruby/slack-ruby-bot-server/pull/43): Fix: `undefined method
|
12
|
+
* [#43](https://github.com/slack-ruby/slack-ruby-bot-server/pull/43): Fix: `undefined method '[]' for nil:NilClass` in APIs - [@dblock](https://github.com/dblock).
|
7
13
|
* [#28](https://github.com/slack-ruby/slack-ruby-bot-server/pull/28): Use slack-ruby-danger gem - [@dblock](https://github.com/dblock).
|
8
14
|
* [#31](https://github.com/slack-ruby/slack-ruby-bot-server/pull/31): Adds MONGODB_URI as environment variable for MongoDB - [@corprew](https://github.com/corprew).
|
9
15
|
|
data/Gemfile
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
+
case ENV['DATABASE_ADAPTER']
|
4
|
+
when 'mongoid' then
|
5
|
+
gem 'mongoid'
|
6
|
+
gem 'kaminari-mongoid'
|
7
|
+
gem 'mongoid-scroll'
|
8
|
+
when 'activerecord' then
|
9
|
+
gem 'pg'
|
10
|
+
gem 'activerecord'
|
11
|
+
gem 'otr-activerecord'
|
12
|
+
gem 'cursor_pagination'
|
13
|
+
when nil then
|
14
|
+
warn "Missing ENV['DATABASE_ADAPTER']."
|
15
|
+
else
|
16
|
+
warn "Invalid ENV['DATABASE_ADAPTER']: #{ENV['DATABASE_ADAPTER']}."
|
17
|
+
end
|
18
|
+
|
3
19
|
gemspec
|
4
20
|
|
5
21
|
group :development, :test do
|
data/README.md
CHANGED
@@ -13,11 +13,11 @@ A library that contains a [Grape](http://github.com/ruby-grape/grape) API servin
|
|
13
13
|
|
14
14
|
### Stable Release
|
15
15
|
|
16
|
-
You're reading the documentation for the **stable** release of slack-ruby-bot-server, 0.
|
16
|
+
You're reading the documentation for the **stable** release of slack-ruby-bot-server, 0.6.0. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
|
17
17
|
|
18
18
|
### Try Me
|
19
19
|
|
20
|
-
A demo version of the [sample app](
|
20
|
+
A demo version of the [sample app with mongoid](sample_apps/sample_app_mongoid) is running on Heroku at [slack-ruby-bot-server.herokuapp.com](https://slack-ruby-bot-server.herokuapp.com). Use the _Add to Slack_ button. The bot will join your team as _@slackbotserver_.
|
21
21
|
|
22
22
|
![](images/slackbutton.gif)
|
23
23
|
|
@@ -27,9 +27,36 @@ Once a bot is registered, you can invite to a channel with `/invite @slackbotser
|
|
27
27
|
|
28
28
|
### Run Your Own
|
29
29
|
|
30
|
-
You can use the [sample
|
30
|
+
You can use one of the [sample applications](sample_apps) to bootstrap your project and start adding slack command handlers on top of this code. A database is required to store teams.
|
31
31
|
|
32
|
-
|
32
|
+
### MongoDB
|
33
|
+
|
34
|
+
Use MongoDB with [Mongoid](https://github.com/mongodb/mongoid) as ODM. Configure the database connection in `mongoid.yml`. Add the `mongoid` gem in your Gemfile.
|
35
|
+
|
36
|
+
```
|
37
|
+
gem 'mongoid'
|
38
|
+
gem 'kaminari-mongoid'
|
39
|
+
gem 'mongoid-scroll'
|
40
|
+
gem 'slack-ruby-bot-server'
|
41
|
+
```
|
42
|
+
|
43
|
+
See the [sample app using Mongoid](sample_apps/sample_app_mongoid) for more information.
|
44
|
+
|
45
|
+
### ActiveRecord
|
46
|
+
|
47
|
+
Use ActiveRecord with, for example, PostgreSQL via [pg](https://github.com/ged/ruby-pg). Configure the database connection in `postgresql.yml`. Add the `activerecord`, `pg`, `otr-activerecord` and `cursor_pagination` gems to your Gemfile.
|
48
|
+
|
49
|
+
```
|
50
|
+
gem 'pg'
|
51
|
+
gem 'activerecord', require: 'active_record'
|
52
|
+
gem 'slack-ruby-bot-server'
|
53
|
+
gem 'otr-activerecord'
|
54
|
+
gem 'cursor_pagination'
|
55
|
+
```
|
56
|
+
|
57
|
+
See the [sample app using ActiveRecord](sample_apps/sample_app_activerecord) for more information.
|
58
|
+
|
59
|
+
### Usage
|
33
60
|
|
34
61
|
[Create a New Application](https://api.slack.com/applications/new) on Slack.
|
35
62
|
|
data/UPGRADING.md
CHANGED
@@ -1,6 +1,31 @@
|
|
1
1
|
Upgrading Slack-Ruby-Bot-Server
|
2
2
|
===============================
|
3
3
|
|
4
|
+
### Upgrading to >= 0.6.0
|
5
|
+
|
6
|
+
#### Mongoid and ActiveRecord support
|
7
|
+
|
8
|
+
Version 0.6.0 supports both Mongoid and ActiveRecord. The `mongoid` gem is no longer a dependency, so you must manually add the gems in your Gemfile.
|
9
|
+
|
10
|
+
##### Mongoid
|
11
|
+
|
12
|
+
```
|
13
|
+
gem 'mongoid'
|
14
|
+
gem 'slack-ruby-bot-server'
|
15
|
+
```
|
16
|
+
|
17
|
+
##### ActiveRecord (with PostgreSQL)
|
18
|
+
|
19
|
+
```
|
20
|
+
gem 'pg'
|
21
|
+
gem 'activerecord', require: 'active_record'
|
22
|
+
gem 'slack-ruby-bot-server'
|
23
|
+
```
|
24
|
+
|
25
|
+
The order matters, and the driver is required _first_, otherwise you will get a `One of "mongoid" or "activerecord" is required.` error.
|
26
|
+
|
27
|
+
See [#48](https://github.com/slack-ruby/slack-ruby-bot-server/pull/48) for more information.
|
28
|
+
|
4
29
|
### Upgrading to >= 0.4.0
|
5
30
|
|
6
31
|
#### Add giphy to your Gemfile for GIF support
|
@@ -1,15 +1,16 @@
|
|
1
1
|
require 'celluloid/current'
|
2
|
-
|
3
|
-
require 'mongoid-scroll'
|
2
|
+
|
4
3
|
require 'grape-swagger'
|
5
4
|
require 'slack-ruby-bot'
|
5
|
+
require 'slack-ruby-bot-server/server'
|
6
|
+
require 'slack-ruby-bot-server/config'
|
6
7
|
|
7
8
|
require 'slack-ruby-bot-server/ext'
|
8
9
|
require 'slack-ruby-bot-server/version'
|
9
10
|
require 'slack-ruby-bot-server/info'
|
10
|
-
|
11
|
+
|
12
|
+
require "slack-ruby-bot-server/config/database_adapters/#{SlackRubyBotServer::Config.database_adapter}.rb"
|
13
|
+
|
11
14
|
require 'slack-ruby-bot-server/api'
|
12
15
|
require 'slack-ruby-bot-server/app'
|
13
|
-
require 'slack-ruby-bot-server/server'
|
14
|
-
require 'slack-ruby-bot-server/config'
|
15
16
|
require 'slack-ruby-bot-server/service'
|
@@ -26,7 +26,7 @@ module SlackRubyBotServer
|
|
26
26
|
get do
|
27
27
|
teams = Team.all
|
28
28
|
teams = teams.active if params[:active]
|
29
|
-
teams = paginate_and_sort_by_cursor(teams, default_sort_order: '-
|
29
|
+
teams = paginate_and_sort_by_cursor(teams, default_sort_order: '-id')
|
30
30
|
present teams, with: Presenters::TeamsPresenter
|
31
31
|
end
|
32
32
|
|
@@ -8,28 +8,41 @@ module SlackRubyBotServer
|
|
8
8
|
# returns a hash:
|
9
9
|
# results: (paginated collection subset)
|
10
10
|
# next: (cursor to the next page)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
coll = coll.
|
11
|
+
if SlackRubyBotServer::Config.mongoid?
|
12
|
+
def paginate_by_cursor(coll, _options)
|
13
|
+
raise 'Both cursor and offset parameters are present, these are mutually exclusive.' if params.key?(:offset) && params.key?(:cursor)
|
14
|
+
results = { results: [], next: nil }
|
15
|
+
coll = coll.skip(params[:offset].to_i) if params.key?(:offset)
|
16
|
+
size = (params[:size] || 10).to_i
|
17
|
+
coll = coll.limit(size)
|
18
|
+
coll.scroll(params[:cursor]) do |record, next_cursor|
|
19
|
+
results[:results] << record if record
|
20
|
+
results[:next] = next_cursor.to_s
|
21
|
+
break if results[:results].count >= size
|
22
|
+
end
|
23
|
+
results[:total_count] = coll.count if params[:total_count] && coll.respond_to?(:count)
|
24
|
+
results
|
18
25
|
end
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
results[:
|
25
|
-
|
26
|
+
elsif SlackRubyBotServer::Config.activerecord?
|
27
|
+
def paginate_by_cursor(coll, options)
|
28
|
+
raise 'Both cursor and offset parameters are present, these are mutually exclusive.' if params.key?(:offset) && params.key?(:cursor)
|
29
|
+
results = { results: [], next: nil }
|
30
|
+
size = (params[:size] || 10).to_i
|
31
|
+
results[:total_count] = coll.count(:all) if params[:total_count]
|
32
|
+
coll = coll.offset(params[:offset].to_i) if params.key?(:offset)
|
33
|
+
sort_options = {}
|
34
|
+
sort_order(options).each do |order|
|
35
|
+
sort_options[order[:column]] = { reverse: true } if order[:direction] == :desc
|
36
|
+
end
|
37
|
+
coll = coll.cursor(params[:cursor], columns: sort_options).per(size)
|
38
|
+
results[:results] = coll.to_a
|
39
|
+
results[:next] = coll.next_cursor.to_s unless coll.last_page?
|
40
|
+
results
|
26
41
|
end
|
27
|
-
results[:total_count] = coll.count if params[:total_count] && coll.respond_to?(:count)
|
28
|
-
results
|
29
42
|
end
|
30
43
|
|
31
|
-
def paginate_and_sort_by_cursor(coll, options = {}
|
32
|
-
Hashie::Mash.new(paginate_by_cursor(sort(coll, options),
|
44
|
+
def paginate_and_sort_by_cursor(coll, options = {})
|
45
|
+
Hashie::Mash.new(paginate_by_cursor(sort(coll, options), options))
|
33
46
|
end
|
34
47
|
end
|
35
48
|
end
|
@@ -13,16 +13,18 @@ module SlackRubyBotServer
|
|
13
13
|
rack_response(error.to_json, 400)
|
14
14
|
end
|
15
15
|
# rescue document validation errors into detail json
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
if SlackRubyBotServer::Config.mongoid?
|
17
|
+
rescue_from Mongoid::Errors::Validations do |e|
|
18
|
+
backtrace = e.backtrace[0..5].join("\n ")
|
19
|
+
Middleware.logger.warn "#{e.class.name}: #{e.message}\n #{backtrace}"
|
20
|
+
rack_response({
|
21
|
+
type: 'param_error',
|
22
|
+
message: e.document.errors.full_messages.uniq.join(', ') + '.',
|
23
|
+
detail: e.document.errors.messages.each_with_object({}) do |(k, v), h|
|
24
|
+
h[k] = v.uniq
|
25
|
+
end
|
26
|
+
}.to_json, 400)
|
27
|
+
end
|
26
28
|
end
|
27
29
|
rescue_from Grape::Exceptions::Validation do |e|
|
28
30
|
backtrace = e.backtrace[0..5].join("\n ")
|
@@ -37,7 +37,11 @@ module SlackRubyBotServer
|
|
37
37
|
def sort(coll, options = {})
|
38
38
|
sort_order = sort_order(options)
|
39
39
|
unless sort_order.empty?
|
40
|
-
if coll.respond_to?(:
|
40
|
+
if coll.respond_to?(:order)
|
41
|
+
sort_order.each do |s|
|
42
|
+
coll = coll.order(s[:column] => s[:direction])
|
43
|
+
end
|
44
|
+
elsif coll.respond_to?(:asc) && coll.respond_to?(:desc)
|
41
45
|
sort_order.each do |s|
|
42
46
|
coll = coll.send(s[:direction], s[:column])
|
43
47
|
end
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
require 'rack/cors'
|
2
|
+
require 'rack-rewrite'
|
3
|
+
require 'rack-server-pages'
|
4
|
+
require 'otr-activerecord' if SlackRubyBotServer::Config.activerecord?
|
2
5
|
|
3
6
|
module SlackRubyBotServer
|
4
7
|
module Api
|
@@ -12,6 +15,8 @@ module SlackRubyBotServer
|
|
12
15
|
|
13
16
|
def self.instance
|
14
17
|
@instance ||= Rack::Builder.new do
|
18
|
+
use OTR::ActiveRecord::ConnectionManagement if SlackRubyBotServer::Config.activerecord?
|
19
|
+
|
15
20
|
use Rack::Cors do
|
16
21
|
allow do
|
17
22
|
origins '*'
|
@@ -14,10 +14,14 @@ module SlackRubyBotServer
|
|
14
14
|
property :active_teams_count
|
15
15
|
property :ping
|
16
16
|
|
17
|
-
private
|
18
|
-
|
19
17
|
def ping
|
20
|
-
|
18
|
+
if SlackRubyBotServer::Config.mongoid?
|
19
|
+
team = Team.asc(:_id).first
|
20
|
+
elsif SlackRubyBotServer::Config.activerecord?
|
21
|
+
team = Team.last
|
22
|
+
else
|
23
|
+
raise 'Unsupported database driver.'
|
24
|
+
end
|
21
25
|
return unless team
|
22
26
|
team.ping!
|
23
27
|
end
|
@@ -1,10 +1,8 @@
|
|
1
1
|
module SlackRubyBotServer
|
2
2
|
class App
|
3
3
|
def prepare!
|
4
|
-
silence_loggers!
|
5
|
-
check_mongodb_provider!
|
6
4
|
check_database!
|
7
|
-
|
5
|
+
init_database!
|
8
6
|
mark_teams_active!
|
9
7
|
migrate_from_single_team!
|
10
8
|
update_team_name_and_id!
|
@@ -25,29 +23,12 @@ module SlackRubyBotServer
|
|
25
23
|
end
|
26
24
|
end
|
27
25
|
|
28
|
-
def silence_loggers!
|
29
|
-
Mongoid.logger.level = Logger::INFO
|
30
|
-
Mongo::Logger.logger.level = Logger::INFO
|
31
|
-
end
|
32
|
-
|
33
|
-
def check_mongodb_provider!
|
34
|
-
return unless ENV['RACK_ENV'] == 'production'
|
35
|
-
unless ENV['MONGO_URL'] || ENV['MONGOHQ_URI'] || ENV['MONGODB_URI'] || ENV['MONGOLAB_URI']
|
36
|
-
raise "Missing ENV['MONGO_URL'], ENV['MONGOHQ_URI'], ENV['MONGODB_URI'], or ENV['MONGOLAB_URI']."
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
26
|
def check_database!
|
41
|
-
|
42
|
-
return if rc && rc.ok?
|
43
|
-
raise rc.documents.first['error'] || 'Unexpected error.'
|
44
|
-
rescue Exception => e
|
45
|
-
warn "Error connecting to MongoDB: #{e.message}"
|
46
|
-
raise e
|
27
|
+
SlackRubyBotServer::DatabaseAdapter.check!
|
47
28
|
end
|
48
29
|
|
49
|
-
def
|
50
|
-
::
|
30
|
+
def init_database!
|
31
|
+
SlackRubyBotServer::DatabaseAdapter.init!
|
51
32
|
end
|
52
33
|
|
53
34
|
def mark_teams_active!
|
@@ -3,9 +3,25 @@ module SlackRubyBotServer
|
|
3
3
|
extend self
|
4
4
|
|
5
5
|
attr_accessor :server_class
|
6
|
+
attr_accessor :database_adapter
|
6
7
|
|
7
8
|
def reset!
|
8
9
|
self.server_class = SlackRubyBotServer::Server
|
10
|
+
self.database_adapter = if defined?(::Mongoid)
|
11
|
+
:mongoid
|
12
|
+
elsif defined?(::ActiveRecord)
|
13
|
+
:activerecord
|
14
|
+
else
|
15
|
+
raise 'One of "mongoid" or "activerecord" is required.'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def activerecord?
|
20
|
+
database_adapter == :activerecord
|
21
|
+
end
|
22
|
+
|
23
|
+
def mongoid?
|
24
|
+
database_adapter == :mongoid
|
9
25
|
end
|
10
26
|
|
11
27
|
reset!
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'slack-ruby-bot-server/models/team/activerecord.rb'
|
2
|
+
|
3
|
+
module SlackRubyBotServer
|
4
|
+
module DatabaseAdapter
|
5
|
+
def self.check!
|
6
|
+
ActiveRecord::Base.connection_pool.with_connection(&:active?)
|
7
|
+
raise 'Unexpected error.' unless ActiveRecord::Base.connected?
|
8
|
+
rescue StandardError => e
|
9
|
+
warn "Error connecting to PostgreSQL: #{e.message}"
|
10
|
+
raise e
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.init!
|
14
|
+
return if ActiveRecord::Base.connection.tables.include?('teams')
|
15
|
+
ActiveRecord::Base.connection.create_table :teams do |t|
|
16
|
+
t.string :team_id
|
17
|
+
t.string :name
|
18
|
+
t.string :domain
|
19
|
+
t.string :token
|
20
|
+
t.boolean :active, default: true
|
21
|
+
t.timestamps
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
::Boolean = Virtus::Attribute::Boolean
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'slack-ruby-bot-server/models/team/mongoid.rb'
|
2
|
+
require 'kaminari/grape'
|
3
|
+
require 'mongoid-scroll'
|
4
|
+
|
5
|
+
module SlackRubyBotServer
|
6
|
+
module DatabaseAdapter
|
7
|
+
def self.check!
|
8
|
+
rc = Mongoid.default_client.command(ping: 1)
|
9
|
+
return if rc && rc.ok?
|
10
|
+
raise rc.documents.first['error'] || 'Unexpected error.'
|
11
|
+
rescue StandardError => e
|
12
|
+
warn "Error connecting to MongoDB: #{e.message}"
|
13
|
+
raise e
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.init!
|
17
|
+
# create indexes
|
18
|
+
::Mongoid::Tasks::Database.create_indexes
|
19
|
+
# silence loggers
|
20
|
+
Mongoid.logger.level = Logger::INFO
|
21
|
+
Mongo::Logger.logger.level = Logger::INFO
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|