feedjira 3.2.0 → 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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|