botr 0.1.1 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0566390f9e32ca9a61ffeefb7530242bffed7a02
4
- data.tar.gz: 99a2af2ac184d15fd438d8aa99cc45caacdcdd3f
3
+ metadata.gz: ff0e34c44fecc55872d65243f45755214beeff7a
4
+ data.tar.gz: aba50853754c0a898cc7849ba8c2e114bc23c576
5
5
  SHA512:
6
- metadata.gz: 68a8d8d211fb8403bed97cbbbffe2ec1deab740e693f7cb6d171e7bf680be909541b5b81ed9312bcdf3dfb75ee3af33eaad1f0465196a80ab0a55dcbf7b3791f
7
- data.tar.gz: fc9e5e878caad0e0555a59fc399b831e3692a051868334914f1f2818b5b79d20e0c3e4df8fafd544c6ba2ea4539e6a6196f1a53a738be30ff7988ab89b1b1cf0
6
+ metadata.gz: efb5513746ee5b1c2185045e0f9df5502709d756a51222c14b1c97e376398dc49a0af1b28fb33cfe3f45751082cc60eb037cc05a62ee787b704600e4e318001e
7
+ data.tar.gz: 54c8e031503c4ef403f7f4c91c1382595677205deef61ff376d627402196febf4918430493c0ab9b4f4503dd7c1bc61b23c44ed0334fed5c53fb1ed9a20297a7
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # botr (BitsOnTheRun)
1
+ # botr (BitsOnTheRun) [![Gem Version](https://badge.fury.io/rb/botr.png)](http://badge.fury.io/rb/botr) [![Dependency Status](https://gemnasium.com/bertrandk/botr.png)](https://gemnasium.com/bertrandk/botr) [![Code Climate](https://codeclimate.com/github/bertrandk/botr.png)](https://codeclimate.com/github/bertrandk/botr)
2
2
 
3
3
  ## Requirements
4
4
 
@@ -12,7 +12,8 @@
12
12
 
13
13
  ## Description
14
14
 
15
- A ruby API kit that manages the authentication, serialization and sending of API calls to the Bits on the Run online video platform.
15
+ A ruby API kit that manages the authentication, serialization and sending of API
16
+ calls to the Bits on the Run online video platform.
16
17
 
17
18
  ## Features
18
19
 
@@ -22,242 +23,283 @@ The botr gem includes support for the following Bits on the Run API classes:
22
23
  * channels (video playlists)
23
24
  * players (based on JW Player)
24
25
 
26
+ ## Command-line Usage
27
+
28
+ $ gem install botr
29
+ $ botr upload /path/to/video.mp4 -k <API_KEY> -s <API_SECRET>
30
+
31
+ See `botr help` or `botr help upload` for more information.
32
+
25
33
  ## Examples
26
34
 
27
35
  require 'botr'
28
36
 
29
37
  ### Configuration
30
- BOTR.configure do |config|
31
- config.api_key = "<botr_api_key>"
32
- config.secret_key = "<botr_secret_key>"
33
- end
34
38
 
35
- NOTE: It is recommended to set the api key and the secret key as environment variables and reference them using the `ENV` hash (e.g. config.api_key = ENV["BOTR_API_KEY"]).
39
+ ```ruby
40
+ BOTR.configure do |config|
41
+ config.api_key = "<botr_api_key>"
42
+ config.secret_key = "<botr_secret_key>"
43
+ end
44
+
45
+ # NOTE: It is recommended to set the api key and the secret key as environment
46
+ # variables and reference them using the `ENV` hash (e.g. config.api_key = ENV["BOTR_API_KEY"]).
47
+ ```
36
48
 
37
49
  ### Videos
38
50
 
