slack-web-api 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +6 -0
  6. data/Gemfile +4 -0
  7. data/Guardfile +13 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +33 -0
  10. data/Rakefile +13 -0
  11. data/examples/basic.rb +35 -0
  12. data/lib/faraday/raise_http_exception.rb +51 -0
  13. data/lib/slack.rb +27 -0
  14. data/lib/slack/api.rb +24 -0
  15. data/lib/slack/client.rb +4 -0
  16. data/lib/slack/configuration.rb +76 -0
  17. data/lib/slack/connection.rb +29 -0
  18. data/lib/slack/endpoint.rb +43 -0
  19. data/lib/slack/endpoint/api.rb +23 -0
  20. data/lib/slack/endpoint/auth.rb +19 -0
  21. data/lib/slack/endpoint/channels.rb +236 -0
  22. data/lib/slack/endpoint/chat.rb +86 -0
  23. data/lib/slack/endpoint/emoji.rb +19 -0
  24. data/lib/slack/endpoint/files.rb +100 -0
  25. data/lib/slack/endpoint/groups.rb +262 -0
  26. data/lib/slack/endpoint/im.rb +90 -0
  27. data/lib/slack/endpoint/mpim.rb +90 -0
  28. data/lib/slack/endpoint/oauth.rb +31 -0
  29. data/lib/slack/endpoint/pins.rb +64 -0
  30. data/lib/slack/endpoint/presence.rb +22 -0
  31. data/lib/slack/endpoint/reactions.rb +94 -0
  32. data/lib/slack/endpoint/search.rb +80 -0
  33. data/lib/slack/endpoint/stars.rb +65 -0
  34. data/lib/slack/endpoint/team.rb +57 -0
  35. data/lib/slack/endpoint/usergroups.rb +122 -0
  36. data/lib/slack/endpoint/users.rb +78 -0
  37. data/lib/slack/error.rb +19 -0
  38. data/lib/slack/request.rb +41 -0
  39. data/lib/slack/version.rb +3 -0
  40. data/slack.gemspec +38 -0
  41. data/spec/api_spec.rb +23 -0
  42. data/spec/auth_spec.rb +22 -0
  43. data/spec/channels_spec.rb +247 -0
  44. data/spec/spec_helper.rb +86 -0
  45. metadata +313 -0
