helix 0.0.3.3.pre → 0.0.3.4.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.rb CHANGED
@@ -10,7 +10,25 @@ require 'helix/document'
10
10
  require 'helix/config'
11
11
  require 'helix/statistics'
12
12
  require 'helix/library'
13
+ require 'helix/user'
13
14
  require 'active_support/core_ext'
14
15
 
15
16
  module Helix
17
+
18
+ # @param [String] The name of the Company to scope to.
19
+ def self.scope_to_company(co_id)
20
+ Helix::Config.instance.credentials.delete(:library)
21
+ Helix::Config.instance.credentials[:company] = co_id
22
+ end
23
+
24
+ # @param [String] The name of the Library to scope to.
25
+ def self.scope_to_library(lib_id)
26
+ Helix::Config.instance.credentials[:library] = lib_id
27
+ end
28
+
29
+ # @param [String] The license key to use.
30
+ def self.set_license_key(license_key)
31
+ Helix::Config.instance.credentials[:license_key] = license_key
32
+ end
33
+
16
34
  end
data/lib/helix/library.rb CHANGED
@@ -6,6 +6,9 @@ module Helix
6
6
 
7
7
  include RESTful
8
8
 
9
+ # @return [String] A blank String
10
+ def self.create(attrs={}); super; end
11
+
9
12
  # The class name, to be used by supporting classes. Such as Config which uses
10
13
  # this method as a way to build URLs.
11
14
  #
data/lib/helix/restful.rb CHANGED
@@ -56,8 +56,13 @@ module Helix
56
56
  raise Helix::NoConfigurationLoaded.new if config.nil?
57
57
  url = config.build_url(build_url_opts)
58
58
  response = RestClient.post(url, attributes.merge(signature: config.signature(:update)))
59
- attrs = Hash.from_xml(response)
60
- self.new(attributes: attrs[resource_label_sym.to_s], config: config)
59
+ return if response == ''
60
+ begin
61
+ attrs = Hash.from_xml(response)
62
+ self.new(attributes: attrs[resource_label_sym.to_s], config: config)
63
+ rescue REXML::ParseException
64
+ response
65
+ end
61
66
  end
62
67
 
63
68
  # Finds and returns a record in instance form for a class, through
data/lib/helix/user.rb ADDED
@@ -0,0 +1,38 @@
1
+ require 'helix/media'
2
+
3
+ module Helix
4
+
5
+ class User < Base
6
+
7
+ include RESTful
8
+
9
+ # @return [String] the license_key associated with newly-created API User
10
+ def self.create(attrs={}); super; end
11
+
12
+ # The class name, to be used by supporting classes. Such as Config which uses
13
+ # this method as a way to build URLs.
14
+ #
15
+ #
16
+ # @example
17
+ # Helix::User.resource_label_sym #=> :user
18
+ #
19
+ # @return [Symbol] Name of the class.
20
+ def self.resource_label_sym; :user; end
21
+
22
+ # Creates a string associated with a class name pluralized
23
+ #
24
+ # @example
25
+ # Helix::User.plural_resource_label #=> "users"
26
+ #
27
+ # @return [String] The class name pluralized
28
+ def self.plural_resource_label
29
+ "users"
30
+ end
31
+
32
+ def self.known_attributes
33
+ []
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,54 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+ require 'helix'
3
+
4
+ describe Helix do
5
+ let(:klass) { Helix }
6
+
7
+ describe "Constants"
8
+
9
+ describe "scope_to_company" do
10
+ let(:meth) { :scope_to_company }
11
+ let(:the_co_id) { :the_co_id }
12
+ describe "arity" do
13
+ subject { klass.method(meth) }
14
+ its(:arity) { should eq(1) }
15
+ end
16
+ it "should add the company arg to credentials" do
17
+ klass.send(meth, the_co_id)
18
+ expect(Helix::Config.instance.credentials).to include(company: the_co_id)
19
+ end
20
+ it "should clear any pre-exisiting library from credentials" do
21
+ klass.send(:scope_to_library, :the_lib_name)
22
+ expect(Helix::Config.instance.credentials).to include(library: :the_lib_name)
23
+ klass.send(meth, the_co_id)
24
+ expect(Helix::Config.instance.credentials.keys).not_to include(:library)
25
+ end
26
+ end
27
+
28
+ describe "scope_to_library" do
29
+ let(:meth) { :scope_to_library }
30
+ let(:the_lib_name) { :the_lib_name }
31
+ describe "arity" do
32
+ subject { klass.method(meth) }
33
+ its(:arity) { should eq(1) }
34
+ end
35
+ it "should add the library arg to credentials" do
36
+ klass.send(meth, the_lib_name)
37
+ expect(Helix::Config.instance.credentials).to include(library: the_lib_name)
38
+ end
39
+ end
40
+
41
+ describe "set_license_key" do
42
+ let(:meth) { :set_license_key }
43
+ let(:the_key) { :alicense_key }
44
+ describe "arity" do
45
+ subject { klass.method(meth) }
46
+ its(:arity) { should eq(1) }
47
+ end
48
+ it "should add the license_key arg to credentials" do
49
+ klass.send(meth, the_key)
50
+ Helix::Config.instance.credentials.should include(license_key: the_key)
51
+ end
52
+ end
53
+
54
+ end
data/spec/media_spec.rb CHANGED
@@ -17,55 +17,90 @@ describe Helix::Media do
17
17
  end
