helix 0.0.2.0.pre → 0.0.2.1.pre
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/lib/helix/base.rb +6 -3
- data/lib/helix/config.rb +9 -8
- data/lib/helix/durationed_media.rb +46 -10
- data/lib/helix/track.rb +0 -20
- data/lib/helix/video.rb +24 -13
- data/spec/base_spec.rb +4 -4
- data/spec/config_spec.rb +32 -32
- data/spec/durationed_media_spec.rb +92 -0
- data/spec/track_spec.rb +1 -82
- data/spec/video_spec.rb +63 -61
- metadata +3 -2
data/lib/helix/base.rb
CHANGED
|
@@ -53,14 +53,14 @@ module Helix
|
|
|
53
53
|
#
|
|
54
54
|
# @param [Hash] opts a hash of options for parameters passed into the HTTP GET
|
|
55
55
|
# @return [Array] The array of instance objects for a class.
|
|
56
|
-
def self.find_all(opts)
|
|
56
|
+
def self.find_all(opts={})
|
|
57
57
|
data_sets = get_data_sets(opts)
|
|
58
58
|
return [] if data_sets.nil?
|
|
59
59
|
data_sets.map { |attrs| self.new(attributes: attrs, config: config) }
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
def self.get_data_sets(opts)
|
|
63
|
-
url = config.build_url(format: opts[:format] || :json,
|
|
63
|
+
url = config.build_url(format: opts[:format] || :json,
|
|
64
64
|
media_type: self.plural_media_type)
|
|
65
65
|
# We allow opts[:sig_type] for internal negative testing only.
|
|
66
66
|
raw_response = config.get_response(url, {sig_type: :view}.merge(opts))
|
|
@@ -162,8 +162,11 @@ module Helix
|
|
|
162
162
|
# @param [Hash] opts a hash of attributes to update the instance with.
|
|
163
163
|
# @return [Base] Returns an instance of the class after update.
|
|
164
164
|
def update(opts={})
|
|
165
|
+
RestClient.log = 'helix.log' if opts.delete(:log)
|
|
165
166
|
memo_cfg = config
|
|
166
|
-
url = memo_cfg.build_url(
|
|
167
|
+
url = memo_cfg.build_url(content_type: :xml,
|
|
168
|
+
guid: guid,
|
|
169
|
+
media_type: plural_media_type)
|
|
167
170
|
params = {signature: memo_cfg.signature(:update)}.merge(media_type_sym => opts)
|
|
168
171
|
RestClient.put(url, params)
|
|
169
172
|
self
|
data/lib/helix/config.rb
CHANGED
|
@@ -46,11 +46,12 @@ module Helix
|
|
|
46
46
|
# @param [Hash] opts a hash of options for building URL additions
|
|
47
47
|
# @return [String] The full RESTful URL string object
|
|
48
48
|
def add_sub_urls(base_url, opts)
|
|
49
|
-
guid, action = [:guid, :action].map { |sub| opts[sub] }
|
|
49
|
+
guid, action, format = [:guid, :action, :formats].map { |sub| opts[sub] }
|
|
50
50
|
url = "#{base_url}/#{opts[:media_type]}"
|
|
51
|
-
url += "/#{guid}"
|
|
52
|
-
url += "/#{
|
|
53
|
-
"
|
|
51
|
+
url += "/#{guid}" if guid
|
|
52
|
+
url += "/formats/#{format}" if format
|
|
53
|
+
url += "/#{action}" if action
|
|
54
|
+
"#{url}.#{opts[:content_type]}"
|
|
54
55
|
end
|
|
55
56
|
|
|
56
57
|
# Creates a full RESTful URL to be used for HTTP requests.
|
|
@@ -58,10 +59,10 @@ module Helix
|
|
|
58
59
|
# @param [Hash] opts a hash of options for building URL
|
|
59
60
|
# @return [String] The full RESTful URL string object
|
|
60
61
|
def build_url(opts={})
|
|
61
|
-
opts[:
|
|
62
|
-
opts[:media_type]
|
|
63
|
-
base_url
|
|
64
|
-
url
|
|
62
|
+
opts[:content_type] ||= :json
|
|
63
|
+
opts[:media_type] ||= :videos
|
|
64
|
+
base_url = get_base_url(opts)
|
|
65
|
+
url = add_sub_urls(base_url, opts)
|
|
65
66
|
end
|
|
66
67
|
|
|
67
68
|
def clear_signatures!
|
|
@@ -4,14 +4,25 @@ module Helix
|
|
|
4
4
|
|
|
5
5
|
module ClassMethods
|
|
6
6
|
|
|
7
|
-
#
|
|
8
|
-
#
|
|
7
|
+
# Used to import tracks from a URL into the Twistage system.
|
|
8
|
+
# Doc reference: /doc/api/track/import
|
|
9
|
+
# Doc reference: /doc/api/video/import
|
|
9
10
|
#
|
|
10
|
-
# @
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
# @example
|
|
12
|
+
# track = Helix::Track.import(src: "www.google.com/track.mp4",
|
|
13
|
+
# title: "Some Title,
|
|
14
|
+
# description: "A random track.")
|
|
15
|
+
# new_track.track_id # => dd891b83ba39e
|
|
16
|
+
#
|
|
17
|
+
# video = Helix::Video.import(src: "www.google.com/video.mp4",
|
|
18
|
+
# title: "Some Title,
|
|
19
|
+
# description: "A random video.")
|
|
20
|
+
# new_video.video_id # => dd891b83ba39e
|
|
21
|
+
#
|
|
22
|
+
# @param [Hash] attrs The attributes for creating a track.
|
|
23
|
+
# @return [RestClient] The response object.
|
|
24
|
+
def import(attrs={})
|
|
25
|
+
rest_post(:create_many, attrs)
|
|
15
26
|
end
|
|
16
27
|
|
|
17
28
|
private
|
|
@@ -32,8 +43,9 @@ module Helix
|
|
|
32
43
|
# Gets the url used in the create_many import call.
|
|
33
44
|
#
|
|
34
45
|
# @return [String] Returns the valid url used for the API call.
|
|
35
|
-
def
|
|
36
|
-
|
|
46
|
+
def get_url_for(api_call, opts)
|
|
47
|
+
url_opts = url_opts_for(opts[:formats])[api_call].merge(opts)
|
|
48
|
+
Helix::Config.instance.build_url(url_opts)
|
|
37
49
|
end
|
|
38
50
|
|
|
39
51
|
# Method allows for :use_raw_xml to be passed into attributes.
|
|
@@ -45,9 +57,33 @@ module Helix
|
|
|
45
57
|
# @return [String] Returns xml either from a raw entry or generated from attributes.
|
|
46
58
|
def get_xml(attrs={})
|
|
47
59
|
return attrs[:use_raw_xml] if attrs[:use_raw_xml].present?
|
|
48
|
-
|
|
60
|
+
xml_opts = {root: :add }
|
|
61
|
+
{ list: { entry: attrs[:url_params] || {} } }.to_xml(xml_opts)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def rest_post(api_call, attrs)
|
|
65
|
+
RestClient.log = 'helix.log' if attrs.delete(:log)
|
|
66
|
+
content_type = url_opts_for[api_call][:content_type]
|
|
67
|
+
content_type_hash = { content_type: "text/#{content_type}" }
|
|
68
|
+
RestClient.post(get_url_for(api_call, attrs),
|
|
69
|
+
get_xml(attrs),
|
|
70
|
+
get_params(attrs).merge(content_type_hash))
|
|
49
71
|
end
|
|
50
72
|
|
|
73
|
+
# Standard hash values used to generate the create_many
|
|
74
|
+
# url.
|
|
75
|
+
#
|
|
76
|
+
# @return [Hash]
|
|
77
|
+
def url_opts_for(format=nil)
|
|
78
|
+
{ slice: { action: :slice,
|
|
79
|
+
media_type: plural_media_type,
|
|
80
|
+
content_type: :xml,
|
|
81
|
+
formats: format },
|
|
82
|
+
create_many: { action: :create_many,
|
|
83
|
+
media_type: plural_media_type,
|
|
84
|
+
content_type: :xml }
|
|
85
|
+
}
|
|
86
|
+
end
|
|
51
87
|
end
|
|
52
88
|
|
|
53
89
|
def self.included(klass); klass.extend(ClassMethods); end
|
data/lib/helix/track.rb
CHANGED
|
@@ -13,25 +13,5 @@ module Helix
|
|
|
13
13
|
#
|
|
14
14
|
# @return [Symbol] Name of the class.
|
|
15
15
|
def self.media_type_sym; :track; end
|
|
16
|
-
|
|
17
|
-
# Used to import tracks from a URL into the Twistage system.
|
|
18
|
-
# Doc reference: /doc/api/track/import
|
|
19
|
-
#
|
|
20
|
-
# @example
|
|
21
|
-
# track = Helix::Track.import(src: "www.google.com/track.mp4",
|
|
22
|
-
# title: "Some Title,
|
|
23
|
-
# description: "A random track.")
|
|
24
|
-
# new_track.track_id # => dd891b83ba39e
|
|
25
|
-
#
|
|
26
|
-
# @param [Hash] attrs The attributes for creating a track.
|
|
27
|
-
# @return [RestClient] The response object.
|
|
28
|
-
def self.import(attrs={})
|
|
29
|
-
#TODO: Pull shared logic (with video) into a shared lib file.
|
|
30
|
-
RestClient.post(get_url,
|
|
31
|
-
get_xml(attrs),
|
|
32
|
-
get_params(attrs))
|
|
33
|
-
end
|
|
34
|
-
|
|
35
16
|
end
|
|
36
|
-
|
|
37
17
|
end
|
data/lib/helix/video.rb
CHANGED
|
@@ -17,23 +17,34 @@ module Helix
|
|
|
17
17
|
# @return [Symbol] Name of the class.
|
|
18
18
|
def self.media_type_sym; :video; end
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
def self.slice(attrs={})
|
|
21
|
+
rest_post(:slice, attrs)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# Used to retrieve a stillframe for a video by using
|
|
26
|
+
# the video guid.
|
|
22
27
|
#
|
|
23
28
|
# @example
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
# description: "A random video.")
|
|
27
|
-
# new_video.video_id # => dd891b83ba39e
|
|
29
|
+
# sf_data = Helix::Video.get_stillframe("239c59483d346") #=> xDC\xF1?\xE9*?\xFF\xD9
|
|
30
|
+
# File.open("original.jpg", "w") { |f| f.puts sf_data }
|
|
28
31
|
#
|
|
29
|
-
# @param [
|
|
30
|
-
# @
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
# @param [String] guid is the string containing the guid for the video.
|
|
33
|
+
# @param [Hash] opts a hash of options for building URL
|
|
34
|
+
# @return [String] Stillframe jpg data, save it to a file with extension .jpg.
|
|
35
|
+
def self.get_stillframe(guid, opts={})
|
|
36
|
+
RestClient.log = 'helix.log' if opts.delete(:log)
|
|
37
|
+
server = opts[:server] || config.credentials[:server] || "service-staging"
|
|
38
|
+
width = opts[:width].to_s + "w" unless opts[:width].nil?
|
|
39
|
+
height = opts[:height].to_s + "h" unless opts[:height].nil?
|
|
40
|
+
width = "original" if opts[:width].nil? && opts[:height].nil?
|
|
41
|
+
url = "#{server}.twistage.com/videos/#{guid}/screenshots/"
|
|
42
|
+
url << "#{width.to_s}#{height.to_s}.jpg"
|
|
43
|
+
RestClient.get(url)
|
|
35
44
|
end
|
|
36
45
|
|
|
46
|
+
def stillframe(opts={})
|
|
47
|
+
self.class.get_stillframe(self.guid, opts)
|
|
48
|
+
end
|
|
37
49
|
end
|
|
38
|
-
|
|
39
50
|
end
|
data/spec/base_spec.rb
CHANGED
|
@@ -101,14 +101,14 @@ describe Helix::Base do
|
|
|
101
101
|
let(:meth) { :find_all }
|
|
102
102
|
let(:mock_config) { mock(Helix::Config, build_url: :built_url, get_response: {}) }
|
|
103
103
|
subject { klass.method(meth) }
|
|
104
|
-
its(:arity) { should eq(1) }
|
|
104
|
+
its(:arity) { should eq(-1) }
|
|
105
105
|
before(:each) do Helix::Config.stub(:instance) { mock_config } end
|
|
106
106
|
context "when given a config instances and an opts Hash" do
|
|
107
107
|
let(:opts) { {opts_key1: :opts_val1} }
|
|
108
108
|
let(:plural_media_type) { :videos }
|
|
109
109
|
before(:each) do klass.stub(:plural_media_type) { plural_media_type } end
|
|
110
110
|
it "should build a JSON URL -> the_url" do
|
|
111
|
-
mock_config.should_receive(:build_url).with(format: :json,
|
|
111
|
+
mock_config.should_receive(:build_url).with(format: :json,
|
|
112
112
|
media_type: plural_media_type)
|
|
113
113
|
klass.send(meth, opts)
|
|
114
114
|
end
|
|
@@ -319,8 +319,8 @@ describe Helix::Base do
|
|
|
319
319
|
mock_config.stub(:build_url) { :expected_url }
|
|
320
320
|
end
|
|
321
321
|
shared_examples_for "builds URL for update" do
|
|
322
|
-
it "should build_url(
|
|
323
|
-
mock_config.should_receive(:build_url).with(
|
|
322
|
+
it "should build_url(content_type: :xml, guid: guid, media_type: plural_media_type)" do
|
|
323
|
+
mock_config.should_receive(:build_url).with(content_type: :xml, guid: :the_guid, media_type: :the_media_type)
|
|
324
324
|
RestClient.stub(:put)
|
|
325
325
|
obj.send(meth)
|
|
326
326
|
end
|
data/spec/config_spec.rb
CHANGED
|
@@ -103,13 +103,13 @@ describe Helix::Config do
|
|
|
103
103
|
end
|
|
104
104
|
end
|
|
105
105
|
|
|
106
|
-
def build_test_url(site, sub_url, guid, action, media_type,
|
|
106
|
+
def build_test_url(site, sub_url, guid, action, media_type, content_type)
|
|
107
107
|
expected_url = site
|
|
108
108
|
expected_url += sub_url unless guid || action == :create_many
|
|
109
109
|
expected_url += "/#{media_type}"
|
|
110
110
|
expected_url += "/the_guid" if guid
|
|
111
111
|
expected_url += "/#{action}" if action
|
|
112
|
-
expected_url += ".#{
|
|
112
|
+
expected_url += ".#{content_type}"
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
describe "#build_url" do
|
|
@@ -118,12 +118,12 @@ describe Helix::Config do
|
|
|
118
118
|
subject { obj.method(meth) }
|
|
119
119
|
its(:arity) { should be(-1) }
|
|
120
120
|
before(:each) do obj.credentials = { site: site } end
|
|
121
|
-
shared_examples_for "reads scope from credentials for build_url" do |media_type,
|
|
121
|
+
shared_examples_for "reads scope from credentials for build_url" do |media_type,content_type,more_opts|
|
|
122
122
|
let(:opts) { more_opts || {} }
|
|
123
|
-
let(:action) { opts[:action] }
|
|
124
|
-
let(:guid) { opts[:guid] }
|
|
125
|
-
let(:url_pieces) { [site, sub_url, guid, action, media_type,
|
|
126
|
-
let(:expected_url) { build_test_url(*url_pieces) }
|
|
123
|
+
let(:action) { opts[:action] }
|
|
124
|
+
let(:guid) { opts[:guid] }
|
|
125
|
+
let(:url_pieces) { [site, sub_url, guid, action, media_type, content_type] }
|
|
126
|
+
let(:expected_url) { build_test_url(*url_pieces) }
|
|
127
127
|
before(:each) do obj.credentials = {site: 'http://example.com'} end
|
|
128
128
|
context "and credentials has a key for :reseller" do
|
|
129
129
|
before(:each) do obj.credentials.merge!(reseller: 're_id') end
|
|
@@ -201,39 +201,39 @@ describe Helix::Config do
|
|
|
201
201
|
it_behaves_like "reads scope from credentials for build_url", media_type, :json, {guid: :the_guid, action: :the_action}
|
|
202
202
|
end
|
|
203
203
|
end
|
|
204
|
-
[ :json, :xml ].each do |
|
|
205
|
-
context "when given opts[:
|
|
206
|
-
subject { obj.send(meth,
|
|
207
|
-
it_behaves_like "reads scope from credentials for build_url", :videos,
|
|
204
|
+
[ :json, :xml ].each do |content_type|
|
|
205
|
+
context "when given opts[:content_type] of :#{content_type}" do
|
|
206
|
+
subject { obj.send(meth, content_type: content_type) }
|
|
207
|
+
it_behaves_like "reads scope from credentials for build_url", :videos, content_type
|
|
208
208
|
end
|
|
209
|
-
context "when given opts[:
|
|
210
|
-
subject { obj.send(meth,
|
|
211
|
-
it_behaves_like "reads scope from credentials for build_url", :videos,
|
|
209
|
+
context "when given opts[:content_type] of :#{content_type} and opts[:guid] of :the_guid" do
|
|
210
|
+
subject { obj.send(meth, content_type: content_type, guid: :the_guid) }
|
|
211
|
+
it_behaves_like "reads scope from credentials for build_url", :videos, content_type, {guid: :the_guid}
|
|
212
212
|
end
|
|
213
|
-
context "when given opts[:
|
|
214
|
-
subject { obj.send(meth,
|
|
215
|
-
it_behaves_like "reads scope from credentials for build_url", :videos,
|
|
213
|
+
context "when given opts[:content_type] of :#{content_type} and opts[:action] of :the_action" do
|
|
214
|
+
subject { obj.send(meth, content_type: content_type, action: :the_action) }
|
|
215
|
+
it_behaves_like "reads scope from credentials for build_url", :videos, content_type, {action: :the_action}
|
|
216
216
|
end
|
|
217
|
-
context "when given opts[:
|
|
218
|
-
subject { obj.send(meth,
|
|
219
|
-
it_behaves_like "reads scope from credentials for build_url", :videos,
|
|
217
|
+
context "when given opts[:content_type] of :#{content_type}, opts[:guid] of :the_guid, and opts[:action] of :the_action" do
|
|
218
|
+
subject { obj.send(meth, content_type: content_type, guid: :the_guid, action: :the_action) }
|
|
219
|
+
it_behaves_like "reads scope from credentials for build_url", :videos, content_type, {guid: :the_guid, action: :the_action}
|
|
220
220
|
end
|
|
221
221
|
[ :videos, :tracks ].each do |media_type|
|
|
222
|
-
context "when given opts[:
|
|
223
|
-
subject { obj.send(meth,
|
|
224
|
-
it_behaves_like "reads scope from credentials for build_url", media_type,
|
|
222
|
+
context "when given opts[:content_type] of :#{content_type} and opts[:media_type] of :#{media_type}" do
|
|
223
|
+
subject { obj.send(meth, content_type: content_type, media_type: media_type) }
|
|
224
|
+
it_behaves_like "reads scope from credentials for build_url", media_type, content_type
|
|
225
225
|
end
|
|
226
|
-
context "when given opts[:
|
|
227
|
-
subject { obj.send(meth,
|
|
228
|
-
it_behaves_like "reads scope from credentials for build_url", media_type,
|
|
226
|
+
context "when given opts[:content_type] of :#{content_type}, opts[:guid] of :the_guid, and opts[:media_type] of :#{media_type}" do
|
|
227
|
+
subject { obj.send(meth, content_type: content_type, guid: :the_guid, media_type: media_type) }
|
|
228
|
+
it_behaves_like "reads scope from credentials for build_url", media_type, content_type, {guid: :the_guid}
|
|
229
229
|
end
|
|
230
|
-
context "when given opts[:
|
|
231
|
-
subject { obj.send(meth,
|
|
232
|
-
it_behaves_like "reads scope from credentials for build_url", media_type,
|
|
230
|
+
context "when given opts[:content_type] of :#{content_type}, opts[:action] of :the_action, and opts[:media_type] of :#{media_type}" do
|
|
231
|
+
subject { obj.send(meth, content_type: content_type, action: :the_action, media_type: media_type) }
|
|
232
|
+
it_behaves_like "reads scope from credentials for build_url", media_type, content_type, {action: :the_action}
|
|
233
233
|
end
|
|
234
|
-
context "when given opts[:
|
|
235
|
-
subject { obj.send(meth,
|
|
236
|
-
it_behaves_like "reads scope from credentials for build_url", media_type,
|
|
234
|
+
context "when given opts[:content_type] of :#{content_type}, opts[:guid] of :the_guid, opts[:action] of :the_action, and opts[:media_type] of :#{media_type}" do
|
|
235
|
+
subject { obj.send(meth, content_type: content_type, guid: :the_guid, action: :the_action, media_type: media_type) }
|
|
236
|
+
it_behaves_like "reads scope from credentials for build_url", media_type, content_type, {guid: :the_guid, action: :the_action}
|
|
237
237
|
end
|
|
238
238
|
end
|
|
239
239
|
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
require File.expand_path('../spec_helper', __FILE__)
|
|
2
|
+
require 'helix'
|
|
3
|
+
|
|
4
|
+
describe Helix::DurationedMedia do
|
|
5
|
+
|
|
6
|
+
def import_xml(values={})
|
|
7
|
+
{ list: { entry: values[:url_params] || {} } }.to_xml(root: :add)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
klasses = [ Helix::Video, Helix::Track ]
|
|
11
|
+
klasses.each do |klass|
|
|
12
|
+
subject { klass }
|
|
13
|
+
its(:ancestors) { should include(Helix::Base) }
|
|
14
|
+
|
|
15
|
+
describe "Constants"
|
|
16
|
+
|
|
17
|
+
let(:sig_opts) { { contributor: :helix,
|
|
18
|
+
library_id: :development } }
|
|
19
|
+
url_opts = { action: :create_many,
|
|
20
|
+
media_type: klass.send(:plural_media_type),
|
|
21
|
+
content_type: :xml }
|
|
22
|
+
|
|
23
|
+
describe ".import" do
|
|
24
|
+
let(:meth) { :import }
|
|
25
|
+
let(:mock_config) { mock(Helix::Config) }
|
|
26
|
+
subject { klass.method(meth) }
|
|
27
|
+
its(:arity) { should eq(-1) }
|
|
28
|
+
let(:params) { { params: { signature: :some_sig },
|
|
29
|
+
content_type: "text/xml" } }
|
|
30
|
+
before { Helix::Config.stub(:instance) { mock_config } }
|
|
31
|
+
|
|
32
|
+
it "should get an ingest signature" do
|
|
33
|
+
mock_config.should_receive(:build_url).with(url_opts)
|
|
34
|
+
mock_config.should_receive(:signature).with(:ingest, sig_opts) { :some_sig }
|
|
35
|
+
RestClient.should_receive(:post).with(nil, import_xml, params)
|
|
36
|
+
klass.send(meth)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe ".get_xml" do
|
|
41
|
+
let(:meth) { :get_xml }
|
|
42
|
+
subject { klass.method(meth) }
|
|
43
|
+
its(:arity) { should eq(-1) }
|
|
44
|
+
context "when :use_raw_xml is present in attrs" do
|
|
45
|
+
let(:use_raw_xml) { { use_raw_xml: :xml } }
|
|
46
|
+
it "should return the value of attrs[:use_raw_xml]" do
|
|
47
|
+
expect(klass.send(meth, use_raw_xml)).to eq(:xml)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
context "when hash is passed without :use_raw_xml" do
|
|
51
|
+
let(:attrs) { { url_params: { attribute: :value } } }
|
|
52
|
+
it "should convert attrs into xml" do
|
|
53
|
+
expect(klass.send(meth, attrs)).to eq(import_xml(attrs))
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
context "when nothing in passed in" do
|
|
57
|
+
it "should return valid xml" do
|
|
58
|
+
expect(klass.send(meth)).to eq(import_xml)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
describe ".url_opts_for" do
|
|
64
|
+
let(:meth) { :url_opts_for }
|
|
65
|
+
subject { klass.method(meth) }
|
|
66
|
+
its(:arity) { should eq(-1) }
|
|
67
|
+
it "should return a valid hash url options for Helix::Config#build_url" do
|
|
68
|
+
expect(klass.send(meth)[:create_many]).to eq(url_opts)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe ".get_url_for" do
|
|
73
|
+
let(:meth) { :get_url_for }
|
|
74
|
+
subject { klass.method(meth) }
|
|
75
|
+
its(:arity) { should eq(2) }
|
|
76
|
+
it "should call Helix::Config#build_url with url opts" do
|
|
77
|
+
Helix::Config.instance.should_receive(:build_url).with(klass.send(:url_opts_for)[:create_many])
|
|
78
|
+
klass.send(meth, :create_many, {})
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
describe ".get_params" do
|
|
83
|
+
let(:meth) { :get_params }
|
|
84
|
+
subject { klass.method(meth) }
|
|
85
|
+
its(:arity) { should eq(-1) }
|
|
86
|
+
it "should call Helix::Config#signature and return a hash of params" do
|
|
87
|
+
Helix::Config.instance.should_receive(:signature).with(:ingest, sig_opts) { :sig }
|
|
88
|
+
expect(klass.send(meth)).to eq({ params: { signature: :sig } })
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
data/spec/track_spec.rb
CHANGED
|
@@ -3,98 +3,17 @@ require 'helix'
|
|
|
3
3
|
|
|
4
4
|
describe Helix::Track do
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
{ list: { entry: values } }.to_xml(root: :add)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
let(:klass) { Helix::Track }
|
|
11
|
-
|
|
6
|
+
let(:klass) { Helix::Track }
|
|
12
7
|
subject { klass }
|
|
13
|
-
its(:ancestors) { should include(Helix::Base) }
|
|
14
8
|
its(:guid_name) { should eq('track_id') }
|
|
15
9
|
its(:media_type_sym) { should be(:track) }
|
|
16
10
|
its(:plural_media_type) { should eq('tracks') }
|
|
17
11
|
|
|
18
12
|
describe "Constants"
|
|
19
13
|
|
|
20
|
-
let(:sig_opts) { { contributor: :helix,
|
|
21
|
-
library_id: :development } }
|
|
22
|
-
let(:url_opts) { { action: :create_many,
|
|
23
|
-
media_type: "tracks",
|
|
24
|
-
format: :xml } }
|
|
25
|
-
|
|
26
14
|
describe "an instance" do
|
|
27
15
|
let(:obj) { klass.new({'track_id' => 'some_track_guid'}) }
|
|
28
16
|
subject { obj }
|
|
29
17
|
its(:media_type_sym) { should be(:track) }
|
|
30
18
|
end
|
|
31
|
-
|
|
32
|
-
describe ".import" do
|
|
33
|
-
let(:meth) { :import }
|
|
34
|
-
let(:mock_config) { mock(Helix::Config) }
|
|
35
|
-
subject { klass.method(meth) }
|
|
36
|
-
its(:arity) { should eq(-1) }
|
|
37
|
-
let(:params) { { params: { signature: :some_sig } } }
|
|
38
|
-
before { Helix::Config.stub(:instance) { mock_config } }
|
|
39
|
-
|
|
40
|
-
it "should get an ingest signature" do
|
|
41
|
-
mock_config.should_receive(:build_url).with(url_opts)
|
|
42
|
-
mock_config.should_receive(:signature).with(:ingest, sig_opts) { :some_sig }
|
|
43
|
-
RestClient.should_receive(:post).with(nil, import_xml, params)
|
|
44
|
-
klass.send(meth)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
describe ".get_xml" do
|
|
49
|
-
let(:meth) { :get_xml }
|
|
50
|
-
subject { klass.method(meth) }
|
|
51
|
-
its(:arity) { should eq(-1) }
|
|
52
|
-
context "when :use_raw_xml is present in attrs" do
|
|
53
|
-
let(:use_raw_xml) { { use_raw_xml: :xml } }
|
|
54
|
-
it "should return the value of attrs[:use_raw_xml]" do
|
|
55
|
-
expect(klass.send(meth, use_raw_xml)).to eq(:xml)
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
context "when hash is passed without :use_raw_xml" do
|
|
59
|
-
let(:attrs) { { attribute: :value } }
|
|
60
|
-
it "should convert attrs into xml" do
|
|
61
|
-
expect(klass.send(meth, attrs)).to eq(import_xml(attrs))
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
context "when nothing in passed in" do
|
|
65
|
-
it "should return valid xml" do
|
|
66
|
-
expect(klass.send(meth)).to eq(import_xml)
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
describe ".get_url_opts" do
|
|
72
|
-
let(:meth) { :get_url_opts }
|
|
73
|
-
subject { klass.method(meth) }
|
|
74
|
-
its(:arity) { should eq(0) }
|
|
75
|
-
it "should return a valid hash url options for Helix::Config#build_url" do
|
|
76
|
-
expect(klass.send(meth)).to eq(url_opts)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
describe ".get_url" do
|
|
81
|
-
let(:meth) { :get_url }
|
|
82
|
-
subject { klass.method(meth) }
|
|
83
|
-
its(:arity) { should eq(0) }
|
|
84
|
-
it "should call Helix::Config#build_url with url opts" do
|
|
85
|
-
Helix::Config.instance.should_receive(:build_url).with(klass.send(:get_url_opts))
|
|
86
|
-
klass.send(meth)
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
describe ".get_params" do
|
|
91
|
-
let(:meth) { :get_params }
|
|
92
|
-
subject { klass.method(meth) }
|
|
93
|
-
its(:arity) { should eq(-1) }
|
|
94
|
-
it "should call Helix::Config#signature and return a hash of params" do
|
|
95
|
-
Helix::Config.instance.should_receive(:signature).with(:ingest, sig_opts) { :sig }
|
|
96
|
-
expect(klass.send(meth)).to eq({ params: { signature: :sig } })
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
19
|
end
|
data/spec/video_spec.rb
CHANGED
|
@@ -4,96 +4,98 @@ require 'helix'
|
|
|
4
4
|
describe Helix::Video do
|
|
5
5
|
|
|
6
6
|
def import_xml(values={})
|
|
7
|
-
{ list: { entry: values } }.to_xml(root: :add)
|
|
7
|
+
{ list: { entry: values[:url_params] || {} } }.to_xml(root: :add)
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
let(:klass)
|
|
11
|
-
|
|
10
|
+
let(:klass) { Helix::Video }
|
|
12
11
|
subject { klass }
|
|
13
|
-
its(:ancestors) { should include(Helix::Base) }
|
|
14
12
|
its(:guid_name) { should eq('video_id') }
|
|
15
13
|
its(:media_type_sym) { should be(:video) }
|
|
16
14
|
its(:plural_media_type) { should eq('videos') }
|
|
17
15
|
|
|
18
16
|
describe "Constants"
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
library_id: :development } }
|
|
22
|
-
let(:url_opts) { { action: :create_many,
|
|
23
|
-
media_type: "videos",
|
|
24
|
-
format: :xml } }
|
|
18
|
+
### INSTANCE METHODS
|
|
25
19
|
|
|
26
20
|
describe "an instance" do
|
|
27
|
-
let(:obj)
|
|
28
|
-
subject
|
|
29
|
-
its(:media_type_sym)
|
|
21
|
+
let(:obj) { klass.new({video_id: 'some_video_guid'}) }
|
|
22
|
+
subject { obj }
|
|
23
|
+
its(:media_type_sym) { should be(:video) }
|
|
24
|
+
describe "#stillframe" do
|
|
25
|
+
let(:meth) { :stillframe }
|
|
26
|
+
let(:mock_config) { mock(Helix::Config) }
|
|
27
|
+
subject { obj.method(meth) }
|
|
28
|
+
its(:arity) { should eq(-1) }
|
|
29
|
+
it "should call self.class.get_stillframe" do
|
|
30
|
+
obj.stub!(:guid).and_return :some_guid
|
|
31
|
+
klass.should_receive(:get_stillframe)
|
|
32
|
+
obj.send(meth)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
30
35
|
end
|
|
31
36
|
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
### CLASS METHODS
|
|
38
|
+
|
|
39
|
+
describe ".slice" do
|
|
40
|
+
let(:meth) { :slice }
|
|
34
41
|
let(:mock_config) { mock(Helix::Config) }
|
|
35
42
|
subject { klass.method(meth) }
|
|
36
43
|
its(:arity) { should eq(-1) }
|
|
37
|
-
let(:params) { { params:
|
|
38
|
-
|
|
44
|
+
let(:params) { { params: { signature: :some_sig },
|
|
45
|
+
content_type: "text/xml" } }
|
|
46
|
+
let(:url_opts) { { action: :slice,
|
|
47
|
+
media_type: "videos",
|
|
48
|
+
content_type: :xml,
|
|
49
|
+
formats: :some_format } }
|
|
50
|
+
let(:sig_opts) { { contributor: :helix,
|
|
51
|
+
library_id: :development,
|
|
52
|
+
formats: :some_format } }
|
|
53
|
+
before { Helix::Config.stub(:instance) { mock_config } }
|
|
39
54
|
|
|
40
55
|
it "should get an ingest signature" do
|
|
41
56
|
mock_config.should_receive(:build_url).with(url_opts)
|
|
42
57
|
mock_config.should_receive(:signature).with(:ingest, sig_opts) { :some_sig }
|
|
43
58
|
RestClient.should_receive(:post).with(nil, import_xml, params)
|
|
44
|
-
klass.send(meth)
|
|
59
|
+
klass.send(meth, {formats: :some_format})
|
|
45
60
|
end
|
|
46
61
|
end
|
|
47
62
|
|
|
48
|
-
describe ".
|
|
49
|
-
let(:meth)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
63
|
+
describe ".get_stillframe" do
|
|
64
|
+
let(:meth) { :get_stillframe }
|
|
65
|
+
let(:mock_config) { mock(Helix::Config) }
|
|
66
|
+
subject { klass.method(meth) }
|
|
67
|
+
its(:arity) { should eq(-2) }
|
|
68
|
+
let(:image_data) { :some_image_data }
|
|
69
|
+
let(:guid) { :some_guid }
|
|
70
|
+
let(:server) { "service-staging" }
|
|
71
|
+
let(:base_url) { "#{server}.twistage.com/videos/#{guid}/screenshots/" }
|
|
72
|
+
context "when no height or width is passed in " do
|
|
73
|
+
let(:full_url) { "#{base_url}original.jpg" }
|
|
74
|
+
it "should build the correct url and return data" do
|
|
75
|
+
RestClient.should_receive(:get).with(full_url).and_return image_data
|
|
76
|
+
expect(klass.send(meth, guid)).to eq(image_data)
|
|
56
77
|
end
|
|
57
78
|
end
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
79
|
+
[:height, :width].each do |dimension|
|
|
80
|
+
context "when #{dimension} is passed in" do
|
|
81
|
+
url_tag = (dimension == :height ? "h" : "w")
|
|
82
|
+
let(:dim_val) { 100 }
|
|
83
|
+
let(:full_url) { "#{base_url}#{dim_val}#{url_tag}.jpg" }
|
|
84
|
+
let(:opts) { { dimension => dim_val } }
|
|
85
|
+
it "should build the correct url and return data" do
|
|
86
|
+
RestClient.should_receive(:get).with(full_url).and_return image_data
|
|
87
|
+
expect(klass.send(meth, guid, opts)).to eq(image_data)
|
|
88
|
+
end
|
|
62
89
|
end
|
|
63
90
|
end
|
|
64
|
-
context "when
|
|
65
|
-
|
|
66
|
-
|
|
91
|
+
context "when both height and width are passed in" do
|
|
92
|
+
let(:dim_val) { 100 }
|
|
93
|
+
let(:full_url) { "#{base_url}#{dim_val}w#{dim_val}h.jpg" }
|
|
94
|
+
let(:opts) { { height: dim_val, width: dim_val } }
|
|
95
|
+
it "should build the correct url and return data" do
|
|
96
|
+
RestClient.should_receive(:get).with(full_url).and_return image_data
|
|
97
|
+
expect(klass.send(meth, guid, opts)).to eq(image_data)
|
|
67
98
|
end
|
|
68
99
|
end
|
|
69
100
|
end
|
|
70
|
-
|
|
71
|
-
describe ".get_url_opts" do
|
|
72
|
-
let(:meth) { :get_url_opts }
|
|
73
|
-
subject { klass.method(meth) }
|
|
74
|
-
its(:arity) { should eq(0) }
|
|
75
|
-
it "should return a valid hash url options for Helix::Config#build_url" do
|
|
76
|
-
expect(klass.send(meth)).to eq(url_opts)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
describe ".get_url" do
|
|
81
|
-
let(:meth) { :get_url }
|
|
82
|
-
subject { klass.method(meth) }
|
|
83
|
-
its(:arity) { should eq(0) }
|
|
84
|
-
it "should call Helix::Config#build_url with url opts" do
|
|
85
|
-
Helix::Config.instance.should_receive(:build_url).with(klass.send(:get_url_opts))
|
|
86
|
-
klass.send(meth)
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
describe ".get_params" do
|
|
91
|
-
let(:meth) { :get_params }
|
|
92
|
-
subject { klass.method(meth) }
|
|
93
|
-
its(:arity) { should eq(-1) }
|
|
94
|
-
it "should call Helix::Config#signature and return a hash of params" do
|
|
95
|
-
Helix::Config.instance.should_receive(:signature).with(:ingest, sig_opts) { :sig }
|
|
96
|
-
expect(klass.send(meth)).to eq({ params: { signature: :sig } })
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
101
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: helix
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.2.
|
|
4
|
+
version: 0.0.2.1.pre
|
|
5
5
|
prerelease: 8
|
|
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: 2013-01-
|
|
12
|
+
date: 2013-01-17 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: json
|
|
@@ -82,6 +82,7 @@ files:
|
|
|
82
82
|
- spec/album_spec.rb
|
|
83
83
|
- spec/track_spec.rb
|
|
84
84
|
- spec/base_spec.rb
|
|
85
|
+
- spec/durationed_media_spec.rb
|
|
85
86
|
- LICENSE
|
|
86
87
|
- README.md
|
|
87
88
|
homepage: https://github.com/Twistage/helix/
|