helix 0.0.4.1.pre → 0.0.4.2.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/config.rb +24 -6
- data/lib/helix/hash_ext.rb +1 -1
- data/lib/helix/library.rb +4 -0
- data/spec/config_spec.rb +25 -2
- data/spec/library_spec.rb +19 -0
- metadata +81 -72
data/lib/helix/config.rb
CHANGED
@@ -50,7 +50,7 @@ module Helix
|
|
50
50
|
# @return [String] The full RESTful URL string object
|
51
51
|
def add_sub_urls(base_url, opts)
|
52
52
|
guid, action, format = [:guid, :action, :formats].map { |sub| opts[sub] }
|
53
|
-
url =
|
53
|
+
url = sub_url_scoping(base_url, opts)
|
54
54
|
url += "/#{guid}" if guid
|
55
55
|
url += "/formats/#{format}" if format
|
56
56
|
url += "/#{action}" if action
|
@@ -174,6 +174,16 @@ module Helix
|
|
174
174
|
|
175
175
|
private
|
176
176
|
|
177
|
+
def sub_url_scoping(base_url, opts)
|
178
|
+
resource_label = opts[:resource_label]
|
179
|
+
if resource_label == 'libraries'
|
180
|
+
co_id = opts[:company] || credentials[:company]
|
181
|
+
raise "No company to scope to: #{credentials}" if co_id.nil?
|
182
|
+
resource_label = "companies/#{co_id}/libraries"
|
183
|
+
end
|
184
|
+
"#{base_url}/#{resource_label}"
|
185
|
+
end
|
186
|
+
|
177
187
|
def error_message_for(sig_type)
|
178
188
|
"I don't understand '#{sig_type}'. Please give me one of :ingest, :update, or :view."
|
179
189
|
end
|
@@ -183,6 +193,14 @@ module Helix
|
|
183
193
|
@signature_for[license_key][sig_type]
|
184
194
|
end
|
185
195
|
|
196
|
+
def get_contributor_library_company(opts)
|
197
|
+
sig_param_labels = [:contributor, :library, :company]
|
198
|
+
scoping_proc = lambda { |key| opts[key] || credentials[key] }
|
199
|
+
contributor, library, company = sig_param_labels.map(&scoping_proc)
|
200
|
+
contributor ||= 'helix_default_contributor'
|
201
|
+
[contributor, library, company]
|
202
|
+
end
|
203
|
+
|
186
204
|
def license_key
|
187
205
|
@credentials[:license_key]
|
188
206
|
end
|
@@ -227,12 +245,12 @@ module Helix
|
|
227
245
|
end
|
228
246
|
|
229
247
|
def url_for(sig_type, opts={})
|
230
|
-
contributor,
|
231
|
-
|
232
|
-
url
|
248
|
+
contributor, library, company = get_contributor_library_company(opts)
|
249
|
+
url = "#{credentials[:site]}/api/#{sig_type}_key?"
|
250
|
+
url += "licenseKey=#{credentials[:license_key]}&duration=#{SIG_DURATION}"
|
233
251
|
url += "&contributor=#{contributor}" if sig_type == :ingest
|
234
|
-
url += "&library_id=#{
|
235
|
-
url += "&company_id=#{
|
252
|
+
url += "&library_id=#{library}" if library
|
253
|
+
url += "&company_id=#{company}" if company
|
236
254
|
url
|
237
255
|
end
|
238
256
|
|
data/lib/helix/hash_ext.rb
CHANGED
@@ -93,7 +93,7 @@ class Hash
|
|
93
93
|
# configure your own builder with the <tt>:builder</tt> option. The method also accepts
|
94
94
|
# options like <tt>:dasherize</tt> and friends, they are forwarded to the builder.
|
95
95
|
def to_xml(options = {})
|
96
|
-
|
96
|
+
|
97
97
|
options = options.dup
|
98
98
|
options[:indent] ||= 2
|
99
99
|
options[:root] ||= 'hash'
|
data/lib/helix/library.rb
CHANGED
@@ -9,6 +9,10 @@ module Helix
|
|
9
9
|
# @return [String] A blank String
|
10
10
|
def self.create(attrs={}); super; end
|
11
11
|
|
12
|
+
def self.find(nickname, opts={})
|
13
|
+
Helix::RESTful.find(nickname, opts.merge(content_type: :xml))
|
14
|
+
end
|
15
|
+
|
12
16
|
# The class name, to be used by supporting classes. Such as Config which uses
|
13
17
|
# this method as a way to build URLs.
|
14
18
|
#
|
data/spec/config_spec.rb
CHANGED
@@ -204,8 +204,8 @@ describe Helix::Config do
|
|
204
204
|
subject { obj.send(meth, {guid: :the_guid, action: :the_action}) }
|
205
205
|
it_behaves_like "reads scope from credentials for build_url", :videos, :xml, {guid: :the_guid, action: :the_action}
|
206
206
|
end
|
207
|
-
[
|
208
|
-
context "when given opts[:resource_label] of
|
207
|
+
%w[ videos tracks ].each do |resource_label|
|
208
|
+
context "when given opts[:resource_label] of '#{resource_label}'" do
|
209
209
|
subject { obj.send(meth, resource_label: resource_label) }
|
210
210
|
it_behaves_like "reads scope from credentials for build_url", resource_label, :xml
|
211
211
|
end
|
@@ -222,6 +222,23 @@ describe Helix::Config do
|
|
222
222
|
it_behaves_like "reads scope from credentials for build_url", resource_label, :xml, {guid: :the_guid, action: :the_action}
|
223
223
|
end
|
224
224
|
end
|
225
|
+
%w[ libraries ].each do |resource_label|
|
226
|
+
context "when there is no company in credentials" do
|
227
|
+
context "when given opts[:resource_label] of '#{resource_label}'" do
|
228
|
+
it "should raise a no company error" do
|
229
|
+
the_proc = lambda { obj.send(meth, resource_label: resource_label) }
|
230
|
+
expect(the_proc).to raise_error
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
context "when there is a company in credentials" do
|
235
|
+
before(:each) do obj.credentials.merge!(company: :the_co_id) end
|
236
|
+
context "when given opts[:resource_label] of '#{resource_label}'" do
|
237
|
+
subject { obj.send(meth, resource_label: resource_label) }
|
238
|
+
it { should eq("http://example.com/companies/the_co_id/companies/the_co_id/libraries.xml") }
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
225
242
|
[ :json, :xml ].each do |content_type|
|
226
243
|
context "when given opts[:content_type] of :#{content_type}" do
|
227
244
|
subject { obj.send(meth, content_type: content_type) }
|
@@ -549,10 +566,16 @@ describe Helix::Config do
|
|
549
566
|
obj.instance_variable_set(:@signature_expiration_for, sig_exp_for)
|
550
567
|
RestClient.stub(:get) { :fresh_sig }
|
551
568
|
end
|
569
|
+
before(:each) do
|
570
|
+
Helix::Config.instance.credentials[:company] = "the_co"
|
571
|
+
Helix::Config.instance.credentials[:library] = "default"
|
572
|
+
end
|
552
573
|
it "should call RestClient.get(#{url})" do
|
553
574
|
set_stubs(obj)
|
554
575
|
url = "#{obj.credentials[:site]}/api/#{sig_type}_key?licenseKey=#{license_key}&duration=1200"
|
555
576
|
url += "&contributor=helix_default_contributor" if sig_type == :ingest
|
577
|
+
url += "&library_id=default"
|
578
|
+
url += "&company_id=the_co"
|
556
579
|
RestClient.should_receive(:get).with(url) { :fresh_sig }
|
557
580
|
expect(obj.send(meth, sig_type)).to be(:fresh_sig)
|
558
581
|
end
|
data/spec/library_spec.rb
CHANGED
@@ -30,6 +30,24 @@ describe Helix::Library do
|
|
30
30
|
|
31
31
|
describe "Constants"
|
32
32
|
|
33
|
+
describe ".find" do
|
34
|
+
let(:meth) { :find }
|
35
|
+
subject { klass.method(meth) }
|
36
|
+
its(:arity) { should eq(-2) }
|
37
|
+
context "when given just a nickname" do
|
38
|
+
it "should call super(nickname, {content_type: :xml})" do
|
39
|
+
Helix::RESTful.should_receive(:find).with(:a_nickname, {content_type: :xml})
|
40
|
+
klass.send(meth, :a_nickname)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
context "when given a nickname and opts" do
|
44
|
+
it "should call super(nickname, opts.merge(content_type: :xml))" do
|
45
|
+
Helix::RESTful.should_receive(:find).with(:a_nickname, {content_type: :xml, k: :v})
|
46
|
+
klass.send(meth, :a_nickname, {k: :v})
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
33
51
|
describe "an instance" do
|
34
52
|
let(:obj) { klass.new({'library_id' => 'some_library_id'}) }
|
35
53
|
subject { obj }
|
@@ -38,4 +56,5 @@ describe Helix::Library do
|
|
38
56
|
it { should respond_to(crud_call) }
|
39
57
|
end
|
40
58
|
end
|
59
|
+
|
41
60
|
end
|
metadata
CHANGED
@@ -1,128 +1,137 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: helix
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4.2.pre
|
4
5
|
prerelease: 8
|
5
|
-
version: 0.0.4.1.pre
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Twistage, Inc
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-09-11 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: json
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
23
21
|
version: 1.5.4
|
24
22
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: rest-client
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.5.4
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rest-client
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
30
33
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
+
requirements:
|
35
|
+
- - '='
|
36
|
+
- !ruby/object:Gem::Version
|
34
37
|
version: 1.6.7
|
35
38
|
type: :runtime
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: nori
|
39
39
|
prerelease: false
|
40
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - '='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.6.7
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: nori
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
41
49
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
50
|
+
requirements:
|
51
|
+
- - '='
|
52
|
+
- !ruby/object:Gem::Version
|
45
53
|
version: 1.1.3
|
46
54
|
type: :runtime
|
47
|
-
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.1.3
|
48
62
|
description: Provides helper libraries for Ruby access to the Twistage API
|
49
63
|
email: kevin.baird@perceptivesoftware.com, michael.wood@perceptivesoftware.com
|
50
64
|
executables: []
|
51
|
-
|
52
65
|
extensions: []
|
53
|
-
|
54
66
|
extra_rdoc_files: []
|
55
|
-
|
56
|
-
files:
|
67
|
+
files:
|
57
68
|
- lib/helix.rb
|
58
|
-
- lib/helix/
|
69
|
+
- lib/helix/album.rb
|
70
|
+
- lib/helix/audio_playlist.rb
|
71
|
+
- lib/helix/base.rb
|
72
|
+
- lib/helix/config.rb
|
59
73
|
- lib/helix/document.rb
|
60
|
-
- lib/helix/
|
74
|
+
- lib/helix/durationed.rb
|
75
|
+
- lib/helix/exceptions.rb
|
76
|
+
- lib/helix/hash_ext.rb
|
77
|
+
- lib/helix/image.rb
|
78
|
+
- lib/helix/library.rb
|
61
79
|
- lib/helix/media.rb
|
62
|
-
- lib/helix/statistics.rb
|
63
80
|
- lib/helix/object_ext.rb
|
64
|
-
- lib/helix/library.rb
|
65
|
-
- lib/helix/audio_playlist.rb
|
66
|
-
- lib/helix/uploadable.rb
|
67
|
-
- lib/helix/durationed.rb
|
68
81
|
- lib/helix/playlist.rb
|
69
82
|
- lib/helix/restful.rb
|
70
|
-
- lib/helix/
|
71
|
-
- lib/helix/
|
72
|
-
- lib/helix/video.rb
|
83
|
+
- lib/helix/statistics.rb
|
84
|
+
- lib/helix/tag.rb
|
73
85
|
- lib/helix/track.rb
|
74
|
-
- lib/helix/
|
75
|
-
- lib/helix/
|
76
|
-
- lib/helix/
|
77
|
-
- lib/helix/
|
78
|
-
-
|
79
|
-
- spec/
|
86
|
+
- lib/helix/uploadable.rb
|
87
|
+
- lib/helix/user.rb
|
88
|
+
- lib/helix/video.rb
|
89
|
+
- lib/helix/video_playlist.rb
|
90
|
+
- spec/_integration_spec.rb
|
91
|
+
- spec/album_spec.rb
|
80
92
|
- spec/audio_playlist_spec.rb
|
93
|
+
- spec/base_spec.rb
|
81
94
|
- spec/config_spec.rb
|
82
|
-
- spec/
|
83
|
-
- spec/media_spec.rb
|
95
|
+
- spec/document_spec.rb
|
84
96
|
- spec/durationed_spec.rb
|
85
97
|
- spec/helix_spec.rb
|
86
|
-
- spec/
|
87
|
-
- spec/
|
98
|
+
- spec/image_spec.rb
|
99
|
+
- spec/library_spec.rb
|
100
|
+
- spec/media_spec.rb
|
101
|
+
- spec/playlist_spec.rb
|
102
|
+
- spec/spec_helper.rb
|
88
103
|
- spec/statistics_spec.rb
|
89
|
-
- spec/_integration_spec.rb
|
90
104
|
- spec/tag_spec.rb
|
91
|
-
- spec/video_playlist_spec.rb
|
92
105
|
- spec/track_spec.rb
|
93
106
|
- spec/user_spec.rb
|
107
|
+
- spec/video_playlist_spec.rb
|
94
108
|
- spec/video_spec.rb
|
95
|
-
- spec/playlist_spec.rb
|
96
|
-
- spec/library_spec.rb
|
97
|
-
- spec/base_spec.rb
|
98
109
|
- LICENSE
|
99
110
|
- README.md
|
100
111
|
homepage: https://github.com/Twistage/helix/
|
101
|
-
licenses:
|
112
|
+
licenses:
|
102
113
|
- 3-Clause BSD
|
103
114
|
post_install_message:
|
104
115
|
rdoc_options: []
|
105
|
-
|
106
|
-
require_paths:
|
116
|
+
require_paths:
|
107
117
|
- lib
|
108
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
119
|
none: false
|
110
|
-
requirements:
|
111
|
-
- -
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version:
|
114
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ! '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
125
|
none: false
|
116
|
-
requirements:
|
117
|
-
- -
|
118
|
-
- !ruby/object:Gem::Version
|
126
|
+
requirements:
|
127
|
+
- - ! '>'
|
128
|
+
- !ruby/object:Gem::Version
|
119
129
|
version: 1.3.1
|
120
130
|
requirements: []
|
121
|
-
|
122
131
|
rubyforge_project:
|
123
|
-
rubygems_version: 1.8.
|
132
|
+
rubygems_version: 1.8.25
|
124
133
|
signing_key:
|
125
134
|
specification_version: 3
|
126
135
|
summary: Wrapper library for the video API
|
127
136
|
test_files: []
|
128
|
-
|
137
|
+
has_rdoc: yard
|