bfs-gs 0.8.0 → 0.9.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 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