yandex-disk 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42f0c7884f42dcd37fefa77569a482362dfc6299
4
- data.tar.gz: 671e00b8bd8266a902c279b358b99d7bb025f648
3
+ metadata.gz: 23dcd981d7eb0cc5b888019fd9807d936b7dfe3c
4
+ data.tar.gz: 1a39ad88ca3b303cdc1c9e8f13958a79bc0d5ee1
5
5
  SHA512:
6
- metadata.gz: 02063f9671ec83c4b79ee08f05c36f908aa79dc683e864a4378362cfac34888faebf02c1046c7c879089790df081c86243ff09132feb136da95873b61209ae50
7
- data.tar.gz: 14eaa321bc25830b2a9ae6063e0d2b5f420c7638aeebaa892316bf6c5aa558a724add0b247ffb89cad8283683df6f4f4e49151b14ebfae83f7b06a7cd6c0cbc3
6
+ metadata.gz: b2539167f83cb414f64e790a923f39dd2a024266e3efe7e753cb22e55678b0a885ec75329a260bd1290fa95b18a8e01cb9bc1b96835947275c9fbbd03dd0731a
7
+ data.tar.gz: 86d90585dc811a40d49f333076fcade0bd9c9a92b3044ec9fed4228ebdb15508a4954a6754bcb0632b9ad191bc2b2f93460cff7a2daa80d6c3bcccd9eb1b6c60
data/README.md CHANGED
@@ -19,8 +19,12 @@ Add this line to your application's Gemfile:
19
19
  ## Usage
20
20
 
21
21
  ```ruby
22
+ # authorize via oauth access token...
22
23
  disk = Yandex::Disk::Client.new(:access_token => 'YOUR_ACCESS_TOKEN')
23
24
 
25
+ # ...or use login password for authorization
26
+ disk = Yandex::Disk::Client.new(:login => 'me', :password => 'secret')
27
+
24
28
  # to upload file to Yandex.Disk
25
29
  disk.put('path/to/local/file', '/path/to/remote/file') # returns `true` if everything is ok
26
30
 
@@ -41,6 +45,12 @@ disk.copy('/path/to/remote/file/or/dir', '/path/to/new/remote/file/or/dir')
41
45
  disk.move('/path/to/remote/file/or/dir', '/path/to/new/remote/file/or/dir')
42
46
  # delete file/dir
43
47
  disk.delete('/path/to/remote/file/or/dir') # returns `true` if everything is ok
48
+
49
+ # to get quotas
50
+ disk.space # returns hash like { :quota_available_bytes => 2488943615, :quota_used_bytes => 2488943615 }
51
+
52
+ # to get dir contents
53
+ disk.list('/') # returns array with hashes like [{:href=>"/",:resourcetype=>:collection,:getlastmodified=><DateTime>,:getcontentlength=>0,:displayname=>"disk",:creationdate=><DateTime>},{:href=>"/readme.pdf",:getlastmodified=><DateTime>,:getcontentlength=>455833,:displayname=>"readme.pdf",:creationdate=><DateTime>}]
44
54
  ```
45
55
 
46
56
  ## Using it with [backup gem](https://github.com/meskyanichi/backup)
@@ -49,7 +59,7 @@ disk.delete('/path/to/remote/file/or/dir') # returns `true` if everything is ok
49
59
  require 'yandex/disk/backup/storage'
50
60
 
51
61
  Backup::Model.new(:my_backup, 'Description for my_backup') do
52
- split_into_chunks_of 250
62
+ split_into_chunks_of 50
53
63
 
54
64
  database PostgreSQL do |db|
55
65
  db.name = 'pg_db_name'
@@ -64,7 +74,6 @@ Backup::Model.new(:my_backup, 'Description for my_backup') do
64
74
  disk.path = '/backups/'
65
75
  disk.keep = 5
66
76
  end
67
-
68
77
  end