18
18
  end
19
19
 
20
- klasses = [ Helix::Album, Helix::Image, Helix::Track, Helix::Video ]
20
+ klasses = [ Helix::Album, Helix::Document, Helix::Image, Helix::Track, Helix::User, Helix::Video ]
21
21
  klasses.each do |klass|
22
22
 
23
23
  subject { klass }
24
+ klass_sym = {
25
+ Helix::Album => :album,
26
+ Helix::Document => :document,
27
+ Helix::Image => :image,
28
+ Helix::Library => :library,
29
+ Helix::Track => :track,
30
+ Helix::User => :user,
31
+ Helix::Video => :video,
32
+ }
24
33
 
25
34
  mods = [ Helix::RESTful, Helix::Uploadable ]
26
35
  mods.each { |mod| its(:ancestors) { should include(mod) } }
27
36
 
28
37
  describe ".create" do
29
- let(:meth) { :create }
30
- let(:mock_config) { mock(Helix::Config) }
31
- subject { klass.method(meth) }
32
- its(:arity) { should eq(-1) }
33
- let(:klass_sym) { :klass }
34
- let(:resp_value) { { klass_sym.to_s => { attribute: :value } } }
35
- let(:resp_json) { "JSON" }
36
- let(:params) { { signature: "some_sig" } }
37
- let(:expected) { { attributes: { attribute: :value }, config: mock_config } }
38
- context "when a Helix:Config instance is absent" do
38
+ let(:meth) { :create }
39
+ let(:mock_config) { mock(Helix::Config) }
40
+ subject { klass.method(meth) }
41
+ its(:arity) { should eq(-1) }
42
+ let(:hash_from_xml) { { klass_sym.to_s => { attribute: :value } } }
43
+ let(:resp_xml) { "Fake XML" }
44
+ let(:params) { { signature: "some_sig" } }
45
+ let(:expected) { { attributes: { attribute: :value }, config: mock_config } }
46
+ context "when a Helix:Config instance is nil" do
39
47
  before(:each) do Helix::Config.stub(:instance) { nil } end
40
48
  it "should raise a NoConfigurationLoaded exception" do
41
49
  lambda { klass.send(meth) }.should raise_error(Helix::NoConfigurationLoaded)
42
50
  end
43
51
  end
44
- context "when a Helix:Config instance is present" do
52
+ context "when a Helix:Config instance is NOT nil" do
45
53
  before(:each) do
46
54
  klass.stub(:plural_resource_label) { :klasses }
47
55
  klass.stub(:resource_label_sym) { klass_sym }
48
56
  mock_config.stub(:build_url).with(content_type: :xml, resource_label: :klasses) { :url }
49
57
  mock_config.stub(:signature).with(:update) { "some_sig" }
50
58
  Helix::Config.stub(:instance) { mock_config }
59
+ RestClient.stub(:post) { resp_xml }
60
+ Hash.stub(:from_xml).with(resp_xml) { hash_from_xml }
51
61
  end
52
- it "should get an ingest signature" do
53
- mock_config.should_receive(:build_url).with(resource_label: :klasses,
54
- content_type: :xml)
55
- RestClient.stub(:post).with(:url, params) { resp_json }
56
- Hash.should_receive(:from_xml).with(resp_json) { resp_value }
57
- klass.stub(:new).with(expected)
58
- mock_config.should_receive(:signature).with(:update) { "some_sig" }
62
+ it "should build a POST url" do
63
+ build_url_opts = {resource_label: :klasses, content_type: :xml}
64
+ mock_config.should_receive(:build_url).with(build_url_opts)
59
65
  klass.send(meth)
