Skip to content

Commit 296cdf6

Browse files
authored
Merge pull request #7 from Peterkrol12/feature/public-member-documentation
Added documentation for public members
2 parents ef095a7 + 7767309 commit 296cdf6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+975
-565
lines changed

example/main.dart

+18-11
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
1+
import 'dart:developer';
12
import 'dart:io';
23

34
import 'package:http/io_client.dart';
4-
import 'package:webfeed_revised/webfeed.dart';
5+
import 'package:webfeed_revised/webfeed_revised.dart';
56

67
void main() async {
7-
final client = IOClient(HttpClient()
8-
..badCertificateCallback =
9-
((X509Certificate cert, String host, int port) => true));
8+
final client = IOClient(
9+
HttpClient()..badCertificateCallback = ((cert, host, port) => true),
10+
);
1011

1112
// RSS feed
1213
var response = await client.get(
13-
Uri.parse('https://developer.apple.com/news/releases/rss/releases.rss'));
14-
var channel = RssFeed.parse(response.body);
15-
print(channel);
14+
Uri.parse(
15+
'https://developer.apple.com/news/releases/rss/releases.rss',
16+
),
17+
);
18+
final rssFeed = RssFeed.parse(response.body);
19+
log(rssFeed.toString());
1620

1721
// Atom feed
18-
response =
19-
await client.get(Uri.parse('https://www.theverge.com/rss/index.xml'));
20-
var feed = AtomFeed.parse(response.body);
21-
print(feed);
22+
response = await client.get(
23+
Uri.parse(
24+
'https://www.theverge.com/rss/index.xml',
25+
),
26+
);
27+
final atomFeed = AtomFeed.parse(response.body);
28+
log(atomFeed.toString());
2229

2330
client.close();
2431
}

lib/domain/atom_category.dart

+15-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
import 'package:xml/xml.dart';
22

3+
/// Used for conveying information about a category associated with an entry or
4+
/// feed
5+
/// See https://tools.ietf.org/html/rfc4287#section-4.2.2
36
class AtomCategory {
4-
final String? term;
5-
final String? scheme;
6-
final String? label;
7-
7+
/// Default constructor for the AtomCategory class
88
AtomCategory(this.term, this.scheme, this.label);
99

10+
/// Parse constructor for the AtomCategory class, used when 'parsing' a feed
1011
factory AtomCategory.parse(XmlElement element) {
11-
var term = element.getAttribute('term');
12-
var scheme = element.getAttribute('scheme');
13-
var label = element.getAttribute('label');
12+
final term = element.getAttribute('term');
13+
final scheme = element.getAttribute('scheme');
14+
final label = element.getAttribute('label');
1415
return AtomCategory(term, scheme, label);
1516
}
17+
18+
/// The category term
19+
final String? term;
20+
/// The category scheme
21+
final String? scheme;
22+
/// The category label
23+
final String? label;
1624
}

lib/domain/atom_feed.dart

+39-23
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,10 @@ import 'package:webfeed_revised/util/datetime.dart';
77
import 'package:webfeed_revised/util/iterable.dart';
88
import 'package:xml/xml.dart';
99

