botr 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.document +3 -0
  3. data/.gitignore +31 -0
  4. data/.rspec +1 -0
  5. data/.yardopts +1 -0
  6. data/ChangeLog.md +4 -0
  7. data/LICENSE.txt +20 -0
  8. data/README.md +278 -0
  9. data/Rakefile +43 -0
  10. data/botr.gemspec +24 -0
  11. data/botr.watchr +3 -0
  12. data/certs/cacert.pem +3554 -0
  13. data/lib/botr.rb +34 -0
  14. data/lib/botr/api/api.rb +83 -0
  15. data/lib/botr/api/authentication.rb +24 -0
  16. data/lib/botr/channels/channel.rb +137 -0
  17. data/lib/botr/channels/channel_thumbnail.rb +88 -0
  18. data/lib/botr/channels/channel_video.rb +130 -0
  19. data/lib/botr/channels/channel_view.rb +88 -0
  20. data/lib/botr/common/logger.rb +31 -0
  21. data/lib/botr/configuration.rb +18 -0
  22. data/lib/botr/http/http.rb +88 -0
  23. data/lib/botr/http/http_backend.rb +66 -0
  24. data/lib/botr/http/http_response.rb +48 -0
  25. data/lib/botr/http/multipart.rb +84 -0
  26. data/lib/botr/http/uri_ext.rb +28 -0
  27. data/lib/botr/object.rb +20 -0
  28. data/lib/botr/players/player.rb +149 -0
  29. data/lib/botr/players/player_view.rb +88 -0
  30. data/lib/botr/version.rb +3 -0
  31. data/lib/botr/videos/video.rb +187 -0
  32. data/lib/botr/videos/video_caption.rb +154 -0
  33. data/lib/botr/videos/video_conversion.rb +114 -0
  34. data/lib/botr/videos/video_engagement.rb +51 -0
  35. data/lib/botr/videos/video_tag.rb +52 -0
  36. data/lib/botr/videos/video_thumbnail.rb +87 -0
  37. data/lib/botr/videos/video_view.rb +89 -0
  38. data/spec/authentication_spec.rb +31 -0
  39. data/spec/botr_spec.rb +8 -0
  40. data/spec/http_backend_spec.rb +93 -0
  41. data/spec/http_response_spec.rb +48 -0
  42. data/spec/multipart_spec.rb +35 -0
  43. data/spec/spec_helper.rb +5 -0
  44. data/spec/test.txt +1 -0
  45. metadata +150 -0
