feedjira 3.2.0 → 3.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/general-issue.md +8 -0
- data/.github/workflows/ruby.yml +1 -1
- data/.rubocop.yml +33 -1
- data/CHANGELOG.md +13 -0
- data/Gemfile +0 -3
- data/README.md +1 -2
- data/feedjira.gemspec +7 -3
- data/lib/feedjira/core_ext/date.rb +3 -2
- data/lib/feedjira/core_ext/time.rb +1 -1
- data/lib/feedjira/date_time_utilities/date_time_language_parser.rb +1 -1
- data/lib/feedjira/feed_utilities.rb +3 -3
- data/lib/feedjira/parser/atom_feed_burner.rb +1 -1
- data/lib/feedjira/parser/atom_google_alerts_entry.rb +2 -0
- data/lib/feedjira/parser/atom_youtube.rb +2 -2
- data/lib/feedjira/parser/google_docs_atom.rb +1 -1
- data/lib/feedjira/parser/itunes_rss_category.rb +2 -2
- data/lib/feedjira/parser/podlove_chapter.rb +2 -2
- data/lib/feedjira/parser/rss.rb +1 -1
- data/lib/feedjira/parser/rss_feed_burner.rb +2 -2
- data/lib/feedjira/rss_entry_utilities.rb +5 -1
- data/lib/feedjira/version.rb +1 -1
- data/lib/feedjira.rb +2 -2
- data/spec/feedjira/feed_spec.rb +11 -10
- data/spec/feedjira/{date_time_utilities_spec.rb → feed_utilities_date_time_spec.rb} +8 -8
- data/spec/feedjira/{feed_entry_utilities_spec.rb → feed_utilities_entry_spec.rb} +9 -9
- data/spec/feedjira/feed_utilities_spec.rb +37 -42
- data/spec/feedjira/parser/atom_entry_spec.rb +16 -16
- data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +10 -10
- data/spec/feedjira/parser/atom_feed_burner_spec.rb +26 -26
- data/spec/feedjira/parser/atom_google_alerts_entry_spec.rb +6 -6
- data/spec/feedjira/parser/atom_google_alerts_spec.rb +13 -13
- data/spec/feedjira/parser/atom_spec.rb +23 -23
- data/spec/feedjira/parser/atom_youtube_entry_spec.rb +19 -19
- data/spec/feedjira/parser/atom_youtube_spec.rb +13 -13
- data/spec/feedjira/parser/google_docs_atom_entry_spec.rb +3 -3
- data/spec/feedjira/parser/google_docs_atom_spec.rb +8 -8
- data/spec/feedjira/parser/{itunes_rss_item_spec.rb → i_tunes_rss_item_spec.rb} +18 -18
- data/spec/feedjira/parser/{itunes_rss_owner_spec.rb → i_tunes_rss_owner_spec.rb} +3 -3
- data/spec/feedjira/parser/itunes_rss_spec.rb +26 -26
- data/spec/feedjira/parser/json_feed_item_spec.rb +11 -11
- data/spec/feedjira/parser/json_feed_spec.rb +14 -14
- data/spec/feedjira/parser/podlove_chapter_spec.rb +7 -7
- data/spec/feedjira/parser/rss_entry_spec.rb +26 -20
- data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +16 -15
- data/spec/feedjira/parser/rss_feed_burner_spec.rb +17 -17
- data/spec/feedjira/parser/rss_spec.rb +25 -25
- data/spec/feedjira/preprocessor_spec.rb +3 -3
- data/spec/feedjira_spec.rb +41 -41
- data/spec/sample_feeds/RSSWithComments.xml +277 -0
- data/spec/sample_feeds.rb +2 -1
- metadata +68 -77
@@ -3,40 +3,40 @@
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
5
|
describe Feedjira::Parser::JSONFeedItem do
|
6
|
-
before
|
6
|
+
before do
|
7
7
|
# I don't really like doing it this way because these unit test should only
|
8
8
|
# rely on JSONFeed, but this is actually how it should work. You would
|
9
9
|
# never just pass entry json straight to the JSONFeedItem
|
10
10
|
@entry = Feedjira::Parser::JSONFeed.parse(sample_json_feed).entries.first
|
11
11
|
end
|
12
12
|
|
13
|
-
it "
|
13
|
+
it "parses the id" do
|
14
14
|
expect(@entry.id).to eq "http://inessential.com/2017/06/02/james_dempsey_and_the_breakpoints_benefi"
|
15
15
|
end
|
16
16
|
|
17
|
-
it "
|
17
|
+
it "parses the url" do
|
18
18
|
expect(@entry.url).to eq "http://inessential.com/2017/06/02/james_dempsey_and_the_breakpoints_benefi"
|
19
19
|
end
|
20
20
|
|
21
|
-
it "
|
21
|
+
it "parses the title" do
|
22
22
|
expect(@entry.title).to eq "James Dempsey and the Breakpoints Benefit App Camp for Girls"
|
23
23
|
end
|
24
24
|
|
25
|
-
it "
|
25
|
+
it "parses the content" do
|
26
26
|
content = "<p>On Wednesday night I know where I’ll be — playing keyboard for a few songs at the James Dempsey and the Breakpoints concert benefitting App Camp for Girls.</p>\n\n<p><a href=\"https://www.classy.org/events/-/e126329\">You should get tickets</a>. It’s a fun time for a great cause.</p>\n\n<p>Bonus: James writes about how <a href=\"http://jamesdempsey.net/2017/06/02/wwdc-in-san-jose-full-circle/\">this concert is full circle for him</a>. It’s a special night.</p>"
|
27
27
|
expect(@entry.content).to eq content
|
28
28
|
end
|
29
29
|
|
30
|
-
it "
|
30
|
+
it "parses the published date" do
|
31
31
|
published = Time.parse_safely "2017-06-02T22:05:47-07:00"
|
32
32
|
expect(@entry.published).to eq published
|
33
33
|
end
|
34
34
|
|
35
|
-
it "
|
35
|
+
it "supports each" do
|
36
36
|
expect(@entry).to respond_to :each
|
37
37
|
end
|
38
38
|
|
39
|
-
it "
|
39
|
+
it "is able to list out all the fields with each" do
|
40
40
|
all_fields = []
|
41
41
|
title_value = ""
|
42
42
|
@entry.each do |field, value|
|
@@ -64,17 +64,17 @@ describe Feedjira::Parser::JSONFeedItem do
|
|
64
64
|
expect(all_fields).to match_array expected_fields
|
65
65
|
end
|
66
66
|
|
67
|
-
it "
|
67
|
+
it "supports checking if a field exists in the entry" do
|
68
68
|
expect(@entry).to include "title"
|
69
69
|
expect(@entry).to include "url"
|
70
70
|
end
|
71
71
|
|
72
|
-
it "
|
72
|
+
it "allows access to fields with hash syntax" do
|
73
73
|
expect(@entry["title"]).to eq "James Dempsey and the Breakpoints Benefit App Camp for Girls"
|
74
74
|
expect(@entry["url"]).to eq "http://inessential.com/2017/06/02/james_dempsey_and_the_breakpoints_benefi"
|
75
75
|
end
|
76
76
|
|
77
|
-
it "
|
77
|
+
it "allows setting field values with hash syntax" do
|
78
78
|
@entry["title"] = "Foobar"
|
79
79
|
expect(@entry.title).to eq "Foobar"
|
80
80
|
end
|
@@ -5,49 +5,49 @@ require "spec_helper"
|
|
5
5
|
module Feedjira
|
6
6
|
module Parser
|
7
7
|
describe ".able_to_parse?" do
|
8
|
-
it "
|
8
|
+
it "returns true for a JSON feed" do
|
9
9
|
expect(JSONFeed).to be_able_to_parse(sample_json_feed)
|
10
10
|
end
|
11
11
|
|
12
|
-
it "
|
13
|
-
expect(JSONFeed).
|
12
|
+
it "returns false for an RSS feed" do
|
13
|
+
expect(JSONFeed).not_to be_able_to_parse(sample_rss_feed)
|
14
14
|
end
|
15
15
|
|
16
|
-
it "
|
17
|
-
expect(JSONFeed).
|
16
|
+
it "returns false for an Atom feed" do
|
17
|
+
expect(JSONFeed).not_to be_able_to_parse(sample_atom_feed)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
describe "parsing" do
|
22
|
-
before
|
22
|
+
before do
|
23
23
|
@feed = JSONFeed.parse(sample_json_feed)
|
24
24
|
end
|
25
25
|
|
26
|
-
it "
|
26
|
+
it "parses the version" do
|
27
27
|
expect(@feed.version).to eq "https://jsonfeed.org/version/1"
|
28
28
|
end
|
29
29
|
|
30
|
-
it "
|
30
|
+
it "parses the title" do
|
31
31
|
expect(@feed.title).to eq "inessential.com"
|
32
32
|
end
|
33
33
|
|
34
|
-
it "
|
34
|
+
it "parses the url" do
|
35
35
|
expect(@feed.url).to eq "http://inessential.com/"
|
36
36
|
end
|
37
37
|
|
38
|
-
it "
|
38
|
+
it "parses the feed_url" do
|
39
39
|
expect(@feed.feed_url).to eq "http://inessential.com/feed.json"
|
40
40
|
end
|
41
41
|
|
42
|
-
it "
|
42
|
+
it "parses the description" do
|
43
43
|
expect(@feed.description).to eq "Brent Simmons’s weblog."
|
44
44
|
end
|
45
45
|
|
46
|
-
it "
|
47
|
-
expect(@feed.expired).to
|
46
|
+
it "parses expired and return default (nil)" do
|
47
|
+
expect(@feed.expired).to be_nil
|
48
48
|
end
|
49
49
|
|
50
|
-
it "
|
50
|
+
it "parses entries" do
|
51
51
|
expect(@feed.entries.size).to eq 20
|
52
52
|
end
|
53
53
|
end
|
@@ -3,20 +3,20 @@
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
5
|
describe Feedjira::Parser::PodloveChapter do
|
6
|
-
before
|
6
|
+
before do
|
7
7
|
@item = Feedjira::Parser::ITunesRSS.parse(sample_podlove_feed).entries.first
|
8
8
|
@chapter = @item.chapters.first
|
9
9
|
end
|
10
10
|
|
11
|
-
it "
|
11
|
+
it "parses chapters" do
|
12
12
|
expect(@item.chapters.size).to eq 15
|
13
13
|
end
|
14
14
|
|
15
|
-
it "
|
15
|
+
it "sorts chapters by time" do
|
16
16
|
expect(@item.chapters.last.title).to eq "Abschied"
|
17
17
|
end
|
18
18
|
|
19
|
-
it "
|
19
|
+
it "parses the start time" do
|
20
20
|
expect(@chapter.start_ntp).to eq "00:00:26.407"
|
21
21
|
expect(@chapter.start).to eq 26.407
|
22
22
|
expect(@item.chapters[1].start).to eq 50
|
@@ -25,15 +25,15 @@ describe Feedjira::Parser::PodloveChapter do
|
|
25
25
|
expect(@item.chapters.last.start).to eq 5700.034
|
26
26
|
end
|
27
27
|
|
28
|
-
it "
|
28
|
+
it "parses the title" do
|
29
29
|
expect(@chapter.title).to eq "Neil DeGrasse Tyson on Science"
|
30
30
|
end
|
31
31
|
|
32
|
-
it "
|
32
|
+
it "parses the link" do
|
33
33
|
expect(@chapter.url).to eq "https://example.com"
|
34
34
|
end
|
35
35
|
|
36
|
-
it "
|
36
|
+
it "parses the image" do
|
37
37
|
expect(@chapter.image).to eq "https://pics.example.com/pic.png"
|
38
38
|
end
|
39
39
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
5
|
describe Feedjira::Parser::RSSEntry do
|
6
|
-
before
|
6
|
+
before do
|
7
7
|
# I don't really like doing it this way because these unit test should only
|
8
8
|
# rely on RSSEntry, but this is actually how it should work. You would
|
9
9
|
# never just pass entry xml straight to the AtomEnry
|
@@ -12,7 +12,7 @@ describe Feedjira::Parser::RSSEntry do
|
|
12
12
|
Feedjira::Feed.add_common_feed_entry_element tag, as: :comment_rss
|
13
13
|
end
|
14
14
|
|
15
|
-
after
|
15
|
+
after do
|
16
16
|
# We change the title in one or more specs to test []=
|
17
17
|
if @entry.title != "Nokogiri’s Slop Feature"
|
18
18
|
feed = Feedjira::Parser::RSS.parse sample_rss_feed
|
@@ -20,45 +20,45 @@ describe Feedjira::Parser::RSSEntry do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
it "
|
23
|
+
it "parses the title" do
|
24
24
|
expect(@entry.title).to eq "Nokogiri’s Slop Feature"
|
25
25
|
end
|
26
26
|
|
27
|
-
it "
|
27
|
+
it "parses the url" do
|
28
28
|
expect(@entry.url).to eq "http://tenderlovemaking.com/2008/12/04/nokogiris-slop-feature/"
|
29
29
|
end
|
30
30
|
|
31
|
-
it "
|
31
|
+
it "parses the author" do
|
32
32
|
expect(@entry.author).to eq "Aaron Patterson"
|
33
33
|
end
|
34
34
|
|
35
|
-
it "
|
35
|
+
it "parses the content" do
|
36
36
|
expect(@entry.content).to eq sample_rss_entry_content
|
37
37
|
end
|
38
38
|
|
39
|
-
it "
|
39
|
+
it "provides a summary" do
|
40
40
|
summary = "Oops! When I released nokogiri version 1.0.7, I totally forgot to talk about Nokogiri::Slop() feature that was added. Why is it called \"slop\"? It lets you sloppily explore documents. Basically, it decorates your document with method_missing() that allows you to search your document via method calls.\nGiven this document:\n\ndoc = Nokogiri::Slop(<<-eohtml)\n<html>\n  <body>\n  [...]"
|
41
41
|
expect(@entry.summary).to eq summary
|
42
42
|
end
|
43
43
|
|
44
|
-
it "
|
44
|
+
it "parses the published date" do
|
45
45
|
published = Time.parse_safely "Thu Dec 04 17:17:49 UTC 2008"
|
46
46
|
expect(@entry.published).to eq published
|
47
47
|
end
|
48
48
|
|
49
|
-
it "
|
49
|
+
it "parses the categories" do
|
50
50
|
expect(@entry.categories).to eq %w[computadora nokogiri rails]
|
51
51
|
end
|
52
52
|
|
53
|
-
it "
|
53
|
+
it "parses the guid as id" do
|
54
54
|
expect(@entry.id).to eq "http://tenderlovemaking.com/?p=198"
|
55
55
|
end
|
56
56
|
|
57
|
-
it "
|
57
|
+
it "supports each" do
|
58
58
|
expect(@entry).to respond_to :each
|
59
59
|
end
|
60
60
|
|
61
|
-
it "
|
61
|
+
it "is able to list out all fields with each" do
|
62
62
|
all_fields = []
|
63
63
|
title_value = ""
|
64
64
|
@entry.each do |field, value|
|
@@ -72,6 +72,7 @@ describe Feedjira::Parser::RSSEntry do
|
|
72
72
|
author
|
73
73
|
categories
|
74
74
|
comment_rss
|
75
|
+
comments
|
75
76
|
content
|
76
77
|
entry_id
|
77
78
|
published
|
@@ -82,38 +83,43 @@ describe Feedjira::Parser::RSSEntry do
|
|
82
83
|
expect(all_fields.sort).to eq expected_fields
|
83
84
|
end
|
84
85
|
|
85
|
-
it "
|
86
|
+
it "supports checking if a field exists in the entry" do
|
86
87
|
expect(@entry).to include "title"
|
87
88
|
expect(@entry).to include "author"
|
88
89
|
end
|
89
90
|
|
90
|
-
it "
|
91
|
+
it "allows access to fields with hash syntax" do
|
91
92
|
expect(@entry["title"]).to eq "Nokogiri’s Slop Feature"
|
92
93
|
expect(@entry["author"]).to eq "Aaron Patterson"
|
93
94
|
end
|
94
95
|
|
95
|
-
it "
|
96
|
+
it "allows setting field values with hash syntax" do
|
96
97
|
@entry["title"] = "Foobar"
|
97
98
|
expect(@entry.title).to eq "Foobar"
|
98
99
|
end
|
99
100
|
|
100
|
-
it "
|
101
|
+
it "ignores urls from guids with isPermaLink='false'" do
|
101
102
|
feed = Feedjira.parse(sample_rss_feed_permalinks)
|
102
|
-
expect(feed.entries[0].url).to
|
103
|
+
expect(feed.entries[0].url).to be_nil
|
103
104
|
end
|
104
105
|
|
105
|
-
it "
|
106
|
+
it "gets urls from guids with isPermaLink='true'" do
|
106
107
|
feed = Feedjira.parse(sample_rss_feed_permalinks)
|
107
108
|
expect(feed.entries[1].url).to eq "http://example.com/2"
|
108
109
|
end
|
109
110
|
|
110
|
-
it "
|
111
|
+
it "gets urls from guid where isPermaLink is unspecified" do
|
111
112
|
feed = Feedjira.parse(sample_rss_feed_permalinks)
|
112
113
|
expect(feed.entries[2].url).to eq "http://example.com/3"
|
113
114
|
end
|
114
115
|
|
115
|
-
it "
|
116
|
+
it "prefers urls from <link> when both guid and link are specified" do
|
116
117
|
feed = Feedjira.parse(sample_rss_feed_permalinks)
|
117
118
|
expect(feed.entries[3].url).to eq "http://example.com/4"
|
118
119
|
end
|
120
|
+
|
121
|
+
it "exposes comments URL" do
|
122
|
+
feed = Feedjira.parse(sample_rss_feed_with_comments)
|
123
|
+
expect(feed.entries[0].comments).to eq "https://news.ycombinator.com/item?id=30937433"
|
124
|
+
end
|
119
125
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
5
|
describe Feedjira::Parser::RSSFeedBurnerEntry do
|
6
|
-
before
|
6
|
+
before do
|
7
7
|
tag = "wfw:commentRss"
|
8
8
|
Feedjira::Feed.add_common_feed_entry_element(tag, as: :comment_rss)
|
9
9
|
# I don't really like doing it this way because these unit test should only
|
@@ -13,7 +13,7 @@ describe Feedjira::Parser::RSSFeedBurnerEntry do
|
|
13
13
|
@entry = feed.entries.first
|
14
14
|
end
|
15
15
|
|
16
|
-
after
|
16
|
+
after do
|
17
17
|
# We change the title in one or more specs to test []=
|
18
18
|
if @entry.title != "Angie’s List Sets Price Range IPO At $11 To $13 Per Share; Valued At Over $600M"
|
19
19
|
feed = Feedjira::Parser::RSS.parse sample_rss_feed_burner_feed
|
@@ -21,45 +21,45 @@ describe Feedjira::Parser::RSSFeedBurnerEntry do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
it "
|
24
|
+
it "parses the title" do
|
25
25
|
title = "Angie’s List Sets Price Range IPO At $11 To $13 Per Share; Valued At Over $600M"
|
26
26
|
expect(@entry.title).to eq title
|
27
27
|
end
|
28
28
|
|
29
|
-
it "
|
29
|
+
it "parses the original url" do
|
30
30
|
expect(@entry.url).to eq "http://techcrunch.com/2011/11/02/angies-list-prices-ipo-at-11-to-13-per-share-valued-at-over-600m/"
|
31
31
|
end
|
32
32
|
|
33
|
-
it "
|
33
|
+
it "parses the author" do
|
34
34
|
expect(@entry.author).to eq "Leena Rao"
|
35
35
|
end
|
36
36
|
|
37
|
-
it "
|
37
|
+
it "parses the content" do
|
38
38
|
expect(@entry.content).to eq sample_rss_feed_burner_entry_content
|
39
39
|
end
|
40
40
|
|
41
|
-
it "
|
41
|
+
it "provides a summary" do
|
42
42
|
expect(@entry.summary).to eq sample_rss_feed_burner_entry_description
|
43
43
|
end
|
44
44
|
|
45
|
-
it "
|
45
|
+
it "parses the published date" do
|
46
46
|
published = Time.parse_safely "Wed Nov 02 17:25:27 UTC 2011"
|
47
47
|
expect(@entry.published).to eq published
|
48
48
|
end
|
49
49
|
|
50
|
-
it "
|
50
|
+
it "parses the categories" do
|
51
51
|
expect(@entry.categories).to eq ["TC", "angie\\'s list"]
|
52
52
|
end
|
53
53
|
|
54
|
-
it "
|
54
|
+
it "parses the guid as id" do
|
55
55
|
expect(@entry.id).to eq "http://techcrunch.com/?p=446154"
|
56
56
|
end
|
57
57
|
|
58
|
-
it "
|
58
|
+
it "supports each" do
|
59
59
|
expect(@entry).to respond_to :each
|
60
60
|
end
|
61
61
|
|
62
|
-
it "
|
62
|
+
it "is able to list out all fields with each" do
|
63
63
|
all_fields = []
|
64
64
|
title_value = ""
|
65
65
|
|
@@ -75,6 +75,7 @@ describe Feedjira::Parser::RSSFeedBurnerEntry do
|
|
75
75
|
author
|
76
76
|
categories
|
77
77
|
comment_rss
|
78
|
+
comments
|
78
79
|
content
|
79
80
|
entry_id
|
80
81
|
image
|
@@ -86,18 +87,18 @@ describe Feedjira::Parser::RSSFeedBurnerEntry do
|
|
86
87
|
expect(all_fields.sort).to eq expected_fields
|
87
88
|
end
|
88
89
|
|
89
|
-
it "
|
90
|
+
it "supports checking if a field exists in the entry" do
|
90
91
|
expect(@entry).to include "author"
|
91
92
|
expect(@entry).to include "title"
|
92
93
|
end
|
93
94
|
|
94
|
-
it "
|
95
|
+
it "allows access to fields with hash syntax" do
|
95
96
|
expect(@entry["author"]).to eq "Leena Rao"
|
96
97
|
title = "Angie’s List Sets Price Range IPO At $11 To $13 Per Share; Valued At Over $600M"
|
97
98
|
expect(@entry["title"]).to eq title
|
98
99
|
end
|
99
100
|
|
100
|
-
it "
|
101
|
+
it "allows setting field values with hash syntax" do
|
101
102
|
@entry["title"] = "Foobar"
|
102
103
|
expect(@entry.title).to eq "Foobar"
|
103
104
|
end
|
@@ -5,60 +5,60 @@ require "spec_helper"
|
|
5
5
|
module Feedjira
|
6
6
|
module Parser
|
7
7
|
describe "#will_parse?" do
|
8
|
-
it "
|
8
|
+
it "returns true for a feedburner rss feed" do
|
9
9
|
expect(RSSFeedBurner).to be_able_to_parse sample_rss_feed_burner_feed
|
10
10
|
end
|
11
11
|
|
12
|
-
it "
|
13
|
-
expect(RSSFeedBurner).
|
12
|
+
it "returns false for a regular RSS feed" do
|
13
|
+
expect(RSSFeedBurner).not_to be_able_to_parse sample_rss_feed
|
14
14
|
end
|
15
15
|
|
16
|
-
it "
|
17
|
-
expect(RSSFeedBurner).
|
16
|
+
it "returns false for a feedburner atom feed" do
|
17
|
+
expect(RSSFeedBurner).not_to be_able_to_parse sample_feedburner_atom_feed
|
18
18
|
end
|
19
19
|
|
20
|
-
it "
|
21
|
-
expect(RSSFeedBurner).
|
20
|
+
it "returns false for an rdf feed" do
|
21
|
+
expect(RSSFeedBurner).not_to be_able_to_parse sample_rdf_feed
|
22
22
|
end
|
23
23
|
|
24
|
-
it "
|
25
|
-
expect(RSSFeedBurner).
|
24
|
+
it "returns false for a regular atom feed" do
|
25
|
+
expect(RSSFeedBurner).not_to be_able_to_parse sample_atom_feed
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
describe "parsing" do
|
30
|
-
before
|
30
|
+
before do
|
31
31
|
@feed = RSSFeedBurner.parse(sample_rss_feed_burner_feed)
|
32
32
|
end
|
33
33
|
|
34
|
-
it "
|
34
|
+
it "parses the title" do
|
35
35
|
expect(@feed.title).to eq "TechCrunch"
|
36
36
|
end
|
37
37
|
|
38
|
-
it "
|
38
|
+
it "parses the description" do
|
39
39
|
description = "TechCrunch is a group-edited blog that profiles the companies, products and events defining and transforming the new web."
|
40
40
|
expect(@feed.description).to eq description
|
41
41
|
end
|
42
42
|
|
43
|
-
it "
|
43
|
+
it "parses the url" do
|
44
44
|
expect(@feed.url).to eq "http://techcrunch.com"
|
45
45
|
end
|
46
46
|
|
47
|
-
it "
|
47
|
+
it "parses the last build date" do
|
48
48
|
expect(@feed.last_built).to eq "Wed, 02 Nov 2011 17:29:59 +0000"
|
49
49
|
end
|
50
50
|
|
51
|
-
it "
|
51
|
+
it "parses the hub urls" do
|
52
52
|
expect(@feed.hubs.count).to eq 2
|
53
53
|
expect(@feed.hubs.first).to eq "http://pubsubhubbub.appspot.com/"
|
54
54
|
end
|
55
55
|
|
56
|
-
it "
|
56
|
+
it "provides an accessor for the feed_url" do
|
57
57
|
expect(@feed).to respond_to :feed_url
|
58
58
|
expect(@feed).to respond_to :feed_url=
|
59
59
|
end
|
60
60
|
|
61
|
-
it "
|
61
|
+
it "parses entries" do
|
62
62
|
expect(@feed.entries.size).to eq 20
|
63
63
|
end
|
64
64
|
end
|
@@ -4,88 +4,88 @@ require "spec_helper"
|
|
4
4
|
|
5
5
|
describe Feedjira::Parser::RSS do
|
6
6
|
describe "#will_parse?" do
|
7
|
-
it "
|
8
|
-
expect(
|
7
|
+
it "returns true for an RSS feed" do
|
8
|
+
expect(described_class).to be_able_to_parse(sample_rss_feed)
|
9
9
|
end
|
10
10
|
|
11
|
-
it "
|
12
|
-
expect(
|
11
|
+
it "returns false for an atom feed" do
|
12
|
+
expect(described_class).not_to be_able_to_parse(sample_atom_feed)
|
13
13
|
end
|
14
14
|
|
15
|
-
it "
|
16
|
-
able =
|
17
|
-
expect(able).to
|
15
|
+
it "returns false for an rss feedburner feed" do
|
16
|
+
able = described_class.able_to_parse? sample_rss_feed_burner_feed
|
17
|
+
expect(able).to be false
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
describe "parsing" do
|
22
|
-
before
|
23
|
-
@feed =
|
22
|
+
before do
|
23
|
+
@feed = described_class.parse(sample_rss_feed)
|
24
24
|
end
|
25
25
|
|
26
|
-
it "
|
26
|
+
it "parses the version" do
|
27
27
|
expect(@feed.version).to eq "2.0"
|
28
28
|
end
|
29
29
|
|
30
|
-
it "
|
30
|
+
it "parses the title" do
|
31
31
|
expect(@feed.title).to eq "Tender Lovemaking"
|
32
32
|
end
|
33
33
|
|
34
|
-
it "
|
34
|
+
it "parses the description" do
|
35
35
|
expect(@feed.description).to eq "The act of making love, tenderly."
|
36
36
|
end
|
37
37
|
|
38
|
-
it "
|
38
|
+
it "parses the url" do
|
39
39
|
expect(@feed.url).to eq "http://tenderlovemaking.com"
|
40
40
|
end
|
41
41
|
|
42
|
-
it "
|
42
|
+
it "parses the ttl" do
|
43
43
|
expect(@feed.ttl).to eq "60"
|
44
44
|
end
|
45
45
|
|
46
|
-
it "
|
46
|
+
it "parses the last build date" do
|
47
47
|
expect(@feed.last_built).to eq "Sat, 07 Sep 2002 09:42:31 GMT"
|
48
48
|
end
|
49
49
|
|
50
|
-
it "
|
50
|
+
it "parses the hub urls" do
|
51
51
|
expect(@feed.hubs.count).to eq 1
|
52
52
|
expect(@feed.hubs.first).to eq "http://pubsubhubbub.appspot.com/"
|
53
53
|
end
|
54
54
|
|
55
|
-
it "
|
55
|
+
it "provides an accessor for the feed_url" do
|
56
56
|
expect(@feed).to respond_to :feed_url
|
57
57
|
expect(@feed).to respond_to :feed_url=
|
58
58
|
end
|
59
59
|
|
60
|
-
it "
|
60
|
+
it "parses the language" do
|
61
61
|
expect(@feed.language).to eq "en"
|
62
62
|
end
|
63
63
|
|
64
|
-
it "
|
64
|
+
it "parses the image url" do
|
65
65
|
expect(@feed.image.url).to eq "https://tenderlovemaking.com/images/header-logo-text-trimmed.png"
|
66
66
|
end
|
67
67
|
|
68
|
-
it "
|
68
|
+
it "parses the image title" do
|
69
69
|
expect(@feed.image.title).to eq "Tender Lovemaking"
|
70
70
|
end
|
71
71
|
|
72
|
-
it "
|
72
|
+
it "parses the image link" do
|
73
73
|
expect(@feed.image.link).to eq "http://tenderlovemaking.com"
|
74
74
|
end
|
75
75
|
|
76
|
-
it "
|
76
|
+
it "parses the image width" do
|
77
77
|
expect(@feed.image.width).to eq "766"
|
78
78
|
end
|
79
79
|
|
80
|
-
it "
|
80
|
+
it "parses the image height" do
|
81
81
|
expect(@feed.image.height).to eq "138"
|
82
82
|
end
|
83
83
|
|
84
|
-
it "
|
84
|
+
it "parses the image description" do
|
85
85
|
expect(@feed.image.description).to eq "The act of making love, tenderly."
|
86
86
|
end
|
87
87
|
|
88
|
-
it "
|
88
|
+
it "parses entries" do
|
89
89
|
expect(@feed.entries.size).to eq 10
|
90
90
|
end
|
91
91
|
end
|
@@ -6,14 +6,14 @@ describe Feedjira::Preprocessor do
|
|
6
6
|
it "returns the xml as parsed by Nokogiri" do
|
7
7
|
xml = "<xml></xml>"
|
8
8
|
doc = Nokogiri::XML(xml).remove_namespaces!
|
9
|
-
processor =
|
9
|
+
processor = described_class.new xml
|
10
10
|
escaped = processor.to_xml
|
11
11
|
|
12
12
|
expect(escaped).to eq doc.to_xml
|
13
13
|
end
|
14
14
|
|
15
15
|
it "escapes markup in xhtml content" do
|
16
|
-
processor =
|
16
|
+
processor = described_class.new sample_atom_xhtml_feed
|
17
17
|
escaped = processor.to_xml
|
18
18
|
escaped_parts = escaped.split "\n"
|
19
19
|
|
@@ -23,7 +23,7 @@ describe Feedjira::Preprocessor do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
it "leaves escaped html within pre tag" do
|
26
|
-
processor =
|
26
|
+
processor = described_class.new(sample_atom_xhtml_with_escpaed_html_in_pre_tag_feed)
|
27
27
|
escaped = processor.to_xml
|
28
28
|
expected_pre_tag = " <pre>&lt;b&gt;test&lt;b&gt;</pre>"
|
29
29
|
expect(escaped.split("\n")[7]).to eq(expected_pre_tag)
|