39
- # create a new video metadata container
40
- vid = BOTR::Video.new
41
- vid.create(title: "My cat video", author: "Me")
51
+ ```ruby
52
+ # create a new video metadata container
53
+ vid = BOTR::Video.new
54
+ vid.create(title: "My cat video", author: "Me")
42
55
 
43
- # upload actual video file
44
- vid.upload("/Users/Me/Movies/grumpy_kitty.mov")
56
+ # upload actual video file
57
+ vid.upload("/Users/Me/Movies/grumpy_kitty.mov")
45
58
 
46
- # update the properties of a video
47
- vid.update(title: "My super awesome cat video", description: "Mr. Snicker apparently doesn't like being filmed.")
59
+ # update the properties of a video
60
+ vid.update(title: "My super awesome cat video", description: "Mr. Snicker
61
+ apparently doesn't like being filmed.")
48
62
 
49
- # delete a given video and all its conversions
50
- vid.delete
63
+ # delete a given video and all its conversions
64
+ vid.delete
51
65
 
52
- # list all videos
53
- BOTR::Video.all # => [#<BOTR::Video>, #<BOTR::Video>, ...]
66
+ # list all videos
67
+ BOTR::Video.all # => [#<BOTR::Video>, #<BOTR::Video>, ...]
54
68
 
55
- # list only certain videos
56
- BOTR::Video.list(search: "cat", order_by: "date")
69
+ # list only certain videos
70
+ BOTR::Video.list(search: "cat", order_by: "date")
57
71
 
58
- # find a certain video by video key
59
- cat_vid = BOTR::Video.show("<video_key>") # => #<BOTR::Video @key="[video_key]">
72
+ # find a certain video by video key
73
+ cat_vid = BOTR::Video.show("<video_key>") # => #<BOTR::Video @key="[video_key]">
74
+ ```
60
75
 
61
76
  ### Video Conversions
62
77
 
63
- # create a new video conversion
64
- 480p_vid = BOTR::VideoConversion.new
65
- 480p_vid.create("<video_key>", "<template_key>")
78
+ ```ruby
79
+ # create a new video conversion
80
+ 480p_vid = BOTR::VideoConversion.new
81
+ 480p_vid.create("<video_key>", "<template_key>")
66
82
 
67
- # delete a given video conversion from the CDN
68
- 480p_vid.delete
83
+ # delete a given video conversion from the CDN
84
+ 480p_vid.delete
69
85
 
70
- # list all video conversions for a given video
71
- BOTR::VideoConversion.list("<video_key>", result_limit: 5)
86
+ # list all video conversions for a given video
87
+ BOTR::VideoConversion.list("<video_key>", result_limit: 5)
72
88
 
73
- # find a given video conversion by its conversion key
74
- aac_vid = BOTR::VideoConversion.show("<conversion_key>")
89
+ # find a given video conversion by its conversion key
90
+ aac_vid = BOTR::VideoConversion.show("<conversion_key>")
91
+ ```
75
92
 
76
93
  ### Video Thumbnails
77
94
 
78
- # find a video thumbnail
79
- thumb = BOTR::VideoThumbnail.show("<video_key>")
95
+ ```ruby
96
+ # find a video thumbnail
97
+ thumb = BOTR::VideoThumbnail.show("<video_key>")
80
98
 
81
- # update a video's thumbnail
82
- thumb.update(position: 7.25) # updates the video's thumbnail to the image at 7.25 seconds
99
+ # update a video's thumbnail
100
+ thumb.update(position: 7.25) # updates the video's thumbnail to the image at
101
+ 7.25 seconds
83
102
 
84
- # upload a new video thumbnail
85
- thumb.upload("/Users/Me/Pictures/snicker_smiles.png")
103
+ # upload a new video thumbnail
104
+ thumb.upload("/Users/Me/Pictures/snicker_smiles.png")
105
+ ```
86
106
 
87
107
  ### Video Captions
88
108
 
89
- # create a new video caption
90
- espanol = BOTR::VideoCaption.new
91
- espanol.create(label: "esp")
109
+ ```ruby
110
+ # create a new video caption
111
+ espanol = BOTR::VideoCaption.new
112
+ espanol.create(label: "esp")
92
113
 
93
- # upload the actual caption file
94
- espanol.upload("/Users/Me/Documents/grunon_gata.txt")
114
+ # upload the actual caption file
115
+ espanol.upload("/Users/Me/Documents/grunon_gata.txt")
95
116
 
96
- # update the video caption
97
- espanol.update(label: "Spanish")
117
+ # update the video caption
118
+ espanol.update(label: "Spanish")
98
119
 
99
- # delete a video caption
100
- espanol.delete("<caption_key>")
120
+ # delete a video caption
121
+ espanol.delete("<caption_key>")
101
122
 
102
- # list the captions for a video
103
- BOTR::VideoCaption.list("<video_key>", order_by: "label:asc")
123
+ # list the captions for a video
124
+ BOTR::VideoCaption.list("<video_key>", order_by: "label:asc")
104
125
 
105
- # get the caption information for a video
106
- cap = BOTR::VideoCaption.show("<video_key>")
126
+ # get the caption information for a video
127
+ cap = BOTR::VideoCaption.show("<video_key>")
128
+ ```
107
129
 
