slack-rtm-api 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -0,0 +1,18 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ .rvmrc
12
+ *.so
13
+ *.o
14
+ *.a
15
+ mkmf.log
16
+ *.gem
17
+ .ruby-gemset
18
+ .ruby-version
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --format documentation --color
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in getyourguide.gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ gem 'pry'
8
+ gem 'pry-byebug'
9
+ end
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,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,6 @@
1
+ require "slack-rtm-api/version"
2
+ require "slack-rtm-api/api_client"
3
+ require "slack-rtm-api/client_wrapper"
4
+
5
+ module SlackRTMApi
6
+ end
@@ -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,14 @@
1
+ module SlackRTMApi
2
+ class ClientWrapper
3
+ attr_accessor :url, :socket
4
+
5
+ def initialize(url, socket)
6
+ @url = url
7
+ @socket = socket
8
+ end
9
+
10
+ def write(*args)
11
+ self.socket.write(*args)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,3 @@
1
+ module SlackRTMApi
2
+ VERSION = "0.0.1"
3
+ 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
@@ -0,0 +1,6 @@
1
+ require 'getyourguide'
2
+ require 'coveralls'
3
+ Coveralls.wear!
4
+
5
+ RSpec.configure do |config|
6
+ end
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