proteus_client 0.0.7 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,6 +3,12 @@ require 'rest_client'
3
3
 
4
4
  require_relative 'proteus_client/config'
5
5
  require_relative 'proteus_client/proxy'
6
+ require_relative 'proteus_client/representers/video'
7
+ require_relative 'proteus_client/representers/recording'
8
+ require_relative 'proteus_client/models/recording'
9
+ require_relative 'proteus_client/models/video'
10
+ require_relative 'proteus_client/models/thumbnail'
11
+ require_relative 'proteus_client/models/version'
6
12
 
7
13
  # Provides an interface to use Proteus rest services features
8
14
  #
@@ -12,4 +18,4 @@ module ProteusClient
12
18
  @config ||= ProteusClient::Config.new
13
19
  end
14
20
 
15
- end
21
+ end
@@ -2,11 +2,12 @@ module ProteusClient
2
2
 
3
3
  # Used to configure default values used for creating a ProteusClient::Proxy
4
4
  # @example Configuring values
5
- # ProteusClient.config.domain = "http://localhost:9292"
5
+ # ProteusClient.config.root = "http://localhost:9292"
6
6
  # ProteusClient.config.api_key= "api_key"
7
+ # ProteusClient.config.account = "account"
7
8
  #
8
9
  class Config
9
- attr_accessor :domain, :api_key
10
+ attr_accessor :root, :api_key, :account
10
11
  end
11
12
 
12
- end
13
+ end
@@ -0,0 +1,12 @@
1
+ module ProteusClient
2
+ Recording = Struct.new(:id, :adobe_rtmpe_file, :adobe_rtmpe_write,
3
+ :adobe_rtmpe_read, :generic_https) do
4
+
5
+ def initialize(options)
6
+ options.each do |key, value|
7
+ self[key.to_sym] = value
8
+ end
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ module ProteusClient
2
+ Thumbnail = Struct.new(:size, :url) do
3
+
4
+ def initialize(options)
5
+ options.each do |key, value|
6
+ self[key.to_sym] = value
7
+ end
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module ProteusClient
2
+ Version = Struct.new(:url, :solution, :name) do
3
+
4
+ def initialize(options)
5
+ options.each do |key, value|
6
+ self[key.to_sym] = value
7
+ end
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module ProteusClient
2
+ Video = Struct.new(:id, :thumbnails, :versions) do
3
+
4
+ def initialize(options)
5
+ options.each do |key, value|
6
+ self[key.to_sym] = value
7
+ end
8
+ end
9
+
10
+ end
11
+ end
@@ -3,116 +3,97 @@ module ProteusClient
3
3
  # Provides an interface for Proteus REST service to encode videos
4
4
  # @example Creating a new proxy
5
5
  # ProteusClient::Proxy.new
6
- # ProteusClient::Proxy.new({api_key: "api_key", domain: "http://localhost:9292"})
7
- #
8
- # @example Testing service
9
- # proteus_client.test_api #=> {message: 'Welcome to Proteus'}
6
+ # ProteusClient::Proxy.new({account: "", api_key: "", root: "http://localhost:9292"})
10
7
  #
11
8
  # @example Calling a method
12
9
  # proteus_client.create_video("video_id","type")
13
10
  #
14
11
  # @raise [APIKeyNotDefined] if api_key is not defined in ProteusClient.config or sent as param
15
- # @raise [DomainNotDefined] if domain is not defined in ProteusClient.config or sent as param
12
+ # @raise [RootNotDefined] if root is not defined in ProteusClient.config or sent as param
16
13
  # @raise [RestClient::Exception] if status code returned from services is not in 200..207
17
14
  #
18
15
  class Proxy
19
16
 
20
17
  def initialize(options = {})
21
18
  options = {
19
+ account: ProteusClient.config.account,
22
20
  api_key: ProteusClient.config.api_key,
23
- domain: ProteusClient.config.domain
21
+ root: ProteusClient.config.root
24
22
  }.merge(options)
25
23
 
