panda 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,8 +19,9 @@ module Panda
19
19
  end
20
20
 
21
21
  def update
22
- response = connection.put(object_url_map(self.class.one_path), @changed_attributes)
23
- load_response(response) ? (@changed_attributes = {}; true) : false
22
+ uri = replace_pattern_with_self_variables(self.class.one_path)
23
+ response = connection.put(uri, @changed_attributes)
24
+ load_and_reset(response)
24
25
  end
25
26
 
26
27
  end
@@ -0,0 +1,16 @@
1
+ module Panda
2
+ module VideoState
3
+ def success?
4
+ @attributes['status'] == 'success'
5
+ end
6
+
7
+ def processing?
8
+ @attributes['status'] == 'processing'
9
+ end
10
+
11
+ def fail?
12
+ @attributes['status'] == 'fail'
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ module Panda
2
+ module Viewable
3
+
4
+ def screenshots
5
+ ((1..screenshots_size||0).map{|i| get_url("_#{i}.jpg")} if success?) || []
6
+ end
7
+
8
+ def url
9
+ get_url("#{extname}") if success?
10
+ end
11
+
12
+ private
13
+
14
+ def get_url(end_path)
15
+ "#{cloud.url}#{path}#{end_path}"
16
+ end
17
+
18
+ end
19
+ end
@@ -1,8 +1,5 @@
1
- require 'restclient'
2
- require 'forwardable'
3
- require 'json' unless defined?(ActiveSupport::JSON) || defined?(JSON::JSON_LOADED)
4
-
5
1
  module Panda
2
+
6
3
  extend self
7
4
  extend Forwardable
8
5
 
@@ -11,33 +8,57 @@ module Panda
11
8
 
12
9
  def_delegators :connection, :get, :post, :put, :delete, :api_url, :setup_bucket, :signed_params
13
10
 
14
- def configure(auth_params=nil)
15
- @clouds = {}
11
+ def configure(auth_params=nil, &block)
16
12
 
17
- if auth_params
18
- connect!(auth_params)
19
- else
20
- yield @connection = Connection.new
13
+ if !auth_params
14
+ configure = Config.new
15
+ if (block.arity > 0)
16
+ block.call(configure)
17
+ else
18
+ configure.instance_eval(&block)
19
+ end
20
+
21
+ auth_params = configure.to_hash
22
+ elsif auth_params.is_a?(String)
23
+ auth_params = Config.new.parse_panda_url(auth_params)
21
24
  end
22
25
 
23
- @connection.raise_error=true
24
- @connection.format = :hash
25
- @cloud = Cloud::new(:id => @connection.cloud_id)
26
+ configure_with_auth_params(auth_params)
27
+ true
28
+ end
29
+
30
+ def configure_heroku
31
+ configure_with_auth_params Config.new.parse_panda_url(ENV['PANDASTREAM_URL'])
32
+ true
26
33
  end
27
34
 
28
- def connect!(auth_params, options={})
29
- @connection = Connection.new(auth_params, options)
35
+ def connect!(auth_params)
36
+ @connection = Connection.new(auth_params)
30
37
  end
31
38
 
32
39
  def connection
33
- raise "Not connected. Please connect! first." unless @connection
40
+ raise "Panda is not configured!" unless @connection
34
41
  @connection
35
42
  end
36
43
 
37
- def version
38
- open(File.join(File.dirname(__FILE__), '../../VERSION')) { |f|
39
- f.read.strip
40
- }
44
+ def adapter=(klass)
45
+ @adapter_class = klass
41
46
  end
42
47
 
48
+ def adapter
49
+ @adapter_class ||= default_adapter
50
+ end
51
+
52
+ private
53
+
54
+ def default_adapter
55
+ Panda::Adapter::Faraday
56
+ end
57
+
58
+ def configure_with_auth_params(auth_params)
59
+ connect!(auth_params)
60
+ @clouds = {}
61
+ @cloud = Cloud::new(:id => @connection.cloud_id)
62
+ end
63
+
43
64
  end
@@ -1,9 +1,11 @@
1
1
  module Panda
2
2
  class Proxy
3
3
  include Panda::Router::ClassMethods
4
+ include Panda::Builders::ClassMethods
5
+
4
6
  include Panda::Finders::FindMany
5
7
  include Panda::Finders::FindOne
6
- include Panda::Builders::CreateBuilder
8
+
7
9
  include Panda::CloudConnection
8
10
 
9
11
  attr_accessor :parent, :klass
