yandex_disk 1.0.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/yandex_disk/api.rb +21 -14
- data/lib/yandex_disk/cfg.rb +1 -1
- data/lib/yandex_disk/chunked.rb +2 -0
- data/lib/yandex_disk/ext.rb +17 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/yandex_disk_spec.rb +27 -15
- metadata +2 -6
- data/spec/files/sample.jpg +0 -0
- data/spec/files/sample.txt +0 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YzJiNjlmZTg4ODAxNDRhM2RkNzE0NDMwNDgxNDgwMzRjZGU3N2EwOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NDM5NjVmNmY3N2Q2NjhiMTllNTE4NDFjZjQxNjM2ZWJjMzk5YTc4Yg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YWVhZGNkZTg5MmUyMmI0MWNlZmJhZmFlMDY5NjdlYWY3MzYyNDdlMmY5ZDUy
|
10
|
+
ZWEyOWY0ZWQyY2UzZTRmOGI2MTA5OWFiMzA5YzYxMzJjNTdkOTk5M2M5ZTRj
|
11
|
+
Yjc5NDliYTVmMWNiYTlkMDJjZDU2YjU0ODQ0OGEwZDcwOTY4MWU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OGU1YTAyZGRkM2MwYWQyY2Q5NzBiYjkxZjE1NWY2YTYwMjU5ZTdjMDA2ODgx
|
14
|
+
OGNiMWQ4MGI1YTVkMDJlYjA0ZTZhOTQ4YjJlODA5ZjY2MGJjN2FjOTU5MmFj
|
15
|
+
YzQyZGEwMWJjNDNiMzYwMDkwYzY4NTgzM2VkODZkYWUyNDc1ZWU=
|
data/lib/yandex_disk/api.rb
CHANGED
@@ -17,7 +17,6 @@ module YandexDisk
|
|
17
17
|
@token = 'Basic ' + Base64.encode64("#{login}:#{pwd}")
|
18
18
|
end
|
19
19
|
|
20
|
-
# TODO gzip file when sending
|
21
20
|
# Example:
|
22
21
|
# yd.upload('/home/graph.pdf', 'my/work')
|
23
22
|
# => true
|
@@ -33,10 +32,9 @@ module YandexDisk
|
|
33
32
|
raise RequestError, "File not found." if file.nil? || !File.file?(file)
|
34
33
|
# create path
|
35
34
|
create_path(path) if options[:force]
|
36
|
-
options[:chunk_size] ||=
|
35
|
+
options[:chunk_size] ||= 1024
|
37
36
|
@file = File.open(file)
|
38
37
|
options[:headers] = {'Expect' => '100-continue',
|
39
|
-
#'Content-Encoding' => 'gzip',
|
40
38
|
'Transfer-Encoding' => 'chunked',
|
41
39
|
'content-type' => 'application/binary'}
|
42
40
|
|
@@ -62,8 +60,8 @@ module YandexDisk
|
|
62
60
|
data = nil
|
63
61
|
# unzip if zipped
|
64
62
|
if @response.header['Content-Encoding'] == 'gzip'
|
65
|
-
|
66
|
-
gz = Zlib::GzipReader.new(
|
63
|
+
s_io = StringIO.new(@response.body)
|
64
|
+
gz = Zlib::GzipReader.new(s_io)
|
67
65
|
data = gz.read
|
68
66
|
else
|
69
67
|
data = @response.body
|
@@ -92,14 +90,19 @@ module YandexDisk
|
|
92
90
|
# Example:
|
93
91
|
# yd.size
|
94
92
|
# => {:available => 312312, :used => 3123}
|
95
|
-
|
93
|
+
# Arguments:
|
94
|
+
# options:
|
95
|
+
# readable: return size in human readable format e.g, 100K 128M 1G (false for default)
|
96
|
+
def size(options = {})
|
96
97
|
body = '<?xml version="1.0" encoding="utf-8"?><D:propfind xmlns:D="DAV:"><D:prop><D:quota-available-bytes/><D:quota-used-bytes/></D:prop></D:propfind>'
|
97
98
|
send_propfind(0, {:body => body})
|
98
99
|
xml = REXML::Document.new(@response.body)
|
99
100
|
prop = 'd:multistatus/d:response/d:propstat/d:prop/'
|
101
|
+
available_b = xml.elements[prop + 'd:quota-available-bytes'].text.to_i
|
102
|
+
used_b = xml.elements[prop + 'd:quota-used-bytes'].text.to_i
|
100
103
|
|
101
|
-
return {:available =>
|
102
|
-
:used =>
|
104
|
+
return {:available => available_b.to_readable(options[:h_size]),
|
105
|
+
:used => used_b.to_readable(options[:h_size])}
|
103
106
|
end
|
104
107
|
|
105
108
|
# Example:
|
@@ -129,7 +132,8 @@ module YandexDisk
|
|
129
132
|
#
|
130
133
|
# Arguments:
|
131
134
|
# path: path to yandex disk directory or file
|
132
|
-
|
135
|
+
# h_size: return size in human readable format e.g, 100K 128M 1G (false for default)
|
136
|
+
def properties(path, options = {})
|
133
137
|
body = '<?xml version="1.0" encoding="utf-8"?><propfind xmlns="DAV:"><prop><displayname/><creationdate/><getlastmodified/><getcontenttype/><getcontentlength/><public_url xmlns="urn:yandex:disk:meta"/></prop></propfind>'
|
134
138
|
send_propfind(0, {:path => path, :body => body})
|
135
139
|
prop = 'd:multistatus/d:response/d:propstat/d:prop/'
|
@@ -141,7 +145,7 @@ module YandexDisk
|
|
141
145
|
:created => xml.elements[prop + 'd:getlastmodified'].text,
|
142
146
|
:updated => xml.elements[prop + 'd:getlastmodified'].text,
|
143
147
|
:type => type ? type : 'dir',
|
144
|
-
:size => size,
|
148
|
+
:size => size.to_readable(options[:h_size]),
|
145
149
|
:is_file => size > 0,
|
146
150
|
:public_url => xml.elements[prop + 'public_url'].text}
|
147
151
|
end
|
@@ -158,26 +162,28 @@ module YandexDisk
|
|
158
162
|
#
|
159
163
|
# Arguments:
|
160
164
|
# path: path to yandex disk directory (default is <b>root</b>)
|
161
|
-
#
|
162
|
-
|
165
|
+
# root: include information of root directory or not (<b>false</b> for default)
|
166
|
+
# h_size: return size in human readable format e.g, 100K 128M 1G (false for default)
|
167
|
+
def files(path = '', options = {})
|
163
168
|
send_propfind(1, {:path => path})
|
164
169
|
xml = REXML::Document.new(@response.body)
|
165
170
|
prop = 'd:propstat/d:prop/'
|
166
171
|
files = []
|
167
172
|
xml.elements.each('d:multistatus/d:response') do |res|
|
168
173
|
name = URI.decode(res.elements[prop + 'd:displayname'].text)
|
169
|
-
next if !
|
174
|
+
next if !options[:root] && path.split('/').last == name
|
170
175
|
size = res.elements[prop + 'd:getcontentlength'].text.to_i
|
171
176
|
|
172
177
|
files << {:name => name,
|
173
178
|
:path => URI.decode(res.elements['d:href'].text),
|
174
179
|
:created => res.elements[prop + 'd:creationdate'].text,
|
175
180
|
:updated => res.elements[prop + 'd:getlastmodified'].text,
|
176
|
-
:size => size,
|
181
|
+
:size => size.to_readable(options[:h_size]),
|
177
182
|
:is_file => size > 0}
|
178
183
|
end
|
179
184
|
return files
|
180
185
|
end
|
186
|
+
alias_method :ls, :files
|
181
187
|
|
182
188
|
# Example:
|
183
189
|
# yd.copy('/home/graph.pdf', 'my/work')
|
@@ -273,6 +279,7 @@ module YandexDisk
|
|
273
279
|
send_request(:propfind, options.merge!(headers))
|
274
280
|
end
|
275
281
|
|
282
|
+
# return true if successful
|
276
283
|
def send_request(method, args = {})
|
277
284
|
# headers
|
278
285
|
headers = {'Authorization' => @token}
|
data/lib/yandex_disk/cfg.rb
CHANGED
data/lib/yandex_disk/chunked.rb
CHANGED
data/lib/yandex_disk/ext.rb
CHANGED
@@ -10,4 +10,21 @@ module YandexDisk
|
|
10
10
|
self.nil? || !self || self.empty?
|
11
11
|
end
|
12
12
|
end
|
13
|
+
|
14
|
+
class ::Integer
|
15
|
+
def to_readable(convert)
|
16
|
+
return self unless convert
|
17
|
+
|
18
|
+
conv = {'Byte' => 1024,
|
19
|
+
'KB' => 1024**2,
|
20
|
+
'MB' => 1024**3,
|
21
|
+
'GB' => 1024**4}
|
22
|
+
|
23
|
+
conv.each do |suf, size|
|
24
|
+
next if self >= size
|
25
|
+
return "%.2f %s" % [ self / (size / 1024).to_f, suf ]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
13
30
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/yandex_disk_spec.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#encoding: UTF-8
|
2
2
|
require 'spec_helper'
|
3
|
-
require 'net/http'
|
4
|
-
require 'uri'
|
5
3
|
require 'fastimage'
|
6
4
|
|
7
5
|
describe YandexDisk do
|
@@ -27,9 +25,18 @@ describe YandexDisk do
|
|
27
25
|
@yd = YandexDisk.login(LOGIN, PWD)
|
28
26
|
end
|
29
27
|
|
30
|
-
|
31
|
-
|
32
|
-
|
28
|
+
describe 'size' do
|
29
|
+
it 'should be in bytes' do
|
30
|
+
size = @yd.size
|
31
|
+
expect(size[:used] > 0 && size[:available] > 0).to be_true
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should be in readable format' do
|
35
|
+
size = @yd.size(:h_size => true)
|
36
|
+
mask = /Byte|KB|MB|GB/
|
37
|
+
expect(size[:used].match(mask)[0].empty? &&
|
38
|
+
size[:available].match(mask)[0].empty?).to be_false
|
39
|
+
end
|
33
40
|
end
|
34
41
|
|
35
42
|
it 'should return list of files' do
|
@@ -76,7 +83,7 @@ describe YandexDisk do
|
|
76
83
|
# copy directory
|
77
84
|
@yd.copy(src, des)
|
78
85
|
# check files
|
79
|
-
@yd.files(src
|
86
|
+
@yd.files(src).size.should eq 2
|
80
87
|
files.each do |file, text|
|
81
88
|
download_and_validate(File.join(des, file), text)
|
82
89
|
end
|
@@ -94,31 +101,31 @@ describe YandexDisk do
|
|
94
101
|
@yd.upload(@text_file, 'my', {:force => true}).should be_true
|
95
102
|
end
|
96
103
|
|
97
|
-
it 'should be downloaded and
|
104
|
+
it 'should be downloaded and validate' do
|
98
105
|
@yd.upload(@text_file, 'my', {:force => true}).should be_true
|
99
106
|
path = 'my/' + File.basename(@text_file)
|
100
107
|
download_and_validate(path)
|
101
108
|
end
|
102
109
|
# its related to copy dir
|
103
|
-
it 'should by copied
|
110
|
+
it 'should by copied' do
|
104
111
|
@yd.upload(@text_file, 'my', {:force => true})
|
105
112
|
f_name = File.basename(@text_file)
|
106
113
|
file = 'my/' + f_name
|
107
114
|
new_path = 'my/text'
|
108
|
-
@yd.create_path(new_path)
|
109
|
-
@yd.copy(file, new_path)
|
115
|
+
@yd.create_path(new_path).should be_true
|
116
|
+
@yd.copy(file, new_path).should be_true
|
110
117
|
# file still exist in src path
|
111
118
|
@yd.exist?(file).should be_true
|
112
119
|
download_and_validate(File.join(new_path, f_name))
|
113
120
|
end
|
114
121
|
|
115
|
-
it 'should by moved
|
122
|
+
it 'should by moved' do
|
116
123
|
@yd.upload(@text_file, 'my', {:force => true})
|
117
124
|
f_name = File.basename(@text_file)
|
118
125
|
file = 'my/' + f_name
|
119
126
|
new_path = 'my/text'
|
120
127
|
@yd.create_path(new_path)
|
121
|
-
@yd.move(file, new_path)
|
128
|
+
@yd.move(file, new_path).should be_true
|
122
129
|
# file not exist in src path
|
123
130
|
@yd.exist?(file).should be_false
|
124
131
|
download_and_validate(File.join(new_path, f_name))
|
@@ -129,7 +136,7 @@ describe YandexDisk do
|
|
129
136
|
@yd.upload(@text_file)
|
130
137
|
f_name = File.basename(@text_file)
|
131
138
|
download_and_validate(f_name)
|
132
|
-
@yd.delete(f_name)
|
139
|
+
@yd.delete(f_name).should be_true
|
133
140
|
@yd.exist?(f_name).should be_false
|
134
141
|
end
|
135
142
|
|
@@ -154,14 +161,19 @@ describe YandexDisk do
|
|
154
161
|
end
|
155
162
|
|
156
163
|
it 'should return image in M size'do
|
157
|
-
@yd.preview('my/' + @f_name, 'm', DOWNLOAD_PATH)
|
164
|
+
@yd.preview('my/' + @f_name, 'm', DOWNLOAD_PATH).should be_true
|
158
165
|
File.file?( File.join(DOWNLOAD_PATH, @f_name) ).should be_true
|
159
166
|
end
|
160
167
|
|
161
168
|
it 'should return image in 300x250 size'do
|
162
|
-
@yd.preview('my/' + @f_name, '300x250', DOWNLOAD_PATH)
|
169
|
+
@yd.preview('my/' + @f_name, '300x250', DOWNLOAD_PATH).should be_true
|
163
170
|
FastImage.size( File.join(DOWNLOAD_PATH, @f_name) ).should eq [300, 250]
|
164
171
|
end
|
172
|
+
|
173
|
+
it 'should return image in 128 pixels wide'do
|
174
|
+
@yd.preview('my/' + @f_name, 128, DOWNLOAD_PATH).should be_true
|
175
|
+
FastImage.size( File.join(DOWNLOAD_PATH, @f_name) )[0].should eq 128
|
176
|
+
end
|
165
177
|
end
|
166
178
|
|
167
179
|
after(:each) do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yandex_disk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boris Murga
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -65,8 +65,6 @@ files:
|
|
65
65
|
- lib/yandex_disk/cfg.rb
|
66
66
|
- spec/spec_helper.rb
|
67
67
|
- spec/files/README
|
68
|
-
- spec/files/sample.jpg
|
69
|
-
- spec/files/sample.txt
|
70
68
|
- spec/yandex_disk_spec.rb
|
71
69
|
homepage: https://github.com/denwwer/yandex_disk
|
72
70
|
licenses:
|
@@ -96,6 +94,4 @@ summary: API for Yandex Disk
|
|
96
94
|
test_files:
|
97
95
|
- spec/spec_helper.rb
|
98
96
|
- spec/files/README
|
99
|
-
- spec/files/sample.jpg
|
100
|
-
- spec/files/sample.txt
|
101
97
|
- spec/yandex_disk_spec.rb
|
data/spec/files/sample.jpg
DELETED
Binary file
|
data/spec/files/sample.txt
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
Hi developer.
|