attachie 1.1.1 → 1.1.2

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: f21f7eb60467e9fb640626ad3633013e73166d975565afad29a761c8847bb83c
4
- data.tar.gz: fb06c69f95ecd1264f13c7d162ab415c94e356deb2b771e7d766852da86de83d
3
+ metadata.gz: 1e46dfdb8f2b5d9b94594ca38b5d72b3164a7659ce165f6e5f328ee72275ee5a
4
+ data.tar.gz: d88df51754ce79dc3f716b0e5ccbd7fc4853bde2b92dbf75a85bc65dbb5b83ae
5
5
  SHA512:
6
- metadata.gz: 0f5cd5094aad872ccda17615f1aa2e0c6f582937a0be6f54b45e1ff986f04fad148224d4415ecefcdee4a04a6638ec44031b7dd5167eac6c4f13c21ed7ca317c
7
- data.tar.gz: 54ea0ef551453b1335a5267f04c9b43c0fa34d624a1923c10dc946385e6cba09554f4d628cb5b7fe5110c54aad730d4dc9d08c2673caf68d8ffdd0a0c520e7ce
6
+ metadata.gz: 8f92ec31c86801736cdc8cd6c2cd7265ed6054d48e796d3961c00490b1e8a79cdfaeefddc4746c2d3d714e0659f95ab0e1873331b3d6835acf0eaf47ed9dca4f
7
+ data.tar.gz: 2495f460854161a8e241c67babb8bd7eb72bf63bbaabd04b867a195e106207e6fbd5701c687acf8909bac241adecc25e32e571660d904ccebc32b3edd287d327
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.1.2
4
+ ### Fixed
5
+ * Make `FakeDriver` thread-safe
6
+ * Sort objects in `FakeDriver#list` by key
7
+
3
8
  ## 1.1.1
4
9
  ### Fixed
5
10
  * Use `mkdir_p` in `FileDriver#download`
@@ -32,22 +32,28 @@ module Attachie
32
32
  end
33
33
 
34
34
  class FakeDriver
35
+ include MonitorMixin
36
+
35
37
  class ItemNotFound < StandardError; end
36
38
 
37
39
  def list(bucket, prefix: nil)
38
40
  return enum_for(:list, bucket, prefix: prefix) unless block_given?
39
41
 
40
- objects(bucket).dup.each do |key, _|
41
- yield key if prefix.nil? || key.start_with?(prefix)
42
+ synchronize do
43
+ objects(bucket).sort { |a, b| a[0] <=> b[0] }.each do |key, _|
44
+ yield key if prefix.nil? || key.start_with?(prefix)
45
+ end
42
46
  end
43
47
  end
44
48
 
45
49
  def info(name, bucket)
46
- {
47
- last_modified: nil,
48
- content_length: objects(bucket)[name].size,
49
- content_type: MIME::Types.of(name).first&.to_s
50
- }
50
+ synchronize do
51
+ {
52
+ last_modified: nil,
53
+ content_length: objects(bucket)[name].size,
54
+ content_type: MIME::Types.of(name).first&.to_s
55
+ }
56
+ end
51
57
  end
52
58
 
53
59
  def presigned_post(name, bucket, options = {})
@@ -55,25 +61,35 @@ module Attachie
55
61
  end
56
62
 
57
63
  def store(name, data_or_io, bucket, options = {})
58
- objects(bucket)[name] = data_or_io.respond_to?(:read) ? data_or_io.read : data_or_io
64
+ synchronize do
65
+ objects(bucket)[name] = data_or_io.respond_to?(:read) ? data_or_io.read : data_or_io
66
+ end
59
67
  end
60
68
 
61
69
  def store_multipart(name, bucket, options = {}, &block)
62
- objects(bucket)[name] = FakeMultipartUpload.new(name, bucket, options, &block).data
70
+ synchronize do
71
+ objects(bucket)[name] = FakeMultipartUpload.new(name, bucket, options, &block).data
72
+ end
63
73
  end
64
74
 
65
75
  def exists?(name, bucket)
66
- objects(bucket).key?(name)
76
+ synchronize do
77
+ objects(bucket).key?(name)
78
+ end
67
79
  end
68
80
 
69
81
  def delete(name, bucket)
70
- objects(bucket).delete(name)
82
+ synchronize do
83
+ objects(bucket).delete(name)
84
+ end
71
85
  end
72
86
 
73
87
  def value(name, bucket)
74
- raise(ItemNotFound) unless objects(bucket).key?(name)
88
+ synchronize do
89
+ raise(ItemNotFound) unless objects(bucket).key?(name)
75
90
 
76
- objects(bucket)[name]
91
+ objects(bucket)[name]
92
+ end
77
93
  end
78
94
 
79
95
  def download(name, bucket, path)
@@ -87,14 +103,18 @@ module Attachie
87
103
  end
88
104
 
89
105
  def flush
90
- @objects = {}
106
+ synchronize do
107
+ @objects = {}
108
+ end
91
109
  end
92
110
 
93
111
  private
94
112
 
95
113
  def objects(bucket)
96
- @objects ||= {}
97
- @objects[bucket] ||= {}
114
+ synchronize do
115
+ @objects ||= {}
116
+ @objects[bucket] ||= {}
117
+ end
98
118
  end
99
119
  end
100
120
  end
@@ -1,3 +1,3 @@
1
1
  module Attachie
2
- VERSION = "1.1.1"
2
+ VERSION = "1.1.2"
3
3
  end
@@ -21,6 +21,14 @@ RSpec.describe Attachie::FakeDriver do
21
21
 
22
22
  expect(driver.list("bucket1", prefix: "object").to_a).to eq(["object1", "object2"])
23
23
  end
24
+
25
+ it "sorts the objects by key" do
26
+ driver.store("object2", "blob", "bucket")
27
+ driver.store("object1", "blob", "bucket")
28
+ driver.store("object3", "blob", "bucket")
29
+
30
+ expect(driver.list("bucket").to_a).to eq(["object1", "object2", "object3"])
31
+ end
24
32
  end
25
33
 
26
34
  describe "#store" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attachie
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Vetter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-01 00:00:00.000000000 Z
11
+ date: 2021-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-s3