@@ -19,7 +19,7 @@ module Panda
19
19
  initialize_scope_attributes
20
20
  initialize_scopes
21
21
  end
22
-
22
+
23
23
  # Overide the function to set the cloud_id as the same as the scope
24
24
  def find_by_path(url, map={})
25
25
  object = find_object_by_path(url, map)
@@ -29,7 +29,7 @@ module Panda
29
29
  elsif object['id']
30
30
  klass.new(object.merge('cloud_id' => cloud.id))
31
31
  else
32
- Error.new(object).raise!
32
+ raise APIError.new(object)
33
33
  end
34
34
  end
35
35
 
@@ -38,6 +38,11 @@ module Panda
38
38
  super(scoped_attrs)
39
39
  end
40
40
 
41
+ def create!(attributes)
42
+ scoped_attrs = attributes.merge(@scoped_attributes)
43
+ super(scoped_attrs)
44
+ end
45
+
41
46
  def all(attributes={})
42
47
  @scoped_attributes.merge!(attributes)
43
48
  trigger_request
@@ -46,42 +51,43 @@ module Panda
46
51
  def reload
47
52
  @found = trigger_request
48
53
  end
49
-
54
+
50
55
  private
51
56
 
52
- def initialize_scope_attributes
53
- @scoped_attributes={}
54
- if @parent.is_a?(Panda::Resource)
55
- @scoped_attributes[parent_relation_name.to_sym] = @parent.id
56
- end
57
+ def initialize_scope_attributes
58
+ @scoped_attributes={}
59
+ if @parent.is_a?(Panda::Resource)
60
+ @scoped_attributes[parent_relation_name.to_sym] = @parent.id
57
61
  end
62
+ end
58
63
 
59
- def proxy_found
60
- @found ||= trigger_request
61
- end
64
+ def proxy_found
65
+ @found ||= trigger_request
66
+ end
62
67
 
63
- def initialize_scopes
64
- [].methods.each do |m|
65
- unless m.to_s =~ /^__/ || non_delegate_methods.include?(m.to_sym)
66
- self.class.class_eval do
67
- def_delegators :proxy_found, m.to_sym
68
- end
68
+ def initialize_scopes
69
+ ([].methods + [:to_json]).each do |m|
70
+ unless m.to_s =~ /^__/ || non_delegate_methods.include?(m.to_sym)
71
+ self.class.class_eval do
72
+ def_delegators :proxy_found, m.to_sym
69
73
  end
70
74
  end
71
75
  end
76
+ end
72
77
 
73
- def trigger_request
74
- if @parent.is_a?(Resource)
75
- path = build_hash_many_path(many_path, parent_relation_name)
76
- else
77
- path = many_path
78
- end
79
-
80
- find_by_path(path, @scoped_attributes)
78
+ def trigger_request
79
+ if @parent.is_a?(Resource)
80
+ path = build_hash_many_path(many_path, parent_relation_name)
81
+ else
82
+ path = many_path
81
83
  end
82
84
 
83
- def parent_relation_name
84
- "#{@parent.class.sti_name.downcase}_id"
85
- end
85
+ find_by_path(path, @scoped_attributes)
86
+ end
87
+
88
+ def parent_relation_name
89
+ "#{@parent.class.sti_name.downcase}_id"
90
+ end
91
+
86
92
  end
87
93
  end
@@ -1,25 +1,27 @@
1
1
  module Panda
2
2
  class Cloud < Base
3
3
  include Panda::Updatable
4
+
4
5
  attr_reader :connection
5
6
 
6
7
  def initialize(attributes={})
7
8
  super(attributes)
8
- connection_params = Panda.connection.to_hash.merge!(:cloud_id => id, :format => :hash)
9
+ connection_params = Panda.connection.to_hash.merge!(:cloud_id => id)
9
10
  @connection = Connection.new(connection_params)
10
11
  Panda.clouds[id] = self
11
12
  end
12
13
 
13
14
  class << self
14
- include Panda::Finders::FindOne
15
-
16
- def find(id, options=nil)
17
- super(id)
18
- end
19
15
 
20
16
  def connection
21
17
  Panda.connection
22
18
  end
19
+
20
+ private
21
+
22
+ def build_resource(attributes)
23
+ resource = Panda::Cloud.new(attributes)
24
+ end
23
25
  end
24
26
 
25
27
  def eu?
@@ -31,8 +33,8 @@ module Panda
31
33
  end
32
34
 
33
35
  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
