sproutvideo-rb 1.2.1 → 1.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.markdown CHANGED
@@ -103,6 +103,16 @@ Pass in the id of the video you wish to delete.
103
103
  ```ruby
104
104
  Sproutvideo::Video.delete('abc123')
105
105
  ```
106
+
107
+ ##Signed Embed Codes
108
+ You can use this convenince method to sign an embed code
109
+ ```ruby
110
+ Sproutvideo::Video.signed_embed_code('abc123') #sign a base embed code with no other options
111
+ Sproutvideo::Video.signed_embed_code('abc123', {'type' => 'hd'}) #set parameters for the embed code such as changing the default video type to HD
112
+ Sproutvideo::Video.signed_embed_code('abc123', {}, 1368127991) #set a specific expiration time for the signed embed code. (By default the expiration time is set to 5 minutes from the time the signed embed code was generated).
113
+ Sproutvideo::Video.signed_embed_code('abc123', {}, nil, 'https') #Use https instead of http
114
+ ```
115
+
106
116
  # Tags
107
117
  The following methods are available: `list`, `create`, `details`, `update`, `delete`.
108
118
 
@@ -345,5 +355,4 @@ Sproutvideo::Analytics.engagement_sessions('abc123', :page => 3, :per_page => 40
345
355
  # Copyright
346
356
 
347
357
  Copyright (c) 2012 SproutVideo. See LICENSE.txt for
348
- further details.
349
-
358
+ further details.
@@ -1,3 +1,3 @@
1
1
  module Sproutvideo
2
- VERSION = "1.2.1"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -25,5 +25,38 @@ module Sproutvideo
25
25
  def self.destroy(video_id, options={})
26
26
  delete("/videos/#{video_id}", options)
27
27
  end
28
+
29
+ def self.signed_embed_code(video_id, params={}, expires=nil, protocol='http')
30
+ #get video
31
+ resp = get("/videos/#{video_id}")
32
+ token = resp.body[:security_token]
33
+
34
+ host = 'videos.sproutvideo.com'
35
+ path = "/embed/#{video_id}/#{token}"
36
+ string_to_sign = "GET\n"
37
+ string_to_sign << "#{host}\n"
38
+ string_to_sign << "#{path}\n"
39
+
40
+ expires = Time.now.to_i + 300 unless expires
41
+
42
+ params = params.merge('expires' => expires)
43
+
44
+ url_params = ""
45
+ actual_url_params = ""
46
+ params.sort_by{|k,_|k}.each do |key, value|
47
+ value = value.to_s.strip
48
+ url_params << "&#{key}=#{CGI::unescape(value)}"
49
+ actual_url_params << "&#{key}=#{value}"
50
+ end
51
+
52
+ string_to_sign << "#{url_params}"
53
+
54
+ digest = OpenSSL::Digest::Digest.new('sha1')
55
+ b64_hmac = [OpenSSL::HMAC.digest(digest, Sproutvideo.api_key, string_to_sign)].pack("m").strip
56
+ signature = CGI.escape(b64_hmac)
57
+
58
+ "#{protocol}://#{host}#{path}?signature=#{signature}#{actual_url_params}"
59
+ end
60
+
28
61
  end
29
62
  end
@@ -111,4 +111,48 @@ describe Sproutvideo::Video do
111
111
  end
112
112
  end
113
113
 
114
+ describe "#signed_embed_code" do
115
+ before(:each) do
116
+ @video_id = 1
117
+ @url = "#{Sproutvideo.base_url}/videos/#{@video_id}"
118
+ @msg = mock(:code => 200, :to_s => '{"security_token":"abc123"}')
119
+ @digest = OpenSSL::Digest::Digest.new('sha1')
120
+ OpenSSL::Digest::Digest.stub!(:new).and_return(@digest)
121
+ time = Time.now
122
+ Time.stub!(:now).and_return(time)
123
+ @expires_time = time.to_i+300
124
+ string_to_sign = "GET\nvideos.sproutvideo.com\n/embed/1/abc123\n&expires=#{@expires_time}"
125
+ @signature = CGI::escape([OpenSSL::HMAC.digest(@digest, @api_key, string_to_sign)].pack("m").strip)
126
+ RestClient.stub!(:get).and_return(@msg)
127
+ end
128
+
129
+ it "should get the video" do
130
+ RestClient.should_receive(:get).with(
131
+ @url,
132
+ {'SproutVideo-Api-Key' => @api_key, :params => {}}).and_return(@msg)
133
+ Sproutvideo::Video.signed_embed_code(@video_id)
134
+ end
135
+
136
+ it "should sign the embed code" do
137
+ Sproutvideo::Video.signed_embed_code(@video_id).should == "http://videos.sproutvideo.com/embed/1/abc123?signature=#{@signature}&expires=#{@expires_time}"
138
+ end
139
+
140
+ it "should set the expires time if passed in" do
141
+ expires_time = 1368127991
142
+ string_to_sign = "GET\nvideos.sproutvideo.com\n/embed/1/abc123\n&expires=#{expires_time}"
143
+ signature = CGI::escape([OpenSSL::HMAC.digest(@digest, @api_key, string_to_sign)].pack("m").strip)
144
+ Sproutvideo::Video.signed_embed_code(@video_id, {}, 1368127991).should == "http://videos.sproutvideo.com/embed/1/abc123?signature=#{signature}&expires=#{expires_time}"
145
+ end
146
+
147
+ it "should use the protocol that's passed in" do
148
+ Sproutvideo::Video.signed_embed_code(@video_id, {}, nil, 'https').should == "https://videos.sproutvideo.com/embed/1/abc123?signature=#{@signature}&expires=#{@expires_time}"
149
+ end
150
+
151
+ it "should sign other parameters too!" do
152
+ string_to_sign = "GET\nvideos.sproutvideo.com\n/embed/1/abc123\n&expires=#{@expires_time}&type=hd"
153
+ @signature = CGI::escape([OpenSSL::HMAC.digest(@digest, @api_key, string_to_sign)].pack("m").strip)
154
+ Sproutvideo::Video.signed_embed_code(@video_id, {'type' => 'hd'}).should == "http://videos.sproutvideo.com/embed/1/abc123?signature=#{@signature}&expires=#{@expires_time}&type=hd"
155
+ end
156
+ end
157
+
114
158
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "sproutvideo-rb"
8
- s.version = "1.2.1"
8
+ s.version = "1.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 = ["SproutVideo"]
12
- s.date = "2013-01-24"
12
+ s.date = "2013-05-08"
13
13
  s.description = "SproutVideo API Client"
14
14
  s.email = "support@sproutvideo.com"
15
15
  s.extra_rdoc_files = [
@@ -49,7 +49,7 @@ Gem::Specification.new do |s|
49
49
  s.homepage = "http://github.com/sproutvideo/sproutvideo-rb"
50
50
  s.licenses = ["MIT"]
51
51
  s.require_paths = ["lib"]
52
- s.rubygems_version = "1.8.24"
52
+ s.rubygems_version = "1.8.25"
53
53
  s.summary = "SproutVideo API Client"
54
54
 
55
55
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sproutvideo-rb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 2
9
- - 1
10
- version: 1.2.1
8
+ - 3
9
+ - 0
10
+ version: 1.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - SproutVideo
@@ -15,9 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-01-24 00:00:00 Z
18
+ date: 2013-05-08 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
+ name: rest-client
22
+ prerelease: false
21
23
  requirement: &id001 !ruby/object:Gem::Requirement
22
24
  none: false
23
25
  requirements:
@@ -27,11 +29,11 @@ dependencies:
27
29
  segments:
28
30
  - 0
29
31
  version: "0"
30
- prerelease: false
31
32
  type: :runtime
32
- name: rest-client
33
33
  version_requirements: *id001
34
34
  - !ruby/object:Gem::Dependency
35
+ name: multi_json
36
+ prerelease: false
35
37
  requirement: &id002 !ruby/object:Gem::Requirement
36
38
  none: false
37
39
  requirements:
@@ -41,11 +43,11 @@ dependencies:
41
43
  segments:
42
44
  - 0
43
45
  version: "0"
44
- prerelease: false
45
46
  type: :runtime
46
- name: multi_json
47
47
  version_requirements: *id002
48
48
  - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ prerelease: false
49
51
  requirement: &id003 !ruby/object:Gem::Requirement
50
52
  none: false
51
53
  requirements:
@@ -57,11 +59,11 @@ dependencies:
57
59
  - 8
58
60
  - 0
59
61
  version: 2.8.0
60
- prerelease: false
61
62
  type: :development
62
- name: rspec
63
63
  version_requirements: *id003
64
64
  - !ruby/object:Gem::Dependency
65
+ name: rdoc
66
+ prerelease: false
65
67
  requirement: &id004 !ruby/object:Gem::Requirement
66
68
  none: false
67
69
  requirements:
@@ -72,11 +74,11 @@ dependencies:
72
74
  - 3
73
75
  - 12
74
76
  version: "3.12"
75
- prerelease: false
76
77
  type: :development
77
- name: rdoc
78
78
  version_requirements: *id004
79
79
  - !ruby/object:Gem::Dependency
80
+ name: bundler
81
+ prerelease: false
80
82
  requirement: &id005 !ruby/object:Gem::Requirement
81
83
  none: false
82
84
  requirements:
@@ -88,11 +90,11 @@ dependencies:
88
90
  - 0
89
91
  - 0
90
92
  version: 1.0.0
91
- prerelease: false
92
93
  type: :development
93
- name: bundler
94
94
  version_requirements: *id005
95
95
  - !ruby/object:Gem::Dependency
96
+ name: jeweler
97
+ prerelease: false
96
98
  requirement: &id006 !ruby/object:Gem::Requirement
97
99
  none: false
98
100
  requirements:
@@ -104,11 +106,11 @@ dependencies:
104
106
  - 8
105
107
  - 3
106
108
  version: 1.8.3
107
- prerelease: false
108
109
  type: :development
109
- name: jeweler
110
110
  version_requirements: *id006
111
111
  - !ruby/object:Gem::Dependency
112
+ name: rcov
113
+ prerelease: false
112
114
  requirement: &id007 !ruby/object:Gem::Requirement
113
115
  none: false
114
116
  requirements:
@@ -118,9 +120,7 @@ dependencies:
118
120
  segments:
119
121
  - 0
120
122
  version: "0"
121
- prerelease: false
122
123
  type: :development
123
- name: rcov
124
124
  version_requirements: *id007
125
125
  description: SproutVideo API Client
126
126
  email: support@sproutvideo.com
@@ -189,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
189
189
  requirements: []
190
190
 
191
191
  rubyforge_project:
192
- rubygems_version: 1.8.24
192
+ rubygems_version: 1.8.25
193
193
  signing_key:
194
194
  specification_version: 3
195
195
  summary: SproutVideo API Client