108
130
  ### Video Tags
109
131
 
110
- # list a video's tags
111
- BOTR::VideoTag.all
132
+ ```ruby
133
+ # list a video's tags
134
+ BOTR::VideoTag.all
112
135
 
113
- # search for video tags matching a certain criteria
114
- BOTR::VideoTag.list(search: "kitty")
136
+ # search for video tags matching a certain criteria
137
+ BOTR::VideoTag.list(search: "kitty")
138
+ ```
115
139
 
116
140
  ### Video Views
117
-
118
- date = Time.new(2002, 10, 31)
119
- unix_timestamp = date.to_i
120
141
 
121
- # list view statistics by video
122
- BOTR::VideoView.list(start_date: unix_timestamp)
142
+ ```ruby
143
+ date = Time.new(2002, 10, 31)
144
+ unix_timestamp = date.to_i
145
+
146
+ # list view statistics by video
147
+ BOTR::VideoView.list(start_date: unix_timestamp)
123
148
 
124
- # list view statistics by day
125
- BOTR::VideoView.list(list_by: "day", group_days: false)
149
+ # list view statistics by day
150
+ BOTR::VideoView.list(list_by: "day", group_days: false)
126
151
 
127
- # list view statistics, grouping by day
128
- BOTR::VideoView.list(list_by: "day", group_days: true)
152
+ # list view statistics, grouping by day
153
+ BOTR::VideoView.list(list_by: "day", group_days: true)
129
154
 
130
- # list view statistics in aggregate
131
- BOTR::VideoView.list(list_by: "day", aggregate: true)
155
+ # list view statistics in aggregate
156
+ BOTR::VideoView.list(list_by: "day", aggregate: true)
132
157
 
133
- # find a video's statistics
134
- BOTR::VideoView.show("<video_key>")
158
+ # find a video's statistics
159
+ BOTR::VideoView.show("<video_key>")
160
+ ```
135
161
 
136
162
  ### Video Engagements
137
-
138
- # display engagement analytics for a single video
139
- BOTR::VideoEngagement.show("<video_key>")
163
+
164
+ ```ruby
165
+ # display engagement analytics for a single video
166
+ BOTR::VideoEngagement.show("<video_key>")
167
+ ```
140
168
 
141
169
  ### Channels (Playlists)
142
-
143
- # create a manual playlist
144
- my_picks = BOTR::Channel.new
145
- my_picks.create(title: "My Picks", type: "manual")
146
170
 
147
- # create a dynamic playlist
148
- top_picks = BOTR::Channel.new
149
- top_picks.create(title: "Trending", type: "automatic")
171
+ ```ruby
172
+ # create a manual playlist
173
+ my_picks = BOTR::Channel.new
174
+ my_picks.create(title: "My Picks", type: "manual")
175
+
176
+ # create a dynamic playlist
177
+ top_picks = BOTR::Channel.new
178
+ top_picks.create(title: "Trending", type: "automatic")
150
179
 
151
- # add videos to a dynamic playlist
152
- top_picks.update(description: "Top 10 videos", tags: "kitty", sort_order: "views-desc", videos_max: 10)
180
+ # add videos to a dynamic playlist
181
+ top_picks.update(description: "Top 10 videos", tags: "kitty",
182
+ sort_order: "views-desc", videos_max: 10)
153
183
 
154
- # delete a channel
155
- top_picks.delete
184
+ # delete a channel
185
+ top_picks.delete
156
186
 
157
- # get a list of all channels
158
- BOTR::Channel.all
187
+ # get a list of all channels
188
+ BOTR::Channel.all
159
189
 
160
- # get a list of all dynamic "picks" channels
161
- BOTR::Channel.list(types_filter: "dynamic", search: "top")
190
+ # get a list of all dynamic "picks" channels
191
+ BOTR::Channel.list(types_filter: "dynamic", search: "top")
162
192
 
163
- # get a specific channel
164
- my_ch = BOTR::Channel.show("<channel_key>")
193
+ # get a specific channel
194
+ my_ch = BOTR::Channel.show("<channel_key>")
195
+ ```
165
196
 
