feedjira 3.2.0 → 3.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/general-issue.md +8 -0
  3. data/.github/workflows/ruby.yml +1 -1
  4. data/.rubocop.yml +33 -1
  5. data/CHANGELOG.md +13 -0
  6. data/Gemfile +0 -3
  7. data/README.md +1 -2
  8. data/feedjira.gemspec +7 -3
  9. data/lib/feedjira/core_ext/date.rb +3 -2
  10. data/lib/feedjira/core_ext/time.rb +1 -1
  11. data/lib/feedjira/date_time_utilities/date_time_language_parser.rb +1 -1
  12. data/lib/feedjira/feed_utilities.rb +3 -3
  13. data/lib/feedjira/parser/atom_feed_burner.rb +1 -1
  14. data/lib/feedjira/parser/atom_google_alerts_entry.rb +2 -0
  15. data/lib/feedjira/parser/atom_youtube.rb +2 -2
  16. data/lib/feedjira/parser/google_docs_atom.rb +1 -1
  17. data/lib/feedjira/parser/itunes_rss_category.rb +2 -2
  18. data/lib/feedjira/parser/podlove_chapter.rb +2 -2
  19. data/lib/feedjira/parser/rss.rb +1 -1
  20. data/lib/feedjira/parser/rss_feed_burner.rb +2 -2
  21. data/lib/feedjira/rss_entry_utilities.rb +5 -1
  22. data/lib/feedjira/version.rb +1 -1
  23. data/lib/feedjira.rb +2 -2
  24. data/spec/feedjira/feed_spec.rb +11 -10
  25. data/spec/feedjira/{date_time_utilities_spec.rb → feed_utilities_date_time_spec.rb} +8 -8
  26. data/spec/feedjira/{feed_entry_utilities_spec.rb → feed_utilities_entry_spec.rb} +9 -9
  27. data/spec/feedjira/feed_utilities_spec.rb +37 -42
  28. data/spec/feedjira/parser/atom_entry_spec.rb +16 -16
  29. data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +10 -10
  30. data/spec/feedjira/parser/atom_feed_burner_spec.rb +26 -26
  31. data/spec/feedjira/parser/atom_google_alerts_entry_spec.rb +6 -6
  32. data/spec/feedjira/parser/atom_google_alerts_spec.rb +13 -13
  33. data/spec/feedjira/parser/atom_spec.rb +23 -23
  34. data/spec/feedjira/parser/atom_youtube_entry_spec.rb +19 -19
  35. data/spec/feedjira/parser/atom_youtube_spec.rb +13 -13
  36. data/spec/feedjira/parser/google_docs_atom_entry_spec.rb +3 -3
  37. data/spec/feedjira/parser/google_docs_atom_spec.rb +8 -8
  38. data/spec/feedjira/parser/{itunes_rss_item_spec.rb → i_tunes_rss_item_spec.rb} +18 -18
  39. data/spec/feedjira/parser/{itunes_rss_owner_spec.rb → i_tunes_rss_owner_spec.rb} +3 -3
  40. data/spec/feedjira/parser/itunes_rss_spec.rb +26 -26
  41. data/spec/feedjira/parser/json_feed_item_spec.rb +11 -11
  42. data/spec/feedjira/parser/json_feed_spec.rb +14 -14
  43. data/spec/feedjira/parser/podlove_chapter_spec.rb +7 -7
  44. data/spec/feedjira/parser/rss_entry_spec.rb +26 -20
  45. data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +16 -15
  46. data/spec/feedjira/parser/rss_feed_burner_spec.rb +17 -17
  47. data/spec/feedjira/parser/rss_spec.rb +25 -25
  48. data/spec/feedjira/preprocessor_spec.rb +3 -3
  49. data/spec/feedjira_spec.rb +41 -41
  50. data/spec/sample_feeds/RSSWithComments.xml +277 -0
  51. data/spec/sample_feeds.rb +2 -1
  52. metadata +68 -77
@@ -4,10 +4,10 @@ require "spec_helper"
4
4
 
5
5
  RSpec.describe Feedjira do
6
6
  describe ".parse" do
