bfs 0.7.4 → 0.7.5

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: c790272a036559149178dadb5932e424a90bbc535f842a298516457051912310
4
- data.tar.gz: 9f673793872f84f34f4cd95fb396cac88d44d7fc338ac20888149303584790f1
3
+ metadata.gz: 61e0b8f8c56a60a7d3b933aacce3e476d400389bfa991b14b3adddf3af667108
4
+ data.tar.gz: ab0da145b04da234825c0c418a5e5dc0fc3028627431072df04c5f2f7f45b652
5
5
  SHA512:
6
- metadata.gz: 53547ee9f745695a72196d8eb3d9b09054ea2d6cc106993bce0fe22d563e31cb67f450edc28424de2d9aa6b7f72126235dcd5a31c179b5c15c27ed739da21214
7
- data.tar.gz: b6e0927840f82b058d2662e8b29e33fe9a6697b4219cf451c0ce49cb778e79070ce684ab8bc37e4f9dd2756898275fa872cd29d3dd20e175487649a216794f5b
6
+ metadata.gz: 4ba809e64dfdab6a918a807323acffd3228783d5c4c6a3ecc9712011ca742a2510e830fe7c2cbf73f2b0d900bdd9d5a9386e133c16ba3170b6be972366db0405
7
+ data.tar.gz: 1999418b45ed5c090b7bf578f9ea6c8964eb49538b98068c6eff583480b1682d63ef61a04a3f9183ba54f027e9bd876b618d5297795c469c43127474e808449d
@@ -42,14 +42,9 @@ module BFS
42
42
  full = @root.join(norm_path(path))
43
43
  FileUtils.mkdir_p(full.dirname.to_s)
44
44
 
45
- temp = BFS::TempWriter.new(full, encoding: encoding, perm: perm) {|t| FileUtils.mv t, full.to_s }
46
- return temp unless block
47
-
48
- begin
49
- yield temp
50
- ensure
51
- temp.close
52
- end
45
+ BFS::TempWriter.new(full, encoding: encoding, perm: perm) do |temp|
46
+ FileUtils.mv temp, full.to_s
47
+ end.perform(&block)
53
48
  end
54
49
 
55
50
  # Opens an existing file for reading
@@ -7,6 +7,36 @@ module BFS
7
7
  class InMem < Abstract
8
8
  Entry = Struct.new(:io, :mtime, :content_type, :metadata)
9
9
 
10
+ class Writer < DelegateClass(::StringIO)
11
+ def initialize(encoding:, &closer)
12
+ @closer = closer
13
+
14
+ sio = StringIO.new
15
+ sio.set_encoding(encoding)
16
+ super sio
17
+ end
18
+
19
+ def close
20
+ close!
21
+ @closer&.call(self)
22
+ end
23
+
24
+ def close!
25
+ __getobj__.close
26
+ end
27
+
28
+ def perform(&block)
29
+ return self unless block
30
+
31
+ begin
32
+ yield self
33
+ close
34
+ ensure
35
+ close!
36
+ end
37
+ end
38
+ end
39
+
10
40
  def initialize(**opts)
11
41
  super(**opts.dup)
12
42
  @files = {}
@@ -43,18 +73,9 @@ module BFS
43
73
  # @option opts [String] :content_type Custom content type.
44
74
  # @option opts [Hash] :metadata Metadata key-value pairs.
45
75
  def create(path, encoding: self.encoding, content_type: nil, metadata: nil, **_opts, &block)
46
- io = StringIO.new
47
- io.set_encoding(encoding)
48
-
49
- entry = Entry.new(io, Time.now, content_type, norm_meta(metadata))
50
- @files[norm_path(path)] = entry
51
- return io unless block
52
-
53
- begin
54
- yield(io)
55
- ensure
56
- io.close
57
- end
76
+ Writer.new(encoding: encoding) do |wio|
77
+ @files[norm_path(path)] = Entry.new(wio, Time.now, content_type, norm_meta(metadata))
78
+ end.perform(&block)
58
79
  end
59
80
 
60
81
  # Opens an existing file for reading
@@ -4,19 +4,33 @@ require 'delegate'
4
4
  module BFS
5
5
  class TempWriter < DelegateClass(::Tempfile)
6
6
  def initialize(name, tempdir: nil, perm: nil, **opts, &closer)
7
- @closer = closer
8
- @tempfile = ::Tempfile.new(File.basename(name.to_s), tempdir, **opts)
9
- @tempfile.chmod(perm) if perm
10
- super @tempfile
7
+ @closer = closer
8
+
9
+ tempfile = ::Tempfile.new(File.basename(name.to_s), tempdir, **opts)
10
+ tempfile.chmod(perm) if perm
11
+ super tempfile
12
+ end
13
+
14
+ def perform(&block)
15
+ return self unless block
16
+
17
+ begin
18
+ yield self
19
+ close
20
+ ensure
21
+ close!
22
+ end
11
23
  end
12
24
 
13
25
  def close
14
26
  return if closed?
15
27
 
16
- path = @tempfile.path
17
- @tempfile.close
18
- @closer&.call(path)
19
- @tempfile.unlink
28
+ tempfile = __getobj__
29
+ tempfile.close
30
+ @closer&.call(tempfile.path)
31
+ true
32
+ ensure
33
+ tempfile.unlink
20
34
  end
21
35
  end
22
36
  end
@@ -19,4 +19,9 @@ RSpec.describe BFS::TempWriter, core: true do
19
19
  expect(closer).to receive(:call).with(subject.path)
20
20
  expect(subject.close).to be_truthy
21
21
  end
22
+
23
+ it 'may skip closer block' do
24
+ expect(closer).not_to receive(:call)
25
+ expect(subject.close!).to be_truthy
26
+ end
22
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bfs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.4
4
+ version: 0.7.5
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-10-26 00:00:00.000000000 Z
11
+ date: 2020-11-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Minimalist abstraction for bucket storage
14
14
  email: dimitrij@blacksquaremedia.com