166
197
  ### Channel Videos
167
-
168
- # get a list of videos in a channel
169
- BOTR::ChannelVideo.list(top_picks.key)
170
198
 
171
- # get video info. from a channel
172
- second_vid = BOTR::ChannelVideo.show(my_picks.key, position: 2)
199
+ ```ruby
200
+ # get a list of videos in a channel
201
+ BOTR::ChannelVideo.list(top_picks.key)
202
+
203
+ # get video info. from a channel
204
+ second_vid = BOTR::ChannelVideo.show(my_picks.key, position: 2)
173
205
 
174
- # remove a video from a manual channel
175
- second_vid.delete
206
+ # remove a video from a manual channel
207
+ second_vid.delete
176
208
 
177
- # add a video to a manual channel
178
- snicker_falls = BOTR::ChannelVideo.new({key: "<video_key>"})
179
- snicker_falls.create(my_picks.key)
209
+ # add a video to a manual channel
210
+ snicker_falls = BOTR::ChannelVideo.new({key: "<video_key>"})
211
+ snicker_falls.create(my_picks.key)
180
212
 
181
- # move a video to a different position in a manual channel
182
- BOTR::ChannelVideo.update(my_picks.key, position_from: 10, position_to: 2)
213
+ # move a video to a different position in a manual channel
214
+ BOTR::ChannelVideo.update(my_picks.key, position_from: 10, position_to: 2)
215
+ ```
183
216
 
184
217
  ### Channel Thumbnails
185
218
 
186
- # update a channel's thumbnail
187
- new_tumb = BOTR::ChannelThumbnail.new({key: "<channel_key>"})
188
- new_thumb.update
189
- new_thumb.upload("/Users/Me/Pictures/splash.png")
219
+ ```ruby
220
+ # update a channel's thumbnail
221
+ new_tumb = BOTR::ChannelThumbnail.new({key: "<channel_key>"})
222
+ new_thumb.update
223
+ new_thumb.upload("/Users/Me/Pictures/splash.png")
190
224
 
191
- # get the status of a video thumbnail creation (it takes about 10 seconds before a new thumbnail is ready to show)
192
- thumb_stat = BOTR::ChannelThumbnail.show("<channel_key>")
193
- thumb_stat.status # => "ready"
225
+ # get the status of a video thumbnail creation (it takes about 10 seconds
226
+ before a new thumbnail is ready to show)
227
+ thumb_stat = BOTR::ChannelThumbnail.show("<channel_key>")
228
+ thumb_stat.status # => "ready"
229
+ ```
194
230
 
195
231
  ### Channel Views
196
232
 
197
- # get view stats by channel
198
- BOTR::ChannelView.list(list_by: "channel")
233
+ ```ruby
234
+ # get view stats by channel
235
+ BOTR::ChannelView.list(list_by: "channel")
199
236
 
200
- # get channel view stats by day
201
- BOTR::ChannelView.list(list_by: "day", group_days: false)
237
+ # get channel view stats by day
238
+ BOTR::ChannelView.list(list_by: "day", group_days: false)
202
239
 
203
- # get channel view stats by grouped days (i.e. in months and years)
204
- BOTR::ChannelView.list(list_by: "day", group_days: true)
240
+ # get channel view stats by grouped days (i.e. in months and years)
241
+ BOTR::ChannelView.list(list_by: "day", group_days: true)
205
242
 
206
- # get aggregate channel view stats
207
- BOTR::ChannelView.list(aggregate: true)
243
+ # get aggregate channel view stats
244
+ BOTR::ChannelView.list(aggregate: true)
208
245
 
209
- # get view stats for a specific channel
210
- ch_stats = BOTR::ChannelView.show("<channel_key>", group_days: false)
246
+ # get view stats for a specific channel
247
+ ch_stats = BOTR::ChannelView.show("<channel_key>", group_days: false)
211
248
 
212
- # get view stats for a specific channel in months and years
213
- ch_group_stats = BOTR::ChannelView.show("<channel_key>", group_days: true)
249
+ # get view stats for a specific channel in months and years
250
+ ch_group_stats = BOTR::ChannelView.show("<channel_key>", group_days: true)
214
251
 
215
- # get aggregate view stats for a specific channel
216
- ch_report = BOTR::ChannelView.show("<channel_key>", aggregate: true)
252
+ # get aggregate view stats for a specific channel
253
+ ch_report = BOTR::ChannelView.show("<channel_key>", aggregate: true)
254
+ ```
217
255
 