7
- context "allows the parser to be specified" do
8
- it "should parse an rss feed" do
9
- parser = Feedjira.parser_for_xml(sample_rss_feed)
10
- feed = Feedjira.parse(sample_rss_feed, parser: parser)
7
+ context "when the parser is specified" do
8
+ it "parses an rss feed" do
9
+ parser = described_class.parser_for_xml(sample_rss_feed)
10
+ feed = described_class.parse(sample_rss_feed, parser: parser)
11
11
 
12
12
  expect(feed.title).to eq "Tender Lovemaking"
13
13
  published = Time.parse_safely "Thu Dec 04 17:17:49 UTC 2008"
@@ -17,40 +17,40 @@ RSpec.describe Feedjira do
17
17
  end
18
18
 
19
19
  context "when there's an available parser" do
20
- it "should parse an rdf feed" do
21
- feed = Feedjira.parse(sample_rdf_feed)
20
+ it "parses an rdf feed" do
21
+ feed = described_class.parse(sample_rdf_feed)
22
22
  expect(feed.title).to eq "HREF Considered Harmful"
23
23
  published = Time.parse_safely("Tue Sep 02 19:50:07 UTC 2008")
24
24
  expect(feed.entries.first.published).to eq published
25
25
  expect(feed.entries.size).to eq 10
26
26
  end
27
27
 
28
- it "should parse an rss feed" do
29
- feed = Feedjira.parse(sample_rss_feed)
28
+ it "parses an rss feed" do
29
+ feed = described_class.parse(sample_rss_feed)
30
30
  expect(feed.title).to eq "Tender Lovemaking"
31
31
  published = Time.parse_safely "Thu Dec 04 17:17:49 UTC 2008"
32
32
  expect(feed.entries.first.published).to eq published
33
33
  expect(feed.entries.size).to eq 10
34
34
  end
35
35
 
36
- it "should parse an atom feed" do
37
- feed = Feedjira.parse(sample_atom_feed)
36
+ it "parses an atom feed" do
37
+ feed = described_class.parse(sample_atom_feed)
38
38
  expect(feed.title).to eq "Amazon Web Services Blog"
39
39
  published = Time.parse_safely "Fri Jan 16 18:21:00 UTC 2009"
40
40
  expect(feed.entries.first.published).to eq published
41
41
  expect(feed.entries.size).to eq 10
42
42
  end
43
43
 
44
- it "should parse an feedburner atom feed" do
45
- feed = Feedjira.parse(sample_feedburner_atom_feed)
44
+ it "parses an feedburner atom feed" do
45
+ feed = described_class.parse(sample_feedburner_atom_feed)
46
46
  expect(feed.title).to eq "Paul Dix Explains Nothing"
47
47
  published = Time.parse_safely "Thu Jan 22 15:50:22 UTC 2009"
48
48
  expect(feed.entries.first.published).to eq published
49
49
  expect(feed.entries.size).to eq 5
50
50
  end
51
51
 
52
- it "should parse an itunes feed" do
53
- feed = Feedjira.parse(sample_itunes_feed)
52
+ it "parses an itunes feed" do
53
+ feed = described_class.parse(sample_itunes_feed)
54
54
  expect(feed.title).to eq "All About Everything"
55
55
  published = Time.parse_safely "Wed, 15 Jun 2005 19:00:00 GMT"
56
56
  expect(feed.entries.first.published).to eq published
@@ -58,7 +58,7 @@ RSpec.describe Feedjira do
58
58
  end
59
59
 
60
60
  it "with nested dc:identifier it does not overwrite entry_id" do
61
- feed = Feedjira.parse(sample_rss_feed_huffpost_ca)
61
+ feed = described_class.parse(sample_rss_feed_huffpost_ca)
62
62
  expect(feed.title.strip).to eq "HuffPost Canada - Athena2 - All Posts"
63
63
  expect(feed.entries.size).to eq 2
64
64
  expect(feed.entries.first.id).to eq "23246627"
@@ -66,9 +66,9 @@ RSpec.describe Feedjira do
66
66
  end
67
67
 
68
68
  it "does not fail if multiple published dates exist and some are unparseable" do
69
- expect(Feedjira.logger).to receive(:warn).twice
69
+ expect(described_class.logger).to receive(:warn).twice
70
70
 