69
78
  ```
70
79
 
@@ -1,16 +1,25 @@
1
1
  # coding: utf-8
2
2
 
3
+ require 'base64'
3
4
  require 'faraday'
4
5
  require 'faraday_middleware'
5
6
 
7
+ Faraday::Connection::METHODS << :propfind
8
+
6
9
  module Yandex
7
10
  module Disk
8
11
  class Client
12
+ autoload :Request, 'yandex/disk/client/request'
9
13
 
10
14
  def initialize options={}
11
15
  @timeout = options[:timeout] || 300
12
16
  @http = Faraday.new(:url => 'https://webdav.yandex.ru') do |builder|
13
- builder.request :authorization, "OAuth", options[:access_token]
17
+ if options[:access_token].present?
18
+ builder.request :authorization, "OAuth", options[:access_token]
19
+ else
20
+ basic_token = Base64.encode64("#{options[:login]}:#{options[:password]}")
21
+ builder.request :authorization, "Basic", basic_token
22
+ end
14
23
 
15
24
  builder.response :follow_redirects
16
25
 
@@ -44,6 +53,16 @@ module Yandex
44
53
  @http.get(path)
45
54
  end
46
55
 
56
+ def space
57
+ request = Request::Space.new(@http)
58
+ request.perform
59
+ end
60
+
61
+ def list path
62
+ request = Request::List.new(@http, path)
63
+ request.perform
64
+ end
65
+
47
66
  alias_method :mkdir, :mkcol
48
67
 
49
68
  def mkdir_p path
@@ -0,0 +1,4 @@
1
+ module Yandex::Disk::Client::Request
2
+ autoload :Space, 'yandex/disk/client/request/space'
3
+ autoload :List, 'yandex/disk/client/request/list'
4
+ end
@@ -0,0 +1,89 @@
1
+ require 'nokogiri'
2
+
3
+ class Yandex::Disk::Client::Request::List
4
+ HEADERS = {
5
+ :Depth => 1
6
+ }
7
+
8
+ def initialize http, path
9
+ @http = http
10
+ @path = path
11
+ end
12
+
13
+ def perform
14
+ response = @http.run_request :propfind, @path, nil, HEADERS
15
+ parse_result = parse(response.body)
16
+ parse_result.list
17
+ end
18
+
19
+
20
+ private
21
+
22
+ class ListParser < Nokogiri::XML::SAX::Document
23
+ attr_reader :list
24
+
25
+ def initialize
26
+ @list = []
27
+ end
28
+
29
+ def start_element name, attributes = []
30
+ case name
31
+ when 'd:href'
32
+ @current = {}
33
+ @is_href = true
34
+
35
+ when 'd:displayname'
36
+ @is_displayname = true
37
+
38
+ when 'd:getcontentlength'
39
+ @is_getcontentlength = true
40
+
41
+ when 'd:creationdate'
42
+ @is_creationdate = true
43
+
44
+ when 'd:getlastmodified'
45
+ @is_getlastmodified = true
46
+
47
+ when 'd:collection'
48
+ @current[:resourcetype] = :collection
49
+ end
50
+ end
51
+
52
+ def end_element name, attributes = []
53
+ case name
54
+ when 'd:href'
55
+ @list << @current if @current
56
+ @is_href = false
57
+
58
+ when 'd:displayname'
59
+ @is_displayname = false
60
+
61
+ when 'd:getcontentlength'
62
+ @is_getcontentlength = false
63
+
64
+ when 'd:creationdate'
65
+ @is_creationdate = false
66
+
67
+ when 'd:getlastmodified'
68
+ @is_getlastmodified = false
69
+ end
70
+ end
71
+
72
+ def characters string
73
+ @current[:href] = string if @is_href
74
+ @current[:displayname] = string if @is_displayname
75
+ @current[:getcontentlength] = string.to_i if @is_getcontentlength
76
+ @current[:creationdate] = DateTime.parse(string) if @is_creationdate
77
+ @current[:getlastmodified] = DateTime.parse(string) if @is_getlastmodified
78
+ end
79
+ end
80
+
81
+ def parse body
82
+ list_parser = ListParser.new
83
+
84
+ parser = Nokogiri::XML::SAX::Parser.new(list_parser)
85
+ parser.parse(body)
86
+
87
+ list_parser
88
+ end
89
+ end
@@ -0,0 +1,56 @@
1
+ require 'nokogiri'
2
+
3
+ class Yandex::Disk::Client::Request::Space
4
+ BODY = '<D:propfind xmlns:D="DAV:">
5
+ <D:prop>
6
+ <D:quota-available-bytes/>
7
+ <D:quota-used-bytes/>
8
+ </D:prop>
9
+ </D:propfind>'
10
+ HEADERS = {
11
+ :Depth => 0
12
+ }
13
+
14
+ def initialize http
15
+ @http = http
16
+ end
17
+
18
+ def perform
19
+ response = @http.run_request :propfind, '/', BODY, HEADERS
20
+ parse_result = parse(response.body)
21
+ {
22
+ :quota_available_bytes => parse_result.quota_available_bytes,
23
+ :quota_used_bytes => parse_result.quota_used_bytes
24
+ }
25
+ end
26
+
27
+
28
+ private
29
+
30
+ class AttriutesParser < Nokogiri::XML::SAX::Document
31
+ attr_reader :quota_available_bytes, :quota_used_bytes
32
+
33
+ def start_element name, attributes = []
34
+ case name
35
+ when 'd:quota-used-bytes'
36
+ @is_quota_used_bytes = true
37
+ when 'd:quota-available-bytes'
38
+ @is_quota_available_bytes = true
39
+ end
40
+ end
41
+
42
+ def characters string
43
+ @quota_used_bytes = string.to_i if @is_quota_used_bytes
44
+ @quota_available_bytes = string.to_i if @is_quota_available_bytes
45
+ end
46
+ end
47
+
48
+ def parse body
49
+ attributes_parser = AttriutesParser.new
50
+
51
+ parser = Nokogiri::XML::SAX::Parser.new(attributes_parser)
52
+ parser.parse(body)
53
+
54
+ attributes_parser
55
+ end
56
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Yandex
4
4
  module Disk
5
- VERSION = "0.0.4"
5
+ VERSION = "0.0.5"
6
6
  end
7
7
  end
@@ -6,8 +6,8 @@ require 'yandex/disk/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "yandex-disk"
8
8
  spec.version = Yandex::Disk::VERSION
9
- spec.authors = ["Yury Korolev"]
10
- spec.email = ["yurykorolev@me.com"]
9
+ spec.authors = ["Yury Korolev", "Alexandr Borisov"]
10
+ spec.email = ["yurykorolev@me.com", "aishek@gmail.com"]
11
11
  spec.description = %q{Ruby client for Yandex.Disk}
12
12
  spec.summary = %q{Ruby client for Yandex.Disk with backup gem support}
13
13
  spec.homepage = "https://github.com/anjlab/yandex-disk"
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency('faraday', '~> 0.8')
22
+ spec.add_dependency('nokogiri', '~> 1.6.0')
22
23
  spec.add_dependency('faraday_middleware', '~> 0.9.0')
23
24
  spec.add_dependency('excon', '>= 0.16')
24
25
 
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yandex-disk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yury Korolev
8
+ - Alexandr Borisov
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-08-28 00:00:00.000000000 Z
12
+ date: 2013-10-28 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: faraday
@@ -24,6 +25,20 @@ dependencies:
24
25
  - - ~>
25
26
  - !ruby/object:Gem::Version
26
27
  version: '0.8'
28
+ - !ruby/object:Gem::Dependency
29
+ name: nokogiri
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 1.6.0
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: 1.6.0
27
42
  - !ruby/object:Gem::Dependency
28
43
  name: faraday_middleware
29
44
  requirement: !ruby/object:Gem::Requirement
@@ -83,6 +98,7 @@ dependencies:
83
98
  description: Ruby client for Yandex.Disk
84
99
  email:
85
100
  - yurykorolev@me.com
101
+ - aishek@gmail.com
86
102
  executables: []
87
103
  extensions: []
88
104
  extra_rdoc_files: []
@@ -95,6 +111,9 @@ files:
95
111
  - lib/yandex/disk.rb
96
112
  - lib/yandex/disk/backup/storage.rb
97
113
  - lib/yandex/disk/client.rb
114
+ - lib/yandex/disk/client/request.rb
115
+ - lib/yandex/disk/client/request/list.rb
116
+ - lib/yandex/disk/client/request/space.rb
98
117
  - lib/yandex/disk/version.rb
99
118
  - test/yandex_dist_test.rb
100
119
  - yandex-disk.gemspec