10+
/// Represents an Atom feed
11+
/// See https://tools.ietf.org/html/rfc4287
1012
class AtomFeed {
11-
final String? id;
12-
final String? title;
13-
final DateTime? updated;
14-
final List<AtomItem>? items;
15-
16-
final List<AtomLink>? links;
17-
final List<AtomPerson>? authors;
18-
final List<AtomPerson>? contributors;
19-
final List<AtomCategory>? categories;
20-
final AtomGenerator? generator;
21-
final String? icon;
22-
final String? logo;
23-
final String? rights;
24-
final String? subtitle;
25-
13+
/// Default constructor for the AtomFeed class
2614
AtomFeed({
2715
this.id,
2816
this.title,
@@ -39,9 +27,10 @@ class AtomFeed {
3927
this.subtitle,
4028
});
4129

30+
/// Parse constructor for the AtomFeed class, used when 'parsing' a feed
4231
factory AtomFeed.parse(String xmlString) {
43-
var document = XmlDocument.parse(xmlString);
44-
var feedElement = document.findElements('feed').firstOrNull;
32+
final document = XmlDocument.parse(xmlString);
33+
final feedElement = document.findElements('feed').firstOrNull;
4534
if (feedElement == null) {
4635
throw ArgumentError('feed not found');
4736
}
@@ -53,32 +42,59 @@ class AtomFeed {
5342
parseDateTime(feedElement.findElements('updated').firstOrNull?.text),
5443
items: feedElement
5544
.findElements('entry')
56-
.map((e) => AtomItem.parse(e))
45+
.map(AtomItem.parse)
5746
.toList(),
5847
links: feedElement
5948
.findElements('link')
60-
.map((e) => AtomLink.parse(e))
49+
.map(AtomLink.parse)
6150
.toList(),
6251
authors: feedElement
6352
.findElements('author')
64-
.map((e) => AtomPerson.parse(e))
53+
.map(AtomPerson.parse)
6554
.toList(),
6655
contributors: feedElement
6756
.findElements('contributor')
68-
.map((e) => AtomPerson.parse(e))
57+
.map(AtomPerson.parse)
6958
.toList(),
7059
categories: feedElement
7160
.findElements('category')
72-
.map((e) => AtomCategory.parse(e))
61+
.map(AtomCategory.parse)
7362
.toList(),
7463
generator: feedElement
7564
.findElements('generator')
76-
.map((e) => AtomGenerator.parse(e))
65+
.map(AtomGenerator.parse)
7766
.firstOrNull,
7867
icon: feedElement.findElements('icon').firstOrNull?.text,
7968
logo: feedElement.findElements('logo').firstOrNull?.text,
8069
rights: feedElement.findElements('rights').firstOrNull?.text,
8170
subtitle: feedElement.findElements('subtitle').firstOrNull?.text,
8271
);
8372
}
73+
74+
/// The feed id
75+
final String? id;
76+
/// The feed title
77+
final String? title;
78+
/// The feed updated date
79+
final DateTime? updated;
80+
/// The feed items
81+
final List<AtomItem>? items;
82+
/// The feed links
83+
final List<AtomLink>? links;
84+
/// The feed authors
85+
final List<AtomPerson>? authors;
86+
/// The feed contributors
87+
final List<AtomPerson>? contributors;
88+
/// The feed categories
89+
final List<AtomCategory>? categories;
90+
/// The feed generator
91+
final AtomGenerator? generator;
92+
/// The feed icon
93+
final String? icon;
94+
/// The feed logo
95+
final String? logo;
96+
/// The feed rights
97+
final String? rights;
98+
/// The feed subtitle
99+
final String? subtitle;
84100
}

lib/domain/atom_generator.dart

+15-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
import 'package:xml/xml.dart';
22

3+
/// Used to identify the agent used to generate a feed
4+
/// See https://tools.ietf.org/html/rfc4287#section-4.2.4
35
class AtomGenerator {
4-
final String? uri;
5-
final String? version;
6-
final String? value;
7-
6+
/// Default constructor for the AtomGenerator class
87
AtomGenerator(this.uri, this.version, this.value);
98

9+
/// Parse constructor for the AtomGenerator class, used when 'parsing' a feed
1010
factory AtomGenerator.parse(XmlElement element) {
11-
var uri = element.getAttribute('uri');
12-
var version = element.getAttribute('version');
13-
var value = element.text;
11+
final uri = element.getAttribute('uri');
12+
final version = element.getAttribute('version');
13+
final value = element.text;
1414
return AtomGenerator(uri, version, value);
1515
}
16+
17+
/// The URI of the software used to generate the feed, must be an IRI
18+
/// reference
19+
final String? uri;
20+
/// The version of the generating agent
21+
final String? version;
22+
/// The name of the generating agent
23+
final String? value;
1624
}

lib/domain/atom_item.dart

+37-22
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,11 @@ import 'package:webfeed_revised/util/datetime.dart';
77
import 'package:webfeed_revised/util/iterable.dart';
88
import 'package:xml/xml.dart';
99

10+
/// Represents an Atom item
11+
/// See https://tools.ietf.org/html/rfc4287
1012
class AtomItem {
11-
final String? id;
12-
final String? title;
13-
final DateTime? updated;
14-
15-
final List<AtomPerson>? authors;
16-
final List<AtomLink>? links;
17-
final List<AtomCategory>? categories;
18-
final List<AtomPerson>? contributors;
19-
final AtomSource? source;
20-
final String? published;
21-
final String? content;
22-
final String? summary;
23-
final String? rights;
24-
final Media? media;
2513

14+
/// Default constructor for the AtomItem class
2615
AtomItem({
2716
this.id,
2817
this.title,
@@ -39,34 +28,60 @@ class AtomItem {
3928
this.media,
4029
});
4130

42-
factory AtomItem.parse(XmlElement element) {
43-
return AtomItem(
31+
/// Parse constructor for the AtomItem class, used when 'parsing' a feed
32+
factory AtomItem.parse(XmlElement element) => AtomItem(
4433
id: element.findElements('id').firstOrNull?.text,
4534
title: element.findElements('title').firstOrNull?.text,
4635
updated: parseDateTime(element.findElements('updated').firstOrNull?.text),
4736
authors: element
4837
.findElements('author')
49-
.map((e) => AtomPerson.parse(e))
38+
.map(AtomPerson.parse)
5039
.toList(),
5140
links:
52-
element.findElements('link').map((e) => AtomLink.parse(e)).toList(),
41+
element.findElements('link').map(AtomLink.parse).toList(),
5342
categories: element
5443
.findElements('category')
55-
.map((e) => AtomCategory.parse(e))
44+
.map(AtomCategory.parse)
5645
.toList(),
5746
contributors: element
5847
.findElements('contributor')
59-
.map((e) => AtomPerson.parse(e))
48+
.map(AtomPerson.parse)
6049
.toList(),
6150
source: element
6251
.findElements('source')
63-
.map((e) => AtomSource.parse(e))
52+
.map(AtomSource.parse)
6453
.firstOrNull,
6554
published: element.findElements('published').firstOrNull?.text,
6655
content: element.findElements('content').firstOrNull?.text,
6756
summary: element.findElements('summary').firstOrNull?.text,
6857
rights: element.findElements('rights').firstOrNull?.text,
6958
media: Media.parse(element),
7059
);
71-
}
60+
61+
/// The item id
62+
final String? id;
63+
/// The item title
64+
final String? title;
65+
/// The item updated date
66+
final DateTime? updated;
67+
/// The item authors
68+
final List<AtomPerson>? authors;
69+
/// The item links
70+
final List<AtomLink>? links;
71+
/// The item categories
72+
final List<AtomCategory>? categories;
73+
/// The item contributors
74+
final List<AtomPerson>? contributors;
75+
/// The item source
76+
final AtomSource? source;
77+
/// The item published date
78+
final String? published;
79+
/// The item content
80+
final String? content;
81+
/// The item summary
82+
final String? summary;
83+
/// The item rights
84+
final String? rights;
85+
/// The item media
86+
final Media? media;
7287
}

lib/domain/atom_link.dart

+22-12
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
import 'package:xml/xml.dart';
22

3+
/// Defines a reference from an entry or feed to a Web resource
4+
/// See https://tools.ietf.org/html/rfc4287#section-4.2.7
35
class AtomLink {
4-
final String? href;
5-
final String? rel;
6-
final String? type;
7-
final String? hreflang;
8-
final String? title;
9-
final int length;
10-
6+
/// Default constructor for the AtomLink class
117
AtomLink(
128
this.href,
139
this.rel,
@@ -17,16 +13,30 @@ class AtomLink {
1713
this.length,
1814
);
1915

16+
/// Parse constructor for the AtomLink class, used when 'parsing' a feed
2017
factory AtomLink.parse(XmlElement element) {
21-
var href = element.getAttribute('href');
22-
var rel = element.getAttribute('rel');
23-
var type = element.getAttribute('type');
24-
var title = element.getAttribute('title');
25-
var hreflang = element.getAttribute('hreflang');
18+
final href = element.getAttribute('href');
19+
final rel = element.getAttribute('rel');
20+
final type = element.getAttribute('type');
21+
final title = element.getAttribute('title');
22+
final hreflang = element.getAttribute('hreflang');
2623
var length = 0;
2724
if (element.getAttribute('length') != null) {
2825
length = int.parse(element.getAttribute('length')!);
2926
}
3027
return AtomLink(href, rel, type, hreflang, title, length);
3128
}
29+
30+
/// The URI of the referenced resource
31+
final String? href;
32+
/// The link relationship type
33+
final String? rel;
34+
/// The media type of the referenced resource
35+
final String? type;
36+
/// The language of the referenced resource
37+
final String? hreflang;
38+
/// The human-readable information about the link
39+
final String? title;
40+
/// The length of the resource, in bytes
41+
final int length;
3242
}

lib/domain/atom_person.dart

+12-7
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
import 'package:webfeed_revised/util/iterable.dart';
22
import 'package:xml/xml.dart';
33

4+
/// The person element is used to specify the author of an entry or feed.
5+
/// See https://tools.ietf.org/html/rfc4287#section-3.2
46
class AtomPerson {
5-
final String? name;
6-
final String? uri;
7-
final String? email;
8-
7+
/// Default constructor for the AtomPerson class
98
AtomPerson({this.name, this.uri, this.email});
109

11-
factory AtomPerson.parse(XmlElement element) {
12-
return AtomPerson(
10+
/// Parse constructor for the AtomPerson class, used when 'parsing' a feed
11+
factory AtomPerson.parse(XmlElement element) => AtomPerson(
1312
name: element.findElements('name').firstOrNull?.text,
1413
uri: element.findElements('uri').firstOrNull?.text,
1514
email: element.findElements('email').firstOrNull?.text,
1615
);
17-
}
16+
17+
/// The name of the person
18+
final String? name;
19+
/// The URI of the person, must be an IRI reference
20+
final String? uri;
21+
/// The email of the person
22+
final String? email;
1823
}

0 commit comments

Comments
 (0)