cloudpt-api 0.0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE CHANGED
@@ -19,4 +19,6 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
19
  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
20
  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
21
  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
- OTHER DEALINGS IN THE SOFTWARE.
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ Adapted to CloudPT service by Fábio Batista, Webreakstuff Lda. Copyright (c) 2013
data/README.markdown CHANGED
@@ -1,5 +1,5 @@
1
1
  Cloudpt::API - Cloudpt Ruby API client
2
- =========
2
+ ======================================
3
3
 
4
4
  A Ruby client for the Cloudpt REST API.
5
5
 
@@ -11,8 +11,8 @@ Current state:
11
11
 
12
12
  First release, whole API covered.
13
13
 
14
- Installation
15
- ------------
14
+ Step 1: Installation
15
+ --------------------
16
16
 
17
17
  Cloudpt::API is available on RubyGems, so:
18
18
 
@@ -26,8 +26,8 @@ Or in your Gemfile:
26
26
  gem "cloudpt-api"
27
27
  ```
28
28
 
29
- Configuration
30
- -------------
29
+ Step 2: Configuration
30
+ ---------------------
31
31
 
32
32
  In order to use this client, you need to have an app created on https://www.Cloudpt.com/developers/apps.
33
33
 
@@ -39,8 +39,8 @@ Cloudpt::API::Config.app_secret = YOUR_APP_SECRET
39
39
  Cloudpt::API::Config.mode = "sandbox" # if you have a single-directory app or "Cloudpt" if it has access to the whole Cloudpt
40
40
  ```
41
41
 
42
- Cloudpt::API::Client
43
- --------------------
42
+ Step 3a: Authorization
43
+ ----------------------
44
44
 
45
45
  The client is the base for all communication with the API and wraps around almost all calls
46
46
  available in the API.
@@ -52,20 +52,25 @@ on how to do this:
52
52
  ```ruby
53
53
  consumer = Cloudpt::API::OAuth.consumer(:authorize)
54
54
  request_token = consumer.get_request_token
55
- request_token.authorize_url(:oauth_callback => 'http://yoursite.com/callback')
56
- # Here the user goes to Cloudpt, authorizes the app and is redirected
57
- # The oauth_token will be available in the params
58
- request_token.get_access_token(:oauth_verifier => oauth_token)
55
+ # if you have a callback url
56
+ authorize_url = request_token.authorize_url(:oauth_callback => 'http://yoursite.com/callback')
57
+ # if you're running an "out of band app"
58
+ authorize_url = request_token.authorize_url
59
+ # Here the user goes to Cloudpt (following the authorize_url), authorizes the app and is redirected to oauth_callback, or is shown a pin (oauth_verifier).
60
+ # on the redirect case, the oauth_token (to be used as oauth_verifier on the next line) will be available in the params.
61
+ access_token = request_token.get_access_token(:oauth_verifier => oauth_token)
59
62
  ```
60
63
 
61
- Now that you have the oauth token and secret, you can create a new instance of the Cloudpt::API::Client, like this:
64
+ Now that you have the oauth token (access_token.token) and secret (access_token.secret), you can create a new instance of the Cloudpt::API::Client, like this:
62
65
 
63
66
  ```ruby
64
- client = Cloudpt::API::Client.new :token => token, :secret => secret
67
+ client = Cloudpt::API::Client.new :token => access_token.token, :secret => access_token.secret
65
68
  ```
66
69
 
67
- Rake-based authorization
68
- ------------------------
70
+ Note: this token and secret are the ones you'll want to use if you're trying to run the Rspec tests (step 4).
71
+
72
+ Step 3b: Rake-based authorization
73
+ ---------------------------------
69
74
 
70
75
  Cloudpt::API supplies you with a helper rake which will authorize a single client. This is useful for development and testing.
71
76
 
@@ -84,30 +89,26 @@ Simply go to that url, authorize the app, then press enter in the console.
84
89
 
85
90
  The rake task will output valid ruby code which you can use to create a client.
86
91
 
87
- What differs this from the Cloudpt Ruby SDK?
88
- --------------------------------------------
92
+ Step 4 (optional): Testing
93
+ --------------------------
89
94
 
