panda 0.2.1 → 0.3.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.
- data/README.md +9 -9
- data/VERSION +1 -1
- data/lib/panda/api_authentication.rb +2 -1
- data/lib/panda/panda.rb +48 -52
- data/panda.gemspec +3 -3
- data/spec/panda_spec.rb +4 -3
- metadata +47 -25
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Panda
|
2
2
|
|
3
|
-
Panda gem provides an interface to access the [Panda](http://
|
3
|
+
Panda gem provides an interface to access the [Panda](http://pandastream.com) API from Ruby.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -10,18 +10,18 @@ Panda gem provides an interface to access the [Panda](http://api.pandastream.com
|
|
10
10
|
|
11
11
|
require 'panda'
|
12
12
|
|
13
|
-
###
|
13
|
+
### Creating an instance of the client
|
14
14
|
|
15
|
-
Panda.
|
15
|
+
panda = Panda.new({
|
16
16
|
:cloud_id => 'cloud_id',
|
17
17
|
:access_key => 'access_key',
|
18
18
|
:secret_key => 'secret_key',
|
19
|
-
:api_host => 'api.pandastream.com'
|
19
|
+
:api_host => 'api.pandastream.com' # This may change depending on the region
|
20
20
|
})
|
21
21
|
|
22
22
|
### Posting a video
|
23
23
|
|
24
|
-
|
24
|
+
panda.post('/videos.json', {:source_url => 'http://www.example.com/original_video.mp4'})
|
25
25
|
=>{"duration"=>nil,
|
26
26
|
"created_at"=>"2010/01/15 14:48:42 +0000",
|
27
27
|
"original_filename"=>"panda.mp4",
|
@@ -40,7 +40,7 @@ Panda gem provides an interface to access the [Panda](http://api.pandastream.com
|
|
40
40
|
|
41
41
|
### Getting all videos
|
42
42
|
|
43
|
-
|
43
|
+
panda.get('/videos.json')
|
44
44
|
=> [{"duration"=>14010,
|
45
45
|
"created_at"=>"2010/01/13 16:45:29 +0000",
|
46
46
|
"original_filename"=>"panda.mp4",
|
@@ -59,7 +59,7 @@ Panda gem provides an interface to access the [Panda](http://api.pandastream.com
|
|
59
59
|
|
60
60
|
### Getting video encodings
|
61
61
|
|
62
|
-
|
62
|
+
panda.get('/videos/0ee6b656-0063-11df-a433-1231390041c1/encodings.json')
|
63
63
|
=> [{"encoder_id"=>nil,
|
64
64
|
"created_at"=>"2010/01/13 16:45:30 +0000",
|
65
65
|
"video_id"=>"0ee6b656-0063-11df-a433-1231390041c1",
|
@@ -79,11 +79,11 @@ Panda gem provides an interface to access the [Panda](http://api.pandastream.com
|
|
79
79
|
|
80
80
|
### Deleting a video encoding
|
81
81
|
|
82
|
-
|
82
|
+
panda.delete('/encodings/0f815986-0063-11df-a433-1231390041c1.json')
|
83
83
|
|
84
84
|
### Deleting a video
|
85
85
|
|
86
|
-
|
86
|
+
panda.delete('/videos/0ee6b656-0063-11df-a433-1231390041c1.json')
|
87
87
|
|
88
88
|
Copyright
|
89
89
|
---------
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -1,10 +1,11 @@
|
|
1
|
+
require 'rubygems'
|
1
2
|
require 'cgi'
|
2
3
|
require 'time'
|
3
4
|
require 'hmac'
|
4
5
|
require 'hmac-sha2'
|
5
6
|
require 'base64'
|
6
7
|
|
7
|
-
|
8
|
+
class Panda
|
8
9
|
class ApiAuthentication
|
9
10
|
def self.authenticate(verb, request_uri, host, secret_key, params_given={})
|
10
11
|
# Ensure all param keys are strings
|
data/lib/panda/panda.rb
CHANGED
@@ -1,61 +1,57 @@
|
|
1
1
|
require 'restclient'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
class Panda
|
4
|
+
def initialize(auth_params={})
|
5
|
+
params = {:api_host => 'api.pandastream.com', :api_port => 80 }.merge(auth_params)
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
@secret_key = params["secret_key"] || params[:secret_key]
|
13
|
-
@api_host = params["api_host"] || params[:api_host]
|
14
|
-
@api_port = params["api_port"] || params[:api_port]
|
15
|
-
|
16
|
-
@prefix = params["prefix_url"] || "v#{@api_version}"
|
17
|
-
|
18
|
-
@connection = RestClient::Resource.new(api_url)
|
19
|
-
end
|
7
|
+
@api_version = 2
|
8
|
+
@cloud_id = params["cloud_id"] || params[:cloud_id]
|
9
|
+
@access_key = params["access_key"] || params[:access_key]
|
10
|
+
@secret_key = params["secret_key"] || params[:secret_key]
|
11
|
+
@api_host = params["api_host"] || params[:api_host]
|
12
|
+
@api_port = params["api_port"] || params[:api_port]
|
20
13
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
14
|
+
@prefix = params["prefix_url"] || "v#{@api_version}"
|
15
|
+
|
16
|
+
@connection = RestClient::Resource.new(api_url)
|
17
|
+
end
|
18
|
+
|
19
|
+
def get(request_uri, params={})
|
20
|
+
append_authentication_params!("GET", request_uri, params)
|
21
|
+
@connection[ApiAuthentication.add_params_to_request_uri(request_uri, params)].get
|
22
|
+
end
|
30
23
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
24
|
+
def post(request_uri, params)
|
25
|
+
append_authentication_params!("POST", request_uri, params)
|
26
|
+
@connection[request_uri].post(params)
|
27
|
+
end
|
35
28
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
def authentication_params(verb, request_uri, params)
|
42
|
-
auth_params = {}
|
43
|
-
auth_params['cloud_id'] = @cloud_id
|
44
|
-
auth_params['access_key'] = @access_key
|
45
|
-
auth_params['timestamp'] = Time.now.iso8601(6)
|
46
|
-
auth_params['signature'] = ApiAuthentication.authenticate(verb, request_uri, @api_host, @secret_key, params.merge(auth_params))
|
47
|
-
return auth_params
|
48
|
-
end
|
49
|
-
|
50
|
-
def api_url
|
51
|
-
"http://#{@api_host}:#{@api_port}/#{@prefix}"
|
52
|
-
end
|
53
|
-
private
|
54
|
-
|
55
|
-
def append_authentication_params!(verb, request_uri, params)
|
56
|
-
auth_params = authentication_params(verb, request_uri, params)
|
57
|
-
params.merge!(auth_params)
|
58
|
-
end
|
29
|
+
def put(request_uri, params)
|
30
|
+
append_authentication_params!("PUT", request_uri, params)
|
31
|
+
@connection[request_uri].put(params)
|
32
|
+
end
|
59
33
|
|
34
|
+
def delete(request_uri, params={})
|
35
|
+
append_authentication_params!("DELETE", request_uri, params)
|
36
|
+
@connection[ApiAuthentication.add_params_to_request_uri(request_uri, params)].delete
|
37
|
+
end
|
38
|
+
|
39
|
+
def authentication_params(verb, request_uri, params)
|
40
|
+
auth_params = {}
|
41
|
+
auth_params['cloud_id'] = @cloud_id
|
42
|
+
auth_params['access_key'] = @access_key
|
43
|
+
auth_params['timestamp'] = Time.now.iso8601(6)
|
44
|
+
auth_params['signature'] = ApiAuthentication.authenticate(verb, request_uri, @api_host, @secret_key, params.merge(auth_params))
|
45
|
+
return auth_params
|
46
|
+
end
|
47
|
+
|
48
|
+
def api_url
|
49
|
+
"http://#{@api_host}:#{@api_port}/#{@prefix}"
|
50
|
+
end
|
51
|
+
private
|
52
|
+
|
53
|
+
def append_authentication_params!(verb, request_uri, params)
|
54
|
+
auth_params = authentication_params(verb, request_uri, params)
|
55
|
+
params.merge!(auth_params)
|
60
56
|
end
|
61
57
|
end
|
data/panda.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{panda}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["New Bamboo"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-02-22}
|
13
13
|
s.description = %q{Panda Client}
|
14
14
|
s.email = %q{info@pandastream.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -34,7 +34,7 @@ Gem::Specification.new do |s|
|
|
34
34
|
s.homepage = %q{http://github.com/newbamboo/panda_gem}
|
35
35
|
s.rdoc_options = ["--charset=UTF-8"]
|
36
36
|
s.require_paths = ["lib"]
|
37
|
-
s.rubygems_version = %q{1.3.
|
37
|
+
s.rubygems_version = %q{1.3.6}
|
38
38
|
s.summary = %q{Panda Client}
|
39
39
|
s.test_files = [
|
40
40
|
"spec/panda_spec.rb",
|
data/spec/panda_spec.rb
CHANGED
@@ -3,19 +3,20 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
3
3
|
describe Panda do
|
4
4
|
before(:each) do
|
5
5
|
FakeWeb.allow_net_connect = false
|
6
|
-
Panda.
|
6
|
+
@panda = Panda.new({"access_key" => "my_access_key", "secret_key" => "my_secret_key", "api_host" => "myapihost", "api_port" => 85, "cloud_id" => 'my_cloud_id' })
|
7
|
+
# Panda.connect!({"access_key" => "my_access_key", "secret_key" => "my_secret_key", "api_host" => "myapihost", "api_port" => 85, "cloud_id" => 'my_cloud_id' })
|
7
8
|
Time.stub!(:now).and_return(mock("time", :iso8601 => "2009-11-04T17:54:11+00:00"))
|
8
9
|
end
|
9
10
|
|
10
11
|
|
11
12
|
it "should make get request with signed request to panda server" do
|
12
13
|
FakeWeb.register_uri(:get, "http://myapihost:85/v2/videos?timestamp=2009-11-04T17%3A54%3A11%2B00%3A00&signature=CxSYPM65SeeWH4CE%2FLcq7Ny2NtwxlpS8QOXG2BKe4p8%3D&access_key=my_access_key&cloud_id=my_cloud_id", :body => "abc")
|
13
|
-
|
14
|
+
@panda.get("/videos").should == "abc"
|
14
15
|
end
|
15
16
|
|
16
17
|
it "should make delete request with signed request to panda server" do
|
17
18
|
FakeWeb.register_uri(:delete, "http://myapihost:85/v2/videos/1?timestamp=2009-11-04T17%3A54%3A11%2B00%3A00&signature=t0IYclDXgjZFRYaMf0Gbg%2B5vOqp7q8QQRN8tlQ3bk8Q%3D&access_key=my_access_key&cloud_id=my_cloud_id", :query => {})
|
18
|
-
|
19
|
+
@panda.delete("/videos/1").should
|
19
20
|
FakeWeb.should have_requested(:delete, "http://myapihost:85/v2/videos/1?timestamp=2009-11-04T17%3A54%3A11%2B00%3A00&signature=t0IYclDXgjZFRYaMf0Gbg%2B5vOqp7q8QQRN8tlQ3bk8Q%3D&access_key=my_access_key&cloud_id=my_cloud_id")
|
20
21
|
end
|
21
22
|
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: panda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- New Bamboo
|
@@ -9,59 +14,74 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-02-22 00:00:00 +00:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: rspec
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 2
|
30
|
+
- 9
|
23
31
|
version: 1.2.9
|
24
|
-
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
25
34
|
- !ruby/object:Gem::Dependency
|
26
35
|
name: fakeweb
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
38
|
requirements:
|
31
39
|
- - ">="
|
32
40
|
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
33
43
|
version: "0"
|
34
|
-
|
44
|
+
type: :development
|
45
|
+
version_requirements: *id002
|
35
46
|
- !ruby/object:Gem::Dependency
|
36
47
|
name: fakeweb-matcher
|
37
|
-
|
38
|
-
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
48
|
+
prerelease: false
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
50
|
requirements:
|
41
51
|
- - ">="
|
42
52
|
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
43
55
|
version: "0"
|
44
|
-
|
56
|
+
type: :development
|
57
|
+
version_requirements: *id003
|
45
58
|
- !ruby/object:Gem::Dependency
|
46
59
|
name: ruby-hmac
|
47
|
-
|
48
|
-
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
prerelease: false
|
61
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
50
62
|
requirements:
|
51
63
|
- - ">="
|
52
64
|
- !ruby/object:Gem::Version
|
65
|
+
segments:
|
66
|
+
- 0
|
67
|
+
- 3
|
68
|
+
- 2
|
53
69
|
version: 0.3.2
|
54
|
-
|
70
|
+
type: :runtime
|
71
|
+
version_requirements: *id004
|
55
72
|
- !ruby/object:Gem::Dependency
|
56
73
|
name: rest-client
|
57
|
-
|
58
|
-
|
59
|
-
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
prerelease: false
|
75
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
60
76
|
requirements:
|
61
77
|
- - ">="
|
62
78
|
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 1
|
81
|
+
- 2
|
63
82
|
version: "1.2"
|
64
|
-
|
83
|
+
type: :runtime
|
84
|
+
version_requirements: *id005
|
65
85
|
description: Panda Client
|
66
86
|
email: info@pandastream.com
|
67
87
|
executables: []
|
@@ -98,18 +118,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
98
118
|
requirements:
|
99
119
|
- - ">="
|
100
120
|
- !ruby/object:Gem::Version
|
121
|
+
segments:
|
122
|
+
- 0
|
101
123
|
version: "0"
|
102
|
-
version:
|
103
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
125
|
requirements:
|
105
126
|
- - ">="
|
106
127
|
- !ruby/object:Gem::Version
|
128
|
+
segments:
|
129
|
+
- 0
|
107
130
|
version: "0"
|
108
|
-
version:
|
109
131
|
requirements: []
|
110
132
|
|
111
133
|
rubyforge_project:
|
112
|
-
rubygems_version: 1.3.
|
134
|
+
rubygems_version: 1.3.6
|
113
135
|
signing_key:
|
114
136
|
specification_version: 3
|
115
137
|
summary: Panda Client
|