attachie 1.2.1 → 2.0.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 +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/attachie/fake_driver.rb +4 -2
- data/lib/attachie/file_driver.rb +6 -0
- data/lib/attachie/s3_driver.rb +8 -0
- data/lib/attachie/version.rb +1 -1
- data/lib/attachie.rb +6 -4
- data/spec/attachie/fake_driver_spec.rb +18 -0
- data/spec/attachie/file_driver_spec.rb +18 -0
- data/spec/attachie/s3_driver_spec.rb +18 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4dc1a3393421a2accb0c07990ac3375b430fc2476426a0621526455351c7ee4
|
4
|
+
data.tar.gz: 951319408c1cc9d4780d3cdf0431e1867b564e8ae27a948100fa6c2393c07cdb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dcca0e92e21b2acf9ca876a6f38edb4fffc142d117ac365e2bf0f186fb2513beba3fba6dfc4c4fd29f519ff81819a6cb3b9f8eabc9a14bca6ddf466d549de1f4
|
7
|
+
data.tar.gz: a11a61a127abef07278e36f6db19e13e0ce3c12d6412cd91fa85e8aed5569e0cd15df01b543dabe1e5160a954216921ed36d0725d68d4f24960964beeaa1f9a0
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 2.0.0
|
4
|
+
### BREAKING
|
5
|
+
* Wrap `Aws::S3::Errors::NotFound` from `Attachie::S3Driver` and
|
6
|
+
`Errno::ENOENT` from `Attachie::FileDriver` in `Attachie::ItemNotFound`
|
7
|
+
* Change `Attachie::FakeDriver::ItemNotFound` to `Attachie::ItemNotFound`
|
8
|
+
* Make `#delete` always return `true` for all drivers
|
9
|
+
### Added
|
10
|
+
* Added `Attachie::BaseError` as a base for all attachie exceptions
|
11
|
+
|
3
12
|
## 1.2.1
|
4
13
|
### Fixed
|
5
14
|
* Fix regarding `File.exists?` being no longer available in ruby 3.2
|
data/lib/attachie/fake_driver.rb
CHANGED
@@ -34,8 +34,6 @@ module Attachie
|
|
34
34
|
class FakeDriver
|
35
35
|
include MonitorMixin
|
36
36
|
|
37
|
-
class ItemNotFound < StandardError; end
|
38
|
-
|
39
37
|
def list(bucket, prefix: nil)
|
40
38
|
return enum_for(:list, bucket, prefix: prefix) unless block_given?
|
41
39
|
|
@@ -48,6 +46,8 @@ module Attachie
|
|
48
46
|
|
49
47
|
def info(name, bucket)
|
50
48
|
synchronize do
|
49
|
+
raise(ItemNotFound, "Object #{ name } does not exist in bucket #{ bucket }") unless objects(bucket).key?(name)
|
50
|
+
|
51
51
|
{
|
52
52
|
last_modified: objects(bucket)[name][:last_modified],
|
53
53
|
content_length: objects(bucket)[name][:data].size,
|
@@ -82,6 +82,8 @@ module Attachie
|
|
82
82
|
synchronize do
|
83
83
|
objects(bucket).delete(name)
|
84
84
|
end
|
85
|
+
|
86
|
+
true
|
85
87
|
end
|
86
88
|
|
87
89
|
def value(name, bucket)
|
data/lib/attachie/file_driver.rb
CHANGED
@@ -75,6 +75,8 @@ module Attachie
|
|
75
75
|
content_type: MIME::Types.of(name).first&.to_s,
|
76
76
|
content_length: File.size(path_for(name, bucket))
|
77
77
|
}
|
78
|
+
rescue Errno::ENOENT => e
|
79
|
+
raise ItemNotFound, e.message
|
78
80
|
end
|
79
81
|
|
80
82
|
def store_multipart(name, bucket, options = {}, &block)
|
@@ -87,6 +89,8 @@ module Attachie
|
|
87
89
|
|
88
90
|
def value(name, bucket)
|
89
91
|
File.binread path_for(name, bucket)
|
92
|
+
rescue Errno::ENOENT => e
|
93
|
+
raise ItemNotFound, e.message
|
90
94
|
end
|
91
95
|
|
92
96
|
def download(name, bucket, dest_path)
|
@@ -95,6 +99,8 @@ module Attachie
|
|
95
99
|
FileUtils.mkdir_p File.dirname(path)
|
96
100
|
|
97
101
|
FileUtils.cp(path, dest_path)
|
102
|
+
rescue Errno::ENOENT => e
|
103
|
+
raise ItemNotFound, e.message
|
98
104
|
end
|
99
105
|
|
100
106
|
def delete(name, bucket)
|
data/lib/attachie/s3_driver.rb
CHANGED
@@ -84,6 +84,8 @@ module Attachie
|
|
84
84
|
last_modified: object.last_modified,
|
85
85
|
content_type: object.content_type
|
86
86
|
}
|
87
|
+
rescue Aws::S3::Errors::NotFound => e
|
88
|
+
raise ItemNotFound, e.message
|
87
89
|
end
|
88
90
|
|
89
91
|
def store(name, data_or_io, bucket, options = {})
|
@@ -112,14 +114,20 @@ module Attachie
|
|
112
114
|
|
113
115
|
def value(name, bucket)
|
114
116
|
s3_resource.bucket(bucket).object(name).get.body.read.force_encoding(Encoding::BINARY)
|
117
|
+
rescue Aws::S3::Errors::NotFound => e
|
118
|
+
raise ItemNotFound, e.message
|
115
119
|
end
|
116
120
|
|
117
121
|
def download(name, bucket, path)
|
118
122
|
s3_resource.bucket(bucket).object(name).download_file(path)
|
123
|
+
rescue Aws::S3::Errors::NotFound => e
|
124
|
+
raise ItemNotFound, e.message
|
119
125
|
end
|
120
126
|
|
121
127
|
def delete(name, bucket)
|
122
128
|
s3_resource.bucket(bucket).object(name).delete
|
129
|
+
|
130
|
+
true
|
123
131
|
end
|
124
132
|
|
125
133
|
def exists?(name, bucket)
|
data/lib/attachie/version.rb
CHANGED
data/lib/attachie.rb
CHANGED
@@ -4,10 +4,12 @@ require "attachie/interpolation"
|
|
4
4
|
require "active_support/all"
|
5
5
|
|
6
6
|
module Attachie
|
7
|
-
class
|
8
|
-
class
|
9
|
-
class
|
10
|
-
class
|
7
|
+
class BaseError < StandardError; end
|
8
|
+
class UnknownAttachment < BaseError; end
|
9
|
+
class NoSuchVersion < BaseError; end
|
10
|
+
class InterpolationError < BaseError; end
|
11
|
+
class NotSupported < BaseError; end
|
12
|
+
class ItemNotFound < BaseError; end
|
11
13
|
|
12
14
|
def self.default_options
|
13
15
|
@default_options ||= { :protocol => "http" }
|
@@ -53,6 +53,16 @@ RSpec.describe Attachie::FakeDriver do
|
|
53
53
|
tempfile.close(true)
|
54
54
|
end
|
55
55
|
end
|
56
|
+
|
57
|
+
it "raises an Attachie::ItemNotFound when the object does not exist" do
|
58
|
+
tempfile = Tempfile.new
|
59
|
+
|
60
|
+
begin
|
61
|
+
expect { driver.download("unknown", "bucket", tempfile.path) }.to raise_error(Attachie::ItemNotFound)
|
62
|
+
ensure
|
63
|
+
tempfile.close(true)
|
64
|
+
end
|
65
|
+
end
|
56
66
|
end
|
57
67
|
|
58
68
|
describe "#store_multipart" do
|
@@ -75,6 +85,10 @@ RSpec.describe Attachie::FakeDriver do
|
|
75
85
|
driver.delete("name", "bucket")
|
76
86
|
expect(driver.exists?("name", "bucket")).to be(false)
|
77
87
|
end
|
88
|
+
|
89
|
+
it "returns true even when the object does not exist" do
|
90
|
+
expect(driver.delete("unknown", "bucket")).to eq(true)
|
91
|
+
end
|
78
92
|
end
|
79
93
|
|
80
94
|
describe "#temp_url" do
|
@@ -97,6 +111,10 @@ RSpec.describe Attachie::FakeDriver do
|
|
97
111
|
last_modified: timestamp
|
98
112
|
)
|
99
113
|
end
|
114
|
+
|
115
|
+
it "raises an Attachie::ItemNotFound when the object does not exist" do
|
116
|
+
expect { driver.info("unknown", "bucket") }.to raise_error(Attachie::ItemNotFound)
|
117
|
+
end
|
100
118
|
end
|
101
119
|
end
|
102
120
|
|
@@ -37,6 +37,16 @@ RSpec.describe Attachie::FileDriver do
|
|
37
37
|
tempfile.close(true)
|
38
38
|
end
|
39
39
|
end
|
40
|
+
|
41
|
+
it "raises an Attachie::ItemNotFound when the object does not exist" do
|
42
|
+
tempfile = Tempfile.new
|
43
|
+
|
44
|
+
begin
|
45
|
+
expect { driver.download("unknown", "bucket", tempfile.path) }.to raise_error(Attachie::ItemNotFound)
|
46
|
+
ensure
|
47
|
+
tempfile.close(true)
|
48
|
+
end
|
49
|
+
end
|
40
50
|
end
|
41
51
|
|
42
52
|
describe" #store_multipart" do
|
@@ -67,6 +77,10 @@ RSpec.describe Attachie::FileDriver do
|
|
67
77
|
driver.delete("name", "bucket")
|
68
78
|
end
|
69
79
|
end
|
80
|
+
|
81
|
+
it "returns true even when the object does not exist" do
|
82
|
+
expect(driver.delete("unknown", "bucket")).to eq(true)
|
83
|
+
end
|
70
84
|
end
|
71
85
|
|
72
86
|
describe "#info" do
|
@@ -83,6 +97,10 @@ RSpec.describe Attachie::FileDriver do
|
|
83
97
|
driver.delete("name.txt", "bucket")
|
84
98
|
end
|
85
99
|
end
|
100
|
+
|
101
|
+
it "raises an Attachie::ItemNotFound when the object does not exist" do
|
102
|
+
expect { driver.info("unknown", "bucket") }.to raise_error(Attachie::ItemNotFound)
|
103
|
+
end
|
86
104
|
end
|
87
105
|
end
|
88
106
|
|
@@ -55,6 +55,16 @@ RSpec.describe Attachie::S3Driver do
|
|
55
55
|
tempfile.close(true)
|
56
56
|
end
|
57
57
|
end
|
58
|
+
|
59
|
+
it "raises an Attachie::ItemNotFound when the object does not exist" do
|
60
|
+
tempfile = Tempfile.new
|
61
|
+
|
62
|
+
begin
|
63
|
+
expect { driver.download("unknown", "bucket", tempfile.path) }.to raise_error(Attachie::ItemNotFound)
|
64
|
+
ensure
|
65
|
+
tempfile.close(true)
|
66
|
+
end
|
67
|
+
end
|
58
68
|
end
|
59
69
|
|
60
70
|
describe "#store_multipart" do
|
@@ -85,6 +95,10 @@ RSpec.describe Attachie::S3Driver do
|
|
85
95
|
driver.delete("name", "bucket")
|
86
96
|
end
|
87
97
|
end
|
98
|
+
|
99
|
+
it "returns true even when the object does not exist" do
|
100
|
+
expect(driver.delete("unknown", "bucket")).to eq(true)
|
101
|
+
end
|
88
102
|
end
|
89
103
|
|
90
104
|
describe "#temp_url" do
|
@@ -131,6 +145,10 @@ RSpec.describe Attachie::S3Driver do
|
|
131
145
|
driver.delete("name.txt", "bucket")
|
132
146
|
end
|
133
147
|
end
|
148
|
+
|
149
|
+
it "raises an Attachie::ItemNotFound when the object does not exist" do
|
150
|
+
expect { driver.info("unknown", "bucket") }.to raise_error(Attachie::ItemNotFound)
|
151
|
+
end
|
134
152
|
end
|
135
153
|
end
|
136
154
|
|
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:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Vetter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-s3
|