slack-rtm-api 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.rspec +1 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +1 -0
- data/Rakefile +2 -0
- data/lib/slack-rtm-api.rb +6 -0
- data/lib/slack-rtm-api/api_client.rb +121 -0
- data/lib/slack-rtm-api/client_wrapper.rb +14 -0
- data/lib/slack-rtm-api/version.rb +3 -0
- data/slack-rtm-api.gemspec +32 -0
- data/spec/getyourguide/models/activity_spec.rb +83 -0
- data/spec/getyourguide/models/category_spec.rb +24 -0
- data/spec/getyourguide/models/destination_spec.rb +70 -0
- data/spec/getyourguide/models/image_format_spec.rb +36 -0
- data/spec/getyourguide/models/image_spec.rb +23 -0
- data/spec/getyourguide/models/location_spec.rb +35 -0
- data/spec/getyourguide/models/top_category_spec.rb +42 -0
- data/spec/spec_helper.rb +6 -0
- metadata +127 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b712bcb1116dcb56dfc87445c8d7e2b538d59c68
|
4
|
+
data.tar.gz: aa218a36ea07d1520442c6cf0d6de33dfc254783
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 345cfa08610b64a8c639e2723d7998d89102a62428b69836a7e08f09b3dcdfcc7c7819d0595de4db47cfce3f7c02788085a6349e992704d3917d751c76fb974a
|
7
|
+
data.tar.gz: b4e7915b35e1be890e0987a7bd2129e8c5498b41fe400b88a43d4f76f8aaa17ce963f7f0c17fd799d2a99e49f54d5c162ba70cbe0a7a258f23991682b2579bb6
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--format documentation --color
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 Rémi Delhaye
|
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 @@
|
|
1
|
+
README coming soon
|
data/Rakefile
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'socket'
|
3
|
+
require 'websocket/driver'
|
4
|
+
require 'logger'
|
5
|
+
|
6
|
+
module SlackRTMApi
|
7
|
+
|
8
|
+
class ApiClient
|
9
|
+
VALID_DRIVER_EVENTS = [:open, :message, :error]
|
10
|
+
BASE_URL = 'https://slack.com/api'
|
11
|
+
RTM_START_PATH = '/rtm.start'
|
12
|
+
|
13
|
+
def initialize(token, silent = true)
|
14
|
+
@logger = logger = Logger.new(STDOUT) unless silent
|
15
|
+
@token = token
|
16
|
+
@silent = silent
|
17
|
+
@ready = false
|
18
|
+
@connected = false
|
19
|
+
|
20
|
+
if token.nil?
|
21
|
+
raise ArgumentError.new "You should pass a valid RTM Websocket url"
|
22
|
+
else
|
23
|
+
@url = get_ws_url
|
24
|
+
end
|
25
|
+
|
26
|
+
@event_handlers = {}
|
27
|
+
@events_queue = []
|
28
|
+
end
|
29
|
+
|
30
|
+
def bind(type, &block)
|
31
|
+
unless VALID_DRIVER_EVENTS.include? type
|
32
|
+
raise ArgumentError.new "The event `#{type}` doesn't exist, available events are: #{VALID_DRIVER_EVENTS}"
|
33
|
+
end
|
34
|
+
|
35
|
+
@event_handlers[type] = block
|
36
|
+
end
|
37
|
+
|
38
|
+
def send(event)
|
39
|
+
event[:id] = random_id
|
40
|
+
@events_queue << event.to_json
|
41
|
+
end
|
42
|
+
|
43
|
+
def init
|
44
|
+
return if @ready
|
45
|
+
|
46
|
+
@socket = OpenSSL::SSL::SSLSocket.new TCPSocket.new(@url.host, 443)
|
47
|
+
@socket.connect
|
48
|
+
|
49
|
+
@driver = WebSocket::Driver.client SlackRTMApi::ClientWrapper.new(@url.to_s, @socket)
|
50
|
+
|
51
|
+
@driver.on :open do
|
52
|
+
@connected = true
|
53
|
+
send_log "WebSocket::Driver is now connected"
|
54
|
+
@event_handlers[:open].call unless @event_handlers[:open].nil?
|
55
|
+
end
|
56
|
+
|
57
|
+
@driver.on :error do |event|
|
58
|
+
@connected = false
|
59
|
+
send_log "WebSocket::Driver recieved an error"
|
60
|
+
@event_handlers[:error].call unless @event_handlers[:error].nil?
|
61
|
+
end
|
62
|
+
|
63
|
+
@driver.on :message do |event|
|
64
|
+
data = JSON.parse event.data
|
65
|
+
send_log "WebSocket::Driver recieved an event with data: #{data}"
|
66
|
+
@event_handlers[:message].call data unless @event_handlers[:message].nil?
|
67
|
+
end
|
68
|
+
|
69
|
+
@driver.start
|
70
|
+
|
71
|
+
@ready = true
|
72
|
+
end
|
73
|
+
|
74
|
+
def check_ws
|
75
|
+
data = @socket.readpartial 4096
|
76
|
+
|
77
|
+
return if data.nil? or data.empty?
|
78
|
+
|
79
|
+
@driver.parse data
|
80
|
+
|
81
|
+
handle_events_queue
|
82
|
+
end
|
83
|
+
|
84
|
+
def handle_events_queue
|
85
|
+
@events_queue.each do |event|
|
86
|
+
send_log "WebSocket::Driver send #{event}"
|
87
|
+
@driver.text event
|
88
|
+
end
|
89
|
+
|
90
|
+
@events_queue.clear
|
91
|
+
end
|
92
|
+
|
93
|
+
def start
|
94
|
+
t = Thread.new do
|
95
|
+
init
|
96
|
+
loop do
|
97
|
+
check_ws
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
t.abort_on_exception = true
|
102
|
+
end
|
103
|
+
|
104
|
+
private
|
105
|
+
|
106
|
+
def get_ws_url
|
107
|
+
req = Net::HTTP.post_form URI(BASE_URL + RTM_START_PATH), token: @token
|
108
|
+
body = JSON.parse req.body
|
109
|
+
URI body['url']
|
110
|
+
end
|
111
|
+
|
112
|
+
def send_log(log)
|
113
|
+
@logger.info(log) unless @silent
|
114
|
+
end
|
115
|
+
|
116
|
+
def random_id
|
117
|
+
SecureRandom.random_number 9999999
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require File.expand_path('../lib/slack-rtm-api/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = 'slack-rtm-api'
|
6
|
+
spec.version = SlackRTMApi::VERSION
|
7
|
+
spec.authors = ['Rémi Delhaye']
|
8
|
+
spec.email = ['contact@rdlh.io']
|
9
|
+
spec.summary = 'A simple Slack RTM API Client'
|
10
|
+
spec.description = 'A simple Slack RTM API Client'
|
11
|
+
spec.homepage = 'https://github.com/rdlh/slack-rtm-api'
|
12
|
+
spec.license = 'MIT'
|
13
|
+
spec.required_ruby_version = '~> 2.0'
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ['lib']
|
19
|
+
|
20
|
+
dev_dep = %w(
|
21
|
+
bundler
|
22
|
+
rake
|
23
|
+
colored
|
24
|
+
)
|
25
|
+
|
26
|
+
run_dep = %w(
|
27
|
+
websocket-driver
|
28
|
+
)
|
29
|
+
|
30
|
+
dev_dep.each { |d| spec.add_development_dependency d }
|
31
|
+
run_dep.each { |d| spec.add_runtime_dependency d }
|
32
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GetYourGuide::Models::Activity do
|
4
|
+
subject(:category) {
|
5
|
+
GetYourGuide::Models::Category.new(
|
6
|
+
provider_id: 1,
|
7
|
+
name: 'Name'
|
8
|
+
)
|
9
|
+
}
|
10
|
+
subject(:location) {
|
11
|
+
GetYourGuide::Models::Location.new(
|
12
|
+
provider_id: 1,
|
13
|
+
name: 'Name',
|
14
|
+
country: 'Country',
|
15
|
+
start_location: false
|
16
|
+
)
|
17
|
+
}
|
18
|
+
subject(:image) {
|
19
|
+
GetYourGuide::Models::Image.new(
|
20
|
+
url: 'https://assets-cdn.github.com/images/modules/open_graph/github-mark.png',
|
21
|
+
ssl: true
|
22
|
+
)
|
23
|
+
}
|
24
|
+
subject(:activity) {
|
25
|
+
GetYourGuide::Models::Activity.new(
|
26
|
+
provider_id: 1,
|
27
|
+
title: 'Title',
|
28
|
+
abstract: 'Abstract description',
|
29
|
+
categories: [category],
|
30
|
+
locations: [location],
|
31
|
+
starting_point: true,
|
32
|
+
indivative_price: 100.50,
|
33
|
+
rating: 4.5,
|
34
|
+
pictures: [image]
|
35
|
+
)
|
36
|
+
}
|
37
|
+
|
38
|
+
it 'should be a GetYourGuide::Models::Activity object' do
|
39
|
+
expect(activity).to be_an_instance_of(GetYourGuide::Models::Activity)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should have a provider_id' do
|
43
|
+
expect(activity.provider_id).to eq(1)
|
44
|
+
expect(activity.provider_id).to be_an_instance_of(Fixnum)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should have a title' do
|
48
|
+
expect(activity.title).to eq('Title')
|
49
|
+
expect(activity.title).to be_an_instance_of(String)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should have a abstract description' do
|
53
|
+
expect(activity.abstract).to eq('Abstract description')
|
54
|
+
expect(activity.abstract).to be_an_instance_of(String)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should have a Boolean starting_point' do
|
58
|
+
expect(activity.starting_point).to eq(true).or eq(false)
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should have a Float indivative_price' do
|
62
|
+
expect(activity.indivative_price).to be_an_instance_of(Float)
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should have a Float rating' do
|
66
|
+
expect(activity.rating).to be_an_instance_of(Float)
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should have an Array[GetYourGuide::Models::Category] as categories' do
|
70
|
+
expect(activity.categories).to be_an_instance_of(Array)
|
71
|
+
expect(activity.categories.first).to be_an_instance_of(GetYourGuide::Models::Category)
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should have an Array[GetYourGuide::Models::Location] as locations' do
|
75
|
+
expect(activity.locations).to be_an_instance_of(Array)
|
76
|
+
expect(activity.locations.first).to be_an_instance_of(GetYourGuide::Models::Location)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should have an Array[GetYourGuide::Models::Image] as pictures' do
|
80
|
+
expect(activity.pictures).to be_an_instance_of(Array)
|
81
|
+
expect(activity.pictures.first).to be_an_instance_of(GetYourGuide::Models::Image)
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GetYourGuide::Models::Category do
|
4
|
+
subject(:category) {
|
5
|
+
GetYourGuide::Models::Category.new(
|
6
|
+
provider_id: 1,
|
7
|
+
name: 'Name'
|
8
|
+
)
|
9
|
+
}
|
10
|
+
|
11
|
+
it 'should be a GetYourGuide::Models::Category object' do
|
12
|
+
expect(category).to be_an_instance_of(GetYourGuide::Models::Category)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should have a provider_id' do
|
16
|
+
expect(category.provider_id).to eq(1)
|
17
|
+
expect(category.provider_id).to be_an_instance_of(Fixnum)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should have a name' do
|
21
|
+
expect(category.name).to eq('Name')
|
22
|
+
expect(category.name).to be_an_instance_of(String)
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GetYourGuide::Models::Destination do
|
4
|
+
subject(:destination) {
|
5
|
+
GetYourGuide::Models::Destination.new(
|
6
|
+
provider_id: 1,
|
7
|
+
name: 'Name',
|
8
|
+
country: 'Country',
|
9
|
+
unlocode: 'FR',
|
10
|
+
iata: 'EUR',
|
11
|
+
destination_type: 'Destination Type'
|
12
|
+
)
|
13
|
+
}
|
14
|
+
subject(:destination_with_nil_attributes) {
|
15
|
+
GetYourGuide::Models::Destination.new(
|
16
|
+
provider_id: 1,
|
17
|
+
name: 'Name',
|
18
|
+
country: 'Country',
|
19
|
+
unlocode: nil,
|
20
|
+
iata: nil,
|
21
|
+
destination_type: 'Destination Type'
|
22
|
+
)
|
23
|
+
}
|
24
|
+
|
25
|
+
it 'should be a GetYourGuide::Models::Destination object' do
|
26
|
+
expect(destination).to be_an_instance_of(GetYourGuide::Models::Destination)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should have a provider_id' do
|
30
|
+
expect(destination.provider_id).to eq(1)
|
31
|
+
expect(destination.provider_id).to be_an_instance_of(Fixnum)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should have a name' do
|
35
|
+
expect(destination.name).to eq('Name')
|
36
|
+
expect(destination.name).to be_an_instance_of(String)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should have a country' do
|
40
|
+
expect(destination.country).to eq('Country')
|
41
|
+
expect(destination.country).to be_an_instance_of(String)
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'WITH iata and un/locode' do
|
45
|
+
it 'should have a not null iata' do
|
46
|
+
expect(destination.iata).to eq('EUR')
|
47
|
+
expect(destination.iata).to be_an_instance_of(String)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should have a not null un/locode' do
|
51
|
+
expect(destination.unlocode).to eq('FR')
|
52
|
+
expect(destination.unlocode).to be_an_instance_of(String)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'WITHOUT iata and un/locode' do
|
57
|
+
it 'should have a null iata' do
|
58
|
+
expect(destination_with_nil_attributes.iata).to be_nil
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should have a null un/locode' do
|
62
|
+
expect(destination_with_nil_attributes.unlocode).to be_nil
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should have a destination_type' do
|
67
|
+
expect(destination.destination_type).to eq('Destination Type')
|
68
|
+
expect(destination.destination_type).to be_an_instance_of(String)
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GetYourGuide::Models::ImageFormat do
|
4
|
+
subject(:image_format) {
|
5
|
+
GetYourGuide::Models::ImageFormat.new(
|
6
|
+
provider_id: 1,
|
7
|
+
width: 200,
|
8
|
+
height: 300,
|
9
|
+
comment: 'Comment'
|
10
|
+
)
|
11
|
+
}
|
12
|
+
|
13
|
+
it 'should be a GetYourGuide::Models::ImageFormat object' do
|
14
|
+
expect(image_format).to be_an_instance_of(GetYourGuide::Models::ImageFormat)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should have a provider_id' do
|
18
|
+
expect(image_format.provider_id).to eq(1)
|
19
|
+
expect(image_format.provider_id).to be_an_instance_of(Fixnum)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should have a width' do
|
23
|
+
expect(image_format.width).to eq(200)
|
24
|
+
expect(image_format.width).to be_an_instance_of(Fixnum)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should have a height' do
|
28
|
+
expect(image_format.height).to eq(300)
|
29
|
+
expect(image_format.height).to be_an_instance_of(Fixnum)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should have a comment' do
|
33
|
+
expect(image_format.comment).to eq('Comment')
|
34
|
+
expect(image_format.comment).to be_an_instance_of(String)
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GetYourGuide::Models::Image do
|
4
|
+
subject(:image) {
|
5
|
+
GetYourGuide::Models::Image.new(
|
6
|
+
url: 'https://assets-cdn.github.com/images/modules/open_graph/github-mark.png',
|
7
|
+
ssl: true
|
8
|
+
)
|
9
|
+
}
|
10
|
+
|
11
|
+
it 'should be a GetYourGuide::Models::Image object' do
|
12
|
+
expect(image).to be_an_instance_of(GetYourGuide::Models::Image)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should have a String url' do
|
16
|
+
expect(image.url).to eq('https://assets-cdn.github.com/images/modules/open_graph/github-mark.png')
|
17
|
+
expect(image.url).to be_an_instance_of(String)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should have a Boolean ssl' do
|
21
|
+
expect(image.ssl).to eq(true).or eq(false)
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GetYourGuide::Models::Location do
|
4
|
+
subject(:location) {
|
5
|
+
GetYourGuide::Models::Location.new(
|
6
|
+
provider_id: 1,
|
7
|
+
name: 'Name',
|
8
|
+
country: 'Country',
|
9
|
+
start_location: true
|
10
|
+
)
|
11
|
+
}
|
12
|
+
|
13
|
+
it 'should be a GetYourGuide::Models::Location object' do
|
14
|
+
expect(location).to be_an_instance_of(GetYourGuide::Models::Location)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should have a provider_id' do
|
18
|
+
expect(location.provider_id).to eq(1)
|
19
|
+
expect(location.provider_id).to be_an_instance_of(Fixnum)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should have a name' do
|
23
|
+
expect(location.name).to eq('Name')
|
24
|
+
expect(location.name).to be_an_instance_of(String)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should have a country' do
|
28
|
+
expect(location.country).to eq('Country')
|
29
|
+
expect(location.country).to be_an_instance_of(String)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should have a start_location' do
|
33
|
+
expect(location.start_location).to eq(true).or eq(false)
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GetYourGuide::Models::TopCategory do
|
4
|
+
subject(:top_category) {
|
5
|
+
GetYourGuide::Models::TopCategory.new(
|
6
|
+
provider_id: 1,
|
7
|
+
name: 'Name',
|
8
|
+
link: 'Link',
|
9
|
+
picture: 'Picture',
|
10
|
+
rating: 'Rating'
|
11
|
+
)
|
12
|
+
}
|
13
|
+
|
14
|
+
it 'should be a GetYourGuide::Models::TopCategory object' do
|
15
|
+
expect(top_category).to be_an_instance_of(GetYourGuide::Models::TopCategory)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should have a provider_id' do
|
19
|
+
expect(top_category.provider_id).to eq(1)
|
20
|
+
expect(top_category.provider_id).to be_an_instance_of(Fixnum)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should have a name' do
|
24
|
+
expect(top_category.name).to eq('Name')
|
25
|
+
expect(top_category.name).to be_an_instance_of(String)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should have a link' do
|
29
|
+
expect(top_category.link).to eq('Link')
|
30
|
+
expect(top_category.link).to be_an_instance_of(String)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should have a picture' do
|
34
|
+
expect(top_category.picture).to eq('Picture')
|
35
|
+
expect(top_category.picture).to be_an_instance_of(String)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should have a rating' do
|
39
|
+
expect(top_category.rating).to eq('Rating')
|
40
|
+
expect(top_category.rating).to be_an_instance_of(String)
|
41
|
+
end
|
42
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: slack-rtm-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rémi Delhaye
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: colored
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: websocket-driver
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: A simple Slack RTM API Client
|
70
|
+
email:
|
71
|
+
- contact@rdlh.io
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rspec"
|
78
|
+
- Gemfile
|
79
|
+
- LICENSE.txt
|
80
|
+
- README.md
|
81
|
+
- Rakefile
|
82
|
+
- lib/slack-rtm-api.rb
|
83
|
+
- lib/slack-rtm-api/api_client.rb
|
84
|
+
- lib/slack-rtm-api/client_wrapper.rb
|
85
|
+
- lib/slack-rtm-api/version.rb
|
86
|
+
- slack-rtm-api.gemspec
|
87
|
+
- spec/getyourguide/models/activity_spec.rb
|
88
|
+
- spec/getyourguide/models/category_spec.rb
|
89
|
+
- spec/getyourguide/models/destination_spec.rb
|
90
|
+
- spec/getyourguide/models/image_format_spec.rb
|
91
|
+
- spec/getyourguide/models/image_spec.rb
|
92
|
+
- spec/getyourguide/models/location_spec.rb
|
93
|
+
- spec/getyourguide/models/top_category_spec.rb
|
94
|
+
- spec/spec_helper.rb
|
95
|
+
homepage: https://github.com/rdlh/slack-rtm-api
|
96
|
+
licenses:
|
97
|
+
- MIT
|
98
|
+
metadata: {}
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
require_paths:
|
102
|
+
- lib
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - "~>"
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '2.0'
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
requirements: []
|
114
|
+
rubyforge_project:
|
115
|
+
rubygems_version: 2.4.6
|
116
|
+
signing_key:
|
117
|
+
specification_version: 4
|
118
|
+
summary: A simple Slack RTM API Client
|
119
|
+
test_files:
|
120
|
+
- spec/getyourguide/models/activity_spec.rb
|
121
|
+
- spec/getyourguide/models/category_spec.rb
|
122
|
+
- spec/getyourguide/models/destination_spec.rb
|
123
|
+
- spec/getyourguide/models/image_format_spec.rb
|
124
|
+
- spec/getyourguide/models/image_spec.rb
|
125
|
+
- spec/getyourguide/models/location_spec.rb
|
126
|
+
- spec/getyourguide/models/top_category_spec.rb
|
127
|
+
- spec/spec_helper.rb
|