+ return "eu" if connection.api_host == Panda::EU_API_HOST
37
+ return "us" if connection.api_host == Panda::US_API_HOST
36
38
  end
37
39
 
38
40
  def videos
@@ -52,10 +54,10 @@ module Panda
52
54
  super
53
55
  end
54
56
 
55
- private
56
-
57
+ private
58
+
57
59
  def lazy_load
58
- @found ||= reload
60
+ reload unless @loaded
59
61
  end
60
62
 
61
63
  end
@@ -1,7 +1,8 @@
1
1
  module Panda
2
2
  class Encoding < Resource
3
- include ShortStatus
4
-
3
+ include VideoState
4
+ include Viewable
5
+
5
6
  belongs_to :video
6
7
  has_one :profile
7
8
 
@@ -11,23 +12,7 @@ module Panda
11
12
  end
12
13
  end
13
14
 
14
- def url
15
- get_url("#{extname}")
16
- end
17
-
18
- def error_log
19
- get_url(".log") if fail?
20
- end
15
+ def screenshots_size; 7 end
21
16
 
22
- def screenshots
23
- ((1..7).map{|i| get_url("_#{i}.jpg")} if success?) || []
24
- end
25
-
26
- private
27
-
28
- def get_url(end_path)
29
- "#{cloud.url}#{path}#{end_path}"
30
- end
31
-
32
17
  end
33
18
  end
@@ -1,6 +1,6 @@
1
1
  module Panda
2
2
  class Resource < Base
3
- include Panda::Builders
3
+ include Panda::Destroyers
4
4
  include Panda::Associations
5
5
  include Panda::CloudConnection
6
6
 
@@ -10,7 +10,6 @@ module Panda
10
10
  end
11
11
 
12
12
  class << self
13
- include Panda::Finders::FindMany
14
13
  include Panda::CloudConnection
15
14
 
16
15
  def cloud
@@ -33,20 +32,11 @@ module Panda
33
32
  Panda.clouds[cloud_id]
34
33
  end
35
34
 
36
- def create
37
- raise "Can't create attribute. Already have an id=#{attributes['id']}" if attributes['id']
38
- response = connection.post(object_url_map(self.class.many_path), attributes)
39
- load_response(response) ? (@changed_attributes = {}; true) : false
40
- end
41
-
42
- def create!
43
- create || errors.last.raise!
44
- end
45
-
46
35
  def reload
47
36
  perform_reload("cloud_id" => cloud_id)
48
37
  reset_associations
49
38
  self
50
39
  end
40
+
51
41
  end
52
42
  end
@@ -1,6 +1,7 @@
1
1
  module Panda
2
2
  class Video < Resource
3
- include ShortStatus
3
+ include VideoState
4
+ include Viewable
4
5
  has_many :encodings
5
6
 
6
7
  class << self
@@ -9,5 +10,7 @@ module Panda
9
10
  end
10
11
  end
11
12
 
13
+ def screenshots_size; 1 end
14
+
12
15
  end
13
16
  end
@@ -0,0 +1,3 @@
1
+ module Panda
2
+ VERSION = "1.4.0"
3
+ end
@@ -1,112 +1,29 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
1
  # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "panda/version"
5
4
 
6
5
  Gem::Specification.new do |s|
7
- s.name = %q{panda}
8
- s.version = "1.3.0"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["New Bamboo"]
12
- s.date = %q{2011-01-10}
6
+ s.name = "panda"
7
+ s.version = Panda::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["New Bamboo"]
10
+ s.email = ["info@pandastream.com"]
11
+ s.homepage = "http://github.com/newbamboo/panda_gem"
12
+ s.summary = %q{Panda Client}
13
13
  s.description = %q{Panda Client}
