panda 1.0.0 → 1.1.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.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Panda gem provides an interface to access the [Panda](http://pandastream.com) API from Ruby.
4
4
 
5
+ * [Visit panda\_gem on Github](http://github.com/newbamboo/panda_gem)
6
+
5
7
  ## Installation
6
8
 
7
9
  gem install panda
@@ -19,7 +21,7 @@ Panda gem provides an interface to access the [Panda](http://pandastream.com) AP
19
21
  config.cloud_id = "panda_cloud_id"
20
22
  end
21
23
 
22
- or Panda.configure ({:access_key => ....})
24
+ or Panda.configure({:access_key => ....})
23
25
 
24
26
  ### Creating an instance of the client for EU
25
27
 
@@ -27,14 +29,22 @@ Panda gem provides an interface to access the [Panda](http://pandastream.com) AP
27
29
  config.access_key = "panda_access_key"
28
30
  config.secret_key = "panda_secret_key"
29
31
  config.cloud_id = "panda_cloud_id"
30
- config.region = "eu"
32
+ config.api_host = "api.eu.pandastream.com"
31
33
  end
32
34
 
33
35
  ### Creating an instance using Heroku
34
36
 
35
- Panda.configure do |config|
36
- config.heroku = ENV['PANDASTREAM_URL']
37
- end
37
+ Panda.configure(ENV['PANDASTREAM_URL'])
38
+
39
+ ### Inside a Rails app with a main account or using Heroku
40
+
41
+ Config is stored in `config/panda.yml` or you must set an the PANDASTREAM_URL environment variable in your `/.bashrc` file (see the [Heroku config variable docs](http://docs.heroku.com/config-vars)).
42
+
43
+ Use the following in your `config/initializers/panda.rb`:
44
+
45
+ Panda.configure((ENV['PANDASTREAM_URL'] || YAML::load_file(File.join(File.dirname(__FILE__),"..", "panda.yml"))[RAILS_ENV]))
46
+
47
+ See the [Rails How-to](http://www.pandastream.com/docs/integrate_with_rails) for more details.
38
48
 
39
49
  ### Typical usage
40
50
 
@@ -482,7 +492,5 @@ Since Panda 0.6, PandaGem returns a Hash by default. If you want PandaGem to ret
482
492
  bundler install
483
493
  rake spec
484
494
 
485
- Copyright
486
- ---------
487
495
 
488
496
  Copyright (c) 2009-2010 New Bamboo. See LICENSE for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
@@ -8,19 +8,22 @@ module Panda
8
8
 
9
9
  module CreateBuilder
10
10
 
11
- def create(attributes)
12
- if attr_id=(attributes[:id] || attributes['id'])
13
- raise "Can't create attribute. Already have an id=#{attr_id}"
14
- end
15
-
16
- response = connection.post(full_object_url(many_path), attributes)
17
- Panda::const_get("#{end_class_name}").new(response)
18
- end
11
+ def create(attributes)
12
+ resource = build_resource(attributes)
13
+ resource.create
14
+ resource
15
+ end
19
16
 
20
- def create!(attributes)
21
- create(attributes) || raise(self.error.first.to_s)
22
- end
17
+ def create!(attributes)
18
+ resource = build_resource(attributes)
19
+ resource.create!
20
+ resource
21
+ end
23
22
 
23
+ private
24
+ def build_resource(attributes)
25
+ Panda::const_get("#{end_class_name}").new(attributes.merge(:cloud_id => cloud.id))
26
+ end
24
27
  end
25
28
 
26
29
  module DeleteBuilder
@@ -19,7 +19,7 @@ module Panda
19
19
 
20
20
  if object.is_a?(Array)
21
21
  object.map{|o| kclass.new(o)}
22
- elsif object["id"]
22
+ elsif object['id']
23
23
  kclass.new(object)
24
24
  else
25
25
  Error.new(object).raise!
data/lib/panda/panda.rb CHANGED
@@ -3,36 +3,41 @@ require 'forwardable'
3
3
  require 'json' unless defined?(ActiveSupport::JSON)
4
4
 
5
5
  module Panda
6
- class << self
7
- extend Forwardable
6
+ extend self
7
+ extend Forwardable
8
8
 
9
- attr_reader :cloud, :clouds
10
- attr_reader :connection
9
+ attr_reader :cloud, :clouds
10
+ attr_reader :connection
11
11
 
12
- def_delegators :connection, :get, :post, :put, :delete, :api_url, :setup_bucket, :signed_params
12
+ def_delegators :connection, :get, :post, :put, :delete, :api_url, :setup_bucket, :signed_params
13
13
 
14
- def configure(auth_params=nil)
15
- @clouds = {}
14
+ def configure(auth_params=nil)
15
+ @clouds = {}
16
16
 
17
- if auth_params
18
- connect!(auth_params)
19
- else
20
- yield @connection = Connection.new
21
- end
22
-
23
- @connection.raise_error=true
24
- @connection.format = :hash
25
- @cloud = Cloud::new(:id => @connection.cloud_id)
17
+ if auth_params
18
+ connect!(auth_params)
19
+ else
20
+ yield @connection = Connection.new
26
21
  end
27
22
 
28
- def connect!(auth_params, options={})
29
- @connection = Connection.new(auth_params, options)
30
- end
23
+ @connection.raise_error=true
24
+ @connection.format = :hash
25
+ @cloud = Cloud::new(:id => @connection.cloud_id)
26
+ end
31
27
 
32
- def connection
33
- raise "Not connected. Please connect! first." unless @connection
34
- @connection
35
- end
28
+ def connect!(auth_params, options={})
29
+ @connection = Connection.new(auth_params, options)
30
+ end
31
+
32
+ def connection
33
+ raise "Not connected. Please connect! first." unless @connection
34
+ @connection
35
+ end
36
36
 
37
+ def version
38
+ open(File.join(File.dirname(__FILE__), '../../VERSION')) { |f|
39
+ f.read.strip
40
+ }
37
41
  end
42
+
38
43
  end
@@ -25,9 +25,9 @@ module Panda
25
25
  object = find_object_by_path(url, map)
26
26
 
27
27
  if object.is_a?(Array)
28
- object.map{|o| klass.new(o.merge("cloud_id" => cloud.id))}
29
- elsif object["id"]
30
- klass.new(object.merge("cloud_id" => cloud.id))
28
+ object.map{|o| klass.new(o.merge('cloud_id' => cloud.id))}
29
+ elsif object['id']
30
+ klass.new(object.merge('cloud_id' => cloud.id))
31
31
  else
32
32
  Error.new(object).raise!
33
33
  end
@@ -22,6 +22,19 @@ module Panda
22
22
  end
23
23
  end
24
24
 
25
+ def eu?
26
+ region == "eu"
27
+ end
28
+
29
+ def us?
30
+ region == "us"
31
+ end
32
+
33
+ def region
34
+ return "eu" if connection.api_host == Panda::Connection::EU_API_HOST
35
+ return "us" if connection.api_host == Panda::Connection::US_API_HOST
36
+ end
37
+
25
38
  def videos
26
39
  VideoScope.new(self)
27
40
  end
@@ -5,25 +5,28 @@ module Panda
5
5
  belongs_to :video
6
6
  has_one :profile
7
7
 
8
+ class << self
9
+ def first
10
+ EncodingScope.new(self).per_page(1).first
11
+ end
12
+ end
13
+
8
14
  def url
9
- "http://s3.amazonaws.com/#{cloud.s3_videos_bucket}/#{id}#{extname}"
15
+ get_url("#{extname}")
10
16
  end
11
17
 
18
+ def error_log
19
+ get_url(".log") if fail?
20
+ end
21
+
12
22
  def screenshots
13
- @screenshots ||=
14
- if status == 'success'
15
- (1..7).map do |i|
16
- "http://s3.amazonaws.com/#{cloud.s3_videos_bucket}/#{id}_#{i}.jpg"
17
- end
18
- else
19
- []
20
- end
23
+ ((1..7).map{|i| get_url("_#{i}.jpg")} if success?) || []
21
24
  end
22
25
 
23
- class << self
24
- def first
25
- EncodingScope.new(self).per_page(1).first
26
- end
26
+ private
27
+
28
+ def get_url(end_path)
29
+ "#{cloud.url}#{path}#{end_path}"
27
30
  end
28
31
 
29
32
  end
data/panda.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{panda}
8
- s.version = "1.0.0"
8
+ s.version = "1.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["New Bamboo"]
12
- s.date = %q{2010-08-05}
12
+ s.date = %q{2010-10-19}
13
13
  s.description = %q{Panda Client}
14
14
  s.email = %q{info@pandastream.com}
15
15
  s.extra_rdoc_files = [
@@ -59,7 +59,7 @@ Gem::Specification.new do |s|
59
59
  s.homepage = %q{http://github.com/newbamboo/panda_gem}
60
60
  s.rdoc_options = ["--charset=UTF-8"]
61
61
  s.require_paths = ["lib"]
62
- s.rubygems_version = %q{1.3.5}
62
+ s.rubygems_version = %q{1.3.7}
63
63
  s.summary = %q{Panda Client}
64
64
  s.test_files = [
65
65
  "spec/cloud_spec.rb",
@@ -75,7 +75,7 @@ Gem::Specification.new do |s|
75
75
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
76
76
  s.specification_version = 3
77
77
 
78
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
78
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
79
79
  s.add_runtime_dependency(%q<ruby-hmac>, [">= 0.3.2"])
80
80
  s.add_runtime_dependency(%q<rest-client>, [">= 1.4"])
81
81
  s.add_runtime_dependency(%q<json>, [">= 1.2"])
data/spec/cloud_spec.rb CHANGED
@@ -1,6 +1,36 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- describe Panda::Video do
3
+ describe Panda::Cloud do
4
+
5
+ describe "region" do
6
+ it "should tell the region" do
7
+ Panda.configure do |c|
8
+ c.access_key = "my_access_key"
9
+ c.secret_key = "my_secret_key"
10
+ c.api_host = "api.pandastream.com"
11
+ c.cloud_id = 'my_cloud_id'
12
+ c.api_port = 85
13
+ end
14
+
15
+ Panda.cloud.region.should == "us"
16
+ Panda.cloud.us?.should == true
17
+ end
18
+
19
+ it "should tell the region" do
20
+ Panda.configure do |c|
21
+ c.access_key = "my_access_key"
22
+ c.secret_key = "my_secret_key"
23
+ c.api_host = "api.eu.pandastream.com"
24
+ c.cloud_id = 'my_cloud_id'
25
+ c.api_port = 85
26
+ end
27
+
28
+ Panda.cloud.region.should == "eu"
29
+ Panda.cloud.eu?.should == true
30
+ end
31
+
32
+ end
33
+
4
34
  describe "Using configure bloc" do
5
35
  before(:each) do
6
36
  Panda.configure do |c|
@@ -48,7 +78,7 @@ describe Panda::Video do
48
78
  video.id.should == "123"
49
79
  end
50
80
 
51
- it "should find all video with params" do
81
+ it "should create a video using cloud" do
52
82
  videos_json = "{\"source_url\":\"my_source_url\",\"id\":\"123\"}"
53
83
  stub_http_request(:post, /api.example.com:85\/v2\/videos.json/).
54
84
  with{|r| r.body =~ /cloud_id=cloud1/}.
@@ -63,21 +63,21 @@ describe Panda::Encoding do
63
63
  end
64
64
 
65
65
  it "should return the video_url" do
66
- cloud_json = "{\"s3_videos_bucket\":\"my_bucket\",\"id\":\"my_cloud_id\"}"
66
+ cloud_json = "{\"s3_videos_bucket\":\"my_bucket\",\"id\":\"my_cloud_id\", \"url\":\"http://my_bucket.s3.amazonaws.com/\"}"
67
67
  stub_http_request(:get, /api.example.com:85\/v2\/clouds\/my_cloud_id.json/).
68
68
  to_return(:body => cloud_json)
69
69
 
70
- encoding = Panda::Encoding.new({:id => "456", :extname => ".ext"})
71
- encoding.url.should == "http://s3.amazonaws.com/my_bucket/456.ext"
70
+ encoding = Panda::Encoding.new({:id => "456", :extname => ".ext", :path => "abc/panda"})
71
+ encoding.url.should == "http://my_bucket.s3.amazonaws.com/abc/panda.ext"
72
72
  end
73
73
 
74
74
  it "should generate a screenhost array" do
75
- cloud_json = "{\"s3_videos_bucket\":\"my_bucket\",\"id\":\"my_cloud_id\"}"
75
+ cloud_json = "{\"s3_videos_bucket\":\"my_bucket\",\"id\":\"my_cloud_id\", \"url\":\"http://my_bucket.s3.amazonaws.com/\"}"
76
76
  stub_http_request(:get, /api.example.com:85\/v2\/clouds\/my_cloud_id.json/).
77
77
  to_return(:body => cloud_json)
78
78
 
79
- encoding = Panda::Encoding.new({:id => "456", :extname => ".ext", :status => "success"})
80
- encoding.screenshots[0].should == "http://s3.amazonaws.com/my_bucket/456_1.jpg"
79
+ encoding = Panda::Encoding.new({:id => "456", :extname => ".ext", :status => "success", :path => "abc/panda"})
80
+ encoding.screenshots[0].should == "http://my_bucket.s3.amazonaws.com/abc/panda_1.jpg"
81
81
  end
82
82
 
83
83
  it "should generate a screenhost array" do
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: panda
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 1
9
+ - 0
10
+ version: 1.1.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - New Bamboo
@@ -9,39 +15,55 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-08-05 00:00:00 +01:00
18
+ date: 2010-10-19 00:00:00 +01:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: ruby-hmac
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 23
30
+ segments:
31
+ - 0
32
+ - 3
33
+ - 2
23
34
  version: 0.3.2
24
- version:
35
+ type: :runtime
36
+ version_requirements: *id001
25
37
  - !ruby/object:Gem::Dependency
26
38
  name: rest-client
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
30
42
  requirements:
31
43
  - - ">="
32
44
  - !ruby/object:Gem::Version
45
+ hash: 7
46
+ segments:
47
+ - 1
48
+ - 4
33
49
  version: "1.4"
34
- version:
50
+ type: :runtime
51
+ version_requirements: *id002
35
52
  - !ruby/object:Gem::Dependency
36
53
  name: json
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
40
57
  requirements:
41
58
  - - ">="
42
59
  - !ruby/object:Gem::Version
60
+ hash: 11
61
+ segments:
62
+ - 1
63
+ - 2
43
64
  version: "1.2"
44
- version:
65
+ type: :runtime
66
+ version_requirements: *id003
45
67
  description: Panda Client
46
68
  email: info@pandastream.com
47
69
  executables: []
@@ -100,21 +122,27 @@ rdoc_options:
100
122
  require_paths:
101
123
  - lib
102
124
  required_ruby_version: !ruby/object:Gem::Requirement
125
+ none: false
103
126
  requirements:
104
127
  - - ">="
105
128
  - !ruby/object:Gem::Version
129
+ hash: 3
130
+ segments:
131
+ - 0
106
132
  version: "0"
107
- version:
108
133
  required_rubygems_version: !ruby/object:Gem::Requirement
134
+ none: false
109
135
  requirements:
110
136
  - - ">="
111
137
  - !ruby/object:Gem::Version
138
+ hash: 3
139
+ segments:
140
+ - 0
112
141
  version: "0"
113
- version:
114
142
  requirements: []
115
143
 
116
144
  rubyforge_project:
117
- rubygems_version: 1.3.5
145
+ rubygems_version: 1.3.7
118
146
  signing_key:
119
147
  specification_version: 3
120
148
  summary: Panda Client