Skip to content

Commit 1bdd533

Browse files
committed
Delete object
1 parent 4cb5551 commit 1bdd533

File tree

3 files changed

+73
-0
lines changed

3 files changed

+73
-0
lines changed

src/bucket/delete_object.gleam

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import bucket.{type BucketError, type Credentials}
2+
import bucket/internal
3+
import gleam/http
4+
import gleam/http/request.{type Request, Request}
5+
import gleam/http/response.{type Response}
6+
7+
pub type RequestBuilder {
8+
RequestBuilder(bucket: String, key: String)
9+
}
10+
11+
pub fn request(bucket bucket: String, key key: String) -> RequestBuilder {
12+
RequestBuilder(bucket:, key:)
13+
}
14+
15+
pub fn build(builder: RequestBuilder, creds: Credentials) -> Request(BitArray) {
16+
let query = []
17+
let headers = []
18+
internal.request(
19+
creds,
20+
http.Delete,
21+
"/" <> builder.bucket <> "/" <> builder.key,
22+
query,
23+
headers,
24+
<<>>,
25+
)
26+
}
27+
28+
pub fn response(response: Response(BitArray)) -> Result(Nil, BucketError) {
29+
case response.status {
30+
204 -> Ok(Nil)
31+
_ -> internal.s3_error(response)
32+
}
33+
}

test/bucket_test.gleam

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import bucket.{ErrorObject, S3Error}
22
import bucket/create_bucket
33
import bucket/delete_bucket
4+
import bucket/delete_object
45
import bucket/delete_objects
56
import bucket/get_object
67
import bucket/head_bucket
@@ -370,3 +371,32 @@ pub fn get_object_found_test() {
370371
|> httpc.send_bits
371372
let assert Ok(get_object.Found(<<"yes":utf8>>)) = get_object.response(res)
372373
}
374+
375+
pub fn delete_object_test() {
376+
helpers.delete_existing_buckets()
377+
helpers.create_bucket("bucket")
378+
helpers.create_object("bucket", "key", <<"ok":utf8>>)
379+
380+
helpers.does_object_exist("bucket", "key")
381+
|> should.be_true
382+
383+
let assert Ok(res) =
384+
delete_object.request(bucket: "bucket", key: "key")
385+
|> delete_object.build(helpers.creds)
386+
|> httpc.send_bits
387+
let assert Ok(Nil) = delete_object.response(res)
388+
389+
helpers.does_object_exist("bucket", "key")
390+
|> should.be_false
391+
}
392+
393+
pub fn delete_object_not_found_test() {
394+
helpers.delete_existing_buckets()
395+
helpers.create_bucket("bucket")
396+
397+
let assert Ok(res) =
398+
delete_object.request(bucket: "bucket", key: "key")
399+
|> delete_object.build(helpers.creds)
400+
|> httpc.send_bits
401+
let assert Ok(Nil) = delete_object.response(res)
402+
}

test/helpers.gleam

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import bucket
22
import bucket/create_bucket
33
import bucket/delete_bucket
44
import bucket/delete_objects
5+
import bucket/head_object
56
import bucket/list_buckets
67
import bucket/list_objects
78
import bucket/put_object
@@ -88,3 +89,12 @@ fn delete_bucket(name: String) -> Nil {
8889
}
8990
}
9091
}
92+
93+
pub fn does_object_exist(bucket: String, key: String) -> Bool {
94+
let assert Ok(res) =
95+
head_object.request(bucket, key)
96+
|> head_object.build(creds)
97+
|> httpc.send_bits
98+
let assert Ok(res) = head_object.response(res)
99+
res == head_object.Found
100+
}

0 commit comments

Comments
 (0)