breacan 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.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +48 -0
- data/Rakefile +2 -0
- data/breacan.gemspec +25 -0
- data/lib/breacan.rb +24 -0
- data/lib/breacan/authentication.rb +7 -0
- data/lib/breacan/client.rb +109 -0
- data/lib/breacan/client/channels.rb +22 -0
- data/lib/breacan/client/chat.rb +17 -0
- data/lib/breacan/client/oauth.rb +9 -0
- data/lib/breacan/configurable.rb +60 -0
- data/lib/breacan/error.rb +104 -0
- data/lib/breacan/response/raise_error.rb +16 -0
- data/lib/breacan/version.rb +3 -0
- metadata +102 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bd1925ffbf6e5ae727056a78968ad71c79e299b5
|
4
|
+
data.tar.gz: e13e08f2d165b7e99bf6e52e51bae971ee1d9e71
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7985138b2198118c6147f524a9adf9d9baf1682e66ea4ed7d587b11c6cf7131002553c5450a1199028880b37c2280f4248c9ccc162bb7311289382236f3c9a39
|
7
|
+
data.tar.gz: 6d87c8702becbc3b027ec1d4bd4d8957733f840bcf90a5e9f70a608d0348a14eb1a4aa73a6ac919cbf53fd1aeb6af221977b8fde107390cb7524825ce0d5327c
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 linyows
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
<p align="center">
|
2
|
+
<img src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*ryU77MsLt5tnp3ow8kqELA.png">
|
3
|
+
<strong>Breacan</strong>: Simple Ruby wrapper for Slack API.
|
4
|
+
</p>
|
5
|
+
|
6
|
+
[][gem]
|
7
|
+
[gem]: https://rubygems.org/gems/breacan
|
8
|
+
|
9
|
+
Installation
|
10
|
+
------------
|
11
|
+
|
12
|
+
Add this line to your application's Gemfile:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
gem 'breacan'
|
16
|
+
```
|
17
|
+
|
18
|
+
And then execute:
|
19
|
+
|
20
|
+
$ bundle
|
21
|
+
|
22
|
+
Or install it yourself as:
|
23
|
+
|
24
|
+
$ gem install breacan
|
25
|
+
|
26
|
+
Usage
|
27
|
+
-----
|
28
|
+
|
29
|
+
TODO: Write usage instructions here
|
30
|
+
|
31
|
+
Contributing
|
32
|
+
------------
|
33
|
+
|
34
|
+
1. Fork it ( https://github.com/linyows/breacan/fork )
|
35
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
36
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
37
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
38
|
+
5. Create a new Pull Request
|
39
|
+
|
40
|
+
Authors
|
41
|
+
-------
|
42
|
+
|
43
|
+
- [linyows](https://github.com/linyows)
|
44
|
+
|
45
|
+
License
|
46
|
+
-------
|
47
|
+
|
48
|
+
The MIT License (MIT)
|
data/Rakefile
ADDED
data/breacan.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'breacan/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "breacan"
|
8
|
+
spec.version = Breacan::VERSION
|
9
|
+
spec.authors = ["linyows"]
|
10
|
+
spec.email = ["linyows@gmail.com"]
|
11
|
+
spec.summary = %q{Simple Ruby wrapper for Slack API.}
|
12
|
+
spec.description = %q{Simple Ruby wrapper for Slack API.}
|
13
|
+
spec.homepage = "https://github.com/linyows/breacan"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "sawyer", "~> 0.6"
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
+
end
|
data/lib/breacan.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'breacan/version'
|
2
|
+
require 'breacan/client'
|
3
|
+
|
4
|
+
module Breacan
|
5
|
+
class << self
|
6
|
+
include Breacan::Configurable
|
7
|
+
|
8
|
+
def client
|
9
|
+
unless defined?(@client) && @client.same_options?(options)
|
10
|
+
@client = Breacan::Client.new(options)
|
11
|
+
end
|
12
|
+
@client
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def method_missing(method_name, *args, &block)
|
18
|
+
return super unless client.respond_to?(method_name)
|
19
|
+
client.send(method_name, *args, &block)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Breacan.setup
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'sawyer'
|
2
|
+
require 'breacan/configurable'
|
3
|
+
require 'breacan/authentication'
|
4
|
+
require 'breacan/client/oauth'
|
5
|
+
require 'breacan/client/channels'
|
6
|
+
require 'breacan/client/chat'
|
7
|
+
|
8
|
+
module Breacan
|
9
|
+
class Client
|
10
|
+
include Breacan::Authentication
|
11
|
+
include Breacan::Configurable
|
12
|
+
include Breacan::Client::OAuth
|
13
|
+
include Breacan::Client::Channels
|
14
|
+
include Breacan::Client::Chat
|
15
|
+
|
16
|
+
CONVENIENCE_HEADERS = Set.new(%i(accept content_type))
|
17
|
+
|
18
|
+
def initialize(options = {})
|
19
|
+
Breacan::Configurable.keys.each do |key|
|
20
|
+
instance_variable_set(:"@#{key}", options[key] || Breacan.instance_variable_get(:"@#{key}"))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def same_options?(opts)
|
25
|
+
opts.hash == options.hash
|
26
|
+
end
|
27
|
+
|
28
|
+
def get(url, options = {})
|
29
|
+
request :get, url, parse_query_and_convenience_headers(options)
|
30
|
+
end
|
31
|
+
|
32
|
+
def post(url, options = {})
|
33
|
+
request :post, url, options
|
34
|
+
end
|
35
|
+
|
36
|
+
def put(url, options = {})
|
37
|
+
request :put, url, options
|
38
|
+
end
|
39
|
+
|
40
|
+
def patch(url, options = {})
|
41
|
+
request :patch, url, options
|
42
|
+
end
|
43
|
+
|
44
|
+
def delete(url, options = {})
|
45
|
+
request :delete, url, options
|
46
|
+
end
|
47
|
+
|
48
|
+
def head(url, options = {})
|
49
|
+
request :head, url, parse_query_and_convenience_headers(options)
|
50
|
+
end
|
51
|
+
|
52
|
+
def agent
|
53
|
+
@agent ||= Sawyer::Agent.new(api_endpoint, sawyer_options) do |http|
|
54
|
+
http.headers[:accept] = media_type
|
55
|
+
http.headers[:content_type] = media_type
|
56
|
+
http.headers[:user_agent] = user_agent
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def request(method, path, data, options = {})
|
63
|
+
if data.is_a?(Hash)
|
64
|
+
options[:query] = data.delete(:query) || {}
|
65
|
+
options[:headers] = data.delete(:headers) || {}
|
66
|
+
if accept = data.delete(:accept)
|
67
|
+
options[:headers][:accept] = accept
|
68
|
+
end
|
69
|
+
end
|
70
|
+
api_path = URI::Parser.new.escape("#{path.to_s}?token=#{@access_token}")
|
71
|
+
@last_response = response = agent.call(method, api_path, data, options)
|
72
|
+
response.data
|
73
|
+
end
|
74
|
+
|
75
|
+
def boolean_from_response(method, path, options = {})
|
76
|
+
request(method, path, options)
|
77
|
+
@last_response.status == 204
|
78
|
+
rescue Breacan::NotFound
|
79
|
+
false
|
80
|
+
end
|
81
|
+
|
82
|
+
def sawyer_options
|
83
|
+
opts = {
|
84
|
+
:links_parser => Sawyer::LinkParsers::Simple.new
|
85
|
+
}
|
86
|
+
conn_opts = @connection_options
|
87
|
+
conn_opts[:builder] = @middleware if @middleware
|
88
|
+
conn_opts[:proxy] = @proxy if @proxy
|
89
|
+
opts[:faraday] = Faraday.new(conn_opts)
|
90
|
+
|
91
|
+
opts
|
92
|
+
end
|
93
|
+
|
94
|
+
def parse_query_and_convenience_headers(options)
|
95
|
+
headers = options.fetch(:headers, {})
|
96
|
+
CONVENIENCE_HEADERS.each do |h|
|
97
|
+
if header = options.delete(h)
|
98
|
+
headers[h] = header
|
99
|
+
end
|
100
|
+
end
|
101
|
+
query = options.delete(:query)
|
102
|
+
opts = {:query => options}
|
103
|
+
opts[:query].merge!(query) if query && query.is_a?(Hash)
|
104
|
+
opts[:headers] = headers unless headers.empty?
|
105
|
+
|
106
|
+
opts
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Breacan
|
2
|
+
class Client
|
3
|
+
module Channels
|
4
|
+
def channels_list
|
5
|
+
get 'channels.list'
|
6
|
+
end
|
7
|
+
|
8
|
+
def channels_info(*args)
|
9
|
+
get 'channels.info', args
|
10
|
+
end
|
11
|
+
|
12
|
+
def channels_history(*args)
|
13
|
+
get 'channels.history', args
|
14
|
+
end
|
15
|
+
|
16
|
+
def channels_info_by_name(name)
|
17
|
+
res = channels_list
|
18
|
+
res.channels.find { |ch| ch['name'] == name } if res.ok
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Breacan
|
2
|
+
class Client
|
3
|
+
module Chat
|
4
|
+
def chat_delete(*args)
|
5
|
+
delete 'chat.delete', args
|
6
|
+
end
|
7
|
+
|
8
|
+
def chat_post_message(*args)
|
9
|
+
get 'chat.postMessage', args
|
10
|
+
end
|
11
|
+
|
12
|
+
def chat_update(*args)
|
13
|
+
get 'chat.update', args
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'breacan/response/raise_error'
|
2
|
+
|
3
|
+
module Breacan
|
4
|
+
module Configurable
|
5
|
+
OPTIONS_KEYS = %i(
|
6
|
+
access_token
|
7
|
+
team
|
8
|
+
api_endpoint
|
9
|
+
web_endpoint
|
10
|
+
user_agent
|
11
|
+
media_type
|
12
|
+
connection_options
|
13
|
+
proxy
|
14
|
+
middleware
|
15
|
+
)
|
16
|
+
|
17
|
+
attr_accessor(*OPTIONS_KEYS)
|
18
|
+
|
19
|
+
class << self
|
20
|
+
def keys
|
21
|
+
@keys ||= OPTIONS_KEYS
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def configure
|
26
|
+
yield self
|
27
|
+
end
|
28
|
+
|
29
|
+
def api_endpoint
|
30
|
+
File.join(@api_endpoint, '')
|
31
|
+
end
|
32
|
+
|
33
|
+
def web_endpoint
|
34
|
+
File.join(@web_endpoint, '')
|
35
|
+
end
|
36
|
+
|
37
|
+
def reset!
|
38
|
+
@access_token = ENV['BREACAN_ACCESS_TOKEN']
|
39
|
+
@team = ENV['BREACAN_TEAM']
|
40
|
+
@api_endpoint = ENV['BREACAN_API_ENDPOINT'] || 'https://slack.com/api/'
|
41
|
+
@web_endpoint = ENV['BREACAN_WEB_ENDPOINT'] || "https://#{@team}.slack.com/"
|
42
|
+
@user_agent = "Breacan Ruby Gem #{Breacan::VERSION}"
|
43
|
+
@media_type = 'application/json'
|
44
|
+
@connection_options = { headers: { accept: media_type, user_agent: user_agent } }
|
45
|
+
@proxy = ENV['BREACAN_PROXY']
|
46
|
+
@middleware = Faraday::RackBuilder.new { |builder|
|
47
|
+
builder.use Breacan::Response::RaiseError
|
48
|
+
builder.adapter Faraday.default_adapter
|
49
|
+
}
|
50
|
+
self
|
51
|
+
end
|
52
|
+
alias setup reset!
|
53
|
+
|
54
|
+
def options
|
55
|
+
Hash[Breacan::Configurable.keys.map { |key|
|
56
|
+
[key, instance_variable_get(:"@#{key}")]
|
57
|
+
}]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
module Breacan
|
2
|
+
class Error < StandardError
|
3
|
+
def self.from_response(response)
|
4
|
+
if klass = case response[:status].to_i
|
5
|
+
when 400 then Breacan::BadRequest
|
6
|
+
when 401 then Breacan::Unauthorized
|
7
|
+
when 403 then Breacan::Forbidden
|
8
|
+
when 404 then Breacan::NotFound
|
9
|
+
when 406 then Breacan::NotAcceptable
|
10
|
+
when 409 then Breacan::Conflict
|
11
|
+
when 415 then Breacan::UnsupportedMediaType
|
12
|
+
when 422 then Breacan::UnprocessableEntity
|
13
|
+
when 400..499 then Breacan::ClientError
|
14
|
+
when 500 then Breacan::InternalServerError
|
15
|
+
when 501 then Breacan::NotImplemented
|
16
|
+
when 502 then Breacan::BadGateway
|
17
|
+
when 503 then Breacan::ServiceUnavailable
|
18
|
+
when 500..599 then Breacan::ServerError
|
19
|
+
end
|
20
|
+
klass.new(response)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(response = nil)
|
25
|
+
@response = response
|
26
|
+
super(build_error_message)
|
27
|
+
end
|
28
|
+
|
29
|
+
def errors
|
30
|
+
if data && data.is_a?(Hash)
|
31
|
+
data[:errors] || []
|
32
|
+
else
|
33
|
+
[]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def data
|
40
|
+
@data ||=
|
41
|
+
if (body = @response[:body]) && !body.empty?
|
42
|
+
if body.is_a?(String) &&
|
43
|
+
@response[:response_headers] &&
|
44
|
+
@response[:response_headers][:content_type] =~ /json/
|
45
|
+
|
46
|
+
Sawyer::Agent.serializer.decode(body)
|
47
|
+
else
|
48
|
+
body
|
49
|
+
end
|
50
|
+
else
|
51
|
+
nil
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def response_message
|
56
|
+
case data
|
57
|
+
when Hash
|
58
|
+
data[:message]
|
59
|
+
when String
|
60
|
+
data
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def response_error
|
65
|
+
"Error: #{data[:error]}" if data.is_a?(Hash) && data[:error]
|
66
|
+
end
|
67
|
+
|
68
|
+
def build_error_message
|
69
|
+
return nil if @response.nil?
|
70
|
+
|
71
|
+
message = "#{@response[:method].to_s.upcase} "
|
72
|
+
message << redact_url(@response[:url].to_s) + ": "
|
73
|
+
message << "#{@response[:status]} - "
|
74
|
+
message << "#{response_message}" unless response_message.nil?
|
75
|
+
message << "#{response_error}" unless response_error.nil?
|
76
|
+
message
|
77
|
+
end
|
78
|
+
|
79
|
+
def redact_url(url_string)
|
80
|
+
%w[client_secret access_token].each do |token|
|
81
|
+
url_string.gsub!(/#{token}=\S+/, "#{token}=(redacted)") if url_string.include? token
|
82
|
+
end
|
83
|
+
url_string
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
class ClientError < Error; end
|
88
|
+
class BadRequest < ClientError; end
|
89
|
+
class Unauthorized < ClientError; end
|
90
|
+
class Forbidden < ClientError; end
|
91
|
+
class TooManyRequests < Forbidden; end
|
92
|
+
class TooManyLoginAttempts < Forbidden; end
|
93
|
+
class NotFound < ClientError; end
|
94
|
+
class NotAcceptable < ClientError; end
|
95
|
+
class Conflict < ClientError; end
|
96
|
+
class UnsupportedMediaType < ClientError; end
|
97
|
+
class UnprocessableEntity < ClientError; end
|
98
|
+
class ServerError < Error; end
|
99
|
+
class InternalServerError < ServerError; end
|
100
|
+
class NotImplemented < ServerError; end
|
101
|
+
class BadGateway < ServerError; end
|
102
|
+
class ServiceUnavailable < ServerError; end
|
103
|
+
class MissingContentType < ArgumentError; end
|
104
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'breacan/error'
|
3
|
+
|
4
|
+
module Breacan
|
5
|
+
module Response
|
6
|
+
class RaiseError < Faraday::Response::Middleware
|
7
|
+
private
|
8
|
+
|
9
|
+
def on_complete(response)
|
10
|
+
if error = Breacan::Error.from_response(response)
|
11
|
+
raise error
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: breacan
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- linyows
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-03-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sawyer
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.7'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.7'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
description: Simple Ruby wrapper for Slack API.
|
56
|
+
email:
|
57
|
+
- linyows@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".gitignore"
|
63
|
+
- Gemfile
|
64
|
+
- LICENSE.txt
|
65
|
+
- README.md
|
66
|
+
- Rakefile
|
67
|
+
- breacan.gemspec
|
68
|
+
- lib/breacan.rb
|
69
|
+
- lib/breacan/authentication.rb
|
70
|
+
- lib/breacan/client.rb
|
71
|
+
- lib/breacan/client/channels.rb
|
72
|
+
- lib/breacan/client/chat.rb
|
73
|
+
- lib/breacan/client/oauth.rb
|
74
|
+
- lib/breacan/configurable.rb
|
75
|
+
- lib/breacan/error.rb
|
76
|
+
- lib/breacan/response/raise_error.rb
|
77
|
+
- lib/breacan/version.rb
|
78
|
+
homepage: https://github.com/linyows/breacan
|
79
|
+
licenses:
|
80
|
+
- MIT
|
81
|
+
metadata: {}
|
82
|
+
post_install_message:
|
83
|
+
rdoc_options: []
|
84
|
+
require_paths:
|
85
|
+
- lib
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
requirements: []
|
97
|
+
rubyforge_project:
|
98
|
+
rubygems_version: 2.2.2
|
99
|
+
signing_key:
|
100
|
+
specification_version: 4
|
101
|
+
summary: Simple Ruby wrapper for Slack API.
|
102
|
+
test_files: []
|