71
- feed = Feedjira.parse(sample_invalid_date_format_feed)
71
+ feed = described_class.parse(sample_invalid_date_format_feed)
72
72
  expect(feed.title).to eq "Invalid date format feed"
73
73
  published = Time.parse_safely "Mon, 16 Oct 2017 15:10:00 GMT"
74
74
  expect(feed.entries.first.published).to eq published
@@ -77,23 +77,23 @@ RSpec.describe Feedjira do
77
77
  end
78
78
 
79
79
  context "when there's no available parser" do
80
- it "raises Feedjira::NoParserAvailable" do
80
+ it "raises described_class::NoParserAvailable" do
81
81
  expect do
82
- Feedjira.parse("I'm an invalid feed")
83
- end.to raise_error(Feedjira::NoParserAvailable)
82
+ described_class.parse("I'm an invalid feed")
83
+ end.to raise_error(described_class::NoParserAvailable)
84
84
  end
85
85
  end
86
86
 
87
- it "should parse an feedburner rss feed" do
88
- feed = Feedjira.parse(sample_rss_feed_burner_feed)
87
+ it "parses an feedburner rss feed" do
88
+ feed = described_class.parse(sample_rss_feed_burner_feed)
89
89
  expect(feed.title).to eq "TechCrunch"
90
90
  published = Time.parse_safely "Wed Nov 02 17:25:27 UTC 2011"
91
91
  expect(feed.entries.first.published).to eq published
92
92
  expect(feed.entries.size).to eq 20
93
93
  end
94
94
 
95
- it "should parse an RSS feed with an a10 namespace" do
96
- feed = Feedjira.parse(sample_rss_feed_with_a10_namespace)
95
+ it "parses an RSS feed with an a10 namespace" do
96
+ feed = described_class.parse(sample_rss_feed_with_a10_namespace)
97
97
  expect(feed.url).to eq "http://www.example.com/"
98
98
  expect(feed.entries.first.url).to eq "http://www.example.com/5"
99
99
  expect(feed.entries.first.updated).to eq Time.parse_safely("2020-05-14T10:00:18Z")
@@ -105,44 +105,44 @@ RSpec.describe Feedjira do
105
105
  describe ".parser_for_xml" do
106
106
  it "with Google Docs atom feed it returns the GoogleDocsAtom parser" do
107
107
  xml = sample_google_docs_list_feed
108
- actual_parser = Feedjira.parser_for_xml(xml)
109
- expect(actual_parser).to eq Feedjira::Parser::GoogleDocsAtom
108
+ actual_parser = described_class.parser_for_xml(xml)
109
+ expect(actual_parser).to eq described_class::Parser::GoogleDocsAtom
110
110
  end
111
111
 
112
112
  it "with an atom feed it returns the Atom parser" do
113
113
  xml = sample_atom_feed
114
- actual_parser = Feedjira.parser_for_xml(xml)
115
- expect(actual_parser).to eq Feedjira::Parser::Atom
114
+ actual_parser = described_class.parser_for_xml(xml)
115
+ expect(actual_parser).to eq described_class::Parser::Atom
116
116
  end
117
117
 
118
118
  it "with an atom feedburner feed it returns the AtomFeedBurner parser" do
119
119
  xml = sample_feedburner_atom_feed
120
- actual_parser = Feedjira.parser_for_xml(xml)
121
- expect(actual_parser).to eq Feedjira::Parser::AtomFeedBurner
120
+ actual_parser = described_class.parser_for_xml(xml)
121
+ expect(actual_parser).to eq described_class::Parser::AtomFeedBurner
122
122
  end
123
123
 
124
124
  it "with an rdf feed it returns the RSS parser" do
125
125
  xml = sample_rdf_feed
126
- actual_parser = Feedjira.parser_for_xml(xml)
127
- expect(actual_parser).to eq Feedjira::Parser::RSS
126
+ actual_parser = described_class.parser_for_xml(xml)
127
+ expect(actual_parser).to eq described_class::Parser::RSS
128
128
  end
129
129
 
130
130
  it "with an rss feedburner feed it returns the RSSFeedBurner parser" do
131
131
  xml = sample_rss_feed_burner_feed
132
- actual_parser = Feedjira.parser_for_xml(xml)
133
- expect(actual_parser).to eq Feedjira::Parser::RSSFeedBurner
132
+ actual_parser = described_class.parser_for_xml(xml)
133
+ expect(actual_parser).to eq described_class::Parser::RSSFeedBurner
134
134
  end
