helix 0.0.1.4.pre → 0.0.1.5.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 +3 -2
- data/lib/helix/config.rb +4 -1
- data/lib/helix/track.rb +61 -0
- data/lib/helix/video.rb +7 -12
- data/spec/base_spec.rb +2 -1
- data/spec/track_spec.rb +84 -5
- data/spec/video_spec.rb +0 -14
- metadata +63 -55
data/lib/helix/base.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require 'rest-client'
|
|
2
2
|
require 'json'
|
|
3
3
|
require 'yaml'
|
|
4
|
-
require '
|
|
4
|
+
require 'nori'
|
|
5
5
|
|
|
6
6
|
module Helix
|
|
7
7
|
class Base
|
|
@@ -60,7 +60,8 @@ module Helix
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
def self.get_data_sets(opts)
|
|
63
|
-
url = config.build_url(format: :json
|
|
63
|
+
url = config.build_url(format: opts[:format] || :json,
|
|
64
|
+
media_type: self.plural_media_type)
|
|
64
65
|
# We allow opts[:sig_type] for internal negative testing only.
|
|
65
66
|
raw_response = config.get_response(url, {sig_type: :view}.merge(opts))
|
|
66
67
|
data_sets = raw_response[plural_media_type]
|
data/lib/helix/config.rb
CHANGED
|
@@ -128,7 +128,10 @@ module Helix
|
|
|
128
128
|
if url =~ /json/
|
|
129
129
|
JSON.parse(response)
|
|
130
130
|
elsif url =~ /xml/
|
|
131
|
-
|
|
131
|
+
#TODO: Cleanup Nori and response gsub.
|
|
132
|
+
Nori.parser = :nokogiri
|
|
133
|
+
xml = response.gsub(/<custom-fields type='array'>/, '<custom-fields type=\'hash\'>')
|
|
134
|
+
Nori.parse(xml)
|
|
132
135
|
elsif url =~ /csv/
|
|
133
136
|
response
|
|
134
137
|
else
|
data/lib/helix/track.rb
CHANGED
|
@@ -11,7 +11,68 @@ module Helix
|
|
|
11
11
|
#
|
|
12
12
|
# @return [Symbol] Name of the class.
|
|
13
13
|
def self.media_type_sym; :track; end
|
|
14
|
+
|
|
15
|
+
# Used to import tracks from a URL into the Twistage system.
|
|
16
|
+
# Doc reference: /doc/api/track/import
|
|
17
|
+
#
|
|
18
|
+
# @example
|
|
19
|
+
# track = Helix::Track.import(src: "www.google.com/track.mp4",
|
|
20
|
+
# title: "Some Title,
|
|
21
|
+
# description: "A random track.")
|
|
22
|
+
# new_track.track_id # => dd891b83ba39e
|
|
23
|
+
#
|
|
24
|
+
# @param [Hash] attrs The attributes for creating a track.
|
|
25
|
+
# @return [RestClient] The response object.
|
|
26
|
+
def self.import(attrs={})
|
|
27
|
+
#TODO: Pull shared logic (with video) into a shared lib file.
|
|
28
|
+
RestClient.post(self.get_url,
|
|
29
|
+
self.get_xml(attrs),
|
|
30
|
+
self.get_params(attrs))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
# Method allows for :use_raw_xml to be passed into attributes.
|
|
36
|
+
# Normally attributes would be converted to xml, but use_raw_xml
|
|
37
|
+
# takes raw xml as an argument. Allowing for xml files to be
|
|
38
|
+
# used in place of attributes.
|
|
39
|
+
#
|
|
40
|
+
# @param [Hash] attrs The attributes for creating xml.
|
|
41
|
+
# @return [String] Returns xml either from a raw entry or generated from attributes.
|
|
42
|
+
def self.get_xml(attrs={})
|
|
43
|
+
return attrs[:use_raw_xml] if attrs[:use_raw_xml].present?
|
|
44
|
+
{ list: { entry: attrs } }.to_xml(root: :add)
|
|
45
|
+
end
|
|
14
46
|
|
|
47
|
+
# Standard hash values used to generate the create_many
|
|
48
|
+
# url.
|
|
49
|
+
#
|
|
50
|
+
# @return [Hash]
|
|
51
|
+
def self.get_url_opts
|
|
52
|
+
{ action: :create_many,
|
|
53
|
+
media_type: plural_media_type,
|
|
54
|
+
format: :xml }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Gets the url used in the create_many import call.
|
|
58
|
+
#
|
|
59
|
+
# @return [String] Returns the valid url used for the API call.
|
|
60
|
+
def self.get_url
|
|
61
|
+
Helix::Config.instance.build_url(self.get_url_opts)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Gets the hash used in adding the signature to the API
|
|
65
|
+
# call.
|
|
66
|
+
#
|
|
67
|
+
# @return [Hash] Returns a formatted hash for passing in the signature to the API call.
|
|
68
|
+
def self.get_params(opts={})
|
|
69
|
+
opts = { contributor: :helix, library_id: :development }.merge(opts)
|
|
70
|
+
sig = Helix::Config.instance.signature(:ingest, opts)
|
|
71
|
+
#TODO: Find a better way to handle all the different params needed for a call, such as
|
|
72
|
+
#attributes vs signature params vs process params. :url params is a temp fix.
|
|
73
|
+
url_params = (opts[:url_params].nil? ? {} : opts[:url_params])
|
|
74
|
+
{ params: (params = { signature: sig }.merge(url_params)) }
|
|
75
|
+
end
|
|
15
76
|
end
|
|
16
77
|
|
|
17
78
|
end
|
data/lib/helix/video.rb
CHANGED
|
@@ -29,7 +29,7 @@ module Helix
|
|
|
29
29
|
def self.import(attrs={})
|
|
30
30
|
RestClient.post(self.get_url,
|
|
31
31
|
self.get_xml(attrs),
|
|
32
|
-
self.get_params(
|
|
32
|
+
self.get_params(attrs))
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
private
|
|
@@ -49,7 +49,6 @@ module Helix
|
|
|
49
49
|
# Standard hash values used to generate the create_many
|
|
50
50
|
# url.
|
|
51
51
|
#
|
|
52
|
-
#
|
|
53
52
|
# @return [Hash]
|
|
54
53
|
def self.get_url_opts
|
|
55
54
|
{ action: :create_many,
|
|
@@ -64,21 +63,17 @@ module Helix
|
|
|
64
63
|
Helix::Config.instance.build_url(self.get_url_opts)
|
|
65
64
|
end
|
|
66
65
|
|
|
67
|
-
def self.extract_params(attrs)
|
|
68
|
-
[:contributor, :library_id].each_with_object({}) do |param, hash|
|
|
69
|
-
hash[param] = attrs[param] unless attrs[param].nil?
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
66
|
# Gets the hash used in adding the signature to the API
|
|
74
67
|
# call.
|
|
75
68
|
#
|
|
76
69
|
# @return [Hash] Returns a formatted hash for passing in the signature to the API call.
|
|
77
70
|
def self.get_params(opts={})
|
|
78
|
-
opts
|
|
79
|
-
sig
|
|
80
|
-
|
|
71
|
+
opts = { contributor: :helix, library_id: :development }.merge(opts)
|
|
72
|
+
sig = Helix::Config.instance.signature(:ingest, opts)
|
|
73
|
+
#TODO: Find a better way to handle all the different params needed for a call, such as
|
|
74
|
+
#attributes vs signature params vs process params. :url params is a temp fix.
|
|
75
|
+
url_params = (opts[:url_params].nil? ? {} : opts[:url_params])
|
|
76
|
+
{ params: (params = { signature: sig }.merge(url_params)) }
|
|
81
77
|
end
|
|
82
|
-
|
|
83
78
|
end
|
|
84
79
|
end
|
data/spec/base_spec.rb
CHANGED
|
@@ -108,7 +108,8 @@ describe Helix::Base do
|
|
|
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:
|
|
111
|
+
mock_config.should_receive(:build_url).with(format: :json,
|
|
112
|
+
media_type: plural_media_type)
|
|
112
113
|
klass.send(meth, opts)
|
|
113
114
|
end
|
|
114
115
|
it "should get_response(the_url, {sig_type: :view}.merge(opts) -> raw_response" do
|
data/spec/track_spec.rb
CHANGED
|
@@ -2,20 +2,99 @@ require File.expand_path('../spec_helper', __FILE__)
|
|
|
2
2
|
require 'helix'
|
|
3
3
|
|
|
4
4
|
describe Helix::Track do
|
|
5
|
+
|
|
6
|
+
def import_xml(values={})
|
|
7
|
+
{ list: { entry: values } }.to_xml(root: :add)
|
|
8
|
+
end
|
|
9
|
+
|
|
5
10
|
let(:klass) { Helix::Track }
|
|
6
11
|
|
|
7
|
-
subject
|
|
8
|
-
its(:ancestors)
|
|
9
|
-
its(:guid_name)
|
|
12
|
+
subject { klass }
|
|
13
|
+
its(:ancestors) { should include(Helix::Base) }
|
|
14
|
+
its(:guid_name) { should eq('track_id') }
|
|
10
15
|
its(:media_type_sym) { should be(:track) }
|
|
11
16
|
its(:plural_media_type) { should eq('tracks') }
|
|
12
17
|
|
|
13
18
|
describe "Constants"
|
|
14
19
|
|
|
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
|
+
|
|
15
26
|
describe "an instance" do
|
|
16
|
-
let(:obj)
|
|
17
|
-
subject
|
|
27
|
+
let(:obj) { klass.new({'track_id' => 'some_track_guid'}) }
|
|
28
|
+
subject { obj }
|
|
18
29
|
its(:media_type_sym) { should be(:track) }
|
|
19
30
|
end
|
|
20
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
|
+
|
|
21
100
|
end
|
data/spec/video_spec.rb
CHANGED
|
@@ -96,18 +96,4 @@ describe Helix::Video do
|
|
|
96
96
|
expect(klass.send(meth)).to eq({ params: { signature: :sig } })
|
|
97
97
|
end
|
|
98
98
|
end
|
|
99
|
-
|
|
100
|
-
describe ".extract_params" do
|
|
101
|
-
let(:meth) { :extract_params }
|
|
102
|
-
subject { klass.method(meth) }
|
|
103
|
-
its(:arity) { should eq(1) }
|
|
104
|
-
let(:expected_hash) { { contributor: :con, library_id: :id } }
|
|
105
|
-
let(:attrs) { { extra_key_one: :one,
|
|
106
|
-
extra_key_two: :two }.merge(expected_hash) }
|
|
107
|
-
it "should return the correct key values from attributes" do
|
|
108
|
-
expect(klass.send(meth, attrs)).to eq(expected_hash)
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
|
|
113
99
|
end
|
metadata
CHANGED
|
@@ -1,104 +1,112 @@
|
|
|
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.1.5.pre
|
|
4
5
|
prerelease: 8
|
|
5
|
-
version: 0.0.1.4.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: 2012-12-07 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
|
|
30
25
|
none: false
|
|
31
|
-
requirements:
|
|
32
|
-
- -
|
|
33
|
-
- !ruby/object:Gem::Version
|
|
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
|
|
33
|
+
none: false
|
|
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: activesupport
|
|
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
|
|
45
|
-
version:
|
|
50
|
+
requirements:
|
|
51
|
+
- - ! '>='
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
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: kbaird@twistage.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
69
|
- lib/helix/album.rb
|
|
59
|
-
- lib/helix/track.rb
|
|
60
70
|
- lib/helix/base.rb
|
|
61
|
-
- lib/helix/statistics.rb
|
|
62
|
-
- lib/helix/video.rb
|
|
63
|
-
- lib/helix/config.rb
|
|
64
71
|
- lib/helix/image.rb
|
|
65
|
-
-
|
|
72
|
+
- lib/helix/config.rb
|
|
73
|
+
- lib/helix/video.rb
|
|
74
|
+
- lib/helix/track.rb
|
|
75
|
+
- lib/helix/statistics.rb
|
|
76
|
+
- spec/video_spec.rb
|
|
77
|
+
- spec/spec_helper.rb
|
|
66
78
|
- spec/statistics_spec.rb
|
|
67
79
|
- spec/config_spec.rb
|
|
68
|
-
- spec/track_spec.rb
|
|
69
80
|
- spec/image_spec.rb
|
|
70
|
-
- spec/spec_helper.rb
|
|
71
|
-
- spec/video_spec.rb
|
|
72
81
|
- spec/album_spec.rb
|
|
82
|
+
- spec/track_spec.rb
|
|
83
|
+
- spec/base_spec.rb
|
|
73
84
|
- LICENSE
|
|
74
85
|
- README.md
|
|
75
86
|
homepage: https://github.com/Twistage/helix/
|
|
76
|
-
licenses:
|
|
87
|
+
licenses:
|
|
77
88
|
- 3-Clause BSD
|
|
78
89
|
post_install_message:
|
|
79
90
|
rdoc_options: []
|
|
80
|
-
|
|
81
|
-
require_paths:
|
|
91
|
+
require_paths:
|
|
82
92
|
- lib
|
|
83
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
84
94
|
none: false
|
|
85
|
-
requirements:
|
|
86
|
-
- -
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
version:
|
|
89
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
|
+
requirements:
|
|
96
|
+
- - ! '>='
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
version: '0'
|
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
100
|
none: false
|
|
91
|
-
requirements:
|
|
92
|
-
- -
|
|
93
|
-
- !ruby/object:Gem::Version
|
|
101
|
+
requirements:
|
|
102
|
+
- - ! '>'
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
94
104
|
version: 1.3.1
|
|
95
105
|
requirements: []
|
|
96
|
-
|
|
97
106
|
rubyforge_project:
|
|
98
107
|
rubygems_version: 1.8.24
|
|
99
108
|
signing_key:
|
|
100
109
|
specification_version: 3
|
|
101
110
|
summary: Wrapper library for the video API
|
|
102
111
|
test_files: []
|
|
103
|
-
|
|
104
112
|
has_rdoc: true
|