proteus_client 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,12 @@
1
+ module ProteusClient
2
+
3
+ # Used to configure default values used for creating a ProteusClient::Proxy
4
+ # @example Configuring values
5
+ # ProteusClient.config.domain = "http://localhost:9292"
6
+ # ProteusClient.config.api_key= "api_key"
7
+ #
8
+ class Config
9
+ attr_accessor :domain, :api_key
10
+ end
11
+
12
+ end
@@ -1,5 +1,21 @@
1
- module Proteus
2
- class Client
1
+ module ProteusClient
2
+
3
+ # Provides an interface for Proteus REST service to encode videos
4
+ # @example Creating a new proxy
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'}
10
+ #
11
+ # @example Calling a method
12
+ # proteus_client.create_video("video_id","type")
13
+ #
14
+ # @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
16
+ # @raise [RestClient::Exception] if status code returned from services is not in 200..207
17
+ #
18
+ class Proxy
3
19
 
4
20
  def initialize(options = {})
5
21
  options = merge_with_default_options(options)
@@ -7,10 +23,6 @@ module Proteus
7
23
  @domain = RestClient::Resource.new(options[:domain])
8
24
  end
9
25
 
10
- def self.config
11
- @config ||= Proteus::Config.new
12
- end
13
-
14
26
  def test_api
15
27
  response = submit_request(:get,'/',{})
16
28
 
@@ -59,12 +71,12 @@ module Proteus
59
71
 
60
72
  def merge_with_default_options(options)
61
73
  opts = {
62
- api_key: Client.config.api_key,
63
- domain: Client.config.domain
74
+ api_key: ProteusClient.config.api_key,
75
+ domain: ProteusClient.config.domain
64
76
  }.merge(options)
65
77
 
66
- raise "An API key has not been defined" unless opts[:api_key]
67
- raise "A domain has not been defined" unless opts[:domain]
78
+ raise "APIKeyNotDefined" unless opts[:api_key]
79
+ raise "DomainNotDefined" unless opts[:domain]
68
80
 
69
81
  opts
70
82
  end
@@ -1,5 +1,15 @@
1
1
  require 'json'
2
2
  require 'rest_client'
3
3
 