@@ -0,0 +1,89 @@
1
+ module BOTR
2
+
3
+ class VideoView < BOTR::Object
4
+
5
+ class << self
6
+
7
+ attr_reader :last_status
8
+
9
+ def show(key, **options)
10
+ json = get_request(options.merge(:method => 'show',
11
+ :video_key => key))
12
+ res = JSON.parse(json.body)
13
+
14
+ if json.status == 200
15
+ params = process_show_response(res)
16
+ else
17
+ raise "HTTP Error #{json.status}: #{json.body}"
18
+ end
19
+
20
+ return new(params)
21
+ end
22
+
23
+ alias :find :show
24
+
25
+ def list(**options)
26
+ json = get_request(options.merge(:method => 'list'))
27
+ res = JSON.parse(json.body)
28
+
29
+ if json.status == 200
30
+ results = process_list_response(res)
31
+ else
32
+ raise "HTTP Error #{json.status}: #{json.body}"
33
+ end
34
+
35
+ return results
36
+ end
37
+
38
+ def all
39
+ list({})
40
+ end
41
+
42
+ private
43
+
44
+ def process_show_response(body)
45
+ @last_status = body["status"]
46
+
47
+ return body["video"]
48
+ end
49
+
50
+ def process_list_response(body)
51
+ @last_status = body["status"]
52
+ res = []
53
+
54
+ if body["videos"]
55
+ body["videos"].each do |video|
56
+ res << new(video)
57
+ end
58
+ elsif body["days"]
59
+ body["days"].each do |day|
60
+ res << new(day)
61
+ end
62
+ elsif body["years"]
63
+ body["years"].each do |year|
64
+ res << new(year)
65
+ end
66
+ else
67
+ res << new(body)
68
+ end
69
+
70
+ return res
71
+ end
72
+
73
+ end
74
+
75
+ attr_reader :last_status, :key, :streams, :downloads, :views, :pageviews,
76
+ :viewed, :title, :status, :date, :timestamp, :number, :total,
77
+ :months, :days, :year
78
+
79
+ def initialize(params = {})
80
+ params.each do |key, val|
81
+ param = "@#{key.to_s}"
82
+ next unless methods.include? key.to_sym
83
+ instance_variable_set(param, val)
84
+ end
85
+ end
86
+
87
+ end
88
+
89
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'botr/api/authentication'
3
+
4
+ class DummyClient
5
+
6
+ def api_secret_key
7
+ "uA96CFtJa138E2T5GhKfngml"
8
+ end
9
+
10
+ end
11
+
12
+ describe BOTR::Authentication do
13
+
14
+ before(:each) do
15
+ @dummy_client = DummyClient.new
16
+ @dummy_client.extend(BOTR::Authentication)
17
+ end
18
+
19
+ describe "#signature" do
20
+
21
+ it "should generature signature" do
22
+ params = {:text => "démo",
23
+ :api_format => "xml",
24
+ :api_key => "XOqEAfxj",
25
+ :api_nonce => "80684843",
26
+ :api_timestamp => "1237387851"}
27
+ @dummy_client.signature(params).should eql "fbdee51a45980f9876834dc5ee1ec5e93f67cb89"
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+ require 'botr'
3
+
4
+ describe BOTR do
5
+ it "should have a VERSION constant" do
6
+ subject.const_get('VERSION').should_not be_empty
7
+ end
8
+ end
@@ -0,0 +1,93 @@
1
+ require 'spec_helper'
2
+ require 'botr/http/http_backend'
3
+
4
+ RSpec::Matchers.define :a_uri_path_of do |expected|
5
+ match do |actual|
6
+ (actual.should be_a_kind_of URI) && (actual.request_uri.should eql expected)
7
+ end
8
+ description do
9
+ "a URI with path '#{expected}'"
10
+ end
11
+ end
12
+
13
+ RSpec::Matchers.define :a_POST_request_with_path do |expected|
14
+ match do |actual|
15
+ (actual.should be_a_kind_of Net::HTTP::Post) && (actual.instance_variable_get('@path').should eql expected)
16
+ end
17
+ description do
18
+ "a Net::HTTP::Post request with path '#{expected}'"
19
+ end
20
+ end
21
+
22
+ describe BOTR::HTTPBackend do
23
+
24
+ before :each do
25
+ @http = mock("http")
26
+ @resp = mock("response")
27
+
28
+ Net::HTTP.stub!(:start).and_yield(@http)
29
+ end
30
+
31
+ describe "#get" do
32
+
33
+ before :each do
34
+ @http.stub!(:request_get).and_return(@resp)
35
+ @resp.stub!(:code).and_return(200)
36
+ @resp.stub!(:body).and_return("")
37
+ end
38
+
39
+ it "should send HTTP GET request" do
40
+ @http.should_receive(:request_get).with(an_instance_of(URI::HTTP))
41
+ subject.get('http://www.example.com/')
42
+ end
43
+
44
+ it "should send HTTP GET request with params" do
45
+ @http.should_receive(:request_get).with(a_uri_path_of("/?field1=value1&field2=value2"))
46
+ subject.get('http://www.example.com/',
47
+ {:field1 => "value1", :field2 => "value2"})
48
+ end
49
+
50
+ it "should return HTTP response" do
51
+ res = subject.get('http://www.example.com')
52
+ res.should be_an_instance_of BOTR::HTTPResponse
53
+ res.status.should eql 200
54
+ res.body.should be_empty
55
+ end
56
+ end
57
+
58
+ describe "#post" do
59
+
60
+ before :each do
61
+ @http.stub!(:post_form).and_return(@resp)
62
+ @http.stub!(:request).and_return(@resp)
63
+ @resp.stub!(:code).and_return(200)
64
+ @resp.stub!(:body).and_return("")
65
+ end
66
+
67
+ it "should send HTTP POST request" do
68
+ @http.should_receive(:request).with(an_instance_of(Net::HTTP::Post))
69
+ subject.post('http://www.example.com/')
70
+ end
71
+
72
+ it "should send HTTP POST request with params" do
73
+ @http.should_receive(:request).with(a_POST_request_with_path("/?field1=value1&field2=value2"))
74
+ subject.post('http://www.example.com/',
75
+ {:field1 => "value1", :field2 => "value2"})
76
+ end
77
+
78
+ it "should send HTTP POST request with data" do
79
+ @http.should_receive(:request).with(an_instance_of(Net::HTTP::Post))
80
+ test_path = __dir__ + "/test.txt"
81
+ subject.post('http://www.example.com/', {}, test_path)
82
+ end
83
+
84
+ it "should return HTTP response" do
85
+ res = subject.post('http://www.example.com')
86
+ res.should be_an_instance_of BOTR::HTTPResponse
87
+ res.status.should eql 200
88
+ res.body.should be_empty
89
+ end
90
+
91
+ end
92
+
93
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+ require 'botr/http/http_response'
3
+
4
+ describe BOTR::HTTPResponse do
5
+
6
+ describe "OKResponse" do
7
+ it "should return status 200" do
8
+ resp = BOTR::OKResponse.new
9
+ resp.status.should eql 200
10
+ end
11
+ end
12
+
13
+ describe "BadRequestResponse" do
14
+ it "should return status 400" do
15
+ resp = BOTR::BadRequestResponse.new
16
+ resp.status.should eql 400
17
+ end
18
+ end
19
+
20
+ describe "UnauthorizedResponse" do
21
+ it "should return status 401" do
22
+ resp = BOTR::UnauthorizedResponse.new
23
+ resp.status.should eql 401
24
+ end
25
+ end
26
+
27
+ describe "ForbiddenResponse" do
28
+ it "should return status 403" do
29
+ resp = BOTR::ForbiddenResponse.new
30
+ resp.status.should eql 403
31
+ end
32
+ end
33
+
34
+ describe "NotFoundResponse" do
35
+ it "should return status 404" do
36
+ resp = BOTR::NotFoundResponse.new
37
+ resp.status.should eql 404
38
+ end
39
+ end
40
+
41
+ describe "NotAllowedResponse" do
42
+ it "should return status 405" do
43
+ resp = BOTR::NotAllowedResponse.new
44
+ resp.status.should eql 405
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+ require 'botr/http/multipart'
3
+
4
+ describe BOTR::Multipart do
5
+
6
+ before :each do
7
+ path = __dir__ + '/test.txt'
8
+ @expected_response = "--753536\r\nContent-Disposition: form-data; name=\"file\"; filename=\"test.txt\"\r\nContent-Length: 15\r\nContent-Type: text/plain\r\nContent-Transfer-Encoding: binary\r\n\r\nThis is a test.\r\n--753536--\r\n"
9
+ @multipart = BOTR::Multipart.new(path, '753536')
10
+ end
11
+
12
+ describe "#read" do
13
+ it "should return a string of content" do
14
+ res = @multipart.read
15
+ res.should be_kind_of String
16
+ res.should eql @expected_response
17
+ end
18
+ end
19
+
20
+ describe "#size" do
21
+ it "should return the number of bytes in content" do
22
+ bytesize = @expected_response.bytesize
23
+ @multipart.size.should eql bytesize
24
+ end
25
+ end
26
+
27
+ describe "#close" do
28
+ it "should close the IO stream" do
29
+ @multipart.should_not be_closed
30
+ @multipart.close
31
+ @multipart.should be_closed
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,5 @@
1
+ gem 'rspec', '~> 2.4'
2
+ require 'rspec'
3
+ require 'botr/version'
4
+
5
+ include BOTR
@@ -0,0 +1 @@
1
+ This is a test.
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: botr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - bertrandk
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-08-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.4'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubygems-tasks
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '0.2'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '0.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: watchr
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: yard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '0.8'
69
+ description: A ruby API kit that manages the authentication, serialization and sending
70
+ of API calls to the Bits on the Run online video platform.
71
+ email: b.karerangabo@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .document
77
+ - .gitignore
78
+ - .rspec
79
+ - .yardopts
80
+ - ChangeLog.md
81
+ - LICENSE.txt
82
+ - README.md
83
+ - Rakefile
84
+ - botr.gemspec
85
+ - botr.watchr
86
+ - certs/cacert.pem
87
+ - lib/botr.rb
88
+ - lib/botr/api/api.rb
89
+ - lib/botr/api/authentication.rb
90
+ - lib/botr/channels/channel.rb
91
+ - lib/botr/channels/channel_thumbnail.rb
92
+ - lib/botr/channels/channel_video.rb
93
+ - lib/botr/channels/channel_view.rb
94
+ - lib/botr/common/logger.rb
95
+ - lib/botr/configuration.rb
96
+ - lib/botr/http/http.rb
97
+ - lib/botr/http/http_backend.rb
98
+ - lib/botr/http/http_response.rb
99
+ - lib/botr/http/multipart.rb
100
+ - lib/botr/http/uri_ext.rb
101
+ - lib/botr/object.rb
102
+ - lib/botr/players/player.rb
103
+ - lib/botr/players/player_view.rb
104
+ - lib/botr/version.rb
105
+ - lib/botr/videos/video.rb
106
+ - lib/botr/videos/video_caption.rb
107
+ - lib/botr/videos/video_conversion.rb
108
+ - lib/botr/videos/video_engagement.rb
109
+ - lib/botr/videos/video_tag.rb
110
+ - lib/botr/videos/video_thumbnail.rb
111
+ - lib/botr/videos/video_view.rb
112
+ - spec/authentication_spec.rb
113
+ - spec/botr_spec.rb
114
+ - spec/http_backend_spec.rb
115
+ - spec/http_response_spec.rb
116
+ - spec/multipart_spec.rb
117
+ - spec/spec_helper.rb
118
+ - spec/test.txt
119
+ homepage: https://rubygems.org/gems/botr
120
+ licenses:
121
+ - MIT
122
+ metadata: {}
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ requirements: []
138
+ rubyforge_project:
139
+ rubygems_version: 2.0.6
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: A ruby API kit for Bits on the Run.
143
+ test_files:
144
+ - spec/authentication_spec.rb
145
+ - spec/botr_spec.rb
146
+ - spec/http_backend_spec.rb
147
+ - spec/http_response_spec.rb
148
+ - spec/multipart_spec.rb
149
+ - spec/spec_helper.rb
150
+ - spec/test.txt