90
- A few things:
95
+ This assumes you've cloned cloudpt-api repository and you're trying to run the Rspec tests.
91
96
 
92
- * It's using the ruby oauth gem, instead of reinventing the wheel and implementing OAuth communication
93
- * It treats files and directories as Ruby objects with appropriate classes, on which you can perform operations
97
+ In order to run tests, you need to have an application created and authorized (check step 2 and 3). Put all tokens in spec/connection.yml and you're good to go.
94
98
 
95
- Consider the following example which takes all files with names like 'test.txt' and copies them with a suffix '.old'
99
+ Check out spec/connection.sample.yml for an example.
96
100
 
97
- This is how it would look using the SDK:
101
+ Just run rspec from the project root.
98
102
 
99
- ```ruby
100
- # Because you need the session with the right access token, you need to create one instance per user
101
- @session = CloudptSession.new(APP_TOKEN, APP_SECRET)
102
- @session.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
103
- @client = CloudptClient.new(@session, :app_folder)
104
- # The result is a hash, so we need to call a method on the client, supplying the right key from the hash
105
- @client.search('/', 'test.txt').each do |hash|
106
- @client.file_copy(hash['path'], hash['path'] + ".old")
107
- end
108
103
  ```
104
+ $ rspec
105
+ ```
106
+
107
+
108
+ Step 5: Usage
109
+ -------------
109
110
 
110
- With Cloudpt::API, you can clean it up, first you put the app token and secret in a config or initializer file:
111
+ First you put the app token and secret in a config or initializer file:
111
112
 
112
113
  ```ruby
113
114
  Cloudpt::API::Config.app_key = APP_TOKEN
@@ -125,13 +126,6 @@ And when you want to use it, just create a new client object with a specific acc
125
126
  end
126
127
  ```
127
128
 
128
- What differs this from the Cloudpt gem?
129
- --------------------------------------
130
-
131
- Cloudpt::API does not extend the Ruby primitives, like the Cloudpt gem:
132
-
133
- https://github.com/RISCfuture/Cloudpt/tree/master/lib/Cloudpt/extensions
134
-
135
129
  Cloudpt::API::Client methods
136
130
  ----------------------------
137
131
 
@@ -143,7 +137,7 @@ Returns a simple object with information about the account:
143
137
  client.account # => #<Cloudpt::API::Object>
144
138
  ```
145
139
 
