backblaze 0.2.0 → 0.2.1.pre.beta
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.
- checksums.yaml +4 -4
- data/backblaze.gemspec +2 -0
- data/lib/backblaze/b2.rb +3 -0
- data/lib/backblaze/b2/base.rb +14 -3
- data/lib/backblaze/b2/bucket.rb +10 -0
- data/lib/backblaze/b2/file.rb +90 -2
- data/lib/backblaze/b2/file_version.rb +4 -0
- data/lib/backblaze/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ee1b40ead4140aa561944ed21649e6f18bedd92
|
4
|
+
data.tar.gz: 3ce3761e93d95621c2f91b00314b76d31d97514b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a81b1a91b36f177ca9a9d5db6fd2ef1746dba735dc452ebc6a140f8af516967a7ec41a2cf805878c430fcae4419a6bec2d433d0df86f596eb405fae6695f3a72
|
7
|
+
data.tar.gz: ed2809cd93d183382c6b81b32f8d2b1d19025f1f8be947aac4c4f1cdbe62cebf84771f30c798235c63a324f5d588567dc77a7f761d38f5c29377c1c8fa85b2f3
|
data/backblaze.gemspec
CHANGED
data/lib/backblaze/b2.rb
CHANGED
data/lib/backblaze/b2/base.rb
CHANGED
@@ -40,7 +40,7 @@ module Backblaze::B2
|
|
40
40
|
files.compact
|
41
41
|
end
|
42
42
|
|
43
|
-
def file_list(limit:, retreived:, first_file:, start_field:, bucket_id:, file_name: nil)
|
43
|
+
def file_list(limit:, retreived:, first_file:, start_field:, bucket_id:, file_name: nil, first: true)
|
44
44
|
params = {'bucketId'.freeze => bucket_id}
|
45
45
|
if limit == -1
|
46
46
|
params['maxFileCount'.freeze] = 1000
|
@@ -51,19 +51,29 @@ module Backblaze::B2
|
|
51
51
|
else
|
52
52
|
return []
|
53
53
|
end
|
54
|
-
|
54
|
+
if first_file.nil?
|
55
|
+
if file_name && start_field == 'startFileId' && first
|
56
|
+
params['startFileName'] = file_name
|
57
|
+
end
|
58
|
+
else
|
55
59
|
params[start_field] = first_file
|
56
60
|
end
|
57
61
|
|
62
|
+
p params
|
63
|
+
|
58
64
|
response = post("/b2_list_file_#{start_field == 'startFileName' ? 'names' : 'versions'}", body: params.to_json)
|
59
65
|
|
66
|
+
raise Backblaze::FileError.new(response) unless response.code == 200
|
67
|
+
|
60
68
|
files = response['files'.freeze]
|
61
69
|
halt = false
|
62
70
|
files.map! do |f|
|
63
71
|
if halt
|
72
|
+
p f
|
64
73
|
nil
|
65
74
|
else
|
66
75
|
ret = Hash[f.map{|k,v| [Backblaze::Utils.underscore(k).to_sym, v]}]
|
76
|
+
p ret
|
67
77
|
if file_name && file_name != ret[:file_name]
|
68
78
|
halt = true
|
69
79
|
end
|
@@ -85,7 +95,8 @@ module Backblaze::B2
|
|
85
95
|
limit: limit,
|
86
96
|
retreived: retreived,
|
87
97
|
start_field: start_field,
|
88
|
-
bucket_id: bucket_id
|
98
|
+
bucket_id: bucket_id,
|
99
|
+
first: false
|
89
100
|
)
|
90
101
|
else
|
91
102
|
files
|
data/lib/backblaze/b2/bucket.rb
CHANGED
@@ -105,6 +105,10 @@ module Backblaze::B2
|
|
105
105
|
files
|
106
106
|
end
|
107
107
|
|
108
|
+
def upload_url
|
109
|
+
self.class.upload_url(bucket_id: bucket_id)
|
110
|
+
end
|
111
|
+
|
108
112
|
class << self
|
109
113
|
##
|
110
114
|
# Create a bucket
|
@@ -128,6 +132,12 @@ module Backblaze::B2
|
|
128
132
|
new(params)
|
129
133
|
end
|
130
134
|
|
135
|
+
def upload_url(bucket_id:)
|
136
|
+
response = post('/b2_get_upload_url', body: {bucketId: bucket_id}.to_json)
|
137
|
+
raise Backblaze::BucketError.new(response) unless response.code / 100 == 2
|
138
|
+
{url: response['uploadUrl'], token: response['authorizationToken']}
|
139
|
+
end
|
140
|
+
|
131
141
|
##
|
132
142
|
# List buckets for account
|
133
143
|
# @return [Array<Backblaze::Bucket>] buckets for this account
|
data/lib/backblaze/b2/file.rb
CHANGED
@@ -12,8 +12,88 @@ module Backblaze::B2
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
class << self
|
16
|
+
def create(data:, bucket:, name: nil, base_name: '', content_type: 'b2/x-auto', info: {})
|
17
|
+
raise ArgumentError.new('data must not be nil') if data.nil?
|
18
|
+
|
19
|
+
case bucket
|
20
|
+
when String
|
21
|
+
upload_url = Bucket.upload_url(bucket_id: bucket)
|
22
|
+
when Bucket
|
23
|
+
upload_url = bucket.upload_url
|
24
|
+
else
|
25
|
+
raise ArgumentError.new('You must pass a bucket')
|
26
|
+
end
|
27
|
+
|
28
|
+
close_file = false
|
29
|
+
case data
|
30
|
+
when String
|
31
|
+
data.force_encoding('ASCII-8BIT')
|
32
|
+
raise ArgumentError.new('Must provide a file name for data') if name.nil?
|
33
|
+
when ::File, Tempfile
|
34
|
+
data.binmode
|
35
|
+
data.rewind
|
36
|
+
if name.nil?
|
37
|
+
raise ArgumentError.new('Must provide a file name with Tempfiles') if data.is_a? Tempfile
|
38
|
+
name = ::File.basename(data)
|
39
|
+
end
|
40
|
+
else
|
41
|
+
raise ArgumentError.new('Must provide a file name with streams') if name.nil?
|
42
|
+
if data.respond_to?(:read)
|
43
|
+
close_file = true
|
44
|
+
temp = Tempfile.new(name)
|
45
|
+
temp.binmode
|
46
|
+
IO.copy_stream(data, temp)
|
47
|
+
data = temp
|
48
|
+
data.rewind
|
49
|
+
else
|
50
|
+
raise ArgumentError.new('Unsuitable data type. Please read the docs.')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
uri = URI(upload_url[:url])
|
55
|
+
req = Net::HTTP::Post.new(uri)
|
56
|
+
|
57
|
+
req.add_field("Authorization", upload_url[:token])
|
58
|
+
req.add_field("X-Bz-File-Name", "#{base_name}/#{name}".tr_s('/', '/').sub(/\A\//, ''))
|
59
|
+
req.add_field("Content-Type", content_type)
|
60
|
+
req.add_field("Content-Length", data.size)
|
61
|
+
|
62
|
+
digest = Digest::SHA1.new
|
63
|
+
if data.is_a? String
|
64
|
+
digest.update(data)
|
65
|
+
req.body = data
|
66
|
+
else
|
67
|
+
digest.file(data)
|
68
|
+
data.rewind
|
69
|
+
req.body_stream = data
|
70
|
+
end
|
71
|
+
|
72
|
+
req.add_field("X-Bz-Content-Sha1", digest)
|
73
|
+
|
74
|
+
info.first(10).map do |key, value|
|
75
|
+
req.add_field("X-Bz-Info-#{URI.encode(key)}", value)
|
76
|
+
end
|
77
|
+
|
78
|
+
http = Net::HTTP.new(req.uri.host, req.uri.port)
|
79
|
+
http.use_ssl = (req.uri.scheme == 'https')
|
80
|
+
res = http.start {|make| make.request(req)}
|
81
|
+
|
82
|
+
response = JSON.parse(res.body)
|
83
|
+
|
84
|
+
raise Backblaze::FileError.new(response) unless res.code.to_i == 200
|
85
|
+
|
86
|
+
params = {
|
87
|
+
file_name: response['fileName'],
|
88
|
+
bucket_id: response['bucketId'],
|
89
|
+
size: response['contentLength'],
|
90
|
+
file_id: response['fileId'],
|
91
|
+
upload_timestamp: Time.now.to_i * 1000,
|
92
|
+
action: 'upload'
|
93
|
+
}
|
94
|
+
|
95
|
+
File.new(params)
|
96
|
+
end
|
17
97
|
end
|
18
98
|
|
19
99
|
def file_name
|
@@ -29,6 +109,14 @@ module Backblaze::B2
|
|
29
109
|
@versions
|
30
110
|
end
|
31
111
|
|
112
|
+
def download_url(bucket:)
|
113
|
+
"#{Backblaze::B2.download_url}/file/#{bucket.is_a?(Bucket) ? bucket.name : bucket}/#{file_name}"
|
114
|
+
end
|
115
|
+
|
116
|
+
def file_id_download_url
|
117
|
+
latest.download_url
|
118
|
+
end
|
119
|
+
|
32
120
|
def latest
|
33
121
|
@versions.first
|
34
122
|
end
|
@@ -20,6 +20,10 @@ module Backblaze::B2
|
|
20
20
|
@get_info
|
21
21
|
end
|
22
22
|
|
23
|
+
def download_url
|
24
|
+
"#{Backblaze::B2.download_url}#{Backblaze::B2.api_path}b2_download_file_by_id?fileId=#{file_id}"
|
25
|
+
end
|
26
|
+
|
23
27
|
def destroy!
|
24
28
|
response = post('/b2_delete_file_version', body: {fileName: file_name, fileId: file_id}.to_json)
|
25
29
|
raise Backblaze::FileError.new(response) unless response.code == 200
|
data/lib/backblaze/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backblaze
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1.pre.beta
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Winston Durand
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -148,12 +148,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
148
148
|
requirements:
|
149
149
|
- - ">="
|
150
150
|
- !ruby/object:Gem::Version
|
151
|
-
version:
|
151
|
+
version: 2.1.0
|
152
152
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
153
|
requirements:
|
154
|
-
- - "
|
154
|
+
- - ">"
|
155
155
|
- !ruby/object:Gem::Version
|
156
|
-
version:
|
156
|
+
version: 1.3.1
|
157
157
|
requirements: []
|
158
158
|
rubyforge_project:
|
159
159
|
rubygems_version: 2.4.5
|