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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 426ea398ce4c4a06805ccc1d3640e1fa67288e1c468cd06c7373335f4c9367b9
4
- data.tar.gz: 4b4727398f90606dd4ef40beb4bb09e76c907551a94838f029e5801e374438c6
3
+ metadata.gz: c4dc1a3393421a2accb0c07990ac3375b430fc2476426a0621526455351c7ee4
4
+ data.tar.gz: 951319408c1cc9d4780d3cdf0431e1867b564e8ae27a948100fa6c2393c07cdb
5
5
  SHA512:
6
- metadata.gz: 5720192d8aa3f016822f72e0a496f92da3540e37af468e5051d9b27b0ab6425fff71568896d0dcd8c5c71fa8610dbf5c09b80ed01da243bea447cb16020a0a59
7
- data.tar.gz: ed58ffa041525bb43d676cf505267de7c3814eec9e497ca07ca06d91c05a168983c31e65ba36713a4db74c1e0c727bdca63f0cd4707820205bc936bdf8d7e0a2
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
@@ -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)
@@ -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)
@@ -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)
@@ -1,3 +1,3 @@
1
1
  module Attachie
2
- VERSION = "1.2.1"
2
+ VERSION = "2.0.0"
3
3
  end
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 UnknownAttachment < StandardError; end
8
- class NoSuchVersion < StandardError; end
9
- class InterpolationError < StandardError; end
10
- class NotSupported < StandardError; end
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: 1.2.1
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-03-28 00:00:00.000000000 Z
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