Skip to content

Commit aff9758

Browse files
committed
Make Pick.isAbsent a getter
Picks are immutable, a getter fits better because the value never changes
1 parent 947a58b commit aff9758

5 files changed

Lines changed: 25 additions & 24 deletions

File tree

example/deep_pick_example.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ void main() {
7676

7777
// access value out of range
7878
final puma = pick(json, 'shoes', 1);
79-
print(puma.isAbsent()); // true;
79+
print(puma.isAbsent); // true;
8080
print(puma.value); // null
8181
}
8282

@@ -106,7 +106,7 @@ class Shoe {
106106
tags: pick('tags').asListOrEmpty(),
107107
price: () {
108108
// when server doesn't send the price field the shoe is not available
109-
if (pricePick.isAbsent()) return 'Not for sale';
109+
if (pricePick.isAbsent) return 'Not for sale';
110110
return pricePick.asStringOrNull() ?? 'Price available soon';
111111
}(),
112112
);

lib/src/pick.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,15 @@ class Pick with PickLocation, PickContext<Pick> {
108108
/// - Trying to access a key in a [Map] but the found data structure is a [List]
109109
///
110110
/// ```
111-
/// pick({"a": null}, "a").isAbsent(); // false
112-
/// pick({"a": null}, "b").isAbsent(); // true
111+
/// pick({"a": null}, "a").isAbsent; // false
112+
/// pick({"a": null}, "b").isAbsent; // true
113113
///
114-
/// pick([null], 0).isAbsent(); // false
115-
/// pick([], 2).isAbsent(); // true
114+
/// pick([null], 0).isAbsent; // false
115+
/// pick([], 2).isAbsent; // true
116116
///
117-
/// pick([], "a").isAbsent(); // true
117+
/// pick([], "a").isAbsent; // true
118118
/// ```
119-
bool isAbsent() => missingValueAtIndex != null;
119+
bool get isAbsent => missingValueAtIndex != null;
120120

121121
@override
122122
List<dynamic> path;
@@ -162,7 +162,7 @@ class Pick with PickLocation, PickContext<Pick> {
162162
final more = fromContext(requiredPickErrorHintKey).value as String?;
163163
final moreSegment = more == null ? '' : ' $more';
164164
throw PickException('required value at location ${location()} '
165-
'is ${isAbsent() ? 'absent' : 'null'}.$moreSegment');
165+
'is ${isAbsent ? 'absent' : 'null'}.$moreSegment');
166166
}
167167
return RequiredPick(value, path: path, context: _context);
168168
}

test/src/pick_double_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,10 @@ void main() {
5454
});
5555

5656
test('deprecated asDouble forwards to asDoubleOrThrow', () {
57+
// ignore: deprecated_member_use_from_same_package
5758
expect(pick('1').asDouble(), 1.0);
5859
expect(
60+
// ignore: deprecated_member_use_from_same_package
5961
() => pick(Object()).asDouble(),
6062
throwsA(pickException(containing: [
6163
"value Instance of 'Object' of type Object at location `<root>` can not be parsed as double"

test/src/pick_test.dart

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ void main() {
1111

1212
test('toString() prints value and path', () {
1313
expect(
14+
// ignore: deprecated_member_use_from_same_package
1415
Pick('a', path: ['b', 0]).toString(),
1516
'Pick(value=a, path=[b, 0])',
1617
);
@@ -61,32 +62,32 @@ void main() {
6162
expect(level2Pick.path, [0, 'name']);
6263
});
6364

64-
group('isAbsent()', () {
65+
group('isAbsent', () {
6566
test('is not absent because value', () {
6667
final p = pick('a');
6768
expect(p.value, isNotNull);
68-
expect(p.isAbsent(), isFalse);
69+
expect(p.isAbsent, isFalse);
6970
expect(p.missingValueAtIndex, null);
7071
});
7172

7273
test('is not absent but null', () {
7374
final p = pick(null);
7475
expect(p.value, isNull);
75-
expect(p.isAbsent(), isFalse);
76+
expect(p.isAbsent, isFalse);
7677
expect(p.missingValueAtIndex, null);
7778
});
7879

7980
test('is not absent but null further down', () {
8081
final p = pick({'a': null}, 'a');
8182
expect(p.value, isNull);
82-
expect(p.isAbsent(), isFalse);
83+
expect(p.isAbsent, isFalse);
8384
expect(p.missingValueAtIndex, null);
8485
});
8586

8687
test('is not absent, not null', () {
8788
final p = pick({'a', 1}, 'b');
8889
expect(p.value, isNull);
89-
expect(p.isAbsent(), isTrue);
90+
expect(p.isAbsent, isTrue);
9091
expect(p.missingValueAtIndex, 0);
9192
});
9293

@@ -96,7 +97,7 @@ void main() {
9697
};
9798
final p = pick(json, 'a', 'x' /*absent*/);
9899
expect(p.value, isNull);
99-
expect(p.isAbsent(), isTrue);
100+
expect(p.isAbsent, isTrue);
100101
expect(p.missingValueAtIndex, 1);
101102
});
102103
});
@@ -109,39 +110,39 @@ void main() {
109110
{'name': 'Daenerys Targaryen'},
110111
];
111112
expect(pick(data, 10).value, isNull);
112-
expect(pick(data, 10).isAbsent(), true);
113+
expect(pick(data, 10).isAbsent, true);
113114
});
114115

115116
test('unknown property in map returns null', () {
116117
final data = {'name': 'John Snow'};
117118
expect(pick(data, 'birthday').value, isNull);
118-
expect(pick(data, 'birthday').isAbsent(), true);
119+
expect(pick(data, 'birthday').isAbsent, true);
119120
});
120121

121122
test('documentation example Map', () {
122123
final pa = pick({'a': null}, 'a');
123124
expect(pa.value, isNull);
124-
expect(pa.isAbsent(), false);
125+
expect(pa.isAbsent, false);
125126

126127
final pb = pick({'a': null}, 'b');
127128
expect(pb.value, isNull);
128-
expect(pb.isAbsent(), true);
129+
expect(pb.isAbsent, true);
129130
});
130131

131132
test('documentation example List', () {
132133
final p0 = pick([null], 0);
133134
expect(p0.value, isNull);
134-
expect(p0.isAbsent(), false);
135+
expect(p0.isAbsent, false);
135136

136137
final p2 = pick([], 2);
137138
expect(p2.value, isNull);
138-
expect(p2.isAbsent(), true);
139+
expect(p2.isAbsent, true);
139140
});
140141

141142
test('Map key for list', () {
142143
final p = pick([], 'a');
143144
expect(p.value, isNull);
144-
expect(p.isAbsent(), true);
145+
expect(p.isAbsent, true);
145146
});
146147
});
147148

test/src/required_pick_test.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import 'package:deep_pick/deep_pick.dart';
22
import 'package:test/test.dart';
33

4-
import 'pick_test.dart';
5-
64
void main() {
75
group('RequiredPick', () {
86
test('toString() works as expected', () {

0 commit comments

Comments
 (0)