slack.rb 0.0.4 → 0.0.5
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.
- checksums.yaml +4 -4
- data/.travis.yml +10 -0
- data/README.md +38 -1
- data/lib/slack.rb +27 -42
- data/lib/slack/client.rb +21 -18
- data/lib/slack/configurable.rb +49 -0
- data/lib/slack/connection.rb +4 -20
- data/lib/slack/default.rb +100 -0
- data/lib/slack/payload.rb +2 -2
- data/lib/slack/version.rb +1 -1
- data/spec/cassettes/Slack_Client/_channels/returns_all_channels.json +1 -1
- data/spec/cassettes/Slack_Client/_post_message/posts_a_message_to_one_channel.json +1 -1
- data/spec/cassettes/Slack_Client/_post_message/returns_channel_not_found_error.json +1 -1
- data/spec/cassettes/Slack_Client/when_making_requests/sets_a_custom_user_agent_for_GET_request.json +1 -0
- data/spec/cassettes/Slack_Client/when_making_requests/sets_a_custom_user_agent_for_POST_request.json +1 -0
- data/spec/cassettes/Slack_Client/when_making_requests/sets_a_default_user_agent.json +1 -0
- data/spec/slack/client_spec.rb +109 -14
- data/spec/slack/payload_spec.rb +83 -0
- data/spec/slack_spec.rb +17 -0
- data/spec/spec_helper.rb +29 -5
- metadata +15 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cac3153d08a4736993d769c13801392302e7c0c4
|
4
|
+
data.tar.gz: bb41359000b47d37ad0583d50bd51a54df5bcba9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f02be327a9c01e1c6cc70e4a86e3b4b8e2ccdb33623aee85e1e8146e313edf313ef56ec3afa10855ea6966d5d96a0b9f6f743428b602c40c9855beb4f121916
|
7
|
+
data.tar.gz: 29e6e54d702364dfddf9a7606daede9227c9c705a5df0c2525c13c974ffedaf774aff3c59bd197c79fecec43ea47e510055a700d0bba1fa6b7fcf51c045ce2fc
|
data/.travis.yml
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 2.0.0
|
4
|
+
- 1.9.3
|
5
|
+
script: ./script/cibuild
|
6
|
+
env:
|
7
|
+
- SLACK_TEST_TOKEN="xoxp-2305382422-2305382424-2320625597-8dc14b" SLACK_TEST_TEAM="netflower"
|
8
|
+
notifications:
|
9
|
+
slack:
|
10
|
+
secure: MoVXtQqiV/9IEWZcaVB4sF/oEoPWqXWu6fOaxt0hFYktEXMqiTQEeL+a9lbqH06F/Xfb9oH+asC5IPRugcxg9nSY48IV+cvVikPCAQEfe6FffNpAYTlnWArINAOf5Ad6dvInvT9qsDYjA5Bmb+nzndCfrE5qluvS0Nxz3Gk7mQA=
|
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
Ruby toolkit for working with the Slack API
|
4
4
|
|
5
|
+
[](https://travis-ci.org/netflower/slack.rb)
|
6
|
+
[](https://codeclimate.com/github/netflower/slack.rb)
|
5
7
|
## Installation
|
6
8
|
|
7
9
|
Add this line to your application's Gemfile:
|
@@ -22,13 +24,48 @@ Or install it yourself as:
|
|
22
24
|
|
23
25
|
```ruby
|
24
26
|
# Provide authentication credentials
|
25
|
-
client = Slack::Client.new(
|
27
|
+
client = Slack::Client.new(team: 'netflower', token: 'xxxx-xxxxxxxxx-xxxx')
|
26
28
|
# Post a message
|
27
29
|
client.post_message("May the force be with you", "yoda-quotes")
|
28
30
|
# List all channels
|
29
31
|
client.channels
|
30
32
|
```
|
31
33
|
|
34
|
+
## Configuration and defaults
|
35
|
+
|
36
|
+
### Configuring module defaults
|
37
|
+
|
38
|
+
Every writable attribute in {Slack::Configurable} can be set one at a time:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
Slack.api_endpoint = 'https://slack.dev/api'
|
42
|
+
Slack.default_channel = '#lol-cats'
|
43
|
+
Slack.default_username = 'Yoda'
|
44
|
+
```
|
45
|
+
|
46
|
+
or in batch:
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
Slack.configure do |c|
|
50
|
+
c.api_endpoint = 'https://slack.dev/api'
|
51
|
+
c.default_channel = '#lol-cats'
|
52
|
+
c.default_username = 'Yoda'
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
56
|
+
### Using ENV variables
|
57
|
+
|
58
|
+
Default configuration values are specified in {Slack::Default}. Many
|
59
|
+
attributes will look for a default value from the ENV before returning
|
60
|
+
Slack's default.
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
# Given $SLACK_API_ENDPOINT is "https://slack.dev/api"
|
64
|
+
Slack.api_endpoint
|
65
|
+
|
66
|
+
# => "https://slack.dev/api"
|
67
|
+
```
|
68
|
+
|
32
69
|
## Contributing
|
33
70
|
|
34
71
|
1. Fork it ( http://github.com/<my-github-username>/slack/fork )
|
data/lib/slack.rb
CHANGED
@@ -1,47 +1,32 @@
|
|
1
|
-
require
|
1
|
+
require 'slack/client'
|
2
|
+
require 'slack/default'
|
2
3
|
|
3
4
|
module Slack
|
4
|
-
require 'slack/response/raise_error'
|
5
|
-
require "slack/error"
|
6
|
-
require "slack/connection"
|
7
|
-
require "slack/payload"
|
8
|
-
require "slack/client"
|
9
5
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
def user_agent
|
34
|
-
ENV['SLACK_USER_AGENT'] || USER_AGENT
|
35
|
-
end
|
36
|
-
|
37
|
-
# Default options for Faraday::Connection
|
38
|
-
# @return [Hash]
|
39
|
-
def connection_options
|
40
|
-
{
|
41
|
-
:headers => {
|
42
|
-
:accept => default_media_type,
|
43
|
-
:user_agent => user_agent
|
44
|
-
}
|
45
|
-
}
|
6
|
+
class << self
|
7
|
+
include Slack::Configurable
|
8
|
+
|
9
|
+
# API client based on configured options {Configurable}
|
10
|
+
#
|
11
|
+
# @return [Slack::Client] API wrapper
|
12
|
+
def client
|
13
|
+
@client = Slack::Client.new(options) unless defined?(@client) && @client.same_options?(options)
|
14
|
+
@client
|
15
|
+
end
|
16
|
+
|
17
|
+
# see: http://robots.thoughtbot.com/always-define-respond-to-missing-when-overriding
|
18
|
+
# @private
|
19
|
+
def respond_to_missing?(method_name, include_private=false)
|
20
|
+
client.respond_to?(method_name, include_private)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def method_missing(method_name, *args, &block)
|
26
|
+
return super unless client.respond_to?(method_name)
|
27
|
+
client.send(method_name, *args, &block)
|
28
|
+
end
|
46
29
|
end
|
47
30
|
end
|
31
|
+
|
32
|
+
Slack.setup
|
data/lib/slack/client.rb
CHANGED
@@ -1,17 +1,24 @@
|
|
1
1
|
require "json"
|
2
2
|
require "faraday"
|
3
|
+
require 'slack/configurable'
|
4
|
+
require "slack/error"
|
5
|
+
require "slack/connection"
|
6
|
+
require "slack/payload"
|
3
7
|
|
4
8
|
module Slack
|
5
9
|
class Client
|
10
|
+
include Slack::Configurable
|
6
11
|
include Slack::Connection
|
7
12
|
|
8
|
-
def initialize(
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
+
def initialize(options = {})
|
14
|
+
# Use options passed in, but fall back to module defaults
|
15
|
+
Slack::Configurable.keys.each do |key|
|
16
|
+
instance_variable_set(:"@#{key}", options[key] || Slack.instance_variable_get(:"@#{key}"))
|
17
|
+
end
|
18
|
+
end
|
13
19
|
|
14
|
-
|
20
|
+
def same_options?(opts)
|
21
|
+
opts.hash == options.hash
|
15
22
|
end
|
16
23
|
|
17
24
|
def post_message(text, channel, options = {})
|
@@ -22,7 +29,8 @@ module Slack
|
|
22
29
|
token: @token
|
23
30
|
)
|
24
31
|
|
25
|
-
post('chat.postMessage', payload)
|
32
|
+
response = post('chat.postMessage', payload)
|
33
|
+
valid_response?(response)
|
26
34
|
end
|
27
35
|
|
28
36
|
def channels
|
@@ -31,19 +39,14 @@ module Slack
|
|
31
39
|
|
32
40
|
private
|
33
41
|
|
34
|
-
def validate_arguments
|
35
|
-
raise ArgumentError, "Team name required" if @team.nil?
|
36
|
-
raise ArgumentError, "Token required" if @token.nil?
|
37
|
-
raise ArgumentError, "Invalid team name" unless valid_team_name?
|
38
|
-
end
|
39
|
-
|
40
|
-
def valid_team_name?
|
41
|
-
@team =~ /^[a-z\d\-]+$/ ? true : false
|
42
|
-
end
|
43
|
-
|
44
42
|
def _channels
|
45
43
|
response = get('channels.list')
|
46
|
-
response['channels']
|
44
|
+
JSON.parse(response.body)['channels']
|
45
|
+
end
|
46
|
+
|
47
|
+
def valid_response?(response)
|
48
|
+
body = JSON.parse(response.body)
|
49
|
+
["true", 1].include? body['ok']
|
47
50
|
end
|
48
51
|
end
|
49
52
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Slack
|
2
|
+
|
3
|
+
module Configurable
|
4
|
+
|
5
|
+
attr_accessor :token, :team, :api_endpoint, :default_media_type,
|
6
|
+
:user_agent, :default_channel, :default_username,
|
7
|
+
:connection_options, :middleware
|
8
|
+
attr_writer :api_endpoint
|
9
|
+
|
10
|
+
class << self
|
11
|
+
|
12
|
+
# List of configurable keys for {Octokit::Client}
|
13
|
+
# @return [Array] of option keys
|
14
|
+
def keys
|
15
|
+
@keys ||= [
|
16
|
+
:token,
|
17
|
+
:team,
|
18
|
+
:api_endpoint,
|
19
|
+
:user_agent,
|
20
|
+
:connection_options,
|
21
|
+
:default_media_type,
|
22
|
+
:default_channel,
|
23
|
+
:default_username,
|
24
|
+
:middleware
|
25
|
+
]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Set configuration options using a block
|
30
|
+
def configure
|
31
|
+
yield self
|
32
|
+
end
|
33
|
+
|
34
|
+
# Reset configuration options to default values
|
35
|
+
def reset!
|
36
|
+
Slack::Configurable.keys.each do |key|
|
37
|
+
instance_variable_set(:"@#{key}", Slack::Default.options[key])
|
38
|
+
end
|
39
|
+
self
|
40
|
+
end
|
41
|
+
alias setup reset!
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def options
|
46
|
+
Hash[Slack::Configurable.keys.map{|key| [key, instance_variable_get(:"@#{key}")]}]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/slack/connection.rb
CHANGED
@@ -4,7 +4,7 @@ module Slack
|
|
4
4
|
response = connection.get method, { token: @token }
|
5
5
|
|
6
6
|
if response.success?
|
7
|
-
|
7
|
+
response
|
8
8
|
else
|
9
9
|
raise UnknownResponseCode, "Unexpected #{response.code}"
|
10
10
|
end
|
@@ -13,29 +13,13 @@ module Slack
|
|
13
13
|
def post(method, payload)
|
14
14
|
response = connection.post do |req|
|
15
15
|
req.url method, payload.to_hash
|
16
|
-
req.headers['Content-Type'] = 'application/json'
|
17
|
-
#req.body = JSON.dump(payload.to_hash)
|
18
16
|
end
|
19
|
-
|
20
|
-
handle_response(response)
|
21
|
-
end
|
22
|
-
|
23
|
-
def base_url
|
24
|
-
#"https://#{@team}.slack.com/api/"
|
25
|
-
"https://slack.com/api/"
|
26
17
|
end
|
27
18
|
|
28
19
|
def connection
|
29
|
-
Faraday.new(
|
30
|
-
|
31
|
-
|
32
|
-
c.adapter(Faraday.default_adapter)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def handle_response(response)
|
37
|
-
body = JSON.parse(response.body)
|
38
|
-
true if ["true", 1].include? body['ok']
|
20
|
+
_connection = Faraday.new(@api_endpoint, @connection_options)
|
21
|
+
_connection.headers = {'Accept' => @default_media_type, 'User-Agent' => @user_agent}
|
22
|
+
_connection
|
39
23
|
end
|
40
24
|
end
|
41
25
|
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'slack/response/raise_error'
|
2
|
+
require 'slack/version'
|
3
|
+
|
4
|
+
module Slack
|
5
|
+
|
6
|
+
module Default
|
7
|
+
|
8
|
+
# Default API entpoint
|
9
|
+
API_ENDPOINT = "https://slack.com/api/".freeze
|
10
|
+
|
11
|
+
# Default User Agent header string
|
12
|
+
USER_AGENT = "Slack Ruby Gem #{Slack::VERSION}".freeze
|
13
|
+
|
14
|
+
# Default media type
|
15
|
+
MEDIA_TYPE = "application/json"
|
16
|
+
|
17
|
+
# Default channel type
|
18
|
+
DEFAULT_CHANNEL = "#general"
|
19
|
+
|
20
|
+
# Default username
|
21
|
+
DEFAULT_USERNAME = "My Bot"
|
22
|
+
|
23
|
+
# Default Faraday middleware stack
|
24
|
+
MIDDLEWARE = Faraday::RackBuilder.new do |builder|
|
25
|
+
builder.use(Faraday::Request::UrlEncoded)
|
26
|
+
builder.use Slack::Response::RaiseError
|
27
|
+
builder.adapter Faraday.default_adapter
|
28
|
+
end
|
29
|
+
|
30
|
+
class << self
|
31
|
+
|
32
|
+
# Configuration options
|
33
|
+
# @return [Hash]
|
34
|
+
def options
|
35
|
+
Hash[Slack::Configurable.keys.map{|key| [key, send(key)]}]
|
36
|
+
end
|
37
|
+
|
38
|
+
# Default token from ENV
|
39
|
+
# @return [String]
|
40
|
+
def token
|
41
|
+
ENV['SLACK_TOKEN']
|
42
|
+
end
|
43
|
+
|
44
|
+
# Default team from ENV
|
45
|
+
# @return [String]
|
46
|
+
def team
|
47
|
+
ENV['SLACK_TEAM']
|
48
|
+
end
|
49
|
+
|
50
|
+
# Default API endpoint from ENV or {API_ENDPOINT}
|
51
|
+
# @return [String]
|
52
|
+
def api_endpoint
|
53
|
+
ENV['SLACK_API_ENDPOINT'] || API_ENDPOINT
|
54
|
+
end
|
55
|
+
|
56
|
+
# Default media type from ENV or {MEDIA_TYPE}
|
57
|
+
# @return [String]
|
58
|
+
def default_media_type
|
59
|
+
ENV['SLACK_DEFAULT_MEDIA_TYPE'] || MEDIA_TYPE
|
60
|
+
end
|
61
|
+
|
62
|
+
# Default User-Agent header string from ENV or {USER_AGENT}
|
63
|
+
# @return [String]
|
64
|
+
def user_agent
|
65
|
+
ENV['SLACK_USER_AGENT'] || USER_AGENT
|
66
|
+
end
|
67
|
+
|
68
|
+
# Default Channel from ENV or {DEFAULT_CHANNEL}
|
69
|
+
# @return [String]
|
70
|
+
def default_channel
|
71
|
+
ENV['SLACK_DEFAULT_CHANNEL'] || DEFAULT_CHANNEL
|
72
|
+
end
|
73
|
+
|
74
|
+
# Default Username from ENV or {DEFAULT_USERNAME}
|
75
|
+
# @return [String]
|
76
|
+
def default_username
|
77
|
+
ENV['SLACK_DEFAULT_USERNAME'] || DEFAULT_USERNAME
|
78
|
+
end
|
79
|
+
|
80
|
+
# Default options for Faraday::Connection
|
81
|
+
# @return [Hash]
|
82
|
+
def connection_options
|
83
|
+
{
|
84
|
+
:headers => {
|
85
|
+
:accept => default_media_type,
|
86
|
+
:user_agent => user_agent
|
87
|
+
},
|
88
|
+
:builder => middleware
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
# Default middleware stack for Faraday::Connection
|
93
|
+
# from {MIDDLEWARE}
|
94
|
+
# @return [String]
|
95
|
+
def middleware
|
96
|
+
MIDDLEWARE
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/lib/slack/payload.rb
CHANGED
@@ -3,8 +3,8 @@ module Slack
|
|
3
3
|
attr_accessor :username, :channel, :text, :token
|
4
4
|
|
5
5
|
def initialize(options = {})
|
6
|
-
@username = options[:username]
|
7
|
-
@channel = options[:channel]
|
6
|
+
@username = options[:username] || Slack.default_username
|
7
|
+
@channel = options[:channel] || Slack.default_channel
|
8
8
|
@text = options[:text]
|
9
9
|
@token = options[:token]
|
10
10
|
|
data/lib/slack/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"http_interactions":[{"request":{"method":"get","uri":"https://slack.com/api/channels.list?token=<SLACK_TOKEN>","body":{"encoding":"US-ASCII","string":""},"headers":{"User-Agent":["
|
1
|
+
{"http_interactions":[{"request":{"method":"get","uri":"https://slack.com/api/channels.list?token=<SLACK_TOKEN>","body":{"encoding":"US-ASCII","string":""},"headers":{"Accept":["application/json"],"User-Agent":["Slack Ruby Gem 0.0.4"],"Accept-Encoding":["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"]}},"response":{"status":{"code":200,"message":"OK"},"headers":{"Access-Control-Allow-Origin":["*"],"Cache-Control":["private, no-cache, no-store, must-revalidate"],"Content-Type":["application/json; charset=utf-8"],"Date":["Fri, 09 May 2014 18:26:24 GMT"],"Expires":["Mon, 26 Jul 1997 05:00:00 GMT"],"Pragma":["no-cache"],"Server":["Apache"],"Vary":["Accept-Encoding"],"X-Accepted-Oauth-Scopes":["read"],"X-Oauth-Scopes":["identify,read,post,client"],"X-Xss-Protection":["0"],"Content-Length":["1024"],"Connection":["keep-alive"]},"body":{"encoding":"UTF-8","string":"{\"ok\":true,\"channels\":[{\"id\":\"C028YP7A7\",\"name\":\"the-cashfloor-room\",\"created\":\"1397727847\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":4,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C02979RU8\",\"name\":\"the-cat-room\",\"created\":\"1398335768\",\"creator\":\"U028ZCM22\",\"is_archived\":false,\"is_member\":true,\"num_members\":4,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028ZB8CN\",\"name\":\"the-danger-room\",\"created\":\"1397727226\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":10,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"A place for non-work banter, links, articles of interest, humor or anything else which you'd like concentrated in some place other than work-related channels.\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W8U\",\"name\":\"the-design-room\",\"created\":\"1399294790\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":1,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W8W\",\"name\":\"the-downloads-room\",\"created\":\"1399294790\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":1,\"is_general\":false,\"topic\":{\"value\":\"Please use this room to run download scripts\",\"creator\":\"U028ZB8CG\",\"last_set\":\"1399294790\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W90\",\"name\":\"the-dyce-room\",\"created\":\"1399294790\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W92\",\"name\":\"the-flowting-room\",\"created\":\"1399294790\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"Website\",\"creator\":\"U028ZB8CG\",\"last_set\":\"1399294791\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028ZBLNN\",\"name\":\"the-github-channel\",\"created\":\"1397728177\",\"creator\":\"U028YNXGR\",\"is_archived\":true,\"is_member\":false,\"num_members\":0,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W94\",\"name\":\"the-gusho-room\",\"created\":\"1399294791\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":4,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029DP011\",\"name\":\"the-hubot-room\",\"created\":\"1398843936\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":1,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028ZBJBJ\",\"name\":\"the-<SLACK_TEAM>-room\",\"created\":\"1397727940\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":5,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W9A\",\"name\":\"the-ops-room\",\"created\":\"1399294791\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028YQ38F\",\"name\":\"the-papertrail-room\",\"created\":\"1397729261\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028ZB8CL\",\"name\":\"the-serious-room\",\"created\":\"1397727226\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":10,\"is_general\":true,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"This channel is for team-wide communication and announcements. All team members are in this channel.\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C0296KR2Z\",\"name\":\"the-sharepoint-room\",\"created\":\"1398341726\",\"creator\":\"U0296FHNR\",\"is_archived\":false,\"is_member\":true,\"num_members\":3,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W9C\",\"name\":\"the-skynet-room\",\"created\":\"1399294791\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"Central hub for our army of robots. \\napi.<SLACK_TEAM>.de\",\"creator\":\"U028ZB8CG\",\"last_set\":\"1399294791\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029K6YKF\",\"name\":\"the-social-media-room\",\"created\":\"1399282691\",\"creator\":\"U028ZCM22\",\"is_archived\":false,\"is_member\":false,\"num_members\":3,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"To collect relevant links for social media postings and to discuss everything around social media. Please always advise what we think about the topic at hand, e.g. Topic = Ruby is less and less used for new Repositories on GitHub. We think = What a pity.\",\"creator\":\"U028ZCM22\",\"last_set\":\"1399288365\"}},{\"id\":\"C0297DTL6\",\"name\":\"website-redesign-room\",\"created\":\"1398344050\",\"creator\":\"U028ZCM22\",\"is_archived\":false,\"is_member\":true,\"num_members\":6,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029G8WDA\",\"name\":\"yoda-quotes\",\"created\":\"1398939627\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":1,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}}]}"},"http_version":null},"recorded_at":"Fri, 09 May 2014 18:26:27 GMT"}],"recorded_with":"VCR 2.4.0"}
|
@@ -1 +1 @@
|
|
1
|
-
{"http_interactions":[{"request":{"method":"post","uri":"https://slack.com/api/chat.postMessage?channel=%23yoda-quotes&text=May%20the%20force%20be%20with%20you&token=<SLACK_TOKEN
|
1
|
+
{"http_interactions":[{"request":{"method":"post","uri":"https://slack.com/api/chat.postMessage?channel=%23yoda-quotes&text=May%20the%20force%20be%20with%20you&token=<SLACK_TOKEN>&username=My%20Bot","body":{"encoding":"UTF-8","string":""},"headers":{"Accept":["application/json"],"User-Agent":["Slack Ruby Gem 0.0.4"],"Content-Length":["0"],"Accept-Encoding":["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"]}},"response":{"status":{"code":200,"message":"OK"},"headers":{"Access-Control-Allow-Origin":["*"],"Cache-Control":["private, no-cache, no-store, must-revalidate"],"Content-Type":["application/json; charset=utf-8"],"Date":["Fri, 09 May 2014 18:26:25 GMT"],"Expires":["Mon, 26 Jul 1997 05:00:00 GMT"],"Pragma":["no-cache"],"Server":["Apache"],"Vary":["Accept-Encoding"],"X-Accepted-Oauth-Scopes":["post"],"X-Oauth-Scopes":["identify,read,post,client"],"X-Xss-Protection":["0"],"Content-Length":["56"],"Connection":["keep-alive"]},"body":{"encoding":"UTF-8","string":"{\"ok\":1,\"timestamp\":\"1399659985000006\"}"},"http_version":null},"recorded_at":"Fri, 09 May 2014 18:26:28 GMT"}],"recorded_with":"VCR 2.4.0"}
|
@@ -1 +1 @@
|
|
1
|
-
{"http_interactions":[{"request":{"method":"post","uri":"https://slack.com/api/chat.postMessage?channel=%23channel-name&text=May%20the%20force%20be%20with%20you&token=<SLACK_TOKEN
|
1
|
+
{"http_interactions":[{"request":{"method":"post","uri":"https://slack.com/api/chat.postMessage?channel=%23channel-name&text=May%20the%20force%20be%20with%20you&token=<SLACK_TOKEN>&username=My%20Bot","body":{"encoding":"UTF-8","string":""},"headers":{"Accept":["application/json"],"User-Agent":["Slack Ruby Gem 0.0.4"],"Content-Length":["0"],"Accept-Encoding":["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"]}},"response":{"status":{"code":200,"message":"OK"},"headers":{"Access-Control-Allow-Origin":["*"],"Cache-Control":["private, no-cache, no-store, must-revalidate"],"Content-Type":["application/json; charset=utf-8"],"Date":["Fri, 09 May 2014 18:26:25 GMT"],"Expires":["Mon, 26 Jul 1997 05:00:00 GMT"],"Pragma":["no-cache"],"Server":["Apache"],"Vary":["Accept-Encoding"],"X-Accepted-Oauth-Scopes":["post"],"X-Oauth-Scopes":["identify,read,post,client"],"X-Xss-Protection":["0"],"Content-Length":["60"],"Connection":["keep-alive"]},"body":{"encoding":"UTF-8","string":"{\"ok\":false,\"error\":\"channel_not_found\"}"},"http_version":null},"recorded_at":"Fri, 09 May 2014 18:26:29 GMT"}],"recorded_with":"VCR 2.4.0"}
|
data/spec/cassettes/Slack_Client/when_making_requests/sets_a_custom_user_agent_for_GET_request.json
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"http_interactions":[{"request":{"method":"get","uri":"https://slack.com/api/channels.list?token=<SLACK_TOKEN>","body":{"encoding":"US-ASCII","string":""},"headers":{"Accept":["application/json"],"User-Agent":["Mozilla/5.0 I am Spartacus!"],"Accept-Encoding":["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"]}},"response":{"status":{"code":200,"message":"OK"},"headers":{"Access-Control-Allow-Origin":["*"],"Cache-Control":["private, no-cache, no-store, must-revalidate"],"Content-Type":["application/json; charset=utf-8"],"Date":["Fri, 09 May 2014 18:41:37 GMT"],"Expires":["Mon, 26 Jul 1997 05:00:00 GMT"],"Pragma":["no-cache"],"Server":["Apache"],"Vary":["Accept-Encoding"],"X-Accepted-Oauth-Scopes":["read"],"X-Oauth-Scopes":["identify,read,post,client"],"X-Xss-Protection":["0"],"Content-Length":["1024"],"Connection":["keep-alive"]},"body":{"encoding":"UTF-8","string":"{\"ok\":true,\"channels\":[{\"id\":\"C028YP7A7\",\"name\":\"the-cashfloor-room\",\"created\":\"1397727847\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":4,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C02979RU8\",\"name\":\"the-cat-room\",\"created\":\"1398335768\",\"creator\":\"U028ZCM22\",\"is_archived\":false,\"is_member\":true,\"num_members\":4,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028ZB8CN\",\"name\":\"the-danger-room\",\"created\":\"1397727226\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":10,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"A place for non-work banter, links, articles of interest, humor or anything else which you'd like concentrated in some place other than work-related channels.\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W8U\",\"name\":\"the-design-room\",\"created\":\"1399294790\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":1,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W8W\",\"name\":\"the-downloads-room\",\"created\":\"1399294790\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":1,\"is_general\":false,\"topic\":{\"value\":\"Please use this room to run download scripts\",\"creator\":\"U028ZB8CG\",\"last_set\":\"1399294790\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W90\",\"name\":\"the-dyce-room\",\"created\":\"1399294790\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W92\",\"name\":\"the-flowting-room\",\"created\":\"1399294790\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"Website\",\"creator\":\"U028ZB8CG\",\"last_set\":\"1399294791\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028ZBLNN\",\"name\":\"the-github-channel\",\"created\":\"1397728177\",\"creator\":\"U028YNXGR\",\"is_archived\":true,\"is_member\":false,\"num_members\":0,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W94\",\"name\":\"the-gusho-room\",\"created\":\"1399294791\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":4,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029DP011\",\"name\":\"the-hubot-room\",\"created\":\"1398843936\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":1,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028ZBJBJ\",\"name\":\"the-<SLACK_TEAM>-room\",\"created\":\"1397727940\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":5,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W9A\",\"name\":\"the-ops-room\",\"created\":\"1399294791\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028YQ38F\",\"name\":\"the-papertrail-room\",\"created\":\"1397729261\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028ZB8CL\",\"name\":\"the-serious-room\",\"created\":\"1397727226\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":10,\"is_general\":true,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"This channel is for team-wide communication and announcements. All team members are in this channel.\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C0296KR2Z\",\"name\":\"the-sharepoint-room\",\"created\":\"1398341726\",\"creator\":\"U0296FHNR\",\"is_archived\":false,\"is_member\":true,\"num_members\":3,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W9C\",\"name\":\"the-skynet-room\",\"created\":\"1399294791\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"Central hub for our army of robots. \\napi.<SLACK_TEAM>.de\",\"creator\":\"U028ZB8CG\",\"last_set\":\"1399294791\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029K6YKF\",\"name\":\"the-social-media-room\",\"created\":\"1399282691\",\"creator\":\"U028ZCM22\",\"is_archived\":false,\"is_member\":false,\"num_members\":3,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"To collect relevant links for social media postings and to discuss everything around social media. Please always advise what we think about the topic at hand, e.g. Topic = Ruby is less and less used for new Repositories on GitHub. We think = What a pity.\",\"creator\":\"U028ZCM22\",\"last_set\":\"1399288365\"}},{\"id\":\"C0297DTL6\",\"name\":\"website-redesign-room\",\"created\":\"1398344050\",\"creator\":\"U028ZCM22\",\"is_archived\":false,\"is_member\":true,\"num_members\":6,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029G8WDA\",\"name\":\"yoda-quotes\",\"created\":\"1398939627\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":1,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}}]}"},"http_version":null},"recorded_at":"Fri, 09 May 2014 18:41:41 GMT"}],"recorded_with":"VCR 2.4.0"}
|
data/spec/cassettes/Slack_Client/when_making_requests/sets_a_custom_user_agent_for_POST_request.json
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"http_interactions":[{"request":{"method":"post","uri":"https://slack.com/api/chat.postMessage?channel=%23yoda-quotes&text=May%20the%20force%20be%20with%20you&token=<SLACK_TOKEN>&username=My%20Bot","body":{"encoding":"UTF-8","string":""},"headers":{"Accept":["application/json"],"User-Agent":["Mozilla/5.0 I am Spartacus!"],"Content-Length":["0"],"Accept-Encoding":["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"]}},"response":{"status":{"code":200,"message":"OK"},"headers":{"Access-Control-Allow-Origin":["*"],"Cache-Control":["private, no-cache, no-store, must-revalidate"],"Content-Type":["application/json; charset=utf-8"],"Date":["Fri, 09 May 2014 18:31:58 GMT"],"Expires":["Mon, 26 Jul 1997 05:00:00 GMT"],"Pragma":["no-cache"],"Server":["Apache"],"Vary":["Accept-Encoding"],"X-Accepted-Oauth-Scopes":["post"],"X-Oauth-Scopes":["identify,read,post,client"],"X-Xss-Protection":["0"],"Content-Length":["56"],"Connection":["keep-alive"]},"body":{"encoding":"UTF-8","string":"{\"ok\":1,\"timestamp\":\"1399660318000007\"}"},"http_version":null},"recorded_at":"Fri, 09 May 2014 18:32:02 GMT"}],"recorded_with":"VCR 2.4.0"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"http_interactions":[{"request":{"method":"get","uri":"https://slack.com/api/channels.list?token=<SLACK_TOKEN>","body":{"encoding":"US-ASCII","string":""},"headers":{"Accept":["application/json"],"User-Agent":["Slack Ruby Gem 0.0.4"],"Accept-Encoding":["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"]}},"response":{"status":{"code":200,"message":"OK"},"headers":{"Access-Control-Allow-Origin":["*"],"Cache-Control":["private, no-cache, no-store, must-revalidate"],"Content-Type":["application/json; charset=utf-8"],"Date":["Fri, 09 May 2014 18:45:52 GMT"],"Expires":["Mon, 26 Jul 1997 05:00:00 GMT"],"Pragma":["no-cache"],"Server":["Apache"],"Vary":["Accept-Encoding"],"X-Accepted-Oauth-Scopes":["read"],"X-Oauth-Scopes":["identify,read,post,client"],"X-Xss-Protection":["0"],"Content-Length":["1024"],"Connection":["keep-alive"]},"body":{"encoding":"UTF-8","string":"{\"ok\":true,\"channels\":[{\"id\":\"C028YP7A7\",\"name\":\"the-cashfloor-room\",\"created\":\"1397727847\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":4,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C02979RU8\",\"name\":\"the-cat-room\",\"created\":\"1398335768\",\"creator\":\"U028ZCM22\",\"is_archived\":false,\"is_member\":true,\"num_members\":4,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028ZB8CN\",\"name\":\"the-danger-room\",\"created\":\"1397727226\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":10,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"A place for non-work banter, links, articles of interest, humor or anything else which you'd like concentrated in some place other than work-related channels.\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W8U\",\"name\":\"the-design-room\",\"created\":\"1399294790\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":1,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W8W\",\"name\":\"the-downloads-room\",\"created\":\"1399294790\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":1,\"is_general\":false,\"topic\":{\"value\":\"Please use this room to run download scripts\",\"creator\":\"U028ZB8CG\",\"last_set\":\"1399294790\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W90\",\"name\":\"the-dyce-room\",\"created\":\"1399294790\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W92\",\"name\":\"the-flowting-room\",\"created\":\"1399294790\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"Website\",\"creator\":\"U028ZB8CG\",\"last_set\":\"1399294791\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028ZBLNN\",\"name\":\"the-github-channel\",\"created\":\"1397728177\",\"creator\":\"U028YNXGR\",\"is_archived\":true,\"is_member\":false,\"num_members\":0,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W94\",\"name\":\"the-gusho-room\",\"created\":\"1399294791\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":4,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029DP011\",\"name\":\"the-hubot-room\",\"created\":\"1398843936\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":1,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028ZBJBJ\",\"name\":\"the-<SLACK_TEAM>-room\",\"created\":\"1397727940\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":5,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W9A\",\"name\":\"the-ops-room\",\"created\":\"1399294791\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028YQ38F\",\"name\":\"the-papertrail-room\",\"created\":\"1397729261\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C028ZB8CL\",\"name\":\"the-serious-room\",\"created\":\"1397727226\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":10,\"is_general\":true,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"This channel is for team-wide communication and announcements. All team members are in this channel.\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C0296KR2Z\",\"name\":\"the-sharepoint-room\",\"created\":\"1398341726\",\"creator\":\"U0296FHNR\",\"is_archived\":false,\"is_member\":true,\"num_members\":3,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029L6W9C\",\"name\":\"the-skynet-room\",\"created\":\"1399294791\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":2,\"is_general\":false,\"topic\":{\"value\":\"Central hub for our army of robots. \\napi.<SLACK_TEAM>.de\",\"creator\":\"U028ZB8CG\",\"last_set\":\"1399294791\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029K6YKF\",\"name\":\"the-social-media-room\",\"created\":\"1399282691\",\"creator\":\"U028ZCM22\",\"is_archived\":false,\"is_member\":false,\"num_members\":3,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"To collect relevant links for social media postings and to discuss everything around social media. Please always advise what we think about the topic at hand, e.g. Topic = Ruby is less and less used for new Repositories on GitHub. We think = What a pity.\",\"creator\":\"U028ZCM22\",\"last_set\":\"1399288365\"}},{\"id\":\"C0297DTL6\",\"name\":\"website-redesign-room\",\"created\":\"1398344050\",\"creator\":\"U028ZCM22\",\"is_archived\":false,\"is_member\":true,\"num_members\":6,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}},{\"id\":\"C029G8WDA\",\"name\":\"yoda-quotes\",\"created\":\"1398939627\",\"creator\":\"U028ZB8CG\",\"is_archived\":false,\"is_member\":true,\"num_members\":1,\"is_general\":false,\"topic\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"},\"purpose\":{\"value\":\"\",\"creator\":\"\",\"last_set\":\"0\"}}]}"},"http_version":null},"recorded_at":"Fri, 09 May 2014 18:45:56 GMT"}],"recorded_with":"VCR 2.4.0"}
|
data/spec/slack/client_spec.rb
CHANGED
@@ -3,35 +3,130 @@ require "spec_helper"
|
|
3
3
|
describe Slack::Client do
|
4
4
|
|
5
5
|
before do
|
6
|
+
Slack.reset!
|
6
7
|
@client = auth_client
|
7
8
|
end
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
after do
|
11
|
+
Slack.reset!
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "module configuration" do
|
15
|
+
|
16
|
+
before do
|
17
|
+
Slack.reset!
|
18
|
+
Slack.configure do |config|
|
19
|
+
Slack::Configurable.keys.each do |key|
|
20
|
+
config.send("#{key}=", "Some #{key}")
|
21
|
+
end
|
22
|
+
end
|
13
23
|
end
|
14
24
|
|
15
|
-
|
16
|
-
|
17
|
-
|
25
|
+
after do
|
26
|
+
Slack.reset!
|
27
|
+
end
|
28
|
+
|
29
|
+
it "inherits the module configuration" do
|
30
|
+
client = Slack::Client.new
|
31
|
+
Slack::Configurable.keys.each do |key|
|
32
|
+
expect(client.instance_variable_get(:"@#{key}")).to eq("Some #{key}")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "with class level configuration" do
|
37
|
+
|
38
|
+
before do
|
39
|
+
@opts = {
|
40
|
+
:connection_options => {:ssl => {:verify => false}},
|
41
|
+
:api_endpoint => "https://slack.dev/api",
|
42
|
+
:token => "abcdef",
|
43
|
+
:team => "netflower"
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
it "overrides module configuration" do
|
48
|
+
client = Slack::Client.new(@opts)
|
49
|
+
expect(client.api_endpoint).to eq("https://slack.dev/api")
|
50
|
+
expect(client.token).to eq("abcdef")
|
51
|
+
expect(client.instance_variable_get(:"@team")).to eq("netflower")
|
52
|
+
expect(client.default_media_type).to eq(Slack.default_media_type)
|
53
|
+
expect(client.user_agent).to eq(Slack.user_agent)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "can set configuration after initialization" do
|
57
|
+
client = Slack::Client.new
|
58
|
+
client.configure do |config|
|
59
|
+
@opts.each do |key, value|
|
60
|
+
config.send("#{key}=", value)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
expect(client.api_endpoint).to eq("https://slack.dev/api")
|
64
|
+
expect(client.token).to eq("abcdef")
|
65
|
+
expect(client.instance_variable_get(:"@team")).to eq("netflower")
|
66
|
+
expect(client.default_media_type).to eq(Slack.default_media_type)
|
67
|
+
expect(client.user_agent).to eq(Slack.user_agent)
|
68
|
+
end
|
18
69
|
end
|
70
|
+
end
|
19
71
|
|
20
|
-
|
21
|
-
|
72
|
+
describe ".client" do
|
73
|
+
it "creates an Slack::Client" do
|
74
|
+
expect(Slack.client).to be_kind_of Slack::Client
|
75
|
+
end
|
76
|
+
it "caches the client when the same options are passed" do
|
77
|
+
expect(Slack.client).to eq(Slack.client)
|
78
|
+
end
|
79
|
+
it "returns a fresh client when options are not the same" do
|
80
|
+
client = Slack.client
|
81
|
+
Slack.token = "abcdefabcdefabcdefabcdef"
|
82
|
+
client_two = Slack.client
|
83
|
+
client_three = Slack.client
|
84
|
+
expect(client).not_to eq(client_two)
|
85
|
+
expect(client_three).to eq(client_two)
|
86
|
+
end
|
87
|
+
end
|
22
88
|
|
23
|
-
|
24
|
-
|
25
|
-
|
89
|
+
describe ".configure" do
|
90
|
+
Slack::Configurable.keys.each do |key|
|
91
|
+
it "sets the #{key.to_s.gsub('_', ' ')}" do
|
92
|
+
Slack.configure do |config|
|
93
|
+
config.send("#{key}=", key)
|
94
|
+
end
|
95
|
+
expect(Slack.instance_variable_get(:"@#{key}")).to eq(key)
|
26
96
|
end
|
27
97
|
end
|
28
98
|
end
|
29
99
|
|
100
|
+
describe "when making requests", :vcr do
|
101
|
+
it "sets a default user agent" do
|
102
|
+
@client.channels
|
103
|
+
|
104
|
+
assert_requested :get, auth_slack_url("/channels.list"), :headers => {:user_agent => Slack::Default.user_agent}
|
105
|
+
|
106
|
+
end
|
107
|
+
it "sets a custom user agent for GET request" do
|
108
|
+
user_agent = "Mozilla/5.0 I am Spartacus!"
|
109
|
+
client = auth_client({:user_agent => user_agent})
|
110
|
+
client.channels
|
111
|
+
|
112
|
+
assert_requested :get, auth_slack_url("/channels.list"), :headers => {:user_agent => user_agent}
|
113
|
+
end
|
114
|
+
|
115
|
+
it "sets a custom user agent for POST request" do
|
116
|
+
user_agent = "Mozilla/5.0 I am Spartacus!"
|
117
|
+
client = auth_client({:user_agent => user_agent})
|
118
|
+
client.post_message("May the force be with you", "yoda-quotes")
|
119
|
+
|
120
|
+
params = {text: "May the force be with you", channel: "#yoda-quotes", token: test_slack_token, username: Slack.default_username}
|
121
|
+
assert_requested :post, slack_url_with_params("/chat.postMessage", params), :headers => {:user_agent => user_agent}
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
30
125
|
describe "#post_message", :vcr do
|
31
126
|
it "posts a message to one channel" do
|
32
127
|
result = @client.post_message("May the force be with you", "yoda-quotes")
|
33
128
|
expect(result).to be true
|
34
|
-
params = {text: "May the force be with you", channel: "#yoda-quotes", token: test_slack_token}
|
129
|
+
params = {text: "May the force be with you", channel: "#yoda-quotes", token: test_slack_token, username: Slack.default_username}
|
35
130
|
assert_requested :post, slack_url_with_params("/chat.postMessage", params)
|
36
131
|
end
|
37
132
|
|
@@ -40,7 +135,7 @@ describe Slack::Client do
|
|
40
135
|
@client.post_message("May the force be with you", "channel-name")
|
41
136
|
}.to raise_error(Slack::ChannelNotFound)
|
42
137
|
|
43
|
-
params = {text: "May the force be with you", channel: "#channel-name", token: test_slack_token}
|
138
|
+
params = {text: "May the force be with you", channel: "#channel-name", token: test_slack_token, username: Slack.default_username}
|
44
139
|
assert_requested :post, slack_url_with_params("/chat.postMessage", params)
|
45
140
|
end
|
46
141
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Slack::Payload do
|
4
|
+
let(:options) do
|
5
|
+
{
|
6
|
+
username: "foo",
|
7
|
+
channel: "#bar",
|
8
|
+
text: "hola"
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#initialize" do
|
13
|
+
let(:payload) { described_class.new(options) }
|
14
|
+
|
15
|
+
context "with options" do
|
16
|
+
it "sets username" do
|
17
|
+
expect(payload.username).to eq "foo"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "sets channel" do
|
21
|
+
expect(payload.channel).to eq "#bar"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "sets text" do
|
25
|
+
expect(payload.text).to eq "hola"
|
26
|
+
end
|
27
|
+
|
28
|
+
context "on missing pound in channel" do
|
29
|
+
let(:options) do
|
30
|
+
{ channel: "foo" }
|
31
|
+
end
|
32
|
+
|
33
|
+
it "adds pound symbol" do
|
34
|
+
expect(payload.channel).to eq "#foo"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "on direct message" do
|
39
|
+
let(:options) do
|
40
|
+
{ channel: "@dan" }
|
41
|
+
end
|
42
|
+
|
43
|
+
it "keeps the symbol" do
|
44
|
+
expect(payload.channel).to eq "@dan"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "without options" do
|
50
|
+
let(:options) { Hash.new }
|
51
|
+
|
52
|
+
it "sets username" do
|
53
|
+
expect(payload.username).to eq "My Bot"
|
54
|
+
end
|
55
|
+
|
56
|
+
it "sets channel" do
|
57
|
+
expect(payload.channel).to eq "#general"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "#to_hash" do
|
63
|
+
let(:hash) { described_class.new(options).to_hash }
|
64
|
+
|
65
|
+
it "includes basic attributes" do
|
66
|
+
expect(hash).to eq({
|
67
|
+
channel: "#bar",
|
68
|
+
text: "hola",
|
69
|
+
username: "foo"
|
70
|
+
})
|
71
|
+
end
|
72
|
+
|
73
|
+
context "when channel is not set" do
|
74
|
+
before do
|
75
|
+
options[:channel] = nil
|
76
|
+
end
|
77
|
+
|
78
|
+
it "excludes channel" do
|
79
|
+
expect(hash.keys).not_to include "channel"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/spec/slack_spec.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Slack do
|
4
|
+
before do
|
5
|
+
Slack.reset!
|
6
|
+
end
|
7
|
+
|
8
|
+
after do
|
9
|
+
Slack.reset!
|
10
|
+
end
|
11
|
+
|
12
|
+
it "sets defaults" do
|
13
|
+
Slack::Configurable.keys.each do |key|
|
14
|
+
expect(Slack.instance_variable_get(:"@#{key}")).to eq(Slack::Default.send(key))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -39,16 +39,40 @@ def slack_url(path)
|
|
39
39
|
"https://slack.com/api#{path}"
|
40
40
|
end
|
41
41
|
|
42
|
-
def slack_url_with_params(path, params=
|
42
|
+
def slack_url_with_params(path, params={})
|
43
43
|
"https://slack.com/api#{path}?#{parameterize(params)}"
|
44
44
|
end
|
45
45
|
|
46
|
-
def auth_slack_url(path)
|
47
|
-
|
46
|
+
def auth_slack_url(path, params={})
|
47
|
+
slack_url_with_params(path, {token: test_slack_token}.merge(params))
|
48
48
|
end
|
49
49
|
|
50
|
-
def
|
51
|
-
|
50
|
+
def stub_delete(url)
|
51
|
+
stub_request(:delete, auth_slack_url(url))
|
52
|
+
end
|
53
|
+
|
54
|
+
def stub_get(url)
|
55
|
+
stub_request(:get, auth_slack_url(url))
|
56
|
+
end
|
57
|
+
|
58
|
+
def stub_head(url)
|
59
|
+
stub_request(:head, auth_slack_url(url))
|
60
|
+
end
|
61
|
+
|
62
|
+
def stub_patch(url)
|
63
|
+
stub_request(:patch, auth_slack_url(url))
|
64
|
+
end
|
65
|
+
|
66
|
+
def stub_post(url, params)
|
67
|
+
stub_request(:post, auth_slack_url(url, params))
|
68
|
+
end
|
69
|
+
|
70
|
+
def stub_put(url)
|
71
|
+
stub_request(:put, auth_slack_url(url))
|
72
|
+
end
|
73
|
+
|
74
|
+
def auth_client(options={})
|
75
|
+
Slack::Client.new({team: ENV.fetch('SLACK_TEST_TEAM'), token: ENV.fetch('SLACK_TEST_TOKEN')}.merge(options))
|
52
76
|
end
|
53
77
|
|
54
78
|
def parameterize(params)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slack.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bastian Bartmann
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-05-
|
12
|
+
date: 2014-05-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -49,13 +49,16 @@ extra_rdoc_files: []
|
|
49
49
|
files:
|
50
50
|
- .gitignore
|
51
51
|
- .rspec
|
52
|
+
- .travis.yml
|
52
53
|
- Gemfile
|
53
54
|
- LICENSE.txt
|
54
55
|
- README.md
|
55
56
|
- Rakefile
|
56
57
|
- lib/slack.rb
|
57
58
|
- lib/slack/client.rb
|
59
|
+
- lib/slack/configurable.rb
|
58
60
|
- lib/slack/connection.rb
|
61
|
+
- lib/slack/default.rb
|
59
62
|
- lib/slack/error.rb
|
60
63
|
- lib/slack/payload.rb
|
61
64
|
- lib/slack/response/raise_error.rb
|
@@ -70,7 +73,12 @@ files:
|
|
70
73
|
- spec/cassettes/Slack_Client/_channels/returns_all_channels.json
|
71
74
|
- spec/cassettes/Slack_Client/_post_message/posts_a_message_to_one_channel.json
|
72
75
|
- spec/cassettes/Slack_Client/_post_message/returns_channel_not_found_error.json
|
76
|
+
- spec/cassettes/Slack_Client/when_making_requests/sets_a_custom_user_agent_for_GET_request.json
|
77
|
+
- spec/cassettes/Slack_Client/when_making_requests/sets_a_custom_user_agent_for_POST_request.json
|
78
|
+
- spec/cassettes/Slack_Client/when_making_requests/sets_a_default_user_agent.json
|
73
79
|
- spec/slack/client_spec.rb
|
80
|
+
- spec/slack/payload_spec.rb
|
81
|
+
- spec/slack_spec.rb
|
74
82
|
- spec/spec_helper.rb
|
75
83
|
homepage: https://github.com/netflower/slack.rb
|
76
84
|
licenses:
|
@@ -100,6 +108,11 @@ test_files:
|
|
100
108
|
- spec/cassettes/Slack_Client/_channels/returns_all_channels.json
|
101
109
|
- spec/cassettes/Slack_Client/_post_message/posts_a_message_to_one_channel.json
|
102
110
|
- spec/cassettes/Slack_Client/_post_message/returns_channel_not_found_error.json
|
111
|
+
- spec/cassettes/Slack_Client/when_making_requests/sets_a_custom_user_agent_for_GET_request.json
|
112
|
+
- spec/cassettes/Slack_Client/when_making_requests/sets_a_custom_user_agent_for_POST_request.json
|
113
|
+
- spec/cassettes/Slack_Client/when_making_requests/sets_a_default_user_agent.json
|
103
114
|
- spec/slack/client_spec.rb
|
115
|
+
- spec/slack/payload_spec.rb
|
116
|
+
- spec/slack_spec.rb
|
104
117
|
- spec/spec_helper.rb
|
105
118
|
has_rdoc:
|