26
- raise "APIKeyNotDefined" unless options[:api_key]
27
- raise "DomainNotDefined" unless options[:domain]
24
+ raise "AccountNotDefined" unless options[:account]
25
+ raise "APIKeyNotDefined" unless options[:api_key]
26
+ raise "RootNotDefined" unless options[:root]
28
27
 
29
- @api_key = options[:api_key]
30
- @domain = RestClient::Resource.new(options[:domain])
28
+ @user = options[:account]
29
+ @password = options[:api_key]
30
+ @root = resource(options[:root])
31
31
  end
32
32
 
33
- def test_api
34
- response = submit_request(:get, '/')
35
-
36
- { message: response.body }
37
- end
33
+ def create_recordings
34
+ recordings = link(@root, 'proteus:recordings')
38
35
 
39
- def create_video_locations(id = nil)
40
- params = id ? {id: id} : {}
36
+ response = resource(recordings).post({})
37
+ properties = Representers::Recording.new(response).to_hash
41
38
 
42
- video_locations =
43
- submit_request_and_parse_json(:post, '/video_locations', params)
44
- format_video_locations(video_locations)
39
+ ProteusClient::Recording.new(properties)
45
40
  end
46
41
 
47
- def create_multiple_video_locations(count)
48
- video_locations =
49
- submit_request_and_parse_json(:post, '/video_locations',
50
- count: count)
51
- video_locations.map { |v| format_video_locations(v) }
52
- end
42
+ def get_recording(id)
43
+ url = link(@root, 'proteus:recording')
44
+ recording = expand_templated_route(url, 'id', id)
53
45
 
54
- def create_video(video_locations_id, type)
55
- body =
56
- submit_request_and_parse_json(:post, '/videos',
57
- video_locations_id: video_locations_id,
58
- type: type)
46
+ response = resource(recording).get
47
+ properties = Representers::Recording.new(response).to_hash
59
48
 
60
- { video_id: body['_id'], url: body['url'] }
49
+ ProteusClient::Recording.new(properties)
61
50
  end
62
51
 
63
- def create_video_versions(video_id, output_type, settings = nil)
64
- params = {}
65
- params[:version_settings] = settings if settings
66
- params[:output_type] = output_type
52
+ def create_video(url, solution, version_name)
53
+ videos = link(@root, 'proteus:videos')
67
54
 
68
- submit_request(:post, "/videos/#{video_id}/versions", params)
55
+ params = { url: url, solution: solution, version_name: version_name }
56
+ response = resource(videos).post(params)
57
+ properties = Representers::Video.new(response).to_hash
69
58
 
70
- { message: 'success' }
59
+ ProteusClient::Video.new(properties)
71
60
  end
72
61
 
73
- def get_video(video_id)
74
- submit_request_and_parse_json(:get, "/videos/#{video_id}")
75
- end
62
+ def get_video(id)
63
+ url = link(@root, 'proteus:video')
64
+ video = expand_templated_route(url, 'id', id)
65
+
66
+ response = resource(video).get
67
+ properties = Representers::Video.new(response).to_hash
76
68
 
77
- def get_videos(video_ids)
78
- submit_request_and_parse_json(:get_raw, "/videos", ids: video_ids)
69
+ ProteusClient::Video.new(properties)
79
70
  end
80
71
 
81
- def get_video_locations(video_locations_id)
82
- url = "/video_locations/#{video_locations_id}"
83
- submit_request_and_parse_json(:get, url)
72
+ def create_version(video_id, version_name, solution)
73
+ url = link(@root, 'proteus:video')
74
+ video = expand_templated_route(url, 'id', video_id)
75
+ versions = link(resource(video), 'proteus:video:versions')
76
+
77
+ params = { version_name: version_name, solution: solution }
78
+ response = resource(versions).post(params)
79
+
80
+ {message: 'success'}
84
81
  end
85
82
 
86
83
  private
87
84
 
