bfs-ftp 0.7.5 → 0.8.3

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: 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