Skip to content

Commit c04a70a

Browse files
authored
Expose object metadata from Bucket.list (#181)
1 parent b6f6c24 commit c04a70a

File tree

5 files changed

+47
-11
lines changed

5 files changed

+47
-11
lines changed

.github/workflows/gcloud.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ jobs:
5959
matrix:
6060
# Add macos-latest and/or windows-latest if relevant for this package.
6161
os: [ubuntu-latest]
62-
sdk: [2.19.0, dev]
62+
sdk: [3.0.0, dev]
6363
steps:
6464
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
6565
- uses: dart-lang/setup-dart@0a8a0fc875eb934c15d08629302413c671d3f672

pkgs/gcloud/CHANGELOG.md

+11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
## 0.8.16-wip
22

3+
- **Breaking** `BucketEntry` is now `sealed` anyone implementing or subclassing
4+
will experience breakage.
5+
- Feature `BucketEntry` objects returns from `Bucket.list` are now instances
6+
of:
7+
* `BucketDirectoryEntry`, or,
8+
* `BucketObjectEntry`, which implements `ObjectInfo` exposing metadata.
9+
10+
This means that anyone using `Bucket.list` to find objects, does not need
11+
to use `Bucket.info` to fetch metadata for an object.
12+
- Minimum Dart SDK constraint bumped to `^3.0.0`.
13+
314
## 0.8.15
415

516
- Update the pubspec repository field to reflect the repo move.

pkgs/gcloud/lib/src/storage_impl.dart

+12-2
Original file line numberDiff line numberDiff line change
@@ -349,9 +349,9 @@ class _ObjectPageImpl implements Page<BucketEntry> {
349349
storage_api.Objects response)
350350
: items = [
351351
for (final item in response.prefixes ?? const <String>[])
352-
BucketEntry._directory(item),
352+
BucketDirectoryEntry._(item),
353353
for (final item in response.items ?? const <storage_api.Object>[])
354-
BucketEntry._object(item.name!)
354+
_BucketObjectEntry(item)
355355
],
356356
_nextPageToken = response.nextPageToken;
357357

@@ -430,6 +430,16 @@ class _ObjectInfoImpl implements ObjectInfo {
430430
ObjectMetadata get metadata => _metadata;
431431
}
432432

433+
class _BucketObjectEntry extends _ObjectInfoImpl implements BucketObjectEntry {
434+
_BucketObjectEntry(storage_api.Object object) : super(object);
435+
436+
@override
437+
bool get isDirectory => false;
438+
439+
@override
440+
bool get isObject => true;
441+
}
442+
433443
class _ObjectMetadata implements ObjectMetadata {
434444
final storage_api.Object _object;
435445
Acl? _cachedAcl;

pkgs/gcloud/lib/storage.dart

+22-7
Original file line numberDiff line numberDiff line change
@@ -668,23 +668,38 @@ abstract class ObjectMetadata {
668668
/// Listing operate like a directory listing, despite the object
669669
/// namespace being flat.
670670
///
671+
/// Instances of [BucketEntry] are either instances of [BucketDirectoryEntry]
672+
/// or [BucketObjectEntry]. Casting to [BucketObjectEntry] will give access to
673+
/// object metadata.
674+
///
671675
/// See [Bucket.list] for information on how the hierarchical structure
672676
/// is determined.
673-
class BucketEntry {
677+
sealed class BucketEntry {
674678
/// Whether this is information on an object.
675-
final bool isObject;
679+
bool get isObject;
676680

677681
/// Name of object or directory.
678-
final String name;
679-
680-
BucketEntry._object(this.name) : isObject = true;
681-
682-
BucketEntry._directory(this.name) : isObject = false;
682+
String get name;
683683

684684
/// Whether this is a prefix.
685685
bool get isDirectory => !isObject;
686686
}
687687

688+
/// Entry in [Bucket.list] representing a directory given the `delimiter`
689+
/// passed.
690+
class BucketDirectoryEntry extends BucketEntry {
691+
@override
692+
final String name;
693+
694+
BucketDirectoryEntry._(this.name);
695+
696+
@override
697+
bool get isObject => false;
698+
}
699+
700+
/// Entry in [Bucket.list] representing an object.
701+
abstract class BucketObjectEntry implements BucketEntry, ObjectInfo {}
702+
688703
/// Access to operations on a specific cloud storage bucket.
689704
abstract class Bucket {
690705
/// Name of this bucket.

pkgs/gcloud/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ topics:
99
- gcp
1010

1111
environment:
12-
sdk: '>=2.19.0 <4.0.0'
12+
sdk: '^3.0.0'
1313

1414
dependencies:
1515
_discoveryapis_commons: ^1.0.0

0 commit comments

Comments
 (0)