@@ -0,0 +1,78 @@
1
+ # This file was auto-generated by lib/generators/tasks/generate.rb
2
+
3
+ module Slack
4
+ module Endpoint
5
+ module Users
6
+ #
7
+ # This method lets you find out information about a user's presence.
8
+ # Consult the presence documentation for more details.
9
+ #
10
+ # @option options [Object] :user
11
+ # User to get presence info on. Defaults to the authed user.
12
+ # @see https://api.slack.com/methods/users.getPresence
13
+ # @see https://github.com/aki017/slack-api-docs/blob/master/methods/users.getPresence.md
14
+ # @see https://github.com/aki017/slack-api-docs/blob/master/methods/users.getPresence.json
15
+ def users_getPresence(options={})
16
+ throw ArgumentError.new("Required arguments :user missing") if options[:user].nil?
17
+ options[:attachments] = options[:attachments].to_json if Hash === options[:attachments]
18
+ post("users.getPresence", options)
19
+ end
20
+
21
+ #
22
+ # This method returns information about a team member.
23
+ #
24
+ # @option options [Object] :user
25
+ # User to get info on
26
+ # @see https://api.slack.com/methods/users.info
27
+ # @see https://github.com/aki017/slack-api-docs/blob/master/methods/users.info.md
28
+ # @see https://github.com/aki017/slack-api-docs/blob/master/methods/users.info.json
29
+ def users_info(options={})
30
+ throw ArgumentError.new("Required arguments :user missing") if options[:user].nil?
31
+ options[:attachments] = options[:attachments].to_json if Hash === options[:attachments]
32
+ post("users.info", options)
33
+ end
34
+
35
+ #
36
+ # This method returns a list of all users in the team. This includes deleted/deactivated users.
37
+ #
38
+ # @option options [Object] :presence
39
+ # Whether to include presence data in the output
40
+ # @see https://api.slack.com/methods/users.list
41
+ # @see https://github.com/aki017/slack-api-docs/blob/master/methods/users.list.md
42
+ # @see https://github.com/aki017/slack-api-docs/blob/master/methods/users.list.json
43
+ def users_list(options={})
44
+ options[:attachments] = options[:attachments].to_json if Hash === options[:attachments]
45
+ post("users.list", options)
46
+ end
47
+
48
+ #
49
+ # This method lets the slack messaging server know that the authenticated user
50
+ # is currently active. Consult the presence documentation for
51
+ # more details.
52
+ #
53
+ # @see https://api.slack.com/methods/users.setActive
54
+ # @see https://github.com/aki017/slack-api-docs/blob/master/methods/users.setActive.md
55
+ # @see https://github.com/aki017/slack-api-docs/blob/master/methods/users.setActive.json
56
+ def users_setActive(options={})
57
+ options[:attachments] = options[:attachments].to_json if Hash === options[:attachments]
58
+ post("users.setActive", options)
59
+ end
60
+
61
+ #
62
+ # This method lets you set the calling user's manual presence.
63
+ # Consult the presence documentation for more details.
64
+ #
65
+ # @option options [Object] :presence
66
+ # Either auto or away
67
+ # @see https://api.slack.com/methods/users.setPresence
68
+ # @see https://github.com/aki017/slack-api-docs/blob/master/methods/users.setPresence.md
69
+ # @see https://github.com/aki017/slack-api-docs/blob/master/methods/users.setPresence.json
70
+ def users_setPresence(options={})
71
+ throw ArgumentError.new("Required arguments :presence missing") if options[:presence].nil?
72
+ options[:attachments] = options[:attachments].to_json if Hash === options[:attachments]
73
+ post("users.setPresence", options)
74
+ end
75
+
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,19 @@
1
+ module Slack
2
+ # Custom error class for rescuing from all Slack errors
3
+ class Error < StandardError; end
4
+
5
+ # Raised when Slack returns the HTTP status code 400
6
+ class BadRequest < Error; end
7
+
8
+ # Raised when Slack returns the HTTP status code 404
9
+ class NotFound < Error; end
10
+
11
+ # Raised when Slack returns the HTTP status code 500
12
+ class InternalServerError < Error; end
13
+
14
+ # Raised when Slack returns the HTTP status code 503
15
+ class ServiceUnavailable < Error; end
16
+
17
+ # Raised when a subscription payload hash is invalid
18
+ class InvalidSignature < Error; end
19
+ end
@@ -0,0 +1,41 @@
1
+ module Slack
2
+ # Defines HTTP request methods
3
+ module Request
4
+ # Perform an HTTP GET request
5
+ def get(path, options={})
6
+ request(:get, path, options)
7
+ end
8
+
9
+ # Perform an HTTP POST request
10
+ def post(path, options={})
11
+ request(:post, path, options)
12
+ end
13
+
14
+ # Perform an HTTP PUT request
15
+ def put(path, options={})
16
+ request(:put, path, options)
17
+ end
18
+
19
+ # Perform an HTTP DELETE request
20
+ def delete(path, options={})
21
+ request(:delete, path, options)
22
+ end
23
+
24
+ private
25
+
26
+ # Perform an HTTP request
27
+ def request(method, path, options)
28
+ options = options.merge(token: token)
29
+ response = connection.send(method) do |request|
30
+ case method
31
+ when :get, :delete
32
+ request.url(path, options)
33
+ when :post, :put
34
+ request.path = path
35
+ request.body = options unless options.empty?
36
+ end
37
+ end
38
+ return response.body
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,3 @@
1
+ module Slack
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,38 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "slack/version"
5
+
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "slack-web-api"
9
+ spec.version = Slack::VERSION
10
+ spec.authors = ["keydunov"]
11
+ spec.email = ["artyom.keydunov@gmail.com"]
12
+ spec.summary = %q{A Ruby wrapper for the Slack Web API}
13
+ spec.description = %q{A Ruby wrapper for the Slack Web API}
14
+ spec.homepage = "https://github.com/keydunov/slack-web-api"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.5"
23
+ spec.add_development_dependency "simplecov"
24
+ spec.add_development_dependency "coveralls"
25
+ spec.add_development_dependency "rspec"
26
+ spec.add_development_dependency "webmock"
27
+ spec.add_development_dependency "vcr"
28
+ spec.add_development_dependency "guard"
29
+ spec.add_development_dependency "guard-rspec"
30
+ spec.add_development_dependency "rake"
31
+ spec.add_development_dependency 'erubis', '~> 2.7.0'
32
+ spec.add_development_dependency "json-schema"
33
+ spec.add_development_dependency "pry"
34
+
35
+ spec.add_runtime_dependency "faraday", [">= 0.7", "< 0.10"]
36
+ spec.add_runtime_dependency "faraday_middleware", "~> 0.8"
37
+ spec.add_runtime_dependency "multi_json", ">= 1.0.3", "~> 1.0"
38
+ end
@@ -0,0 +1,23 @@
1
+ require_relative './spec_helper'
2
+
3
+ RSpec.describe Slack::Client, :vcr do
4
+ describe :api do
5
+ describe :test do
6
+ it "with valid token" do
7
+ expect(
8
+ valid_client.api_test
9
+ ).to valid_response
10
+ end
11
+
12
+ it "with extra arguments" do
13
+ extra = {
14
+ "foo" => "bar",
15
+ "hello" => "world"
16
+ }
17
+ expect(
18
+ valid_client.api_test(extra)["args"]
19
+ ).to include(extra)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ require_relative './spec_helper'
2
+
3
+ RSpec.describe Slack::Client, :vcr do
4
+ describe :auth do
5
+ describe :test do
6
+ it "with valid token" do
7
+ expect(
8
+ valid_client.auth_test
9
+ ).to valid_response
10
+ end
11
+
12
+ it "with invalid token" do
13
+ expect(
14
+ invalid_client.auth_test
15
+ ).to include({
16
+ "ok" => false,
17
+ "error" => "invalid_auth"
18
+ })
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,247 @@
1
+ require_relative './spec_helper'
2
+
3
+ RSpec.describe Slack::Client, :vcr do
4
+ describe :channels do
5
+ describe :archive do
6
+ it "without name" do
7
+ expect{valid_client.channels_archive}.to raise_error ArgumentError
8
+ end
9
+
10
+ it "with name" do
11
+ expect(
12
+ valid_client.channels_archive(channel: test_channel_id)
13
+ ).to include({
14
+ "ok" => true
15
+ })
16
+ end
17
+ end
18
+
19
+ describe :history do
20
+ it "without name" do
21
+ expect{valid_client.channels_history}.to raise_error ArgumentError
22
+ end
23
+
24
+ it "with name" do
25
+ expect(
26
+ valid_client.channels_history(channel: test_channel_id)
27
+ ).to include({
28
+ "ok" => true
29
+ })
30
+ end
31
+ end
32
+
33
+ describe :info do
34
+ it "without name" do
35
+ expect{valid_client.channels_info}.to raise_error ArgumentError
36
+ end
37
+
38
+ it "with name" do
39
+ expect(
40
+ valid_client.channels_info(channel: test_channel_id)
41
+ ).to include({
42
+ "ok" => true
43
+ })
44
+ end
45
+ end
46
+
47
+ describe :create do
48
+ it "without name" do
49
+ expect{valid_client.channels_create}.to raise_error ArgumentError
50
+ end
51
+
52
+ it "with test_channel_name" do
53
+ response = valid_client.channels_create name: test_channel_name
54
+
55
+ expect(response).to include({ "ok" => true })
56
+ expect(response["channel"]).to include({ "name" => test_channel_name })
57
+ end
58
+
59
+ it "with taken name" do
60
+ response = valid_client.channels_create name: "general"
61
+
62
+ expect(response).to include({
63
+ "ok" => false,
64
+ "error" => "name_taken"
65
+ })
66
+ end
67
+ end
68
+
69
+ describe :list do
70
+ it "with valid token" do
71
+ response = valid_client.channels_list
72
+
73
+ expect(response).to include({ "ok" => true })
74
+ end
75
+ end
76
+
77
+ describe :invite do
78
+ it "without arguments" do
79
+ expect{valid_client.channels_invite}.to raise_error ArgumentError
80
+ end
81
+
82
+ it "without argument(channel)" do
83
+ expect{valid_client.channels_invite(user: test_user_id)}.to raise_error ArgumentError
84
+ end
85
+
86
+ it "without argument(user)" do
87
+ expect{valid_client.channels_invite(channel: test_channel_id)}.to raise_error ArgumentError
88
+ end
89
+
90
+ it "with valid arguments" do
91
+ expect(
92
+ valid_client.channels_invite(user: another_user_id, channel: test_channel_id)
93
+ ).to include({
94
+ "ok" => true
95
+ })
96
+ end
97
+ end
98
+
99
+ describe :leave do
100
+ it "without argument" do
101
+ expect{valid_client.channels_leave}.to raise_error ArgumentError
102
+ end
103
+
104
+ it "with channel" do
105
+ expect(
106
+ valid_client.channels_leave(channel: test_channel_id)
107
+ ).to include({
108
+ "ok" => true
109
+ })
110
+ end
111
+ end
112
+
113
+ describe :join do
114
+ it "without :name" do
115
+ expect{valid_client.channels_join}.to raise_error ArgumentError
116
+ end
117
+
118
+ it "with :name" do
119
+ expect(
120
+ valid_client.channels_join(name: test_channel_name)
121
+ ).to include({
122
+ "ok" => true
123
+ })
124
+ end
125
+ end
126
+
127
+ describe :kick do
128
+ it "without arguments" do
129
+ expect{valid_client.channels_kick}.to raise_error ArgumentError
130
+ end
131
+ it "without :channel" do
132
+ expect{valid_client.channels_kick(name: another_user_id)}.to raise_error ArgumentError
133
+ end
134
+ it "without :name" do
135
+ expect{valid_client.channels_kick(channel: test_channel_id)}.to raise_error ArgumentError
136
+ end
137
+ it "with arguments" do
138
+ expect(
139
+ valid_client.channels_kick(user: another_user_id, channel: test_channel_id)
140
+ ).to include({
141
+ "ok" => true
142
+ })
143
+ end
144
+ end
145
+
146
+ describe :mark do
147
+ it "without arguments" do
148
+ expect{valid_client.channels_mark}.to raise_error ArgumentError
149
+ end
150
+
151
+ it "without ts" do
152
+ expect{valid_client.channels_mark(channel: test_channel_id)}.to raise_error ArgumentError
153
+ end
154
+
155
+ it "without channel" do
156
+ expect{valid_client.channels_mark(ts: 0)}.to raise_error ArgumentError
157
+ end
158
+ it "with argument" do
159
+ expect(
160
+ valid_client.channels_mark(channel: test_channel_id, ts: 0)
161
+ ).to include({
162
+ "ok" => true
163
+ })
164
+ end
165
+ end
166
+
167
+ describe :rename do
168
+ it "without arguments" do
169
+ expect{valid_client.channels_rename}.to raise_error ArgumentError
170
+ end
171
+
172
+ it "without channel" do
173
+ expect{valid_client.channels_rename(name: another_channel_name)}.to raise_error ArgumentError
174
+ end
175
+
176
+ it "without name" do
177
+ expect{valid_client.channels_rename(channel: test_channel_id)}.to raise_error ArgumentError
178
+ end
179
+
180
+ it "with name" do
181
+ expect(
182
+ valid_client.channels_rename(channel: test_channel_id, name: another_channel_name)
183
+ ).to include({
184
+ "ok" => true
185
+ })
186
+ end
187
+ end
188
+
189
+ describe :setPurpose do
190
+ it "without arguments" do
191
+ expect{valid_client.channels_setPurpose}.to raise_error ArgumentError
192
+ end
193
+
194
+ it "without channel" do
195
+ expect{valid_client.channels_setPurpose(purpose: "TestPurpose")}.to raise_error ArgumentError
196
+ end
197
+
198
+ it "without topic" do
199
+ expect{valid_client.channels_setPurpose(channel: test_channel_id)}.to raise_error ArgumentError
200
+ end
201
+
202
+ it "with arguments" do
203
+ expect(
204
+ valid_client.channels_setPurpose(channel: test_channel_id, purpose: "TestPurpose")
205
+ ).to include({
206
+ "ok" => true
207
+ })
208
+ end
209
+ end
210
+
211
+ describe :setTopic do
212
+ it "without arguments" do
213
+ expect{valid_client.channels_setTopic}.to raise_error ArgumentError
214
+ end
215
+
216
+ it "without channel" do
217
+ expect{valid_client.channels_setTopic(topic: "TestTopic")}.to raise_error ArgumentError
218
+ end
219
+
220
+ it "without topic" do
221
+ expect{valid_client.channels_setTopic(channel: test_channel_id)}.to raise_error ArgumentError
222
+ end
223
+
224
+ it "with arguments" do
225
+ expect(
226
+ valid_client.channels_setTopic(channel: test_channel_id, topic: "TestTopic")
227
+ ).to include({
228
+ "ok" => true
229
+ })
230
+ end
231
+ end
232
+
233
+ describe :unarchive do
234
+ it "without :channel" do
235
+ expect{valid_client.channels_join}.to raise_error ArgumentError
236
+ end
237
+
238
+ it "with :channel" do
239
+ expect(
240
+ valid_client.channels_unarchive(channel: test_channel_id)
241
+ ).to include({
242
+ "ok" => true
243
+ })
244
+ end
245
+ end
246
+ end
247
+ end