135
135
 
136
136
  it "with an rss 2.0 feed it returns the RSS parser" do
137
137
  xml = sample_rss_feed
138
- actual_parser = Feedjira.parser_for_xml(xml)
139
- expect(actual_parser).to eq Feedjira::Parser::RSS
138
+ actual_parser = described_class.parser_for_xml(xml)
139
+ expect(actual_parser).to eq described_class::Parser::RSS
140
140
  end
141
141
 
142
142
  it "with an itunes feed it returns the RSS parser" do
143
143
  xml = sample_itunes_feed
144
- actual_parser = Feedjira.parser_for_xml(xml)
145
- expect(actual_parser).to eq Feedjira::Parser::ITunesRSS
144
+ actual_parser = described_class.parser_for_xml(xml)
145
+ expect(actual_parser).to eq described_class::Parser::ITunesRSS
146
146
  end
147
147
 
148
148
  context "when parsers are configured" do
@@ -154,12 +154,12 @@ RSpec.describe Feedjira do
154
154
  end
155
155
  end
156
156
 
157
- Feedjira.configure { |config| config.parsers = [new_parser] }
157
+ described_class.configure { |config| config.parsers = [new_parser] }
158
158
 
159
- parser = Feedjira.parser_for_xml(xml)
159
+ parser = described_class.parser_for_xml(xml)
160
160
  expect(parser).to eq(new_parser)
161
161
 
162
- Feedjira.reset_configuration!
162
+ described_class.reset_configuration!
163
163
  end
164
164
  end
165
165
  end
