slack-ruby-client-bhe 0.5.4

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 (147) hide show
  1. checksums.yaml +17 -0
  2. data/.gitignore +4 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +6 -0
  6. data/.rubocop_todo.yml +78 -0
  7. data/.travis.yml +26 -0
  8. data/CHANGELOG.md +79 -0
  9. data/CONTRIBUTING.md +157 -0
  10. data/Gemfile +5 -0
  11. data/LICENSE.md +22 -0
  12. data/README.md +385 -0
  13. data/RELEASING.md +69 -0
  14. data/Rakefile +19 -0
  15. data/UPGRADING.md +26 -0
  16. data/bin/commands.rb +21 -0
  17. data/bin/commands/api.rb +14 -0
  18. data/bin/commands/auth.rb +12 -0
  19. data/bin/commands/channels.rb +149 -0
  20. data/bin/commands/chat.rb +47 -0
  21. data/bin/commands/dnd.rb +47 -0
  22. data/bin/commands/emoji.rb +12 -0
  23. data/bin/commands/files.rb +72 -0
  24. data/bin/commands/groups.rb +167 -0
  25. data/bin/commands/im.rb +53 -0
  26. data/bin/commands/mpim.rb +53 -0
  27. data/bin/commands/oauth.rb +16 -0
  28. data/bin/commands/pins.rb +37 -0
  29. data/bin/commands/reactions.rb +53 -0
  30. data/bin/commands/rtm.rb +15 -0
  31. data/bin/commands/search.rb +40 -0
  32. data/bin/commands/stars.rb +37 -0
  33. data/bin/commands/team.rb +32 -0
  34. data/bin/commands/usergroups.rb +73 -0
  35. data/bin/commands/users.rb +57 -0
  36. data/bin/slack +50 -0
  37. data/examples/hi_real_time/Gemfile +5 -0
  38. data/examples/hi_real_time/hi.gif +0 -0
  39. data/examples/hi_real_time/hi.rb +32 -0
  40. data/examples/hi_real_time_and_web/Gemfile +5 -0
  41. data/examples/hi_real_time_and_web/hi.gif +0 -0
  42. data/examples/hi_real_time_and_web/hi.rb +24 -0
  43. data/examples/hi_real_time_async/Gemfile +5 -0
  44. data/examples/hi_real_time_async/hi.rb +29 -0
  45. data/examples/hi_web/Gemfile +3 -0
  46. data/examples/hi_web/hi.gif +0 -0
  47. data/examples/hi_web/hi.rb +12 -0
  48. data/examples/new_ticket/Gemfile +3 -0
  49. data/examples/new_ticket/new_ticket.rb +25 -0
  50. data/lib/slack-ruby-client.rb +29 -0
  51. data/lib/slack.rb +1 -0
  52. data/lib/slack/config.rb +21 -0
  53. data/lib/slack/messages/formatting.rb +30 -0
  54. data/lib/slack/real_time/api/message.rb +20 -0
  55. data/lib/slack/real_time/api/message_id.rb +14 -0
  56. data/lib/slack/real_time/api/ping.rb +16 -0
  57. data/lib/slack/real_time/api/typing.rb +17 -0
  58. data/lib/slack/real_time/client.rb +152 -0
  59. data/lib/slack/real_time/concurrency.rb +8 -0
  60. data/lib/slack/real_time/concurrency/celluloid.rb +93 -0
  61. data/lib/slack/real_time/concurrency/eventmachine.rb +39 -0
  62. data/lib/slack/real_time/config.rb +55 -0
  63. data/lib/slack/real_time/socket.rb +81 -0
  64. data/lib/slack/version.rb +3 -0
  65. data/lib/slack/web/api/endpoints.rb +53 -0
  66. data/lib/slack/web/api/endpoints/api.rb +24 -0
  67. data/lib/slack/web/api/endpoints/auth.rb +20 -0
  68. data/lib/slack/web/api/endpoints/channels.rb +220 -0
  69. data/lib/slack/web/api/endpoints/chat.rb +91 -0
  70. data/lib/slack/web/api/endpoints/dnd.rb +64 -0
  71. data/lib/slack/web/api/endpoints/emoji.rb +20 -0
  72. data/lib/slack/web/api/endpoints/files.rb +108 -0
  73. data/lib/slack/web/api/endpoints/groups.rb +247 -0
  74. data/lib/slack/web/api/endpoints/im.rb +85 -0
  75. data/lib/slack/web/api/endpoints/mpim.rb +84 -0
  76. data/lib/slack/web/api/endpoints/oauth.rb +32 -0
  77. data/lib/slack/web/api/endpoints/pins.rb +64 -0
  78. data/lib/slack/web/api/endpoints/presence.rb +23 -0
  79. data/lib/slack/web/api/endpoints/reactions.rb +89 -0
  80. data/lib/slack/web/api/endpoints/rtm.rb +27 -0
  81. data/lib/slack/web/api/endpoints/search.rb +65 -0
  82. data/lib/slack/web/api/endpoints/stars.rb +61 -0
  83. data/lib/slack/web/api/endpoints/team.rb +47 -0
  84. data/lib/slack/web/api/endpoints/usergroups.rb +113 -0
  85. data/lib/slack/web/api/endpoints/users.rb +73 -0
  86. data/lib/slack/web/api/error.rb +14 -0
  87. data/lib/slack/web/api/mixins.rb +3 -0
  88. data/lib/slack/web/api/mixins/channels.id.json +20 -0
  89. data/lib/slack/web/api/mixins/channels.id.rb +26 -0
  90. data/lib/slack/web/api/mixins/groups.id.json +20 -0
  91. data/lib/slack/web/api/mixins/groups.id.rb +26 -0
  92. data/lib/slack/web/api/mixins/users.id.json +20 -0
  93. data/lib/slack/web/api/mixins/users.id.rb +26 -0
  94. data/lib/slack/web/api/patches/chat.1.text-attachments-required.patch +13 -0
  95. data/lib/slack/web/api/patches/chat.2.attachments-json.patch +17 -0
  96. data/lib/slack/web/api/schema/group.json +14 -0
  97. data/lib/slack/web/api/schema/method.json +45 -0
  98. data/lib/slack/web/api/tasks/generate.rake +61 -0
  99. data/lib/slack/web/api/templates/command.erb +34 -0
  100. data/lib/slack/web/api/templates/commands.erb +5 -0
  101. data/lib/slack/web/api/templates/endpoints.erb +21 -0
  102. data/lib/slack/web/api/templates/method.erb +49 -0
  103. data/lib/slack/web/client.rb +28 -0
  104. data/lib/slack/web/config.rb +41 -0
  105. data/lib/slack/web/faraday/connection.rb +29 -0
  106. data/lib/slack/web/faraday/request.rb +39 -0
  107. data/lib/slack/web/faraday/response/raise_error.rb +15 -0
  108. data/lib/slack_ruby_client.rb +1 -0
  109. data/screenshots/register-bot.png +0 -0
  110. data/slack-ruby-client.gemspec +31 -0
  111. data/slack.png +0 -0
  112. data/spec/fixtures/slack/web/429_error.yml +83 -0
  113. data/spec/fixtures/slack/web/auth_test_error.yml +48 -0
  114. data/spec/fixtures/slack/web/auth_test_success.yml +57 -0
  115. data/spec/fixtures/slack/web/channels_info.yml +46 -0
  116. data/spec/fixtures/slack/web/groups_info.yml +43 -0
  117. data/spec/fixtures/slack/web/rtm_start.yml +73 -0
  118. data/spec/fixtures/slack/web/users_info.yml +130 -0
  119. data/spec/fixtures/slack/web/users_list.yml +72 -0
  120. data/spec/integration/integration_spec.rb +107 -0
  121. data/spec/slack/config_spec.rb +14 -0
  122. data/spec/slack/messages/formatting_spec.rb +43 -0
  123. data/spec/slack/real_time/api/message_spec.rb +15 -0
  124. data/spec/slack/real_time/api/ping_spec.rb +15 -0
  125. data/spec/slack/real_time/api/typing_spec.rb +15 -0
  126. data/spec/slack/real_time/client_spec.rb +198 -0
  127. data/spec/slack/real_time/concurrency/celluloid_spec.rb +58 -0
  128. data/spec/slack/real_time/concurrency/eventmachine_spec.rb +49 -0
  129. data/spec/slack/slack_spec.rb +58 -0
  130. data/spec/slack/version_spec.rb +7 -0
  131. data/spec/slack/web/api/endpoints/auth_spec.rb +20 -0
  132. data/spec/slack/web/api/endpoints/channels_spec.rb +11 -0
  133. data/spec/slack/web/api/endpoints/chat_spec.rb +33 -0
  134. data/spec/slack/web/api/endpoints/groups_spec.rb +11 -0
  135. data/spec/slack/web/api/endpoints/users_spec.rb +17 -0
  136. data/spec/slack/web/api/error_spec.rb +14 -0
  137. data/spec/slack/web/api/mixins/channels_spec.rb +31 -0
  138. data/spec/slack/web/api/mixins/groups_spec.rb +31 -0
  139. data/spec/slack/web/api/mixins/users_spec.rb +31 -0
  140. data/spec/slack/web/client_spec.rb +134 -0
  141. data/spec/spec_helper.rb +14 -0
  142. data/spec/support/queue_with_timeout.rb +34 -0
  143. data/spec/support/real_time/concurrency/mock.rb +31 -0
  144. data/spec/support/real_time/connected_client.rb +16 -0
  145. data/spec/support/token.rb +10 -0
  146. data/spec/support/vcr.rb +8 -0
  147. metadata +392 -0
