| @@ -0,0 +1,37 @@ | |||||
| analyzer: | |||||
| language: | |||||
| enablePreviewDart2: true | |||||
| strong-mode: true | |||||
| errors: | |||||
| unused_import: error | |||||
| unused_local_variable: error | |||||
| dead_code: error | |||||
| linter: | |||||
| rules: | |||||
| # Errors | |||||
| - avoid_empty_else | |||||
| - comment_references | |||||
| - control_flow_in_finally | |||||
| - empty_statements | |||||
| - hash_and_equals | |||||
| - test_types_in_equals | |||||
| - throw_in_finally | |||||
| - unrelated_type_equality_checks | |||||
| - valid_regexps | |||||
| # Style | |||||
| - avoid_init_to_null | |||||
| - avoid_return_types_on_setters | |||||
| - await_only_futures | |||||
| - camel_case_types | |||||
| - directives_ordering | |||||
| - empty_constructor_bodies | |||||
| - library_names | |||||
| - library_prefixes | |||||
| - non_constant_identifier_names | |||||
| - omit_local_variable_types | |||||
| - prefer_final_fields | |||||
| - prefer_is_not_empty | |||||
| - prefer_typing_uninitialized_variables | |||||
| - slash_for_doc_comments | |||||
| - type_init_formals | |||||
| @@ -1,6 +1,5 @@ | |||||
| import 'package:http/http.dart' as http; | import 'package:http/http.dart' as http; | ||||
| import 'package:webfeed/domain/atom_feed.dart'; | |||||
| import 'package:webfeed/domain/rss_feed.dart'; | |||||
| import 'package:webfeed/webfeed.dart'; | |||||
| void main() { | void main() { | ||||
| var client = new http.Client(); | var client = new http.Client(); | ||||
| @@ -22,4 +22,4 @@ class AtomCategory { | |||||
| label: $label | label: $label | ||||
| '''; | '''; | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -3,8 +3,8 @@ import 'package:webfeed/domain/atom_generator.dart'; | |||||
| import 'package:webfeed/domain/atom_item.dart'; | import 'package:webfeed/domain/atom_item.dart'; | ||||
| import 'package:webfeed/domain/atom_link.dart'; | import 'package:webfeed/domain/atom_link.dart'; | ||||
| import 'package:webfeed/domain/atom_person.dart'; | import 'package:webfeed/domain/atom_person.dart'; | ||||
| import 'package:xml/xml.dart'; | |||||
| import 'package:webfeed/util/helpers.dart'; | import 'package:webfeed/util/helpers.dart'; | ||||
| import 'package:xml/xml.dart'; | |||||
| class AtomFeed { | class AtomFeed { | ||||
| String id; | String id; | ||||
| @@ -23,7 +23,15 @@ class AtomFeed { | |||||
| String subtitle; | String subtitle; | ||||
| AtomFeed(this.id, this.title, this.updated, this.items, | AtomFeed(this.id, this.title, this.updated, this.items, | ||||
| {this.links, this.authors, this.contributors, this.categories, this.generator, this.icon, this.logo, this.rights, this.subtitle}); | |||||
| {this.links, | |||||
| this.authors, | |||||
| this.contributors, | |||||
| this.categories, | |||||
| this.generator, | |||||
| this.icon, | |||||
| this.logo, | |||||
| this.rights, | |||||
| this.subtitle}); | |||||
| factory AtomFeed.parse(String xmlString) { | factory AtomFeed.parse(String xmlString) { | ||||
| var document = parse(xmlString); | var document = parse(xmlString); | ||||
| @@ -36,7 +44,7 @@ class AtomFeed { | |||||
| var id = xmlGetString(feedElement, "id"); | var id = xmlGetString(feedElement, "id"); | ||||
| var title = xmlGetString(feedElement, "title"); | var title = xmlGetString(feedElement, "title"); | ||||
| var updated = xmlGetString(feedElement, "updated"); | var updated = xmlGetString(feedElement, "updated"); | ||||
| var items = feedElement.findElements("entry").map((element) { | var items = feedElement.findElements("entry").map((element) { | ||||
| return new AtomItem.parse(element); | return new AtomItem.parse(element); | ||||
| }).toList(); | }).toList(); | ||||
| @@ -22,4 +22,4 @@ class AtomGenerator { | |||||
| value: $value | value: $value | ||||
| '''; | '''; | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -2,8 +2,8 @@ import 'package:webfeed/domain/atom_category.dart'; | |||||
| import 'package:webfeed/domain/atom_link.dart'; | import 'package:webfeed/domain/atom_link.dart'; | ||||
| import 'package:webfeed/domain/atom_person.dart'; | import 'package:webfeed/domain/atom_person.dart'; | ||||
| import 'package:webfeed/domain/atom_source.dart'; | import 'package:webfeed/domain/atom_source.dart'; | ||||
| import 'package:xml/xml.dart'; | |||||
| import 'package:webfeed/util/helpers.dart'; | import 'package:webfeed/util/helpers.dart'; | ||||
| import 'package:xml/xml.dart'; | |||||
| class AtomItem { | class AtomItem { | ||||
| String id; | String id; | ||||
| @@ -34,4 +34,4 @@ class AtomLink { | |||||
| length: $length | length: $length | ||||
| '''; | '''; | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -1,5 +1,5 @@ | |||||
| import 'package:xml/xml.dart'; | |||||
| import 'package:webfeed/util/helpers.dart'; | import 'package:webfeed/util/helpers.dart'; | ||||
| import 'package:xml/xml.dart'; | |||||
| class AtomPerson { | class AtomPerson { | ||||
| String name; | String name; | ||||
| @@ -23,4 +23,4 @@ class AtomPerson { | |||||
| email: $email | email: $email | ||||
| '''; | '''; | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -24,4 +24,4 @@ class AtomSource { | |||||
| updated: $updated | updated: $updated | ||||
| '''; | '''; | ||||
| } | } | ||||
| } | |||||
| } | |||||
| @@ -7,8 +7,8 @@ class RssCategory { | |||||
| RssCategory(this.domain, this.value); | RssCategory(this.domain, this.value); | ||||
| factory RssCategory.parse(XmlElement node) { | factory RssCategory.parse(XmlElement node) { | ||||
| String domain = node.getAttribute("domain"); | |||||
| String value = node.text; | |||||
| var domain = node.getAttribute("domain"); | |||||
| var value = node.text; | |||||
| return new RssCategory(domain, value); | return new RssCategory(domain, value); | ||||
| } | } | ||||
| @@ -45,7 +45,7 @@ class RssFeed { | |||||
| this.ttl}); | this.ttl}); | ||||
| factory RssFeed.parse(String xmlString) { | factory RssFeed.parse(String xmlString) { | ||||
| XmlDocument document = parse(xmlString); | |||||
| var document = parse(xmlString); | |||||
| XmlElement channelElement; | XmlElement channelElement; | ||||
| try { | try { | ||||
| channelElement = document.findAllElements("channel").first; | channelElement = document.findAllElements("channel").first; | ||||
| @@ -56,7 +56,7 @@ class RssFeed { | |||||
| var description = xmlGetString(channelElement, "description"); | var description = xmlGetString(channelElement, "description"); | ||||
| var link = xmlGetString(channelElement, "link"); | var link = xmlGetString(channelElement, "link"); | ||||
| List<RssItem> feeds = channelElement.findElements("item").map((element) { | |||||
| var feeds = channelElement.findElements("item").map((element) { | |||||
| return new RssItem.parse(element); | return new RssItem.parse(element); | ||||
| }).toList(); | }).toList(); | ||||
| @@ -70,18 +70,18 @@ class RssFeed { | |||||
| cloud = new RssCloud.parse(channelElement.findElements("cloud").first); | cloud = new RssCloud.parse(channelElement.findElements("cloud").first); | ||||
| } on StateError {} | } on StateError {} | ||||
| List<RssCategory> categories = channelElement.findElements("category").map((element) { | |||||
| var categories = channelElement.findElements("category").map((element) { | |||||
| return new RssCategory.parse(element); | return new RssCategory.parse(element); | ||||
| }).toList(); | }).toList(); | ||||
| List<String> skipDays = new List<String>(); | |||||
| var skipDays = new List<String>(); | |||||
| var skipDaysNodes = channelElement.findElements("skipDays"); | var skipDaysNodes = channelElement.findElements("skipDays"); | ||||
| if (skipDaysNodes.isNotEmpty) { | if (skipDaysNodes.isNotEmpty) { | ||||
| skipDays = skipDaysNodes.first.findAllElements("day").map((element) { | skipDays = skipDaysNodes.first.findAllElements("day").map((element) { | ||||
| return element.text; | return element.text; | ||||
| }).toList(); | }).toList(); | ||||
| } | } | ||||
| List<int> skipHours = new List<int>(); | |||||
| var skipHours = new List<int>(); | |||||
| var skipHoursNodes = channelElement.findElements("skipHours"); | var skipHoursNodes = channelElement.findElements("skipHours"); | ||||
| if (skipHoursNodes.isNotEmpty) { | if (skipHoursNodes.isNotEmpty) { | ||||
| skipHours = skipHoursNodes.first.findAllElements("hour").map((element) { | skipHours = skipHoursNodes.first.findAllElements("hour").map((element) { | ||||
| @@ -23,7 +23,7 @@ class RssItem { | |||||
| var description = xmlGetString(element, "description"); | var description = xmlGetString(element, "description"); | ||||
| var link = xmlGetString(element, "link"); | var link = xmlGetString(element, "link"); | ||||
| List<RssCategory> categories = element.findElements("category").map((element) { | |||||
| var categories = element.findElements("category").map((element) { | |||||
| return new RssCategory.parse(element); | return new RssCategory.parse(element); | ||||
| }).toList(); | }).toList(); | ||||
| @@ -0,0 +1,13 @@ | |||||
| export 'domain/atom_category.dart'; | |||||
| export 'domain/atom_feed.dart'; | |||||
| export 'domain/atom_generator.dart'; | |||||
| export 'domain/atom_item.dart'; | |||||
| export 'domain/atom_link.dart'; | |||||
| export 'domain/atom_person.dart'; | |||||
| export 'domain/atom_source.dart'; | |||||
| export 'domain/rss_category.dart'; | |||||
| export 'domain/rss_cloud.dart'; | |||||
| export 'domain/rss_feed.dart'; | |||||
| export 'domain/rss_image.dart'; | |||||
| export 'domain/rss_item.dart'; | |||||
| export 'domain/rss_source.dart'; | |||||
| @@ -1,7 +1,8 @@ | |||||
| import 'dart:io'; | |||||
| import 'dart:core'; | import 'dart:core'; | ||||
| import 'dart:io'; | |||||
| import 'package:test/test.dart'; | import 'package:test/test.dart'; | ||||
| import 'package:webfeed/domain/atom_feed.dart'; | |||||
| import 'package:webfeed/webfeed.dart'; | |||||
| void main() { | void main() { | ||||
| test("parsing Invalid.xml", () { | test("parsing Invalid.xml", () { | ||||
| @@ -12,7 +13,7 @@ void main() { | |||||
| fail("Should throw Argument Error"); | fail("Should throw Argument Error"); | ||||
| } on ArgumentError {} | } on ArgumentError {} | ||||
| }); | }); | ||||
| test("parsing Atom.xml", () { | test("parsing Atom.xml", () { | ||||
| var xmlString = new File("test/xml/Atom.xml").readAsStringSync(); | var xmlString = new File("test/xml/Atom.xml").readAsStringSync(); | ||||
| @@ -71,7 +72,7 @@ void main() { | |||||
| expect(item.links.first.href, "http://foo.bar.news/entry"); | expect(item.links.first.href, "http://foo.bar.news/entry"); | ||||
| expect(item.links.first.title, "Foo bar news html"); | expect(item.links.first.title, "Foo bar news html"); | ||||
| expect(item.links.first.length, 1000); | expect(item.links.first.length, 1000); | ||||
| expect(item.categories.length, 2); | expect(item.categories.length, 2); | ||||
| expect(item.categories.first.term, "foo entry category"); | expect(item.categories.first.term, "foo entry category"); | ||||
| expect(item.categories.first.scheme, "this-is-foo-entry-scheme"); | expect(item.categories.first.scheme, "this-is-foo-entry-scheme"); | ||||
| @@ -87,4 +88,4 @@ void main() { | |||||
| expect(item.content, "This is content 1"); | expect(item.content, "This is content 1"); | ||||
| expect(item.rights, "This is rights 1"); | expect(item.rights, "This is rights 1"); | ||||
| }); | }); | ||||
| } | |||||
| } | |||||
| @@ -1,7 +1,8 @@ | |||||
| import 'dart:io'; | |||||
| import 'dart:core'; | import 'dart:core'; | ||||
| import 'dart:io'; | |||||
| import 'package:test/test.dart'; | import 'package:test/test.dart'; | ||||
| import 'package:webfeed/domain/rss_feed.dart'; | |||||
| import 'package:webfeed/webfeed.dart'; | |||||
| void main() { | void main() { | ||||
| test("parsing Invalid.xml", () { | test("parsing Invalid.xml", () { | ||||