slack-web-api 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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