146
- For more info, see [https://www.Cloudpt.com/developers/reference/api#account-info](https://www.Cloudpt.com/developers/reference/api#account-info)
140
+ For more info, see [https://cloudpt.pt/documentation#accountinfo](https://cloudpt.pt/documentation#accountinfo)
147
141
 
148
142
  ### Cloudpt::API::Client#find
149
143
 
@@ -309,14 +303,7 @@ Returns a list of files or directorys within that directory
309
303
  dir.ls # => [#<Cloudpt::API::File>, #<Cloudpt::API::Dir>]
310
304
  ```
311
305
 
312
- Testing
313
- ---------
314
-
315
- In order to run tests, you need to have an application created and authorized. Put all tokens in spec/connection.yml and you're good to go.
316
-
317
- Check out spec/connection.sample.yml for an example.
318
-
319
306
  Copyright
320
307
  ---------
321
-
322
308
  Copyright (c) 2011 Marcin Bunsch, Future Simple Inc. See LICENSE for details.
309
+ Copyright (c) 2013 Fábio Batista, Webreakstuff.
@@ -25,6 +25,9 @@ module Cloudpt
25
25
 
26
26
  def list(path = '')
27
27
  response = raw.list :path => path
28
+ results = Cloudpt::API::Object.convert(response, self)
29
+ results['contents'] = Cloudpt::API::Object.convert(results.delete('contents') || [], self)
30
+ results
28
31
  end
29
32
 
30
33
  def ls(path = '')
@@ -37,14 +40,20 @@ module Cloudpt
37
40
 
38
41
  def mkdir(path)
39
42
  # Remove the characters not allowed by Cloudpt
40
- path = path.gsub(/[\\\:\?\*\<\>\"\|]+/, '')
41
- response = raw.create_folder :path => path
43
+ path = path.gsub(/(^\/)|([\\\:\?\*\<\>\"\|]+)/, '')
44
+ response = raw.create_folder :path => "/#{path}"
42
45
  Cloudpt::API::Dir.init(response, self)
43
46
  end
44
47
 
45
48
  def search(term, options = {})
46
49
  options[:path] ||= ''
47
50
  results = raw.search({ :query => term }.merge(options))
51
+ #search results have broken paths, fix them here for now
52
+ results.each do |result|
53
+ if Cloudpt::API::Config.mode == 'sandbox'
54
+ result['path'] = result['path'].sub(/^\/([^\/]+)?/, '')
55
+ end
56
+ end
48
57
  Cloudpt::API::Object.convert(results, self)
49
58
  end
50
59
 
@@ -8,19 +8,27 @@ module Cloudpt
8
8
  def download(path, options = {})
9
9
  root = options.delete(:root) || Cloudpt::API::Config.mode
10
10
  path = Cloudpt::API::Util.escape(path)
11
- url = ["/Storage/CloudPT/Files", root, path].compact.join('/')
11
+ url = ["", "Files", root, path].compact.join('/')
12
12
  connection.get_raw(:content, url)
13
13
  end
14
14
 
15
15
  def upload(path, data, options = {})
16
16
  root = options.delete(:root) || Cloudpt::API::Config.mode
17
+ method = options.delete(:method)
17
18
  query = Cloudpt::API::Util.query(options)
18
19
  path = Cloudpt::API::Util.escape(path)
19
- url = ["/Storage/CloudPT/Files", root, path].compact.join('/')
20
- response = connection.put(:content, "#{url}?#{query}", data, {
21
- 'Content-Type' => "application/octet-stream",
22
- "Content-Length" => data.length.to_s
23
- })
20
+ url = ["", "Files", root, path].compact.join('/')
21
+ if method == :post
22
+ response = connection.post(:content, "#{url}?#{query}", data, {
23
+ 'Content-Type' => "application/octet-stream",
24
+ "Content-Length" => data.length.to_s
25
+ })
26
+ else
27
+ response = connection.put(:content, "#{url}?#{query}", data, {
28
+ 'Content-Type' => "application/octet-stream",
29
+ "Content-Length" => data.length.to_s
30
+ })
31
+ end
24
32
  Cloudpt::API::File.init(response, self)
25
33
  end
26
34
 
@@ -27,24 +27,24 @@ module Cloudpt
27
27
  connection.send(method, endpoint, action, data)
28
28
  end
29
29
 
30
- add_method :get, "/Storage/CloudPT/Account/Info", :as => 'account', :root => false
31
-
32
- add_method :get, "/Storage/CloudPT/Metadata/:root/:path", :as => 'metadata'
33
- add_method :post, "/Storage/CloudPT/Delta", :as => 'delta', :root => false
34
- add_method :get, "/Storage/CloudPT/Revisions/:root/:path", :as => 'revisions'
35
- add_method :post, "/Storage/CloudPT/Restore/:root/:path", :as => 'restore'
36
- add_method :get, "/Storage/CloudPT/Search/:root/:path", :as => 'search'
37
- add_method :post, "/Storage/CloudPT/Shares/:root/:path", :as => 'shares'
38
- add_method :post, "/Storage/CloudPT/Media/:root/:path", :as => 'media'
39
-
40
- add_method :get_raw, "/Storage/CloudPT/Thumbnails/:root/:path", :as => 'thumbnails', :endpoint => :content
41
-
42
- add_method :post, "/Storage/CloudPT/Copy", :as => "copy"
43
- add_method :get, "/Storage/CloudPT/CopyRef/:root/:path", :as => 'copy_ref'
44
- add_method :post, "/Storage/CloudPT/CreateFolder", :as => "create_folder"
45
- add_method :post, "/Storage/CloudPT/Delete", :as => "delete"
46
- add_method :post, "/Storage/CloudPT/Move", :as => "move"
47
- add_method :post, "/Storage/CloudPT/List/:root/:path", :as => "list"
30
+ add_method :get, "/Account/Info", :as => 'account', :root => false
31
+
32
+ add_method :get, "/Metadata/:root/:path", :as => 'metadata'
33
+ add_method :post, "/Delta", :as => 'delta', :root => false
34
+ add_method :get, "/Revisions/:root/:path", :as => 'revisions'
35
+ add_method :post, "/Restore/:root/:path", :as => 'restore'
36
+ add_method :get, "/Search/:root/:path", :as => 'search'
37
+ add_method :post, "/Shares/:root/:path", :as => 'shares'
38
+ add_method :post, "/Media/:root/:path", :as => 'media'
39
+
40
+ add_method :get_raw, "/Thumbnails/:root/:path", :as => 'thumbnails', :endpoint => :content
41
+
42
+ add_method :post, "/Fileops/Copy", :as => "copy"
43
+ add_method :get, "/CopyRef/:root/:path", :as => 'copy_ref'
44
+ add_method :post, "/Fileops/CreateFolder", :as => "create_folder"
45
+ add_method :post, "/Fileops/Delete", :as => "delete"
46
+ add_method :post, "/Fileops/Move", :as => "move"
47
+ add_method :get, "/List/:root/:path", :as => "list"
48
48
 
49
49
  end
50
50
 
@@ -9,6 +9,8 @@ module Cloudpt
9
9
  response = yield
10
10
  raise Cloudpt::API::Error::ConnectionFailed if !response
11
11
  status = response.code.to_i
12
+ #puts "STATUS:#{status}"
13
+ #puts "PAYLOAD:\n#{response.body}"
12
14
  case status
13
15
  when 401
14
16
  raise Cloudpt::API::Error::Unauthorized
@@ -23,7 +25,7 @@ module Cloudpt
23
25
  when 300..399
24
26
  raise Cloudpt::API::Error::Redirect
25
27
  when 500..599
26
- raise Cloudpt::API::Error
28
+ raise Cloudpt::API::Error::ServerError
27
29
  else
28
30
  options[:raw] ? response.body : MultiJson.decode(response.body)
29
31
  end
@@ -33,6 +35,7 @@ module Cloudpt
33
35
 
34
36
  def get_raw(endpoint, path, data = {}, headers = {})
35
37
  query = Cloudpt::API::Util.query(data)
38
+ #puts "GET #{Cloudpt::API::Config.prefix}#{path}?#{URI.parse(URI.encode(query))}"
36
39
  request(:raw => true) do
37
40
  token(endpoint).get "#{Cloudpt::API::Config.prefix}#{path}?#{URI.parse(URI.encode(query))}", headers
38
41
  end
@@ -40,18 +43,24 @@ module Cloudpt
40
43
 
41
44
  def get(endpoint, path, data = {}, headers = {})
42
45
  query = Cloudpt::API::Util.query(data)
46
+ query = "?#{URI.parse(URI.encode(query))}" unless query.empty?
47
+ #puts "GET #{Cloudpt::API::Config.prefix}#{path}#{query}"
43
48
  request do
44
- token(endpoint).get "#{Cloudpt::API::Config.prefix}#{path}?#{URI.parse(URI.encode(query))}", headers
49
+ token(endpoint).get "#{Cloudpt::API::Config.prefix}#{path}#{query}", headers
45
50
  end
46
51
  end
47
52
 
48
53
  def post(endpoint, path, data = {}, headers = {})
54
+ #puts "POST #{Cloudpt::API::Config.prefix}#{path}"
55
+ #puts "BODY:\n#{data}"
49
56
  request do
50
57
  token(endpoint).post "#{Cloudpt::API::Config.prefix}#{path}", data, headers
51
58
  end
52
59
  end
53
60
 
54
61
  def put(endpoint, path, data = {}, headers = {})
62
+ #puts "PUT #{Cloudpt::API::Config.prefix}#{path}"
63
+ #puts "BODY:\n#{data}"
55
64
  request do
56
65
  token(endpoint).put "#{Cloudpt::API::Config.prefix}#{path}", data, headers
57
66
  end
@@ -33,6 +33,16 @@ module Cloudpt
33
33
  response = client.raw.copy_ref({ :path => self.path }.merge(options))
34
34
  Cloudpt::API::Object.init(response, client)
35
35
  end
36
+
37
+
38
+ #alias_method :old_path, :path
39
+ #def path
40
+ # if Cloudpt::API::Config.mode == 'sandbox'
41
+ # Cloudpt::API::Util.strip_slash(self['path'].sub(/^\/([^\/]+)?/, ''))
42
+ # else
43
+ # old_path
44
+ # end
45
+ #end
36
46
 
37
47
  def download
38
48
  client.download(self.path)
@@ -4,22 +4,22 @@ module Cloudpt
4
4
  module Fileops
5
5
 
6
6
  def copy(to, options = {})
7
- response = client.raw.copy({ :from_path => self.path, :to_path => to }.merge(options))
7
+ response = client.raw.copy({ :from_path => "/#{self.path}", :to_path => "/#{Cloudpt::API::Util.strip_slash(to)}" }.merge(options))
8
8
  self.update response
9
9
  end
10
10
 
11
11
  def move(to, options = {})
12
- response = client.raw.move({ :from_path => self.path, :to_path => to }.merge(options))
12
+ response = client.raw.move({ :from_path => "/#{self.path}", :to_path => "/#{Cloudpt::API::Util.strip_slash(to)}" }.merge(options))
13
13
  self.update response
14
14
  end
15
15
 
16
16
  def destroy(options = {})
17
- response = client.raw.delete({ :path => self.path }.merge(options))
17
+ response = client.raw.delete({ :path => "/#{self.path}" }.merge(options))
18
18
  self.update response
19
19
  end
20
20
 
21
21
  def path
22
- self['path'].sub(/^\//, '')
22
+ Cloudpt::API::Util.strip_slash(self['path'])
23
23
  end
24
24
 
25
25
  end
@@ -12,14 +12,14 @@ module Cloudpt
12
12
  end
13
13
 
14
14
  self.endpoints = {
15
- :main => "https://api.cloudpt.pt",
15
+ :main => "https://publicapi.cloudpt.pt",
16
16
  :content => "https://api-content.cloudpt.pt",
17
17
  :authorize => "https://cloudpt.pt"
18
18
  }
19
- self.prefix = ""
19
+ self.prefix = "/1"
20
20
  self.app_key = nil
21
21
  self.app_secret = nil
22
- self.mode = nil
22
+ self.mode = 'sandbox'
23
23
 
24
24
  end
25
25
 
@@ -9,7 +9,7 @@ module Cloudpt
9
9
  class Forbidden < Exception; end
10
10
  class NotFound < Exception; end
11
11
  class Redirect < Exception; end
12
-
12
+ class ServerError < Exception; end
13
13
  end
14
14
 
15
15
  end
@@ -11,9 +11,9 @@ module Cloudpt
11
11
  end
12
12
  ::OAuth::Consumer.new(Cloudpt::API::Config.app_key, Cloudpt::API::Config.app_secret,
13
13
  :site => Cloudpt::API::Config.endpoints[endpoint],
14
- :request_token_path => Cloudpt::API::Config.prefix + "/oauth/request_token",
15
- :authorize_path => Cloudpt::API::Config.prefix + "/oauth/authorize",
16
- :access_token_path => Cloudpt::API::Config.prefix + "/oauth/access_token")
14
+ :request_token_path => "/oauth/request_token",
15
+ :authorize_path => "/oauth/authorize",
16
+ :access_token_path => "/oauth/access_token")
17
17
  end
18
18
 
19
19
  def access_token(consumer, options = {})
@@ -15,6 +15,10 @@ module Cloudpt
15
15
  data.inject([]) { |memo, entry| memo.push(entry.join('=')); memo }.join('&')
16
16
  end
17
17
 
18
+ def strip_slash(path)
19
+ path.sub(/^\//, '')
20
+ end
21
+
18
22
  def remove_double_slashes(path)
19
23
  path.gsub('//', '/')
20
24
  end
@@ -1,5 +1,5 @@
1
1
  module Cloudpt
2
2
  module API
3
- VERSION = "0.0.1"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -3,9 +3,15 @@ require "spec_helper"
3
3
 
4
4
  describe Cloudpt::API::Client do
5
5
 
6
- before do
6
+ before(:all) do
7
7
  # pending
8
8
  @client = Cloudpt::Spec.instance
9
+ @dirname = "#{Cloudpt::Spec.test_dir}"
10
+ @dir = @client.mkdir @dirname
11
+ end
12
+
13
+ after(:all) do
14
+ @dir.destroy
9
15
  end
10
16
 
11
17
  describe "#initialize" do
@@ -27,11 +33,11 @@ describe Cloudpt::API::Client do
27
33
 
28
34
  describe "#find" do
29
35
 
30
- before do
31
- @filename = "#{Cloudpt::Spec.test_dir}/spec-find-file-test-#{Time.now.to_i}.txt"
36
+ before(:all) do
37
+ @filename = "#{Cloudpt::Spec.test_dir}/spec--find-file-test-#{Time.now.to_i}.txt"
32
38
  @file = @client.upload @filename, "spec file"
33
39
 
34
- @dirname = "#{Cloudpt::Spec.test_dir}/spec-find-dir-test-#{Time.now.to_i}"
40
+ @dirname = "#{Cloudpt::Spec.test_dir}/spec--find-dir-test-#{Time.now.to_i}"
35
41
  @dir = @client.mkdir @dirname
36
42
  end
37
43
 
@@ -50,9 +56,17 @@ describe Cloudpt::API::Client do
50
56
  end
51
57
 
52
58
  describe "#list" do
59
+ before do
60
+ @filename = "#{Cloudpt::Spec.test_dir}/spec-find-file-test-#{Time.now.to_i}.txt"
61
+ @file = @client.upload @filename, "spec file"
62
+
63
+ @dirname = "#{Cloudpt::Spec.test_dir}/spec-find-dir-test-#{Time.now.to_i}"
64
+ @dir = @client.mkdir @dirname
65
+ end
66
+
53
67
  it "lists root" do
54
- result = @client.list("")
55
- result.should be_an_instance_of(Array)
68
+ result = @client.list("#{Cloudpt::Spec.test_dir}")
69
+ result['contents'].should be_an_instance_of(Array)
56
70
  end
57
71
  end
58
72
 
@@ -106,13 +120,15 @@ describe Cloudpt::API::Client do
106
120
  response.bytes.should == 9
107
121
  end
108
122
 
123
+ #FAIL ON SERVER |*<>?:
109
124
  it "uploads the file with tricky characters" do
110
- filename = "#{Cloudpt::Spec.test_dir}/test ,|!@\#$%^&*{b}[].;'.,<>?:-#{Cloudpt::Spec.namespace}.txt"
125
+ filename = "#{Cloudpt::Spec.test_dir}/test ,!@\#$%^&{b}[].;'.,-#{Cloudpt::Spec.namespace}.txt"
111
126
  response = @client.upload filename, "Some file"
112
127
  response.path.should == filename
113
128
  response.bytes.should == 9
114
129
  end
115
130
 
131
+ #FAIL ON SERVER
116
132
  it "uploads the file with utf8" do
117
133
  filename = "#{Cloudpt::Spec.test_dir}/test łołąó-#{Cloudpt::Spec.namespace}.txt"
118
134
  response = @client.upload filename, "Some file"
@@ -125,22 +141,22 @@ describe Cloudpt::API::Client do
125
141
 
126
142
  let(:term) { "searchable-test-#{Cloudpt::Spec.namespace}" }
127
143
 
128
- before do
144
+ before(:all) do
129
145
  filename = "#{Cloudpt::Spec.test_dir}/searchable-test-#{Cloudpt::Spec.namespace}.txt"
130
146
  @client.upload filename, "Some file"
131
- end
132
-
133
- after do
134
- @response.size.should == 1
135
- @response.first.class.should == Cloudpt::API::File
147
+ sleep(2)
136
148
  end
137
149
 
138
150
  it "finds a file" do
139
- @response = @client.search term, :path => "#{Cloudpt::Spec.test_dir}"
151
+ response = @client.search term, :path => "#{Cloudpt::Spec.test_dir}"
152
+ response.size.should_not == 0
153
+ response.first.class.should == Cloudpt::API::File
140
154
  end
141
155
 
142
156
  it "works if leading slash is present in path" do
143
- @response = @client.search term, :path => "/#{Cloudpt::Spec.test_dir}"
157
+ response = @client.search term, :path => "/#{Cloudpt::Spec.test_dir}"
158
+ response.size.should_not == 0
159
+ response.first.class.should == Cloudpt::API::File
144
160
  end
145
161
 
146
162
  end
@@ -148,12 +164,17 @@ describe Cloudpt::API::Client do
148
164
  describe "#copy_from_copy_ref" do
149
165
 
150
166
  it "copies a file from a copy_ref" do
151
- filename = "test/searchable-test-#{Cloudpt::Spec.namespace}.txt"
167
+ filename = "#{Cloudpt::Spec.test_dir}/searchable-test-copy-#{Cloudpt::Spec.namespace}.txt"
152
168
  @client.upload filename, "Some file"
153
- response = @client.search "searchable-test-#{Cloudpt::Spec.namespace}", :path => 'test'
154
- ref = response.first.copy_ref['copy_ref']
155
- @client.copy_from_copy_ref ref, "#{filename}.copied"
156
- response = @client.search "searchable-test-#{Cloudpt::Spec.namespace}.txt.copied", :path => 'test'
169
+ sleep(2)
170
+ response = @client.search "searchable-test-copy-#{Cloudpt::Spec.namespace}", :path => "#{Cloudpt::Spec.test_dir}"
171
+ ref = response.first.copy_ref
172
+ ref.should_not == nil
173
+ the_copy_ref = ref['copy-ref']
174
+ the_copy_ref.should_not == nil
175
+ @client.copy_from_copy_ref the_copy_ref, "#{filename}.copied"
176
+ sleep(2)
177
+ response = @client.search "searchable-test-copy-#{Cloudpt::Spec.namespace}.txt.copied", :path => "#{Cloudpt::Spec.test_dir}"
157
178
  response.size.should == 1
158
179
  response.first.class.should == Cloudpt::API::File
159
180
  end
@@ -188,7 +209,7 @@ describe Cloudpt::API::Client do
188
209
  end
189
210
 
190
211
  it "returns the files that have changed since the cursor was made" do
191
- filename = "#{Cloudpt::Spec.test_dir}/delta-test-#{Cloudpt::Spec.namespace}.txt"
212
+ filename = "#{Cloudpt::Spec.test_dir}/delta-test_add-#{Cloudpt::Spec.namespace}.txt"
192
213
  delete_filename = "#{Cloudpt::Spec.test_dir}/delta-test-delete-#{Cloudpt::Spec.namespace}.txt"
193
214
  @client.upload delete_filename, 'Some file'
194
215
  response = @client.delta
@@ -47,7 +47,7 @@ describe Cloudpt::API::Connection do
47
47
  response = mock :code => 500, :body => '{ "a":1}'
48
48
  lambda do
49
49
  @connection.request { response }
50
- end.should raise_error(Cloudpt::API::Error)
50
+ end.should raise_error(Cloudpt::API::Error::ServerError)
51
51
  end
52
52
 
53
53
  it "raises a Cloudpt::API::Error when the response is a 400" do
@@ -4,14 +4,11 @@ describe Cloudpt::API::Dir do
4
4
 
5
5
  before do
6
6
  @client = Cloudpt::Spec.instance
7
+ @parent_dir = @client.mkdir "#{Cloudpt::Spec.test_dir}"
7
8
  @dirname = "#{Cloudpt::Spec.test_dir}/spec-dir-test-#{Time.now.to_i}"
8
9
  @dir = @client.mkdir @dirname
9
10
  end
10
11
 
11
- after do
12
- # @dir.delete
13
- end
14
-
15
12
  describe "#copy" do
16
13
 
17
14
  it "copies the dir properly" do
@@ -20,6 +17,11 @@ describe Cloudpt::API::Dir do
20
17
  @dir.path.should == new_dirname
21
18
  end
22
19
 
20
+ after do
21
+ @dir.destroy
22
+ @parent_dir.destroy
23
+ end
24
+
23
25
  end
24
26
 
25
27
  describe "#move" do
@@ -30,6 +32,11 @@ describe Cloudpt::API::Dir do
30
32
  @dir.path.should == new_dirname
31
33
  end
32
34
 
35
+ after do
36
+ @dir.destroy
37
+ @parent_dir.destroy
38
+ end
39
+
33
40
  end
34
41
 
35
42
  describe "#destroy" do
@@ -4,12 +4,14 @@ describe Cloudpt::API::File do
4
4
 
5
5
  before do
6
6
  @client = Cloudpt::Spec.instance
7
+ @dirname = "#{Cloudpt::Spec.test_dir}"
8
+ @dir = @client.mkdir @dirname
7
9
  @filename = "#{Cloudpt::Spec.test_dir}/spec-test-#{Time.now.to_i}.txt"
8
10
  @file = @client.upload @filename, "spec file"
9
11
  end
10
12
 
11
13
  after do
12
- # @file.delete
14
+ @dir.destroy
13
15
  end
14
16
 
15
17
  describe "#copy" do
@@ -44,8 +46,9 @@ describe Cloudpt::API::File do
44
46
  describe "#revisions" do
45
47
 
46
48
  it "retrieves all revisions as an Array of File objects" do
47
- @client.upload @file.path, "Updated content"
48
-
49
+ sleep(2)
50
+ @client.upload @file.path, "Updated content", {'overwrite' => true, :method => :post}
51
+ #FAIL AT SERVER ?
49
52
  revisions = @file.revisions
50
53
  revisions.size.should == 2
51
54
  revisions.collect { |f| f.class }.should == [Cloudpt::API::File, Cloudpt::API::File]
@@ -85,8 +88,9 @@ describe Cloudpt::API::File do
85
88
 
86
89
  result = @file.share_url
87
90
  result.should be_an_instance_of(Cloudpt::API::Object)
88
- result.keys.sort.should == ['expires', 'url']
89
-
91
+ result.should have_key 'expires'
92
+ result.should have_key 'url'
93
+ result.should have_key 'link_shareid'
90
94
  end
91
95
 
92
96
  end
@@ -94,11 +98,11 @@ describe Cloudpt::API::File do
94
98
  describe "#copy_ref" do
95
99
 
96
100
  it "returns a copy_ref object" do
97
-
101
+ sleep(2)
98
102
  result = @file.copy_ref
99
103
  result.should be_an_instance_of(Cloudpt::API::Object)
100
- result.keys.sort.should == ['copy_ref', 'expires']
101
-
104
+ result.should have_key 'copy_ref'
105
+ result.should have_key 'expires'
102
106
  end
103
107
 
104
108
  end
@@ -106,11 +110,11 @@ describe Cloudpt::API::File do
106
110
  describe "#direct_url" do
107
111
 
108
112
  it "returns an Url object" do
109
-
113
+ sleep(2)
110
114
  result = @file.direct_url
111
115
  result.should be_an_instance_of(Cloudpt::API::Object)
112
- result.keys.sort.should == ['expires', 'url']
113
-
116
+ result.should have_key 'url'
117
+ result.should have_key 'expires'
114
118
  end
115
119
 
116
120
  end
@@ -6,6 +6,7 @@ describe Cloudpt::API::File do
6
6
  before do
7
7
  @io = StringIO.new
8
8
  @client = Cloudpt::Spec.instance
9
+ @dir = @client.mkdir Cloudpt::Spec.test_dir
9
10
  @filename = "#{Cloudpt::Spec.test_dir}/spec-test-#{Time.now.to_i}.jpg"
10
11
  jpeg = File.read("spec/fixtures/cloudpt.jpg")
11
12
  @file = @client.upload @filename, jpeg
@@ -14,14 +15,15 @@ describe Cloudpt::API::File do
14
15
  describe "#thumbnail" do
15
16
 
16
17
  it "downloads a thumbnail" do
18
+ sleep(2)
17
19
  result = @file.thumbnail
18
20
 
19
21
  @io << result
20
22
  @io.rewind
21
23
 
22
24
  jpeg = JPEG.new(@io)
23
- jpeg.height.should == 64
24
- jpeg.width.should == 64
25
+ jpeg.height.should == 32
26
+ jpeg.width.should == 32
25
27
  end
26
28
 
27
29
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudpt-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-25 00:00:00.000000000 Z
12
+ date: 2013-02-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: multi_json