bfs-ftp 0.7.5 → 0.8.3

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: e82797725ebe072d7a7d384baaf2409ad28c14a12e01e5dcf93fc43f611db082
4
- data.tar.gz: fa949c1d80de980559ac17cd05d103a7b226e02b650a64b81a949fc7bc83fbad
3
+ metadata.gz: f926cbf5d1e11566b003f431781d2a7724619245d3cb6f65a35f74db0a1c1c86
4
+ data.tar.gz: a2db0fcadc0b559053dd92cfa48980ea94949a5aa2d1b66316042cbdadc10b40
5
5
  SHA512:
6
- metadata.gz: 07a83b8967eb478a2b81a13bf369e6be61b8c921baa1a773e2a4132a0e73968ec2c21be07be0acce6d7cf04c1140ba9ca00e0073de9823faebb3c7a0ab074d5b
7
- data.tar.gz: fe4f046c10dcf18e2f657d1b6b780e555b99e9fc6db252bd158547ca6fb43f490180184a729d25365d8df769ad7c63d090b9c590a38f9c9609e5934b6e2d75fa
6
+ metadata.gz: a14a4f793f59f403d7562301015c3d92505c06e7d76eb98d3a0bf661f8a8108d8aaacf7a0948f728c10366b57b57928f5029f06a09368734addd04f6f0881f5a
7
+ data.tar.gz: c769992cb97bcdac23ad2e2669eefab10e274f170fc666f34b4a5e3efc7bcb62fc3181cbd6eb520589bc652ac776cf70e7242b6a3af4eabfd59f177794e57f23
@@ -31,16 +31,22 @@ module BFS
31
31
 
32
32
  # Lists the contents of a bucket using a glob pattern
33
33
  def ls(pattern = '**/*', **_opts)
34
- dir = pattern[%r{^[^*?\{\}\[\]]+/}]
35
- dir&.chomp!('/')
36
-
37
34
  Enumerator.new do |y|
38
- glob(dir) do |path|
35
+ walk(pattern) do |path, _|
39
36
  y << path if File.fnmatch?(pattern, path, File::FNM_PATHNAME)
40
37
  end
41
38
  end
42
39
  end
43
40
 
41
+ # Iterates over the contents of a bucket using a glob pattern
42
+ def glob(pattern = '**/*', **_opts)
43
+ Enumerator.new do |y|
44
+ walk(pattern) do |path, entry|
45
+ y << file_info(path, entry) if File.fnmatch?(pattern, path, File::FNM_PATHNAME)
46
+ end
47
+ end
48
+ end
49
+
44
50
  # Info returns the object info
45
51
  def info(path, **_opts)
46
52
  path = norm_path(path)
@@ -52,7 +58,7 @@ module BFS
52
58
  # Creates a new file and opens it for writing
53
59
  def create(path, encoding: self.encoding, perm: self.perm, **_opts, &block)
54
60
  path = norm_path(path)
55
- BFS::TempWriter.new(path, encoding: encoding, perm: perm) do |t|
61
+ BFS::Writer.new(path, encoding: encoding, perm: perm) do |t|
56
62
  mkdir_p File.dirname(path)
57
63
  @client.put(t, path)
58
64
  end.perform(&block)
@@ -84,14 +90,26 @@ module BFS
84
90
 
85
91
  private
86
92
 
87
- def glob(dir, &block)
88
- @client.ls(dir || '.') do |e|
89
- entry = Net::FTP::List.parse(e)
93
+ def file_info(path, entry)
94
+ BFS::FileInfo.new(path: path, size: entry.filesize, mtime: entry.mtime)
95
+ end
96
+
97
+ def walk(pattern, &block)
98
+ dir = pattern[%r{^[^*?\{\}\[\]]+/}]
99
+ dir&.chomp!('/')
100
+ walk_r(dir, &block)
101
+ end
102
+
103
+ def walk_r(dir, &block)
104
+ entries = @client.list(dir || '.')
105
+ entries.each do |ent|
106
+ entry = Net::FTP::List.parse(ent)
90
107
  if entry.dir?
91
108
  subdir = [dir, entry.basename].compact.join('/')
92
- glob subdir, &block
109
+ walk_r(subdir, &block)
93
110
  elsif entry.file?
94
- yield [dir, entry.basename].compact.join('/')
111
+ path = [dir, entry.basename].compact.join('/')
112
+ yield(path, entry)
95
113
  end
96
114
  end
97
115
  end
@@ -1,16 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
- sandbox = { host: '127.0.0.1', port: 7021, username: 'ftpuser', password: 'ftppass' }.freeze
4
-
5
3
  RSpec.describe BFS::Bucket::FTP, ftp: true do
6
- subject { described_class.new sandbox[:host], **sandbox.merge(prefix: SecureRandom.uuid) }
7
- after { subject.close }
4
+ subject { described_class.new hostname, **conn_opts }
5
+
6
+ let(:hostname) { '127.0.0.1' }
7
+ let(:conn_opts) { { port: 7021, username: 'ftpuser', password: 'ftppass', prefix: SecureRandom.uuid } }
8
+
9
+ after { subject.close }
8
10
 
9
11
  it_behaves_like 'a bucket',
10
12
  content_type: false,
11
13
  metadata: false
12
14
 
13
- it 'should resolve from URL' do
15
+ it 'resolves from URL' do
14
16
  bucket = BFS.resolve('ftp://ftpuser:ftppass@127.0.0.1:7021')
15
17
  expect(bucket).to be_instance_of(described_class)
16
18
  expect(bucket.instance_variable_get(:@client).pwd).to eq('/ftp/ftpuser')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bfs-ftp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.5
4
+ version: 0.8.3
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-11-02 00:00:00.000000000 Z
11
+ date: 2021-05-27 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.7.5
19
+ version: 0.8.3
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.7.5
26
+ version: 0.8.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: net-ftp-list
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.2
70
+ rubygems_version: 3.2.15
71
71
  signing_key:
72
72
  specification_version: 4
73
73
  summary: FTP adapter for bfs