bfs-gs 0.3.7 → 0.4.0
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/bfs-gs.gemspec +2 -2
- data/lib/bfs/bucket/gs.rb +13 -6
- data/spec/bfs/bucket/gs_spec.rb +7 -1
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 006a502518adf673cb33da4d3ce62db552755fea4a1756e6c26ab3247f64767e
|
4
|
+
data.tar.gz: 1c1a8266976872c3d658afbb3c44203a3e49e3c03e519a1001b455bcba1e6ee6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd74e8cef26550517c999dfbb4402a2138e977f73b7935b9260e019bb0e633dd1687b618c0803eee24bef659d499d1a322da4b29b1b071542e216392bc407d0a
|
7
|
+
data.tar.gz: 7cc34c97ee1fae097db90698ea4f66fc99f73404065f154104a9249b7510d59215d29d18137421e69965d69cb19fb6793980f4ab813ab30e1d36f918a8ef85b9
|
data/bfs-gs.gemspec
CHANGED
@@ -15,8 +15,8 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.files = `git ls-files`.split("\n")
|
16
16
|
s.test_files = `git ls-files -- spec/*`.split("\n")
|
17
17
|
s.require_paths = ['lib']
|
18
|
-
s.required_ruby_version = '>= 2.
|
18
|
+
s.required_ruby_version = '>= 2.4.0'
|
19
19
|
|
20
20
|
s.add_dependency 'bfs', s.version
|
21
|
-
s.add_dependency 'google-cloud-storage'
|
21
|
+
s.add_dependency 'google-cloud-storage', '~> 1.18'
|
22
22
|
end
|
data/lib/bfs/bucket/gs.rb
CHANGED
@@ -12,7 +12,7 @@ module BFS
|
|
12
12
|
#
|
13
13
|
# @param [String] name the bucket name.
|
14
14
|
# @param [Hash] opts options.
|
15
|
-
# @option opts [String] :project_id project ID. Defaults to GCP_PROJECT env var.
|
15
|
+
# @option opts [String] :project_id project ID. Defaults to GCP_PROJECT env var.
|
16
16
|
# @option opts [String, Hash, Google::Auth::Credentials] :credentials
|
17
17
|
# the path to the keyfile as a String, the contents of the keyfile as a Hash, or a Google::Auth::Credentials object.
|
18
18
|
# @option opts [String] :prefix custom namespace within the bucket
|
@@ -20,12 +20,14 @@ module BFS
|
|
20
20
|
# @option opts [Integer] :timeout request timeout, in seconds.
|
21
21
|
# @option opts [String] :acl set the default ACL.
|
22
22
|
# @option opts [Google::Cloud::Storage] :client custom client.
|
23
|
+
# @option opts [String] :encoding default encoding to use, default: 'binary'
|
23
24
|
def initialize(name, opts={})
|
24
25
|
opts = opts.dup
|
25
26
|
opts.keys.each do |key|
|
26
27
|
val = opts.delete(key)
|
27
28
|
opts[key.to_sym] = val unless val.nil?
|
28
29
|
end
|
30
|
+
super(opts)
|
29
31
|
|
30
32
|
@prefix = opts.delete(:prefix)
|
31
33
|
acl = opts.delete(:acl)
|
@@ -63,8 +65,9 @@ module BFS
|
|
63
65
|
# Creates a new file and opens it for writing
|
64
66
|
def create(path, opts={}, &block)
|
65
67
|
path = full_path(path)
|
66
|
-
|
67
|
-
|
68
|
+
enc = opts.delete(:encoding) || @encoding
|
69
|
+
temp = BFS::TempWriter.new(path, encoding: enc) do |t|
|
70
|
+
File.open(t, encoding: enc) do |file|
|
68
71
|
@bucket.create_file(file, path, opts)
|
69
72
|
end
|
70
73
|
end
|
@@ -80,21 +83,22 @@ module BFS
|
|
80
83
|
# Opens an existing file for reading
|
81
84
|
def open(path, opts={}, &block)
|
82
85
|
path = full_path(path)
|
86
|
+
enc = opts.delete(:encoding) || @encoding
|
83
87
|
file = @bucket.file(path)
|
84
88
|
raise BFS::FileNotFound, trim_prefix(path) unless file
|
85
89
|
|
86
|
-
temp = Tempfile.new(File.basename(path),
|
90
|
+
temp = Tempfile.new(File.basename(path), encoding: enc)
|
87
91
|
temp.close
|
88
92
|
file.download temp.path, opts
|
89
93
|
|
90
|
-
File.open(temp.path,
|
94
|
+
File.open(temp.path, encoding: enc, &block)
|
91
95
|
end
|
92
96
|
|
93
97
|
# Deletes a file.
|
94
98
|
def rm(path, opts={})
|
95
99
|
path = full_path(path)
|
96
100
|
file = @bucket.file(path)
|
97
|
-
file
|
101
|
+
file&.delete(opts)
|
98
102
|
end
|
99
103
|
|
100
104
|
# Copies a file.
|
@@ -111,8 +115,11 @@ end
|
|
111
115
|
|
112
116
|
BFS.register('gs') do |url|
|
113
117
|
params = CGI.parse(url.query.to_s)
|
118
|
+
prefix = BFS.norm_path(params.key?('prefix') ? params['prefix'].first : url.path)
|
119
|
+
prefix = nil if prefix.empty?
|
114
120
|
|
115
121
|
BFS::Bucket::GS.new url.host,
|
122
|
+
prefix: prefix,
|
116
123
|
project_id: params.key?('project_id') ? params['project_id'].first : nil,
|
117
124
|
credentials: params.key?('credentials') ? params['credentials'].first : nil,
|
118
125
|
acl: params.key?('acl') ? params['acl'].first : nil,
|
data/spec/bfs/bucket/gs_spec.rb
CHANGED
@@ -29,9 +29,15 @@ RSpec.describe BFS::Bucket::GS, if: run_spec do
|
|
29
29
|
it_behaves_like 'a bucket'
|
30
30
|
|
31
31
|
it 'should resolve from URL' do
|
32
|
-
bucket = BFS.resolve("gs://#{sandbox[:bucket]}
|
32
|
+
bucket = BFS.resolve("gs://#{sandbox[:bucket]}/?acl=private&project_id=#{sandbox[:project]}")
|
33
33
|
expect(bucket).to be_instance_of(described_class)
|
34
34
|
expect(bucket.name).to eq(sandbox[:bucket])
|
35
|
+
expect(bucket.instance_variable_get(:@prefix)).to be_nil
|
36
|
+
|
37
|
+
bucket = BFS.resolve("gs://#{sandbox[:bucket]}/a/b/")
|
38
|
+
expect(bucket).to be_instance_of(described_class)
|
39
|
+
expect(bucket.name).to eq(sandbox[:bucket])
|
40
|
+
expect(bucket.instance_variable_get(:@prefix)).to eq('a/b')
|
35
41
|
end
|
36
42
|
|
37
43
|
it 'should enumerate over a large number of files' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bfs-gs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dimitrij Denissenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bfs
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.4.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.4.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: google-cloud-storage
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '1.18'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '1.18'
|
41
41
|
description: https://github.com/bsm/bfs.rb
|
42
42
|
email: dimitrij@blacksquaremedia.com
|
43
43
|
executables: []
|
@@ -60,14 +60,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
60
60
|
requirements:
|
61
61
|
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 2.
|
63
|
+
version: 2.4.0
|
64
64
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
requirements: []
|
70
|
-
rubygems_version: 3.0.
|
70
|
+
rubygems_version: 3.0.3
|
71
71
|
signing_key:
|
72
72
|
specification_version: 4
|
73
73
|
summary: GS bucket adapter for bfs
|