14
- s.email = %q{info@pandastream.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.md"
18
- ]
19
- s.files = [
20
- "Gemfile",
21
- "LICENSE",
22
- "README.md",
23
- "Rakefile",
24
- "VERSION",
25
- "lib/panda.rb",
26
- "lib/panda/api_authentication.rb",
27
- "lib/panda/base.rb",
28
- "lib/panda/connection.rb",
29
- "lib/panda/error.rb",
30
- "lib/panda/modules/associations.rb",
31
- "lib/panda/modules/builders.rb",
32
- "lib/panda/modules/cloud_connection.rb",
33
- "lib/panda/modules/finders.rb",
34
- "lib/panda/modules/router.rb",
35
- "lib/panda/modules/short_status.rb",
36
- "lib/panda/modules/updatable.rb",
37
- "lib/panda/panda.rb",
38
- "lib/panda/proxies/encoding_scope.rb",
39
- "lib/panda/proxies/profile_scope.rb",
40
- "lib/panda/proxies/proxy.rb",
41
- "lib/panda/proxies/scope.rb",
42
- "lib/panda/proxies/video_scope.rb",
43
- "lib/panda/resources/cloud.rb",
44
- "lib/panda/resources/encoding.rb",
45
- "lib/panda/resources/profile.rb",
46
- "lib/panda/resources/resource.rb",
47
- "lib/panda/resources/video.rb",
48
- "panda.gemspec",
49
- "spec/cloud_spec.rb",
50
- "spec/encoding_spec.rb",
51
- "spec/heroku_spec.rb",
52
- "spec/panda_spec.rb",
53
- "spec/profile_spec.rb",
54
- "spec/spec.opts",
55
- "spec/spec_helper.rb",
56
- "spec/video_spec.rb"
57
- ]
58
- s.homepage = %q{http://github.com/newbamboo/panda_gem}
59
- s.require_paths = ["lib"]
60
- s.rubygems_version = %q{1.3.7}
61
- s.summary = %q{Panda Client}
62
- s.test_files = [
63
- "spec/cloud_spec.rb",
64
- "spec/encoding_spec.rb",
65
- "spec/heroku_spec.rb",
66
- "spec/panda_spec.rb",
67
- "spec/profile_spec.rb",
68
- "spec/spec_helper.rb",
69
- "spec/video_spec.rb"
70
- ]
71
14
 
72
- if s.respond_to? :specification_version then
73
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
74
- s.specification_version = 3
15
+ s.add_dependency "ruby-hmac", ">= 0.3.2"
16
+ s.add_dependency "yajl-ruby"
17
+ s.add_dependency "faraday"
75
18
 
76
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
77
- s.add_development_dependency(%q<ruby-hmac>, [">= 0.3.2"])
78
- s.add_development_dependency(%q<rest-client>, [">= 0"])
79
- s.add_development_dependency(%q<json>, [">= 0"])
80
- s.add_development_dependency(%q<jeweler>, [">= 0"])
81
- s.add_development_dependency(%q<rake>, [">= 0"])
82
- s.add_development_dependency(%q<rspec>, ["= 1.3.1"])
83
- s.add_development_dependency(%q<webmock>, ["= 1.6.1"])
84
- s.add_runtime_dependency(%q<ruby-hmac>, [">= 0.3.2"])
85
- s.add_runtime_dependency(%q<rest-client>, [">= 1.4"])
86
- s.add_runtime_dependency(%q<json>, [">= 1.2"])
87
- else
88
- s.add_dependency(%q<ruby-hmac>, [">= 0.3.2"])
89
- s.add_dependency(%q<rest-client>, [">= 0"])
90
- s.add_dependency(%q<json>, [">= 0"])
91
- s.add_dependency(%q<jeweler>, [">= 0"])
92
- s.add_dependency(%q<rake>, [">= 0"])
93
- s.add_dependency(%q<rspec>, ["= 1.3.1"])
94
- s.add_dependency(%q<webmock>, ["= 1.6.1"])
95
- s.add_dependency(%q<ruby-hmac>, [">= 0.3.2"])
96
- s.add_dependency(%q<rest-client>, [">= 1.4"])
97
- s.add_dependency(%q<json>, [">= 1.2"])
98
- end
99
- else
100
- s.add_dependency(%q<ruby-hmac>, [">= 0.3.2"])
101
- s.add_dependency(%q<rest-client>, [">= 0"])
102
- s.add_dependency(%q<json>, [">= 0"])
103
- s.add_dependency(%q<jeweler>, [">= 0"])
104
- s.add_dependency(%q<rake>, [">= 0"])
105
- s.add_dependency(%q<rspec>, ["= 1.3.1"])
106
- s.add_dependency(%q<webmock>, ["= 1.6.1"])
107
- s.add_dependency(%q<ruby-hmac>, [">= 0.3.2"])
108
- s.add_dependency(%q<rest-client>, [">= 1.4"])
109
- s.add_dependency(%q<json>, [">= 1.2"])
110
- end
111
- end
19
+ s.add_development_dependency "timecop"
20
+ s.add_development_dependency "rspec", "2.4.0"
21
+ s.add_development_dependency "webmock"
22
+
23
+ s.rubyforge_project = "panda"
112
24
 
25
+ s.files = `git ls-files`.split("\n")
26
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
27
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
28
+ s.require_paths = ["lib"]
29
+ end