88
- def submit_request_and_parse_json(method, route, params = {})
89
- response = submit_request(method, route, params)
90
- JSON.parse(response)
85
+ def resource(url)
86
+ RestClient::Resource.new(url, content_type: :json,
87
+ user: @user, password: @password)
91
88
  end
92
89
 
93
- def submit_request(method, route, params = {})
94
- params = { :api_key => @api_key }.merge(params)
95
-
96
- case method
97
- when :get
98
- @domain[route].get(params: params)
99
- when :get_raw
100
- string_params = RestClient::Payload::UrlEncoded.new(params).to_s
101
- @domain["#{route}?#{string_params}"].get()
102
- when :post
103
- @domain[route].post(params, content_type: :json)
104
- else
105
- raise 'Undefined method'
106
- end
90
+ def link(resource, link)
91
+ JSON.parse(resource.get)['_links'][link]['href']
107
92
  end
108
93
 
109
- def format_video_locations(video_locations)
110
- urls = { direct: video_locations['url_direct'] ,
111
- stream: video_locations['url_stream'] }
112
-
113
- { video_locations_id: video_locations['_id'], urls: urls }
94
+ def expand_templated_route(url, key, value)
95
+ url.gsub("{/#{key.to_s}}", "/#{value}")
114
96
  end
115
97
 
116
98
  end
117
-
118
99
  end
@@ -0,0 +1,23 @@
1
+ module ProteusClient
2
+ module Representers
3
+ class Recording
4
+
5
+ def initialize(raw_response)
6
+ response = JSON.parse(raw_response)
7
+
8
+ @properties = {
9
+ id: response['id'],
10
+ adobe_rtmpe_file: response['_links']['adobe_rtmpe:file']['href'],
11
+ adobe_rtmpe_write: response['_links']['adobe_rtmpe:write']['href'],
12
+ adobe_rtmpe_read: response['_links']['adobe_rtmpe:read']['href'],
13
+ generic_https: response['_links']['generic_https']['href']
14
+ }
15
+ end
16
+
17
+ def to_hash
18
+ @properties
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,46 @@
1
+ module ProteusClient
2
+ module Representers
3
+ class Video
4
+
5
+ def initialize(raw_response)
6
+ response = JSON.parse(raw_response)
7
+ versions_hash = response['_embedded']['proteus:video:versions']
8
+ thumbnails_hash = response['_embedded']['proteus:video:thumbnails']
9
+
10
+ @properties = {
11
+ id: response['id'],
12
+ thumbnails: create_thumbnails(thumbnails_hash),
13
+ versions: create_versions(versions_hash)
14
+ }
15
+ end
16
+
17
+ def to_hash
18
+ @properties
19
+ end
20
+
21
+ private
22
+
23
+ def create_thumbnails(thumbnails_hash)
24
+ thumbnails_hash.map do |hash|
25
+ options = {
26
+ size: hash['name'],
27
+ url: hash['_links']['alternate']['href']
28
+ }
29
+ ProteusClient::Thumbnail.new(options)
30
+ end
31
+ end
32
+
33
+ def create_versions(versions_hash)
34
+ versions_hash.map do |hash|
35
+ options = {
36
+ name: hash['name'],
37
+ solution: hash['solution'],
38
+ url: hash['_links']['alternate']['href']
39
+ }
40
+ ProteusClient::Version.new(options)
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proteus_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-02 00:00:00.000000000 Z
12
+ date: 2013-03-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: 1.6.7
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: rspec
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -75,16 +91,53 @@ dependencies:
75
91
  - - ! '>='
76
92
  - !ruby/object:Gem::Version
77
93
  version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: vcr
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: webmock
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
78
126
  description: It provides an interface to use proteus features
79
127
  email: 1.27201@gmail.com
80
128
  executables: []
81
129
  extensions: []
82
130
  extra_rdoc_files: []
83
131
  files:
84
- - lib/proteus_client.rb
132
+ - lib/proteus_client/representers/recording.rb
133
+ - lib/proteus_client/representers/video.rb
134
+ - lib/proteus_client/models/recording.rb
135
+ - lib/proteus_client/models/thumbnail.rb
136
+ - lib/proteus_client/models/version.rb
137
+ - lib/proteus_client/models/video.rb
85
138
  - lib/proteus_client/config.rb