@@ -0,0 +1,277 @@
1
+ <rss version="2.0">
2
+ <channel>
3
+ <title>Hacker News</title>
4
+ <link>https://news.ycombinator.com/</link>
5
+ <description>Links for the intellectually curious, ranked by readers.</description>
6
+ <item>
7
+ <title>AWS Lambda Function URLs: Built-In HTTPS Endpoints for Lambda</title>
8
+ <link>https://aws.amazon.com/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/</link>
9
+ <pubDate>Wed, 6 Apr 2022 21:07:47 +0000</pubDate>
10
+ <comments>https://news.ycombinator.com/item?id=30937433</comments>
11
+ <description>
12
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30937433">Comments</a>]]>
13
+ </description>
14
+ </item>
15
+ <item>
16
+ <title>Dall-E 2</title>
17
+ <link>https://openai.com/dall-e-2/</link>
18
+ <pubDate>Wed, 6 Apr 2022 14:09:04 +0000</pubDate>
19
+ <comments>https://news.ycombinator.com/item?id=30932095</comments>
20
+ <description>
21
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30932095">Comments</a>]]>
22
+ </description>
23
+ </item>
24
+ <item>
25
+ <title>Twitter Bluesky: A Self-Authenticating Social Protocol</title>
26
+ <link>https://blueskyweb.xyz/blog/3-6-2022-a-self-authenticating-social-protocol</link>
27
+ <pubDate>Wed, 6 Apr 2022 21:23:54 +0000</pubDate>
28
+ <comments>https://news.ycombinator.com/item?id=30937578</comments>
29
+ <description>
30
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30937578">Comments</a>]]>
31
+ </description>
32
+ </item>
33
+ <item>
34
+ <title>The existence of true one-way functions depends on Kolmogorov complexity</title>
35
+ <link>https://www.quantamagazine.org/researchers-identify-master-problem-underlying-all-cryptography-20220406/</link>
36
+ <pubDate>Wed, 6 Apr 2022 17:01:46 +0000</pubDate>
37
+ <comments>https://news.ycombinator.com/item?id=30934721</comments>
38
+ <description>
39
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30934721">Comments</a>]]>
40
+ </description>
41
+ </item>
42
+ <item>
43
+ <title>You can do a lot with an empty file</title>
44
+ <link>https://rachelbythebay.com/w/2022/04/06/text/</link>
45
+ <pubDate>Wed, 6 Apr 2022 19:16:37 +0000</pubDate>
46
+ <comments>https://news.ycombinator.com/item?id=30936333</comments>
47
+ <description>
48
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30936333">Comments</a>]]>
49
+ </description>
50
+ </item>
51
+ <item>
52
+ <title>λ-2D: An exploration of drawing as programming language</title>
53
+ <link>https://www.media.mit.edu/projects/2d-an-exploration-of-drawing-as-programming-language-featuring-ideas-from-lambda-calculus/overview/</link>
54
+ <pubDate>Wed, 6 Apr 2022 14:44:41 +0000</pubDate>
55
+ <comments>https://news.ycombinator.com/item?id=30932552</comments>
56
+ <description>
57
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30932552">Comments</a>]]>
58
+ </description>
59
+ </item>
60
+ <item>
61
+ <title>Your competitor wrote the RFP you&#x27;re bidding on</title>
62
+ <link>https://www.sofuckingagile.com/blog/your-competitor-wrote-the-rfp-you-are-bidding-on</link>
63
+ <pubDate>Wed, 6 Apr 2022 14:48:40 +0000</pubDate>
64
+ <comments>https://news.ycombinator.com/item?id=30932596</comments>
65
+ <description>
66
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30932596">Comments</a>]]>
67
+ </description>
68
+ </item>
69
+ <item>
70
+ <title>Inside London&#x27;s first Ketamine therapy clinic</title>
71
+ <link>https://www.leafie.co.uk/articles/inside-londons-first-ketamine-therapy-clinic/</link>
72
+ <pubDate>Wed, 6 Apr 2022 22:08:36 +0000</pubDate>
73
+ <comments>https://news.ycombinator.com/item?id=30938074</comments>
74
+ <description>
75
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30938074">Comments</a>]]>
76
+ </description>
77
+ </item>
78
+ <item>
79
+ <title>Smarking (YC W15) is hiring staff and engineers to digitize the parking industry</title>
80
+ <link>https://jobs.lever.co/smarking/01b7a4c5-28ce-4a4c-9c88-d4cad6c01c76</link>
81
+ <pubDate>Wed, 6 Apr 2022 21:00:55 +0000</pubDate>
82
+ <comments>https://news.ycombinator.com/item?id=30937371</comments>
83
+ <description>
84
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30937371">Comments</a>]]>
85
+ </description>
86
+ </item>
87
+ <item>
88
+ <title>Ask HN: Share your personal site</title>
89
+ <link>https://news.ycombinator.com/item?id=30934529</link>
90
+ <pubDate>Wed, 6 Apr 2022 16:48:33 +0000</pubDate>
91
+ <comments>https://news.ycombinator.com/item?id=30934529</comments>
92
+ <description>
93
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30934529">Comments</a>]]>
94
+ </description>
95
+ </item>
96
+ <item>
97
+ <title>The State of Fortran</title>
98
+ <link>https://arxiv.org/abs/2203.15110</link>
99
+ <pubDate>Wed, 6 Apr 2022 18:20:19 +0000</pubDate>
100
+ <comments>https://news.ycombinator.com/item?id=30935633</comments>
101
+ <description>
102
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30935633">Comments</a>]]>
103
+ </description>
104
+ </item>
105
+ <item>
106
+ <title>A whole website in a single JavaScript file</title>
107
+ <link>https://deno.com/blog/a-whole-website-in-a-single-js-file</link>
108
+ <pubDate>Wed, 6 Apr 2022 16:07:19 +0000</pubDate>
109
+ <comments>https://news.ycombinator.com/item?id=30933831</comments>
110
+ <description>
111
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30933831">Comments</a>]]>
112
+ </description>
113
+ </item>
114
+ <item>
115
+ <title>Language of fungi derived from their electrical spiking activity</title>
116
+ <link>https://royalsocietypublishing.org/doi/10.1098/rsos.211926</link>
117
+ <pubDate>Wed, 6 Apr 2022 13:58:09 +0000</pubDate>
118
+ <comments>https://news.ycombinator.com/item?id=30931998</comments>
119
+ <description>
120
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30931998">Comments</a>]]>
121
+ </description>
122
+ </item>
123
+ <item>
124
+ <title>In defense of simple architectures</title>
125
+ <link>https://danluu.com/simple-architectures/</link>
126
+ <pubDate>Wed, 6 Apr 2022 19:04:29 +0000</pubDate>
127
+ <comments>https://news.ycombinator.com/item?id=30936189</comments>
128
+ <description>
129
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30936189">Comments</a>]]>
130
+ </description>
131
+ </item>
132
+ <item>
133
+ <title>Show HN: MetricFlow – open-source metric framework</title>
134
+ <link>https://github.com/transform-data/metricflow</link>
135
+ <pubDate>Wed, 6 Apr 2022 22:12:03 +0000</pubDate>
136
+ <comments>https://news.ycombinator.com/item?id=30938109</comments>
137
+ <description>
138
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30938109">Comments</a>]]>
139
+ </description>
140
+ </item>
141
+ <item>
142
+ <title>The remarkable brain of a carpet cleaner who speaks 24 languages</title>
143
+ <link>https://www.washingtonpost.com/dc-md-va/interactive/2022/multilingual-hyperpolyglot-brain-languages/</link>
144
+ <pubDate>Tue, 5 Apr 2022 15:31:04 +0000</pubDate>
145
+ <comments>https://news.ycombinator.com/item?id=30920287</comments>
146
+ <description>
147
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30920287">Comments</a>]]>
148
+ </description>
149
+ </item>
150
+ <item>
151
+ <title>It Knows (2011)</title>
152
+ <link>https://www.lrb.co.uk/the-paper/v33/n19/daniel-soar/it-knows</link>
153
+ <pubDate>Wed, 6 Apr 2022 08:26:49 +0000</pubDate>
154
+ <comments>https://news.ycombinator.com/item?id=30929778</comments>
155
+ <description>
156
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30929778">Comments</a>]]>
157
+ </description>
158
+ </item>
159
+ <item>
160
+ <title>GhostSCAD: Marrying OpenSCAD and Golang</title>
161
+ <link>https://jany.st/post/2022-04-04-ghostscad-marrying-openscad-and-golang.html</link>
162
+ <pubDate>Wed, 6 Apr 2022 10:59:47 +0000</pubDate>
163
+ <comments>https://news.ycombinator.com/item?id=30930665</comments>
164
+ <description>
165
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30930665">Comments</a>]]>
166
+ </description>
167
+ </item>
168
+ <item>
169
+ <title>Wolfenstein 3D&#x27;s winding journey from pitch to release</title>
170
+ <link>https://www.gamedeveloper.com/gdc2022/wolfenstein-3d-postmortem</link>
171
+ <pubDate>Sun, 3 Apr 2022 02:07:52 +0000</pubDate>
172
+ <comments>https://news.ycombinator.com/item?id=30893655</comments>
173
+ <description>
174
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30893655">Comments</a>]]>
175
+ </description>
176
+ </item>
177
+ <item>
178
+ <title>MIPS provides highly scalable RISC processor IP</title>
179
+ <link>https://www.mips.com/</link>
180
+ <pubDate>Wed, 6 Apr 2022 18:24:26 +0000</pubDate>
181
+ <comments>https://news.ycombinator.com/item?id=30935683</comments>
182
+ <description>
183
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30935683">Comments</a>]]>
184
+ </description>
185
+ </item>
186
+ <item>
187
+ <title>Intel&#x27;s “Cripple AMD” Function (2019)</title>
188
+ <link>https://www.agner.org/forum/viewtopic.php?t=6</link>
189
+ <pubDate>Wed, 6 Apr 2022 17:27:26 +0000</pubDate>
190
+ <comments>https://news.ycombinator.com/item?id=30935064</comments>
191
+ <description>
192
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30935064">Comments</a>]]>
193
+ </description>
194
+ </item>
195
+ <item>
196
+ <title>GoodGuesser</title>
197
+ <link>https://twitter.com/lisperati/status/1509859692855631881</link>
198
+ <pubDate>Tue, 5 Apr 2022 22:30:05 +0000</pubDate>
199
+ <comments>https://news.ycombinator.com/item?id=30925917</comments>
200
+ <description>
201
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30925917">Comments</a>]]>
202
+ </description>
203
+ </item>
204
+ <item>
205
+ <title>Tailscale’s human-scale networks are still controlled by Google and Microsoft</title>
206
+ <link>https://iliana.fyi/blog/tailscale-auth-and-threat-modeling/</link>
207
+ <pubDate>Mon, 4 Apr 2022 19:41:11 +0000</pubDate>
208
+ <comments>https://news.ycombinator.com/item?id=30911109</comments>
209
+ <description>
210
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30911109">Comments</a>]]>
211
+ </description>
212
+ </item>
213
+ <item>
214
+ <title>Dim, a self-hosted media manager</title>
215
+ <link>https://github.com/Dusk-Labs/dim</link>
216
+ <pubDate>Tue, 5 Apr 2022 18:24:59 +0000</pubDate>
217
+ <comments>https://news.ycombinator.com/item?id=30922871</comments>
218
+ <description>
219
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30922871">Comments</a>]]>
220
+ </description>
221
+ </item>
222
+ <item>
223
+ <title>Home sweet homepage, a comic about growing up online</title>
224
+ <link>https://sailorhg.com/home_sweet_homepage/</link>
225
+ <pubDate>Wed, 6 Apr 2022 19:28:44 +0000</pubDate>
226
+ <comments>https://news.ycombinator.com/item?id=30936462</comments>
227
+ <description>
228
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30936462">Comments</a>]]>
229
+ </description>
230
+ </item>
231
+ <item>
232
+ <title>Show HN: Tilepieces – An open source project for visually editing HTML documents</title>
233
+ <link>https://tilepieces.net</link>
234
+ <pubDate>Wed, 6 Apr 2022 13:14:06 +0000</pubDate>
235
+ <comments>https://news.ycombinator.com/item?id=30931586</comments>
236
+ <description>
237
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30931586">Comments</a>]]>
238
+ </description>
239
+ </item>
240
+ <item>
241
+ <title>TruffleHog v3 – Detect and automatically verify over 600 credential types</title>
242
+ <link>https://github.com/trufflesecurity/trufflehog</link>
243
+ <pubDate>Mon, 4 Apr 2022 19:21:30 +0000</pubDate>
244
+ <comments>https://news.ycombinator.com/item?id=30910893</comments>
245
+ <description>
246
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30910893">Comments</a>]]>
247
+ </description>
248
+ </item>
249
+ <item>
250
+ <title>Casting Silver Bullets (2013)</title>
251
+ <link>https://www.patriciabriggs.com/articles/silver/silverbullets.shtml</link>
252
+ <pubDate>Tue, 5 Apr 2022 20:33:23 +0000</pubDate>
253
+ <comments>https://news.ycombinator.com/item?id=30924635</comments>
254
+ <description>
255
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30924635">Comments</a>]]>
256
+ </description>
257
+ </item>
258
+ <item>
259
+ <title>GenieFramework – Build web applications with Julia</title>
260
+ <link>https://genieframework.com/</link>
261
+ <pubDate>Wed, 6 Apr 2022 08:45:26 +0000</pubDate>
262
+ <comments>https://news.ycombinator.com/item?id=30929873</comments>
263
+ <description>
264
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30929873">Comments</a>]]>
265
+ </description>
266
+ </item>
267
+ <item>
268
+ <title>What’s new in Emacs 28.1?</title>
269
+ <link>https://www.masteringemacs.org/article/whats-new-in-emacs-28-1</link>
270
+ <pubDate>Wed, 6 Apr 2022 11:23:33 +0000</pubDate>
271
+ <comments>https://news.ycombinator.com/item?id=30930816</comments>
272
+ <description>
273
+ <![CDATA[<a href="https://news.ycombinator.com/item?id=30930816">Comments</a>]]>
274
+ </description>
275
+ </item>
276
+ </channel>
277
+ </rss>
data/spec/sample_feeds.rb CHANGED
@@ -34,7 +34,8 @@ module SampleFeeds
34
34
  sample_rss_feed_huffpost_ca: "HuffPostCanada.xml",
35
35
  sample_invalid_date_format_feed: "InvalidDateFormat.xml",
36
36
  sample_rss_feed_permalinks: "Permalinks.xml",
37
- sample_rss_feed_with_a10_namespace: "a10.xml"
37
+ sample_rss_feed_with_a10_namespace: "a10.xml",
38
+ sample_rss_feed_with_comments: "RSSWithComments.xml"
38
39
  }.freeze
39
40
 
40
41
  FEEDS.each do |method, filename|