218
256
  ### Players
219
-
220
- # create a JW Player
221
- new_player = BOTR::Player.new
222
- new_player.create("Awesome Player", "<sharing_player_key>", autostart: false)
223
257
 
224
- # update a player's settings
225
- new_player.update(controlbar: bottom, repeat: always)
258
+ ```ruby
259
+ # create a JW Player
260
+ new_player = BOTR::Player.new
261
+ new_player.create("Awesome Player", "<sharing_player_key>", autostart: false)
226
262
 
227
- # delete a player
228
- new_player.delete
263
+ # update a player's settings
264
+ new_player.update(controlbar: bottom, repeat: always)
229
265
 
230
- # get a list of all players
231
- BOTR::Player.all
266
+ # delete a player
267
+ new_player.delete
232
268
 
233
- # list only certain players
234
- BOTR::Player.list(search: "awesome")
269
+ # get a list of all players
270
+ BOTR::Player.all
235
271
 
236
- # get a specific player
237
- my_player = BOTR::Player.show("<player_key>")
272
+ # list only certain players
273
+ BOTR::Player.list(search: "awesome")
274
+
275
+ # get a specific player
276
+ my_player = BOTR::Player.show("<player_key>")
277
+ ```
238
278
 
239
279
  ### Player Views
240
-
241
- # get views by player
242
- BOTR::PlayerView.list(list_by: "player")
243
280
 
244
- # get views by day
245
- BOTR::PlayerView.list(list_by: "day", group_days: flase, include_empty_days: true)
281
+ ```ruby
282
+ # get views by player
283
+ BOTR::PlayerView.list(list_by: "player")
284
+
285
+ # get views by day
286
+ BOTR::PlayerView.list(list_by: "day", group_days: flase, include_empty_days: true)
246
287
 
247
- # get views by month and year
248
- BOTR::PlayerView.list(list_by: "day", group_days: true)
288
+ # get views by month and year
289
+ BOTR::PlayerView.list(list_by: "day", group_days: true)
249
290
 
250
- # get aggregate player view
251
- BOTR::PlayerView.list(aggregate: true)
291
+ # get aggregate player view
292
+ BOTR::PlayerView.list(aggregate: true)
252
293
 
253
- # get view stats for a specific player
254
- player_stats = BOTR::PlayerView.show("<player_key>", group_days: false)
294
+ # get view stats for a specific player
295
+ player_stats = BOTR::PlayerView.show("<player_key>", group_days: false)
255
296
 
256
- # get view stats for a specific player in months and years
257
- player_group_stats = BOTR::PlayerView.show("<player_key>", group_days: true)
297
+ # get view stats for a specific player in months and years
298
+ player_group_stats = BOTR::PlayerView.show("<player_key>", group_days: true)
258
299
 
259
- # get aggregate view stats for a specific player
260
- player_report = BOTR::PlayerView.show("<player_key>", aggregate: true)
300
+ # get aggregate view stats for a specific player
301
+ player_report = BOTR::PlayerView.show("<player_key>", aggregate: true)
302
+ ```
261
303
 
262
304
  ## Todo
263
305
 
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- mode: ruby -*-
3
+
4
+ $:.unshift File.expand_path('../../lib/', __FILE__)
5
+
6
+ require 'botr'
7
+
8
+ BOTR::CLI.start(ARGV)
@@ -17,6 +17,8 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ['lib']
19
19
 