86
139
  - lib/proteus_client/proxy.rb
87
- - spec/proteus_client_spec.rb
140
+ - lib/proteus_client.rb
88
141
  homepage: https://github.com/solojavier/proteus_client
89
142
  licenses: []
90
143
  post_install_message:
@@ -109,6 +162,5 @@ rubygems_version: 1.8.21
109
162
  signing_key:
110
163
  specification_version: 3
111
164
  summary: Ruby client to use proteus rest service
112
- test_files:
113
- - spec/proteus_client_spec.rb
165
+ test_files: []
114
166
  has_rdoc:
@@ -1,242 +0,0 @@
1
- require 'simplecov'
2
- SimpleCov.start
3
-
4
- require 'stubs'
5
- require_relative '../lib/proteus_client'
6
-
7
- describe ProteusClient::Proxy do
8
-
9
- let(:api_key) { "api_key" }
10
-
11
- let(:proteus_client_wrong_api) do
12
- described_class.new(domain: 'http://localhost:9292', api_key: 'wrong_api')
13
- end
14
-
15
- let(:proteus_client) do
16
- ProteusClient.config.domain = 'http://localhost:9292'
17
- ProteusClient.config.api_key = 'api_key'
18
- described_class.new()
19
- end
20
-
21
- it "creates a new instance of proteus with correct api_key" do
22
- proteus_client
23
- ProteusClient.config.api_key.should == api_key
24
- end
25
-
26
- context 'call to test_api' do
27
-
28
- before(:all) do
29
- stub_response(:get, '/', 200, 'Welcome to proteus')
30
- @response = proteus_client.test_api
31
- end
32
-
33
- it "returns correct message" do
34
- @response[:message].should == 'Welcome to proteus'
35
- end
36
-
37
- end
38
-
39
- context 'call to create_video_locations'do
40
-
41
- before(:all) do
42
- stub_create_video_locations
43
- @response = proteus_client.create_video_locations
44
- end
45
-
46
- it "returns a hash" do
47
- @response.class.should == Hash
48
- end
49
-
50
- it "returns video_locations_id" do
51
- @response[:video_locations_id].should == '4fe0f752831a9d08bb000010'
52
- end
53
-
54
- it "returns urls" do
55
- @response[:urls].should ==
56
- { direct: 'direct/4fe0f752831a9d08bb000010.flv',
57
- stream: 'stream/4fe0f752831a9d08bb000010.flv'}
58
- end
59
-
60
- it "creates with id sent" do
61
- id = '4fe0f752831a9d08bb000011'
62
- stub_create_video_locations_with_id(id)
63
- response = proteus_client.create_video_locations(id)
64
-
65
- response[:video_locations_id].should == id
66
- end
67
-
68
- end
69
-
70
- context 'call to create_multiple_video_locations' do
71
-
72
- before(:all) do
73
- stub_create_multiple_video_locations
74
- @response = proteus_client.create_multiple_video_locations(2)
75
- end
76
-
77
- it "returns an array with two hashes" do
78
- @response.class.should == Array
79
- @response.size.should == 2
80
- @response[0].class.should == Hash
81
- end
82
-
83
- it "returns video_locations_id" do
84
- @response[0][:video_locations_id].should == '4fe0f752831a9d08bb000010'
85
- end
86
-
87
- it "returns urls" do
88
- @response[0][:urls].should ==
89
- { direct: 'direct/4fe0f752831a9d08bb000010.flv',
90
- stream: 'stream/4fe0f752831a9d08bb000010.flv'}
91
- end
92
-
93
- end
94
-
95
- context 'call to create_video'do
96
-
97
- before(:all) do
98
- stub_create_video
99
- @response = proteus_client.
100
- create_video('4fe0f752831a9d08bb000010','direct')
101
- end
102
-
103
- it "returns a hash" do
104
- @response.class.should == Hash
105
- end
106
-
107
- it "returns video url" do
108
- @response[:url].should == 'direct/4fe0f752831a9d08bb000010.flv'
109
- end
110
-
111
- end
112
-
113
- context 'call to create_video_versions'do
114
-
115
- context 'with valid id' do
116
-
117
- before(:all) do
118
- stub_response_with_params(:post, '/videos/4fe0f752831a9d08bb000010/versions',
119
- 200, '', output_type: 'direct')
120
- @response = proteus_client.
121
- create_video_versions('4fe0f752831a9d08bb000010', 'direct')
122
- end
123
-
124
- it "returns success message" do
125
- @response[:message].should == 'success'
126
- end
127
-
128
- end
129
-
130
- context 'with valid id and type' do
131
-
132
- before(:all) do
133
- stub_response_with_params(:post, '/videos/4fe0f752831a9d08bb000010/versions',
134
- 200, '', version_settings: 'mobile', output_type: 'stream')
135
- @response = proteus_client.
136
- create_video_versions('4fe0f752831a9d08bb000010', 'stream', 'mobile')
137
- end
138
-
139
- it "returns true" do
140
- @response[:message].should == 'success'
141
- end
142
-
143
- end
144
-
145
- end
146
-
147
- context 'call to get_video'do
148
-
149
- before(:all) do
150
- stub_get_video
151
- @response = proteus_client.get_video('4fe0f752831a9d08bb000010')
152
- end
153
-
154
- it "returns a hash" do
155
- @response.class.should == Hash
156
- end
157
-
158
- it "returns video with correct format" do
159
- @response['url'].class.should == String
160
- @response['duration'].class.should == Fixnum
161
- @response['versions'].class.should == Array
162
- @response['versions'][0].class.should == Hash
163
- end
164
-
165
- end
166
-
167
- context 'call to get_videos' do
168
-
169
- before(:all) do
170
- stub_get_videos
171
- @response = proteus_client.get_videos(%w{4fe0f752831a9d08bb000010
172
- 4fe0f752831a9d08bb000010})
173
- end
174
-
175
- it "returns an array with hashes" do
176
- @response.class.should == Array
177
- @response.size.should == 2
178
- @response.first.class.should == Hash
179
- end
180
-
181
- it "returns videos with correct format" do
182
- video = @response.first
183
-
184
- video['url'].class.should == String
185
- video['duration'].class.should == Fixnum
186
- video['versions'].class.should == Array
187
- video['versions'][0].class.should == Hash
188
- end
189
-
190
- end
191
-
192
- context 'call to get_video_locations' do
193
-
194
- context 'with valid arguments' do
195
-
196
- before(:all) do
197
- stub_get_video_locations
198
- @response = proteus_client.
199
- get_video_locations('4fe0f752831a9d08bb000010')
200
- end
201
-
202
- it "returns a hash" do
203
- @response.class.should == Hash
204
- end
205
-
206
- it "returns video with correct format" do
207
- @response['url_direct'].class.should == String
208
- @response['url_stream'].class.should == String
209
- end
210
-
211
- end
212
-
213
- end
214
-
215
- context 'submit request' do
216
-
217
- it 'call with :get works returns a correct response' do
218
- stub_resource(:get)
219
- proteus_client.send(:submit_request, :get, '/', {})
220
- .class.should == String
221
- end
222
-
223
- it 'call with :post works returns a correct response' do
224
- stub_resource(:post)
225
- proteus_client.send(:submit_request, :post, '/', {})
226
- .class.should == String
227
- end
228
-
229
- it 'call with :get works returns a correct response' do
230
- stub_resource(:get)
231
- proteus_client.send(:submit_request, :get_raw, '/', {})
232
- .class.should == String
233
- end
234
-
235
- it 'call with not defined method works raises exception' do
236
- lambda { proteus_client.send(:submit_request, :put, '/', {}) }.
237
- should raise_error
238
- end
239
-
240
- end
241
-
242
- end