@@ -0,0 +1,32 @@
1
+ # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
2
+
3
+ desc 'Team methods.'
4
+ command 'team' do |g|
5
+ g.desc 'This method is used to get the access logs for users on a team.'
6
+ g.long_desc %( This method is used to get the access logs for users on a team. )
7
+ g.command 'accessLogs' do |c|
8
+ c.action do |_global_options, options, _args|
9
+ puts JSON.dump($client.team_accessLogs(options))
10
+ end
11
+ end
12
+
13
+ g.desc 'This method provides information about your team.'
14
+ g.long_desc %( This method provides information about your team. )
15
+ g.command 'info' do |c|
16
+ c.action do |_global_options, options, _args|
17
+ puts JSON.dump($client.team_info(options))
18
+ end
19
+ end
20
+
21
+ g.desc 'This method lists the integration activity logs for a team, including when integrations are added, modified and removed. This method can only be called by Admins.'
22
+ g.long_desc %( This method lists the integration activity logs for a team, including when integrations are added, modified and removed. This method can only be called by Admins. )
23
+ g.command 'integrationLogs' do |c|
24
+ c.flag 'service_id', desc: 'Filter logs to this service. Defaults to all logs.'
25
+ c.flag 'app_id', desc: 'Filter logs to this Slack app. Defaults to all logs.'
26
+ c.flag 'user', desc: "Filter logs generated by this user's actions. Defaults to all logs."
27
+ c.flag 'change_type', desc: 'Filter logs with this change type. Defaults to all logs.'
28
+ c.action do |_global_options, options, _args|
29
+ puts JSON.dump($client.team_integrationLogs(options))
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,73 @@
1
+ # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
2
+
3
+ desc "Get info on your team's user groups."
4
+ command 'usergroups' do |g|
5
+ g.desc 'This method is used to create a user group.'
6
+ g.long_desc %( This method is used to create a user group. )
7
+ g.command 'create' do |c|
8
+ c.flag 'name', desc: 'A name for the user group. Must be unique among user groups.'
9
+ c.flag 'handle', desc: 'A mention handle. Must be unique among channels, users and user groups.'
10
+ c.flag 'description', desc: 'A short description of the user group.'
11
+ c.flag 'channels', desc: 'A comma separated string of encoded channel IDs for which the user group uses as a default.'
12
+ c.flag 'include_count', desc: 'Include the number of users in each user group.'
13
+ c.action do |_global_options, options, _args|
14
+ puts JSON.dump($client.usergroups_create(options))
15
+ end
16
+ end
17
+
18
+ g.desc 'This method disables an existing user group.'
19
+ g.long_desc %( This method disables an existing user group. )
20
+ g.command 'disable' do |c|
21
+ c.flag 'usergroup', desc: 'The encoded ID of the user group to disable.'
22
+ c.flag 'include_count', desc: 'Include the number of users in the user group.'
23
+ c.action do |_global_options, options, _args|
24
+ puts JSON.dump($client.usergroups_disable(options))
25
+ end
26
+ end
27
+
28
+ g.desc 'This method enables a user group which was previously disabled.'
29
+ g.long_desc %( This method enables a user group which was previously disabled. )
30
+ g.command 'enable' do |c|
31
+ c.flag 'usergroup', desc: 'The encoded ID of the user group to enable.'
32
+ c.flag 'include_count', desc: 'Include the number of users in the user group.'
33
+ c.action do |_global_options, options, _args|
34
+ puts JSON.dump($client.usergroups_enable(options))
35
+ end
36
+ end
37
+
38
+ g.desc 'This method returns a list of all user groups in the team. This can optionally include disabled user groups.'
39
+ g.long_desc %( This method returns a list of all user groups in the team. This can optionally include disabled user groups. )
40
+ g.command 'list' do |c|
41
+ c.flag 'include_disabled', desc: 'Include disabled user groups.'
42
+ c.flag 'include_count', desc: 'Include the number of users in each user group.'
43
+ c.flag 'include_users', desc: 'Include the list of users for each user group.'
44
+ c.action do |_global_options, options, _args|
45
+ puts JSON.dump($client.usergroups_list(options))
46
+ end
47
+ end
48
+
49
+ g.desc 'This method updates the properties of an existing user group.'
50
+ g.long_desc %( This method updates the properties of an existing user group. )
51
+ g.command 'update' do |c|
52
+ c.flag 'usergroup', desc: 'The encoded ID of the user group to update.'
53
+ c.flag 'name', desc: 'A name for the user group. Must be unique among user groups.'
54
+ c.flag 'handle', desc: 'A mention handle. Must be unique among channels, users and user groups.'
55
+ c.flag 'description', desc: 'A short description of the user group.'
56
+ c.flag 'channels', desc: 'A comma separated string of encoded channel IDs for which the user group uses as a default.'
57
+ c.flag 'include_count', desc: 'Include the number of users in the user group.'
58
+ c.action do |_global_options, options, _args|
59
+ puts JSON.dump($client.usergroups_update(options))
60
+ end
61
+ end
62
+
63
+ g.desc 'This method updates the list of users that belong to a user group. This method replaces all users in a user group with the list of users provided in the users parameter.'
64
+ g.long_desc %( This method updates the list of users that belong to a user group. This method replaces all users in a user group with the list of users provided in the users parameter. )
65
+ g.command 'users' do |c|
66
+ c.flag 'usergroup', desc: 'The encoded ID of the user group to update.'
67
+ c.flag 'users', desc: 'A comma separated string of encoded user IDs that represent the entire list of users for the user group.'
68
+ c.flag 'include_count', desc: 'Include the number of users in the user group.'
69
+ c.action do |_global_options, options, _args|
70
+ puts JSON.dump($client.usergroups_users(options))
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,57 @@
1
+ # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
2
+
3
+ desc 'Get info on members of your Slack team.'
4
+ command 'users' do |g|
5
+ g.desc "This method lets you find out information about a user's presence."
6
+ g.long_desc %( This method lets you find out information about a user's presence. Consult the presence documentation for more details. )
7
+ g.command 'getPresence' do |c|
8
+ c.flag 'user', desc: 'User to get presence info on. Defaults to the authed user.'
9
+ c.action do |_global_options, options, _args|
10
+ puts JSON.dump($client.users_getPresence(options))
11
+ end
12
+ end
13
+
14
+ g.desc 'This method returns information about a team member.'
15
+ g.long_desc %( This method returns information about a team member. )
16
+ g.command 'info' do |c|
17
+ c.flag 'user', desc: 'User to get info on.'
18
+ c.action do |_global_options, options, _args|
19
+ puts JSON.dump($client.users_info(options))
20
+ end
21
+ end
22
+
23
+ g.desc 'This method returns a list of all users in the team. This includes deleted/deactivated users.'
24
+ g.long_desc %( This method returns a list of all users in the team. This includes deleted/deactivated users. )
25
+ g.command 'list' do |c|
26
+ c.flag 'presence', desc: 'Whether to include presence data in the output.'
27
+ c.action do |_global_options, options, _args|
28
+ puts JSON.dump($client.users_list(options))
29
+ end
30
+ end
31
+
32
+ g.desc 'This method lets the slack messaging server know that the authenticated user'
33
+ g.long_desc %( This method lets the slack messaging server know that the authenticated user is currently active. Consult the presence documentation for more details. )
34
+ g.command 'setActive' do |c|
35
+ c.action do |_global_options, options, _args|
36
+ puts JSON.dump($client.users_setActive(options))
37
+ end
38
+ end
39
+
40
+ g.desc "This method lets you set the calling user's manual presence."
41
+ g.long_desc %( This method lets you set the calling user's manual presence. Consult the presence documentation for more details. )
42
+ g.command 'setPresence' do |c|
43
+ c.flag 'presence', desc: 'Either auto or away.'
44
+ c.action do |_global_options, options, _args|
45
+ puts JSON.dump($client.users_setPresence(options))
46
+ end
47
+ end
48
+
49
+ g.desc 'This method returns the ID of a team user.'
50
+ g.long_desc %( This method returns the ID of a team user. )
51
+ g.command 'id' do |c|
52
+ c.flag 'user', desc: 'User to get ID for, prefixed with @.'
53
+ c.action do |_global_options, options, _args|
54
+ puts JSON.dump($client.users_id(options))
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'gli'
4
+ require 'slack-ruby-client'
5
+
6
+ include GLI::App
7
+
8
+ program_desc 'Slack client.'
9
+
10
+ default_command :help
11
+
12
+ switch [:d, :debug], desc: 'Enable debug-level logging.', default_value: false
13
+ flag [:t, 'slack-api-token'], desc: 'Slack API token.', default_value: ENV['SLACK_API_TOKEN']
14
+ flag ['vcr-cassette-name'], desc: 'Offline VCR cassette.'
15
+
16
+ pre do |global_options, _command, options, _args|
17
+ # global Slack configuration
18
+ Slack.config.token = global_options['slack-api-token']
19
+ help_now! 'Set Slack API token via --slack-api-token or SLACK_API_TOKEN.' unless Slack.config.token && Slack.config.token.length > 0
20
+
21
+ if global_options['debug']
22
+ require 'logger'
23
+ logger = Logger.new(STDOUT)
24
+ logger.level = Logger::DEBUG
25
+ Slack::Web::Client.config.logger = logger
26
+ end
27
+
28
+ $client = Slack::Web::Client.new
29
+
30
+ # Offline VCR cassette
31
+ if global_options['vcr-cassette-name']
32
+ require 'vcr'
33
+ VCR.configure do |config|
34
+ config.cassette_library_dir = 'spec/fixtures/slack'
35
+ config.hook_into :webmock
36
+ config.default_cassette_options = { record: :new_episodes }
37
+ end
38
+ VCR.insert_cassette global_options['vcr-cassette-name']
39
+ end
40
+
41
+ # remove any nil values from options
42
+ options.select! { |_k, v| v }
43
+
44
+ true
45
+ end
46
+
47
+ $LOAD_PATH.push File.expand_path('..', __FILE__)
48
+ require 'commands'
49
+
50
+ exit run(ARGV)
@@ -0,0 +1,5 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'slack-ruby-client', path: '../..'
4
+
5
+ gem 'celluloid-io'
@@ -0,0 +1,32 @@
1
+ require 'slack-ruby-client'
2
+
3
+ Slack.configure do |config|
4
+ config.token = ENV['SLACK_API_TOKEN']
5
+ fail 'Missing ENV[SLACK_API_TOKEN]!' unless config.token
6
+ end
7
+
8
+ client = Slack::RealTime::Client.new
9
+
10
+ client.on :hello do
11
+ puts "Successfully connected, welcome '#{client.self['name']}' to the '#{client.team['name']}' team at https://#{client.team['domain']}.slack.com."
12
+ end
13
+
14
+ client.on :message do |data|
15
+ puts data
16
+
17
+ client.typing channel: data['channel']
18
+
19
+ case data['text']
20
+ when 'bot hi' then
21
+ client.message channel: data['channel'], text: "Hi <@#{data['user']}>!"
22
+ when /^bot/ then
23
+ client.message channel: data['channel'], text: "Sorry <@#{data['user']}>, what?"
24
+ end
25
+ end
26
+
27
+ client.on :close do |_data|
28
+ puts 'Connection closed, exiting.'
29
+ EM.stop
30
+ end
31
+
32
+ client.start!
@@ -0,0 +1,5 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'slack-ruby-client', path: '../..'
4
+
5
+ gem 'faye-websocket'
@@ -0,0 +1,24 @@
1
+ require 'slack-ruby-client'
2
+
3
+ Slack.configure do |config|
4
+ config.token = ENV['SLACK_API_TOKEN']
5
+ fail 'Missing ENV[SLACK_API_TOKEN]!' unless config.token
6
+ end
7
+
8
+ client = Slack::RealTime::Client.new
9
+
10
+ client.on :hello do
11
+ puts "Successfully connected, welcome '#{client.self['name']}' to the '#{client.team['name']}' team at https://#{client.team['domain']}.slack.com."
12
+ end
13
+
14
+ client.on :message do |data|
15
+ puts data
16
+ case data['text']
17
+ when 'bot hi' then
18
+ client.web_client.chat_postMessage channel: data['channel'], text: "Hi <@#{data['user']}>!"
19
+ when /^bot/ then
20
+ client.web_client.chat_postMessage channel: data['channel'], text: "Sorry <@#{data['user']}>, what?"
21
+ end
22
+ end
23
+
24
+ client.start!
@@ -0,0 +1,5 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'slack-ruby-client', path: '../..'
4
+
5
+ gem 'faye-websocket'
@@ -0,0 +1,29 @@
1
+ require 'slack-ruby-client'
2
+
3
+ Slack.configure do |config|
4
+ config.token = ENV['SLACK_API_TOKEN']
5
+ fail 'Missing ENV[SLACK_API_TOKEN]!' unless config.token
6
+ end
7
+
8
+ client = Slack::RealTime::Client.new
9
+
10
+ client.on :hello do
11
+ puts "Successfully connected, welcome '#{client.self['name']}' to the '#{client.team['name']}' team at https://#{client.team['domain']}.slack.com."
12
+ end
13
+
14
+ client.on :message do |data|
15
+ puts data
16
+
17
+ client.typing channel: data['channel']
18
+
19
+ case data['text']
20
+ when 'bot hi' then
21
+ client.message channel: data['channel'], text: "Hi <@#{data['user']}>!"
22
+ when /^bot/ then
23
+ client.message channel: data['channel'], text: "Sorry <@#{data['user']}>, what?"
24
+ end
25
+ end
26
+
27
+ EM.run do
28
+ client.start_async
29
+ end
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'slack-ruby-client', path: '../..'
Binary file
@@ -0,0 +1,12 @@
1
+ require 'slack-ruby-client'
2
+
3
+ Slack.configure do |config|
4
+ config.token = ENV['SLACK_API_TOKEN']
5
+ fail 'Missing ENV[SLACK_API_TOKEN]!' unless config.token
6
+ end
7
+
8
+ client = Slack::Web::Client.new
9
+
10
+ client.auth_test
11
+
12
+ client.chat_postMessage(channel: '#general', text: 'Hello World', as_user: true)
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'slack-ruby-client', path: '../..'
@@ -0,0 +1,25 @@
1
+ require 'slack-ruby-client'
2
+
3
+ Slack.configure do |config|
4
+ config.token = ENV['SLACK_API_TOKEN']
5
+ fail 'Missing ENV[SLACK_API_TOKEN]!' unless config.token
6
+ end
7
+
8
+ client = Slack::Web::Client.new
9
+
10
+ client.auth_test
11
+
12
+ client.chat_postMessage(
13
+ channel: '#general',
14
+ as_user: true,
15
+ attachments: [
16
+ {
17
+ fallback: "Ticket #1943: Can't rest my password - https://groove.hq/path/to/ticket/1943",
18
+ pretext: 'New ticket from Andrea Lee',
19
+ title: "Ticket #1943: Can't reset my password",
20
+ title_link: 'https://groove.hq/path/to/ticket/1943',
21
+ text: 'Help! I tried to reset my password but nothing happened!',
22
+ color: '#7CD197'
23
+ }
24
+ ]
25
+ )
@@ -0,0 +1,29 @@
1
+ require 'slack/version'
2
+ require 'slack/config'
3
+
4
+ # Messages
5
+ require 'slack/messages/formatting'
6
+
7
+ # Web API
8
+ require 'faraday'
9
+ require 'faraday_middleware'
10
+ require 'json'
11
+ require 'logger'
12
+ require 'slack/web/config'
13
+ require 'slack/web/api/error'
14
+ require 'slack/web/faraday/response/raise_error'
15
+ require 'slack/web/faraday/connection'
16
+ require 'slack/web/faraday/request'
17
+ require 'slack/web/api/mixins'
18
+ require 'slack/web/api/endpoints'
19
+ require 'slack/web/client'
20
+
21
+ # RealTime API
22
+ require 'slack/real_time/concurrency'
23
+ require 'slack/real_time/socket'
24
+ require 'slack/real_time/api/message_id'
25
+ require 'slack/real_time/api/ping'
26
+ require 'slack/real_time/api/message'
27
+ require 'slack/real_time/api/typing'
28
+ require 'slack/real_time/config'
29
+ require 'slack/real_time/client'
@@ -0,0 +1 @@
1
+ require 'slack-ruby-client'
@@ -0,0 +1,21 @@
1
+ module Slack
2
+ module Config
3
+ extend self
4
+
5
+ attr_accessor :token
6
+
7
+ def reset
8
+ self.token = nil
9
+ end
10
+ end
11
+
12
+ class << self
13
+ def configure
14
+ block_given? ? yield(Config) : Config
15
+ end
16
+
17
+ def config
18
+ Config
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+ module Slack
3
+ module Messages
4
+ module Formatting
5
+ class << self
6
+ #
7
+ # Unescape a message.
8
+ # @see https://api.slack.com/docs/formatting
9
+ #
10
+ def unescape(message)
11
+ CGI.unescapeHTML(message.gsub(/[“”]/, '"')
12
+ .gsub(/[‘’]/, "'")
13
+ .gsub(/<(?<sign>[?@#!]?)(?<dt>.*?)>/) do |match|
14
+ sign = $~[:sign]
15
+ dt = $~[:dt]
16
+ rhs = dt.split('|', 2).last
17
+ case sign
18
+ when '@', '!'
19
+ "@#{rhs}"
20
+ when '#'
21
+ "##{rhs}"
22
+ else
23
+ rhs
24
+ end
25
+ end)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end