20
+ gem.add_dependency 'thor', '~> 0.18.1'
21
+
20
22
  gem.add_development_dependency 'rspec', '~> 2.4'
21
23
  gem.add_development_dependency 'rubygems-tasks', '~> 0.2'
22
24
  gem.add_development_dependency 'watchr', '~> 0.7'
@@ -1,5 +1,6 @@
1
1
  require 'botr/version'
2
2
  require 'botr/configuration'
3
+ require 'botr/cli'
3
4
 
4
5
  require 'botr/common/logger'
5
6
 
@@ -0,0 +1,67 @@
1
+ require "thor"
2
+
3
+ module BOTR
4
+
5
+ class CLI < Thor
6
+
7
+ desc "upload VIDEO_PATH", "Uploads the video specified by VIDEO_PATH"
8
+ long_desc <<-LONGDESC
9
+ Uploads the video specified by VIDEO_PATH. You must also provide an api KEY and an api SECRET.
10
+
11
+ With -t option, you may specify the title of the video.
12
+
13
+ With -g option, you may specify tags for the video; multiple tags should be comma-separated.
14
+
15
+ With -d option, you may specify a description for the video.
16
+
17
+ With -a option, you may specify the author of the video.
18
+
19
+ With -d option, you may specify the video creation date; the date must be in Unix timestamp format.
20
+
21
+ With -l option, you may specify the URL of the web page where this video will be published.
22
+ LONGDESC
23
+ option :key, :aliases => :k, :type => :string, :required => true
24
+ option :secret, :aliases => :s, :type => :string, :required => true
25
+ option :title, :aliases => :t, :type => :string
26
+ option :tags, :aliases => :g, :type => :string
27
+ option :description, :aliases => :d, :type => :string
28
+ option :author, :aliases => :a, :type => :string
29
+ option :date, :aliases => :d, :type => :numeric
30
+ option :link, :aliases => :l, :type => :string
31
+ def upload(video_path)
32
+ _options = clean_options(options)
33
+ set_configurations(_options[:key], _options[:secret])
34
+
35
+ puts "\nStarting upload.\n\n"
36
+ prepare_video_container(_options)
37
+
38
+ puts "Uploading....\n\n"
39
+ upload_video(video_path)
40
+
41
+ puts "Upload Complete.\n\n"
42
+ end
43
+
44
+ private
45
+
46
+ def clean_options(opt)
47
+ opt.reject { |k, v| v.nil? }
48
+ end
49
+
50
+ def set_configurations(key, secret)
51
+ BOTR.configure do |config|
52
+ config.api_key = key
53
+ config.secret_key = secret
54
+ end
55
+ end
56
+
57
+ def prepare_video_container(opt)
58
+ @video = BOTR::Video.new(opt)
59
+ @video.create
60
+ end
61
+
62
+ def upload_video(video_path)
63
+ @video.upload(video_path)
64
+ end
65
+ end
66
+
67
+ end
@@ -1,3 +1,3 @@
1
1
  module BOTR
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: botr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - bertrandk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-21 00:00:00.000000000 Z
11
+ date: 2013-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.18.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.18.1
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rspec
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -69,7 +83,8 @@ dependencies:
69
83
  description: A ruby API kit that manages the authentication, serialization and sending
70
84
  of API calls to the Bits on the Run online video platform.
71
85
  email: b.karerangabo@gmail.com
72
- executables: []
86
+ executables:
87
+ - botr
73
88
  extensions: []
74
89
  extra_rdoc_files: []
75
90
  files:
@@ -81,6 +96,7 @@ files:
81
96
  - LICENSE.txt
82
97
  - README.md
83
98
  - Rakefile
99
+ - bin/botr
84
100
  - botr.gemspec
85
101
  - botr.watchr
86
102
  - certs/cacert.pem
@@ -92,6 +108,7 @@ files:
92
108
  - lib/botr/channels/channel_thumbnail.rb
93
109
  - lib/botr/channels/channel_video.rb
94
110
  - lib/botr/channels/channel_view.rb
111
+ - lib/botr/cli.rb
95
112
  - lib/botr/common/logger.rb
96
113
  - lib/botr/configuration.rb
97
114
  - lib/botr/http/http.rb