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
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
def app
|
4
|
+
SlackRubyBotServer::Api::Middleware.instance
|
5
|
+
end
|
6
|
+
|
7
|
+
describe 'API' do
|
8
|
+
include Rack::Test::Methods
|
9
|
+
|
10
|
+
it 'root' do
|
11
|
+
get '/api'
|
12
|
+
expect(last_response.status).to eq 200
|
13
|
+
links = JSON.parse(last_response.body)['_links']
|
14
|
+
expect(links.keys.sort).to eq(%w(self status team teams).sort)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'commands/help'
|
3
|
+
|
4
|
+
describe Help do
|
5
|
+
let!(:team) { Fabricate(:team) }
|
6
|
+
let(:app) { SlackRubyBotServer::Server.new(team: team) }
|
7
|
+
let(:client) { app.send(:client) }
|
8
|
+
let(:message_hook) { SlackRubyBot::Hooks::Message.new }
|
9
|
+
it 'default' do
|
10
|
+
expect(client).to receive(:say).with(channel: 'channel', text: [Help::HELP, SlackRubyBotServer::INFO].join("\n"))
|
11
|
+
expect(client).to receive(:say).with(channel: 'channel', gif: 'help')
|
12
|
+
message_hook.call(client, Hashie::Mash.new(channel: 'channel', text: "#{SlackRubyBot.config.user} help"))
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'commands/whoami'
|
3
|
+
|
4
|
+
describe Whoami do
|
5
|
+
let(:team) { Fabricate(:team) }
|
6
|
+
let(:app) { SlackRubyBotServer::Server.new(team: team) }
|
7
|
+
context 'whoami' do
|
8
|
+
it 'returns username' do
|
9
|
+
expect(message: "#{SlackRubyBot.config.user} whoami", channel: 'channel', user: 'user').to respond_with_slack_message(
|
10
|
+
'<@user>'
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -17,16 +17,12 @@ Gem::Specification.new do |spec|
|
|
17
17
|
|
18
18
|
spec.add_dependency 'slack-ruby-bot'
|
19
19
|
spec.add_dependency 'celluloid-io'
|
20
|
-
spec.add_dependency 'mongoid'
|
21
20
|
spec.add_dependency 'unicorn'
|
22
21
|
spec.add_dependency 'grape'
|
23
22
|
spec.add_dependency 'grape-swagger'
|
24
|
-
spec.add_dependency 'roar', '
|
25
|
-
spec.add_dependency 'grape-roar'
|
23
|
+
spec.add_dependency 'grape-roar', '>= 0.4.0'
|
26
24
|
spec.add_dependency 'rack-cors'
|
27
|
-
spec.add_dependency 'kaminari-mongoid'
|
28
25
|
spec.add_dependency 'kaminari-grape'
|
29
|
-
spec.add_dependency 'mongoid-scroll'
|
30
26
|
spec.add_dependency 'rack-rewrite'
|
31
27
|
spec.add_dependency 'rack-server-pages'
|
32
28
|
spec.add_dependency 'foreman'
|
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: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Doubrovkine
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slack-ruby-bot
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: mongoid
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: unicorn
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,34 +80,20 @@ dependencies:
|
|
94
80
|
- - ">="
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: roar
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: 1.0.4
|
104
|
-
type: :runtime
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 1.0.4
|
111
83
|
- !ruby/object:Gem::Dependency
|
112
84
|
name: grape-roar
|
113
85
|
requirement: !ruby/object:Gem::Requirement
|
114
86
|
requirements:
|
115
87
|
- - ">="
|
116
88
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
89
|
+
version: 0.4.0
|
118
90
|
type: :runtime
|
119
91
|
prerelease: false
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
121
93
|
requirements:
|
122
94
|
- - ">="
|
123
95
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
96
|
+
version: 0.4.0
|
125
97
|
- !ruby/object:Gem::Dependency
|
126
98
|
name: rack-cors
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,20 +108,6 @@ dependencies:
|
|
136
108
|
- - ">="
|
137
109
|
- !ruby/object:Gem::Version
|
138
110
|
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: kaminari-mongoid
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :runtime
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
111
|
- !ruby/object:Gem::Dependency
|
154
112
|
name: kaminari-grape
|
155
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,20 +122,6 @@ dependencies:
|
|
164
122
|
- - ">="
|
165
123
|
- !ruby/object:Gem::Version
|
166
124
|
version: '0'
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: mongoid-scroll
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ">="
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
174
|
-
type: :runtime
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
181
125
|
- !ruby/object:Gem::Dependency
|
182
126
|
name: rack-rewrite
|
183
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -267,6 +211,8 @@ files:
|
|
267
211
|
- lib/slack-ruby-bot-server/api/presenters/teams_presenter.rb
|
268
212
|
- lib/slack-ruby-bot-server/app.rb
|
269
213
|
- lib/slack-ruby-bot-server/config.rb
|
214
|
+
- lib/slack-ruby-bot-server/config/database_adapters/activerecord.rb
|
215
|
+
- lib/slack-ruby-bot-server/config/database_adapters/mongoid.rb
|
270
216
|
- lib/slack-ruby-bot-server/ext.rb
|
271
217
|
- lib/slack-ruby-bot-server/ext/bson/object_id.rb
|
272
218
|
- lib/slack-ruby-bot-server/ext/grape/sort_extension.rb
|
@@ -275,7 +221,9 @@ files:
|
|
275
221
|
- lib/slack-ruby-bot-server/ext/slack-ruby-bot/commands/base.rb
|
276
222
|
- lib/slack-ruby-bot-server/info.rb
|
277
223
|
- lib/slack-ruby-bot-server/models.rb
|
278
|
-
- lib/slack-ruby-bot-server/models/team.rb
|
224
|
+
- lib/slack-ruby-bot-server/models/team/activerecord.rb
|
225
|
+
- lib/slack-ruby-bot-server/models/team/methods.rb
|
226
|
+
- lib/slack-ruby-bot-server/models/team/mongoid.rb
|
279
227
|
- lib/slack-ruby-bot-server/rspec.rb
|
280
228
|
- lib/slack-ruby-bot-server/rspec/fabricators/team.rb
|
281
229
|
- lib/slack-ruby-bot-server/server.rb
|
@@ -289,21 +237,40 @@ files:
|
|
289
237
|
- public/scripts/register.js
|
290
238
|
- public/scripts/stats.js
|
291
239
|
- public/scripts/url.min.js
|
292
|
-
-
|
293
|
-
-
|
294
|
-
-
|
295
|
-
-
|
296
|
-
-
|
297
|
-
-
|
298
|
-
-
|
299
|
-
-
|
300
|
-
-
|
301
|
-
-
|
302
|
-
-
|
303
|
-
-
|
304
|
-
-
|
305
|
-
-
|
306
|
-
-
|
240
|
+
- sample_apps/README.md
|
241
|
+
- sample_apps/sample_app_activerecord/.rspec
|
242
|
+
- sample_apps/sample_app_activerecord/.standalone_migrations
|
243
|
+
- sample_apps/sample_app_activerecord/Gemfile
|
244
|
+
- sample_apps/sample_app_activerecord/Procfile
|
245
|
+
- sample_apps/sample_app_activerecord/README.md
|
246
|
+
- sample_apps/sample_app_activerecord/Rakefile
|
247
|
+
- sample_apps/sample_app_activerecord/commands.rb
|
248
|
+
- sample_apps/sample_app_activerecord/commands/help.rb
|
249
|
+
- sample_apps/sample_app_activerecord/commands/whoami.rb
|
250
|
+
- sample_apps/sample_app_activerecord/config.ru
|
251
|
+
- sample_apps/sample_app_activerecord/config/newrelic.yml
|
252
|
+
- sample_apps/sample_app_activerecord/config/postgresql.yml
|
253
|
+
- sample_apps/sample_app_activerecord/db/migrate/20170307164946_create_teams_table.rb
|
254
|
+
- sample_apps/sample_app_activerecord/db/schema.rb
|
255
|
+
- sample_apps/sample_app_activerecord/spec/api/root_spec.rb
|
256
|
+
- sample_apps/sample_app_activerecord/spec/commands/help_spec.rb
|
257
|
+
- sample_apps/sample_app_activerecord/spec/commands/whoami_spec.rb
|
258
|
+
- sample_apps/sample_app_activerecord/spec/spec_helper.rb
|
259
|
+
- sample_apps/sample_app_mongoid/.rspec
|
260
|
+
- sample_apps/sample_app_mongoid/Gemfile
|
261
|
+
- sample_apps/sample_app_mongoid/Procfile
|
262
|
+
- sample_apps/sample_app_mongoid/README.md
|
263
|
+
- sample_apps/sample_app_mongoid/Rakefile
|
264
|
+
- sample_apps/sample_app_mongoid/commands.rb
|
265
|
+
- sample_apps/sample_app_mongoid/commands/help.rb
|
266
|
+
- sample_apps/sample_app_mongoid/commands/whoami.rb
|
267
|
+
- sample_apps/sample_app_mongoid/config.ru
|
268
|
+
- sample_apps/sample_app_mongoid/config/mongoid.yml
|
269
|
+
- sample_apps/sample_app_mongoid/config/newrelic.yml
|
270
|
+
- sample_apps/sample_app_mongoid/spec/api/root_spec.rb
|
271
|
+
- sample_apps/sample_app_mongoid/spec/commands/help_spec.rb
|
272
|
+
- sample_apps/sample_app_mongoid/spec/commands/whoami_spec.rb
|
273
|
+
- sample_apps/sample_app_mongoid/spec/spec_helper.rb
|
307
274
|
- script/console
|
308
275
|
- slack-ruby-bot-server.gemspec
|
309
276
|
- tasks/db.rake
|
@@ -1,68 +0,0 @@
|
|
1
|
-
class Team
|
2
|
-
include Mongoid::Document
|
3
|
-
include Mongoid::Timestamps
|
4
|
-
|
5
|
-
SORT_ORDERS = ['created_at', '-created_at', 'updated_at', '-updated_at'].freeze
|
6
|
-
|
7
|
-
field :team_id, type: String
|
8
|
-
field :name, type: String
|
9
|
-
field :domain, type: String
|
10
|
-
field :token, type: String
|
11
|
-
field :active, type: Boolean, default: true
|
12
|
-
|
13
|
-
attr_accessor :server # server at runtime
|
14
|
-
|
15
|
-
scope :active, -> { where(active: true) }
|
16
|
-
|
17
|
-
validates_uniqueness_of :token, message: 'has already been used'
|
18
|
-
validates_presence_of :token
|
19
|
-
validates_presence_of :team_id
|
20
|
-
|
21
|
-
def deactivate!
|
22
|
-
update_attributes!(active: false)
|
23
|
-
end
|
24
|
-
|
25
|
-
def activate!(token)
|
26
|
-
update_attributes!(active: true, token: token)
|
27
|
-
end
|
28
|
-
|
29
|
-
def to_s
|
30
|
-
{
|
31
|
-
name: name,
|
32
|
-
domain: domain,
|
33
|
-
id: team_id
|
34
|
-
}.map do |k, v|
|
35
|
-
"#{k}=#{v}" if v
|
36
|
-
end.compact.join(', ')
|
37
|
-
end
|
38
|
-
|
39
|
-
def ping!
|
40
|
-
client = Slack::Web::Client.new(token: token)
|
41
|
-
auth = client.auth_test
|
42
|
-
{
|
43
|
-
auth: auth,
|
44
|
-
presence: client.users_getPresence(user: auth['user_id'])
|
45
|
-
}
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.find_or_create_from_env!
|
49
|
-
token = ENV['SLACK_API_TOKEN']
|
50
|
-
return unless token
|
51
|
-
team = Team.where(token: token).first
|
52
|
-
team ||= Team.new(token: token)
|
53
|
-
info = Slack::Web::Client.new(token: token).team_info
|
54
|
-
team.team_id = info['team']['id']
|
55
|
-
team.name = info['team']['name']
|
56
|
-
team.domain = info['team']['domain']
|
57
|
-
team.save!
|
58
|
-
team
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.purge!
|
62
|
-
# destroy teams inactive for two weeks
|
63
|
-
Team.where(active: false, :updated_at.lte => 2.weeks.ago).each do |team|
|
64
|
-
Mongoid.logger.info "Destroying #{team}, inactive since #{team.updated_at}, over two weeks ago."
|
65
|
-
team.destroy
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|