60
66
  end
61
- it "should do an HTTP post call, parse response and call new" do
62
- mock_config.should_receive(:build_url).with(resource_label: :klasses,
63
- content_type: :xml)
64
- RestClient.should_receive(:post).with(:url, params) { resp_json }
65
- Hash.should_receive(:from_xml).with(resp_json) { resp_value }
66
- klass.should_receive(:new).with(expected)
67
+ it "should POST to the created URL" do
68
+ RestClient.should_receive(:post).with(:url, params) { resp_xml }
67
69
  klass.send(meth)
68
70
  end
71
+ context "when the POST response is ''" do
72
+ before(:each) do RestClient.stub(:post) { '' } end
73
+ it "should return nil"
74
+ it "should NOT create a Hash from XML" do
75
+ Hash.should_not_receive(:from_xml)
76
+ klass.send(meth)
77
+ end
78
+ it "should NOT instantiate an instance based on that Hash" do
79
+ klass.should_not_receive(:new)
80
+ klass.send(meth)
81
+ end
82
+ end
83
+ context "when the POST response is NOT ''" do
84
+ before(:each) do RestClient.stub(:post) { resp_xml } end
85
+ it "should create a Hash from XML" do
86
+ Hash.should_receive(:from_xml).with(resp_xml) { hash_from_xml }
87
+ klass.send(meth)
88
+ end
89
+ it "should instantiate an instance based on that Hash" do
90
+ klass.should_receive(:new).with(expected)
91
+ klass.send(meth)
92
+ end
93
+ context "and the response is not parseable as XML" do
94
+ before(:each) do Hash.should_receive(:from_xml).with(resp_xml) { raise(REXML::ParseException.new(:some_arg)) } end
95
+ it "should NOT instantiate an instance based on that Hash" do
96
+ klass.should_not_receive(:new)
97
+ klass.send(meth)
98
+ end
99
+ it "should return the unparseable response" do
100
+ expect(klass.send(meth)).to be(resp_xml)
101
+ end
102
+ end
103
+ end
69
104
  end
70
105
  end
71
106
 
data/spec/user_spec.rb ADDED
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+ require 'helix'
3
+
4
+ describe Helix::User do
5
+
6
+ let(:klass) { Helix::User }
7
+ subject { klass }
8
+
9
+ mods = [ Helix::Base, Helix::RESTful ]
10
+ mods.each { |mod| its(:ancestors) { should include(mod) } }
11
+ its(:ancestors) { should_not include(Helix::Media) }
12
+
13
+ its(:guid_name) { should eq('user_id') }
14
+ its(:resource_label_sym) { should be(:user) }
15
+ its(:plural_resource_label) { should eq('users') }
16
+ [:find, :create, :all, :find_all, :where].each do |crud_call|
17
+ it { should respond_to(crud_call) }
18
+ end
19
+
20
+ describe ".known_attributes" do
21
+ its(:known_attributes) { should eq([]) }
22
+ end
23
+
24
+ describe "Constants"
25
+
26
+ describe "an instance" do
27
+ let(:obj) { klass.new({}) }
28
+ subject { obj }
29
+ its(:resource_label_sym) { should be(:user) }
30
+ [:destroy, :update].each do |crud_call|
31
+ it { should respond_to(crud_call) }
32
+ end
33
+ end
34
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: helix
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: 8
5
- version: 0.0.3.3.pre
5
+ version: 0.0.3.4.pre
6
6
  platform: ruby
7
7
  authors:
8
8
  - Twistage, Inc
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2013-05-16 00:00:00 Z
13
+ date: 2013-05-21 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -82,6 +82,7 @@ files:
82
82
  - lib/helix/image.rb
83
83
  - lib/helix/restful.rb
84
84
  - lib/helix/library.rb
85
+ - lib/helix/user.rb
85
86
  - lib/helix/uploadable.rb
86
87
  - lib/helix/statistics.rb
87
88
  - lib/helix/document.rb
@@ -104,9 +105,11 @@ files:
104
105
  - spec/playlist_spec.rb
105
106
  - spec/video_spec.rb
106
107
  - spec/tag_spec.rb
108
+ - spec/user_spec.rb
107
109
  - spec/durationed_media_spec.rb
108
110
  - spec/album_spec.rb
109
111
  - spec/image_spec.rb
112
+ - spec/helix_spec.rb
110
113
  - spec/statistics_spec.rb
111
114
  - spec/video_playlist_spec.rb
112
115
  - spec/media_spec.rb