4
- require_relative 'proteus/config'
5
- require_relative 'proteus/client'
4
+ require_relative 'proteus_client/config'
5
+ require_relative 'proteus_client/proxy'
6
+
7
+ # Provides an interface to use Proteus rest services features
8
+ #
9
+ module ProteusClient
10
+
11
+ def self.config
12
+ @config ||= ProteusClient::Config.new
13
+ end
14
+
15
+ end
@@ -0,0 +1,217 @@
1
+ require 'spec_helper'
2
+ require 'stubs'
3
+
4
+ require_relative '../lib/proteus_client'
5
+
6
+ describe ProteusClient::Proxy do
7
+
8
+ let(:api_key) { "api_key" }
9
+
10
+ let(:proteus_client_wrong_api) do
11
+ described_class.new(domain: 'http://localhost:9292', api_key: 'wrong_api')
12
+ end
13
+
14
+ let(:proteus_client) do
15
+ ProteusClient.config.domain = 'http://localhost:9292'
16
+ ProteusClient.config.api_key = 'api_key'
17
+ described_class.new()
18
+ end
19
+
20
+ it "creates a new instance of proteus with correct api_key" do
21
+ proteus_client
22
+ ProteusClient.config.api_key.should == api_key
23
+ end
24
+
25
+ context 'call to test_api' do
26
+ before(:all) do
27
+ stub_response(:get,'/',200,'Welcome to proteus',{})
28
+ @response = proteus_client.test_api
29
+ end
30
+
31
+ it "returns correct message" do
32
+ @response[:message].should == 'Welcome to proteus'
33
+ end
34
+
35
+ end
36
+
37
+ context 'call to create_video_allocation'do
38
+
39
+ context 'with no count argument' do
40
+
41
+ before(:all) do
42
+ stub_create_video_allocation
43
+ @response = proteus_client.create_video_allocation()
44
+ end
45
+
46
+ it "returns a hash" do
47
+ @response.class.should == Hash
48
+ end
49
+
50
+ it "returns video_allocation_id" do
51
+ @response[:video_allocation_id].should == '4fe0f752831a9d08bb000010'
52
+ end
53
+
54
+ it "returns urls" do
55
+ @response[:urls][0].should == {type: 'direct', url:'direct/4fe0f752831a9d08bb000010.flv'}
56
+ @response[:urls][1].should == {type: 'stream', url:'stream/4fe0f752831a9d08bb000010.flv'}
57
+ @response[:urls][2].should == {type: 'upload', url:'upload/4fe0f752831a9d08bb000010.flv'}
58
+ end
59
+
60
+ end
61
+
62
+ context 'with count argument' do
63
+
64
+ before(:all) do
65
+ stub_create_video_allocations
66
+ @response = proteus_client.create_video_allocation(2)
67
+ end
68
+
69
+ it "returns an array with two hashes" do
70
+ @response.class.should == Array
71
+ @response.size.should == 2
72
+ @response[0].class.should == Hash
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+
79
+ context 'call to create_video'do
80
+
81
+ before(:all) do
82
+ stub_create_video
83
+ @response = proteus_client.create_video('4fe0f752831a9d08bb000010','direct')
84
+ end
85
+
86
+ it "returns a hash" do
87
+ @response.class.should == Hash
88
+ end
89
+
90
+ it "returns video url" do
91
+ @response[:url].should == 'direct/4fe0f752831a9d08bb000010.flv'
92
+ end
93
+
94
+ end
95
+
96
+ context 'call to create_video_versions'do
97
+
98
+ context 'with valid id' do
99
+
100
+ before(:all) do
101
+ stub_response(:post,'/videos/4fe0f752831a9d08bb000010/versions',
102
+ 200,'',{})
103
+ @response = proteus_client.create_video_versions('4fe0f752831a9d08bb000010')
104
+ end
105
+
106
+ it "returns success message" do
107
+ @response[:message].should == 'success'
108
+ end
109
+
110
+ end
111
+
112
+ context 'with valid id and type' do
113
+
114
+ before(:all) do
115
+ stub_response(:post,'/videos/4fe0f752831a9d08bb000010/versions',
116
+ 200,'',{version_settings: 'mobile'})
117
+ @response = proteus_client.create_video_versions('4fe0f752831a9d08bb000010','mobile')
118
+ end
119
+
120
+ it "returns true" do
121
+ @response[:message].should == 'success'
122
+ end
123
+
124
+ end
125
+
126
+ end
127
+
128
+ context 'call to get_video'do
129
+
130
+ before(:all) do
131
+ stub_get_video
132
+ @response = proteus_client.get_video('4fe0f752831a9d08bb000010')
133
+ end
134
+
135
+ it "returns a hash" do
136
+ @response.class.should == Hash
137
+ end
138
+
139
+ it "returns video with correct format" do
140
+ @response['url'].class.should == String
141
+ @response['duration'].class.should == Fixnum
142
+ @response['versions'].class.should == Array
143
+ @response['versions'][0].class.should == Hash
144
+ end
145
+
146
+ end
147
+
148
+ context 'call to get_videos' do
149
+
150
+ before(:all) do
151
+ stub_get_videos
152
+ @response = proteus_client.get_videos('4fe0f752831a9d08bb000010','4fe0f752831a9d08bb000010')
153
+ end
154
+
155
+ it "returns an array with hashes" do
156
+ @response.class.should == Array
157
+ @response.size.should == 2
158
+ @response.first.class.should == Hash
159
+ end
160
+
161
+ it "returns videos with correct format" do
162
+ video = @response.first
163
+ video['url'].class.should == String
164
+ video['duration'].class.should == Fixnum
165
+ video['versions'].class.should == Array
166
+ video['versions'][0].class.should == Hash
167
+ end
168
+
169
+ end
170
+
171
+ context 'call to get_video_allocation' do
172
+
173
+ context 'with valid arguments' do
174
+
175
+ before(:all) do
176
+ stub_get_video_allocation
177
+ @response = proteus_client.get_video_allocation('4fe0f752831a9d08bb000010')
178
+ end
179
+
180
+ it "returns a hash" do
181
+ @response.class.should == Hash
182
+ end
183
+
184
+ it "returns video with correct format" do
185
+ @response['url_direct'].class.should == String
186
+ @response['url_stream'].class.should == String
187
+ @response['url_upload'].class.should == String
188
+ end
189
+
190
+ end
191
+
192
+ end
193
+
194
+ context 'submit request' do
195
+
196
+ it 'call with :get works returns a correct response' do
197
+ stub_resource(:get)
198
+ proteus_client.send(:submit_request,:get,'/',{}).class.should == String
199
+ end
200
+
201
+ it 'call with :post works returns a correct response' do
202
+ stub_resource(:post)
203
+ proteus_client.send(:submit_request,:post,'/',{}).class.should == String
204
+ end
205
+
206
+ it 'call with :get works returns a correct response' do
207
+ stub_resource(:get)
208
+ proteus_client.send(:submit_request,:get_raw,'/',{}).class.should == String
209
+ end
210
+
211
+ it 'call with not defined method works raises exception' do
212
+ lambda { proteus_client.send(:submit_request,:put,'/',{}) }.should raise_error
213
+ end
214
+
215
+ end
216
+
217
+ 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.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -18,8 +18,9 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - lib/proteus_client.rb
21
- - lib/proteus/config.rb
22
- - lib/proteus/client.rb
21
+ - lib/proteus_client/config.rb
22
+ - lib/proteus_client/proxy.rb
23
+ - spec/proteus_client_spec.rb
23
24
  homepage: https://github.com/solojavier/proteus_client
24
25
  licenses: []
25
26
  post_install_message:
@@ -44,5 +45,6 @@ rubygems_version: 1.8.21
44
45
  signing_key:
45
46
  specification_version: 3
46
47
  summary: Ruby client to use proteus rest service
47
- test_files: []
48
+ test_files:
49
+ - spec/proteus_client_spec.rb
48
50
  has_rdoc:
@@ -1,5 +0,0 @@
1
- module Proteus
2
- class Config
3
- attr_accessor :domain, :api_key
4
- end
5
- end