bfs-gs 0.8.0 → 0.9.0

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
  SHA256:
3
- metadata.gz: 345994febf6083e1839a95b796da1b86075c831aa320eee9f9fff7ea13974099
4
- data.tar.gz: '096620f7ada887459c5bbd94b46c94c8175523f03f2d47b33880068af3e7b2e2'
3
+ metadata.gz: 6c05921b7f3936aefcd380046b1a398d40530215948615de357bf0d7c0d6e575
4
+ data.tar.gz: 557b1a80b5a11514fb4f0306774480a22033d280d6c721c90e970bb1e1aec708
5
5
  SHA512:
6
- metadata.gz: 7e65dd0c03fbedff21bf049bcd32db8e3e3a55456577cf1e28647ab109dab3e8b2123199b210c97e96e458263672ef1fe55c5c21008cfe5494330e9e2fb4e912
7
- data.tar.gz: cbaf26fa087974a16d84bead6fdb88a99b66c17fc4876fbe7df70cd67ace72ed430345c175419c68fb6321896beddefe9ed15ff3a2d6abcaac2002cf8aad4e1f
6
+ metadata.gz: 0f99769aafab92479689073ddafc7544fe91589964e0de2164acc58dc6dca77235a13712bdba20a5a4ee528901291ae0bf8a846a11ca3d2fb4be6490bf47d891
7
+ data.tar.gz: 0a82c9940d8ed456548abd934d57b826a9beb3a9f73cfb90392ad92a168da164c62eacde0d626b13e6c3d520f37502a003cfb79d61f35666d3583021bf9671b6
data/lib/bfs/bucket/gs.rb CHANGED
@@ -33,14 +33,18 @@ module BFS
33
33
 
34
34
  # Lists the contents of a bucket using a glob pattern
35
35
  def ls(pattern = '**/*', **opts)
36
- prefix = pattern[%r{^[^*?\{\}\[\]]+/}]
37
- prefix = File.join(*[@prefix, prefix].compact) if @prefix
38
- opts = opts.merge(prefix: prefix) if prefix
36
+ Enumerator.new do |acc|
37
+ walk(pattern, **opts) do |name, _|
38
+ acc << name
39
+ end
40
+ end
41
+ end
39
42
 
40
- Enumerator.new do |y|
41
- @bucket.files(**opts).all do |file|
42
- name = trim_prefix(file.name)
43
- y << name if File.fnmatch?(pattern, name, File::FNM_PATHNAME)
43
+ # Iterates over the contents of a bucket using a glob pattern
44
+ def glob(pattern = '**/*', **opts)
45
+ Enumerator.new do |acc|
46
+ walk(pattern, **opts) do |name, file|
47
+ acc << file_info(name, file)
44
48
  end
45
49
  end
46
50
  end
@@ -52,7 +56,7 @@ module BFS
52
56
  raise BFS::FileNotFound, trim_prefix(path) unless file
53
57
 
54
58
  name = trim_prefix(file.name)
55
- BFS::FileInfo.new(path: name, size: file.size, mtime: file.updated_at.to_time, content_type: file.content_type, metadata: norm_meta(file.metadata))
59
+ file_info(name, file)
56
60
  end
57
61
 
58
62
  # Creates a new file and opens it for writing
@@ -94,6 +98,23 @@ module BFS
94
98
 
95
99
  file.copy(full_path(dst), **opts)
96
100
  end
101
+
102
+ private
103
+
104
+ def walk(pattern, **opts)
105
+ prefix = pattern[%r{^[^*?\{\}\[\]]+/}]
106
+ prefix = File.join(*[@prefix, prefix].compact) if @prefix
107
+ opts = opts.merge(prefix: prefix) if prefix
108
+
109
+ @bucket.files(**opts).all do |file|
110
+ name = trim_prefix(file.name)
111
+ yield(name, file) if File.fnmatch?(pattern, name, File::FNM_PATHNAME)
112
+ end
113
+ end
114
+
115
+ def file_info(name, file)
116
+ BFS::FileInfo.new(path: name, size: file.size, mtime: file.updated_at.to_time, content_type: file.content_type, metadata: norm_meta(file.metadata))
117
+ end
97
118
  end
98
119
  end
99
120
  end
@@ -3,26 +3,26 @@ require 'spec_helper'
3
3
  # silence warnings
4
4
  module Google::Auth::CredentialsLoader
5
5
  def warn_if_cloud_sdk_credentials(*); end
6
- module_function :warn_if_cloud_sdk_credentials # rubocop:disable Style/AccessModifierDeclarations
6
+ module_function :warn_if_cloud_sdk_credentials
7
7
  end
8
8
 
9
9
  bucket_name = 'bsm-bfs-unittest'
10
10
 
11
11
  RSpec.describe BFS::Bucket::GS, gs: true do
12
- let(:prefix) { "x/#{SecureRandom.uuid}/" }
13
-
14
12
  subject do
15
13
  described_class.new bucket_name, prefix: prefix
16
14
  end
17
15
 
18
- after :all do
19
- bucket = described_class.new bucket_name, prefix: 'x/'
16
+ let(:prefix) { "x/#{SecureRandom.uuid}/" }
17
+
18
+ after do
19
+ bucket = described_class.new bucket_name, prefix: prefix
20
20
  bucket.ls.each {|name| bucket.rm(name) }
21
21
  end
22
22
 
23
23
  it_behaves_like 'a bucket'
24
24
 
25
- it 'should resolve from URL' do
25
+ it 'resolves from URL' do
26
26
  bucket = BFS.resolve("gs://#{bucket_name}")
27
27
  expect(bucket).to be_instance_of(described_class)
28
28
  expect(bucket.name).to eq(bucket_name)
@@ -36,7 +36,7 @@ RSpec.describe BFS::Bucket::GS, gs: true do
36
36
  bucket.close
37
37
  end
38
38
 
39
- it 'should enumerate over a large number of files' do
39
+ it 'enumerates over a large number of files' do
40
40
  bucket = described_class.new bucket_name, prefix: 'm/'
41
41
  expect(bucket.ls('**/*').count).to eq(2121)
42
42
  bucket.close
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.8.0
4
+ version: 0.9.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: 2020-12-01 00:00:00.000000000 Z
11
+ date: 2021-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bfs
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.8.0
19
+ version: 0.9.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.8.0
26
+ version: 0.9.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: google-cloud-storage
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  requirements: []
70
- rubygems_version: 3.1.4
70
+ rubygems_version: 3.2.15
71
71
  signing_key:
72
72
  specification_version: 4
73
73
  summary: GS bucket adapter for bfs