feedjira 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +8 -0
- data/.travis.yml +31 -12
- data/CHANGELOG.md +15 -1
- data/Dangerfile +1 -0
- data/Gemfile +2 -1
- data/Rakefile +6 -1
- data/feedjira.gemspec +16 -14
- data/fixtures/vcr_cassettes/fetch_failure.yml +62 -0
- data/fixtures/vcr_cassettes/parse_error.yml +222 -0
- data/fixtures/vcr_cassettes/success.yml +281 -0
- data/lib/feedjira.rb +9 -0
- data/lib/feedjira/core_ext.rb +3 -3
- data/lib/feedjira/core_ext/date.rb +2 -1
- data/lib/feedjira/core_ext/string.rb +1 -1
- data/lib/feedjira/core_ext/time.rb +19 -16
- data/lib/feedjira/date_time_utilities.rb +24 -0
- data/lib/feedjira/date_time_utilities/date_time_language_parser.rb +22 -0
- data/lib/feedjira/date_time_utilities/date_time_pattern_parser.rb +29 -0
- data/lib/feedjira/feed.rb +27 -18
- data/lib/feedjira/feed_entry_utilities.rb +15 -17
- data/lib/feedjira/feed_utilities.rb +26 -21
- data/lib/feedjira/parser/atom.rb +9 -8
- data/lib/feedjira/parser/atom_entry.rb +10 -13
- data/lib/feedjira/parser/atom_feed_burner.rb +8 -10
- data/lib/feedjira/parser/atom_feed_burner_entry.rb +11 -14
- data/lib/feedjira/parser/atom_youtube.rb +20 -0
- data/lib/feedjira/parser/atom_youtube_entry.rb +29 -0
- data/lib/feedjira/parser/google_docs_atom.rb +6 -6
- data/lib/feedjira/parser/google_docs_atom_entry.rb +11 -11
- data/lib/feedjira/parser/itunes_rss.rb +39 -22
- data/lib/feedjira/parser/itunes_rss_category.rb +38 -0
- data/lib/feedjira/parser/itunes_rss_item.rb +28 -20
- data/lib/feedjira/parser/itunes_rss_owner.rb +3 -4
- data/lib/feedjira/parser/podlove_chapter.rb +20 -0
- data/lib/feedjira/parser/rss.rb +10 -8
- data/lib/feedjira/parser/rss_entry.rb +17 -21
- data/lib/feedjira/parser/rss_feed_burner.rb +4 -6
- data/lib/feedjira/parser/rss_feed_burner_entry.rb +23 -28
- data/lib/feedjira/parser/rss_image.rb +15 -0
- data/lib/feedjira/preprocessor.rb +2 -2
- data/lib/feedjira/version.rb +1 -1
- data/spec/feedjira/date_time_utilities_spec.rb +41 -0
- data/spec/feedjira/feed_entry_utilities_spec.rb +23 -19
- data/spec/feedjira/feed_spec.rb +109 -74
- data/spec/feedjira/feed_utilities_spec.rb +65 -63
- data/spec/feedjira/parser/atom_entry_spec.rb +54 -34
- data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +27 -20
- data/spec/feedjira/parser/atom_feed_burner_spec.rb +32 -30
- data/spec/feedjira/parser/atom_spec.rb +50 -48
- data/spec/feedjira/parser/atom_youtube_entry_spec.rb +86 -0
- data/spec/feedjira/parser/atom_youtube_spec.rb +43 -0
- data/spec/feedjira/parser/google_docs_atom_entry_spec.rb +5 -4
- data/spec/feedjira/parser/google_docs_atom_spec.rb +6 -6
- data/spec/feedjira/parser/itunes_rss_item_spec.rb +33 -29
- data/spec/feedjira/parser/itunes_rss_owner_spec.rb +10 -9
- data/spec/feedjira/parser/itunes_rss_spec.rb +83 -30
- data/spec/feedjira/parser/podlove_chapter_spec.rb +37 -0
- data/spec/feedjira/parser/rss_entry_spec.rb +50 -33
- data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +55 -33
- data/spec/feedjira/parser/rss_feed_burner_spec.rb +31 -26
- data/spec/feedjira/parser/rss_spec.rb +56 -24
- data/spec/feedjira/preprocessor_spec.rb +11 -3
- data/spec/sample_feeds.rb +29 -21
- data/spec/sample_feeds/AmazonWebServicesBlog.xml +797 -797
- data/spec/sample_feeds/AtomEscapedHTMLInPreTag.xml +13 -0
- data/spec/sample_feeds/CRE.xml +5849 -0
- data/spec/sample_feeds/FeedBurnerXHTML.xml +400 -400
- data/spec/sample_feeds/ITunesWithSingleQuotedAttributes.xml +67 -0
- data/spec/sample_feeds/PaulDixExplainsNothing.xml +175 -175
- data/spec/sample_feeds/PaulDixExplainsNothingAlternate.xml +175 -175
- data/spec/sample_feeds/PaulDixExplainsNothingFirstEntryContent.xml +16 -16
- data/spec/sample_feeds/PaulDixExplainsNothingWFW.xml +174 -174
- data/spec/sample_feeds/TenderLovemaking.xml +12 -2
- data/spec/sample_feeds/TrotterCashionHome.xml +611 -611
- data/spec/sample_feeds/TypePadNews.xml +368 -368
- data/spec/sample_feeds/itunes.xml +18 -2
- data/spec/sample_feeds/pet_atom.xml +229 -229
- data/spec/sample_feeds/youtube_atom.xml +395 -0
- data/spec/spec_helper.rb +6 -0
- metadata +112 -27
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Feedjira::Parser::PodloveChapter do
|
4
|
+
before(:each) do
|
5
|
+
@item = Feedjira::Parser::ITunesRSS.parse(sample_podlove_feed).entries.first
|
6
|
+
@chapter = @item.chapters.first
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should parse chapters' do
|
10
|
+
expect(@item.chapters.size).to eq 15
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should sort chapters by time' do
|
14
|
+
expect(@item.chapters.last.title).to eq 'Abschied'
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should parse the start time' do
|
18
|
+
expect(@chapter.start_ntp).to eq '00:00:26.407'
|
19
|
+
expect(@chapter.start).to eq 26.407
|
20
|
+
expect(@item.chapters[1].start).to eq 50
|
21
|
+
expect(@item.chapters[2].start).to eq 59.12
|
22
|
+
expect(@item.chapters[3].start).to eq 89.201
|
23
|
+
expect(@item.chapters.last.start).to eq 5700.034
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should parse the title' do
|
27
|
+
expect(@chapter.title).to eq 'Neil DeGrasse Tyson on Science'
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should parse the link' do
|
31
|
+
expect(@chapter.url).to eq 'https://example.com'
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should parse the image' do
|
35
|
+
expect(@chapter.image).to eq 'https://pics.example.com/pic.png'
|
36
|
+
end
|
37
|
+
end
|
@@ -1,80 +1,97 @@
|
|
1
|
-
|
2
|
-
require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
1
|
+
require 'spec_helper'
|
3
2
|
|
4
3
|
describe Feedjira::Parser::RSSEntry do
|
5
4
|
before(:each) do
|
6
|
-
# I don't really like doing it this way because these unit test should only
|
7
|
-
# but this is actually how it should work. You would
|
5
|
+
# I don't really like doing it this way because these unit test should only
|
6
|
+
# rely on RSSEntry, but this is actually how it should work. You would
|
7
|
+
# never just pass entry xml straight to the AtomEnry
|
8
8
|
@entry = Feedjira::Parser::RSS.parse(sample_rss_feed).entries.first
|
9
|
-
|
9
|
+
tag = 'wfw:commentRss'
|
10
|
+
Feedjira::Feed.add_common_feed_entry_element tag, as: :comment_rss
|
10
11
|
end
|
11
12
|
|
12
13
|
after(:each) do
|
13
14
|
# We change the title in one or more specs to test []=
|
14
|
-
if @entry.title !=
|
15
|
-
|
15
|
+
if @entry.title != 'Nokogiri’s Slop Feature'
|
16
|
+
feed = Feedjira::Parser::RSS.parse sample_rss_feed
|
17
|
+
@entry.title = feed.entries.first.title
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
19
|
-
it
|
20
|
-
expect(@entry.title).to eq
|
21
|
+
it 'should parse the title' do
|
22
|
+
expect(@entry.title).to eq 'Nokogiri’s Slop Feature'
|
21
23
|
end
|
22
24
|
|
23
|
-
it
|
24
|
-
expect(@entry.url).to eq
|
25
|
+
it 'should parse the url' do
|
26
|
+
expect(@entry.url).to eq 'http://tenderlovemaking.com/2008/12/04/nokogiris-slop-feature/'
|
25
27
|
end
|
26
28
|
|
27
|
-
it
|
28
|
-
expect(@entry.author).to eq
|
29
|
+
it 'should parse the author' do
|
30
|
+
expect(@entry.author).to eq 'Aaron Patterson'
|
29
31
|
end
|
30
32
|
|
31
|
-
it
|
33
|
+
it 'should parse the content' do
|
32
34
|
expect(@entry.content).to eq sample_rss_entry_content
|
33
35
|
end
|
34
36
|
|
35
|
-
it
|
36
|
-
|
37
|
+
it 'should provide a summary' do
|
38
|
+
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  [...]" # rubocop:disable Metrics/LineLength
|
39
|
+
expect(@entry.summary).to eq summary
|
37
40
|
end
|
38
41
|
|
39
|
-
it
|
40
|
-
|
42
|
+
it 'should parse the published date' do
|
43
|
+
published = Time.parse_safely 'Thu Dec 04 17:17:49 UTC 2008'
|
44
|
+
expect(@entry.published).to eq published
|
41
45
|
end
|
42
46
|
|
43
|
-
it
|
44
|
-
expect(@entry.categories).to eq
|
47
|
+
it 'should parse the categories' do
|
48
|
+
expect(@entry.categories).to eq %w(computadora nokogiri rails)
|
45
49
|
end
|
46
50
|
|
47
|
-
it
|
48
|
-
expect(@entry.id).to eq
|
51
|
+
it 'should parse the guid as id' do
|
52
|
+
expect(@entry.id).to eq 'http://tenderlovemaking.com/?p=198'
|
49
53
|
end
|
50
54
|
|
51
|
-
it
|
55
|
+
it 'should support each' do
|
52
56
|
expect(@entry).to respond_to :each
|
53
57
|
end
|
54
58
|
|
55
|
-
it
|
59
|
+
it 'should be able to list out all fields with each' do
|
56
60
|
all_fields = []
|
57
61
|
title_value = ''
|
58
62
|
@entry.each do |field, value|
|
59
63
|
all_fields << field
|
60
64
|
title_value = value if field == 'title'
|
61
65
|
end
|
62
|
-
|
63
|
-
expect(title_value).to eq
|
66
|
+
|
67
|
+
expect(title_value).to eq 'Nokogiri’s Slop Feature'
|
68
|
+
|
69
|
+
expected_fields = %w(
|
70
|
+
author
|
71
|
+
categories
|
72
|
+
comment_rss
|
73
|
+
content
|
74
|
+
entry_id
|
75
|
+
published
|
76
|
+
summary
|
77
|
+
title
|
78
|
+
url
|
79
|
+
)
|
80
|
+
expect(all_fields.sort).to eq expected_fields
|
64
81
|
end
|
65
82
|
|
66
|
-
it
|
83
|
+
it 'should support checking if a field exists in the entry' do
|
67
84
|
expect(@entry).to include 'title'
|
68
85
|
expect(@entry).to include 'author'
|
69
86
|
end
|
70
87
|
|
71
|
-
it
|
72
|
-
expect(@entry['title']).to eq
|
73
|
-
expect(@entry['author']).to eq
|
88
|
+
it 'should allow access to fields with hash syntax' do
|
89
|
+
expect(@entry['title']).to eq 'Nokogiri’s Slop Feature'
|
90
|
+
expect(@entry['author']).to eq 'Aaron Patterson'
|
74
91
|
end
|
75
92
|
|
76
|
-
it
|
77
|
-
@entry['title'] =
|
78
|
-
expect(@entry.title).to eq
|
93
|
+
it 'should allow setting field values with hash syntax' do
|
94
|
+
@entry['title'] = 'Foobar'
|
95
|
+
expect(@entry.title).to eq 'Foobar'
|
79
96
|
end
|
80
97
|
end
|
@@ -1,80 +1,102 @@
|
|
1
|
-
|
2
|
-
require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
1
|
+
require 'spec_helper'
|
3
2
|
|
4
3
|
describe Feedjira::Parser::RSSFeedBurnerEntry do
|
5
4
|
before(:each) do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
tag = 'wfw:commentRss'
|
6
|
+
Feedjira::Feed.add_common_feed_entry_element(tag, as: :comment_rss)
|
7
|
+
# I don't really like doing it this way because these unit test should only
|
8
|
+
# rely on RSSEntry, but this is actually how it should work. You would
|
9
|
+
# never just pass entry xml straight to the AtomEnry
|
10
|
+
feed = Feedjira::Parser::RSSFeedBurner.parse sample_rss_feed_burner_feed
|
11
|
+
@entry = feed.entries.first
|
10
12
|
end
|
11
13
|
|
12
14
|
after(:each) do
|
13
15
|
# We change the title in one or more specs to test []=
|
14
|
-
if @entry.title !=
|
15
|
-
|
16
|
+
if @entry.title != 'Angie’s List Sets Price Range IPO At $11 To $13 Per Share; Valued At Over $600M' # rubocop:disable Metrics/LineLength
|
17
|
+
feed = Feedjira::Parser::RSS.parse sample_rss_feed_burner_feed
|
18
|
+
@entry.title = feed.entries.first.title
|
16
19
|
end
|
17
20
|
end
|
18
21
|
|
19
|
-
it
|
20
|
-
|
22
|
+
it 'should parse the title' do
|
23
|
+
title = 'Angie’s List Sets Price Range IPO At $11 To $13 Per Share; Valued At Over $600M' # rubocop:disable Metrics/LineLength
|
24
|
+
expect(@entry.title).to eq title
|
21
25
|
end
|
22
26
|
|
23
|
-
it
|
24
|
-
expect(@entry.url).to eq
|
27
|
+
it 'should parse the original url' do
|
28
|
+
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/'
|
25
29
|
end
|
26
30
|
|
27
|
-
it
|
28
|
-
expect(@entry.author).to eq
|
31
|
+
it 'should parse the author' do
|
32
|
+
expect(@entry.author).to eq 'Leena Rao'
|
29
33
|
end
|
30
34
|
|
31
|
-
it
|
35
|
+
it 'should parse the content' do
|
32
36
|
expect(@entry.content).to eq sample_rss_feed_burner_entry_content
|
33
37
|
end
|
34
38
|
|
35
|
-
it
|
39
|
+
it 'should provide a summary' do
|
36
40
|
expect(@entry.summary).to eq sample_rss_feed_burner_entry_description
|
37
41
|
end
|
38
42
|
|
39
|
-
it
|
40
|
-
|
43
|
+
it 'should parse the published date' do
|
44
|
+
published = Time.parse_safely 'Wed Nov 02 17:25:27 UTC 2011'
|
45
|
+
expect(@entry.published).to eq published
|
41
46
|
end
|
42
47
|
|
43
|
-
it
|
44
|
-
expect(@entry.categories).to eq [
|
48
|
+
it 'should parse the categories' do
|
49
|
+
expect(@entry.categories).to eq ['TC', "angie\\'s list"]
|
45
50
|
end
|
46
51
|
|
47
|
-
it
|
48
|
-
expect(@entry.id).to eq
|
52
|
+
it 'should parse the guid as id' do
|
53
|
+
expect(@entry.id).to eq 'http://techcrunch.com/?p=446154'
|
49
54
|
end
|
50
55
|
|
51
|
-
it
|
56
|
+
it 'should support each' do
|
52
57
|
expect(@entry).to respond_to :each
|
53
58
|
end
|
54
59
|
|
55
|
-
it
|
60
|
+
it 'should be able to list out all fields with each' do
|
56
61
|
all_fields = []
|
57
62
|
title_value = ''
|
63
|
+
|
58
64
|
@entry.each do |field, value|
|
59
65
|
all_fields << field
|
60
66
|
title_value = value if field == 'title'
|
61
67
|
end
|
62
|
-
|
63
|
-
|
68
|
+
|
69
|
+
title = 'Angie’s List Sets Price Range IPO At $11 To $13 Per Share; Valued At Over $600M' # rubocop:disable Metrics/LineLength
|
70
|
+
expect(title_value).to eq title
|
71
|
+
|
72
|
+
expected_fields = %w(
|
73
|
+
author
|
74
|
+
categories
|
75
|
+
comment_rss
|
76
|
+
content
|
77
|
+
entry_id
|
78
|
+
image
|
79
|
+
published
|
80
|
+
summary
|
81
|
+
title
|
82
|
+
url
|
83
|
+
)
|
84
|
+
expect(all_fields.sort).to eq expected_fields
|
64
85
|
end
|
65
86
|
|
66
|
-
it
|
87
|
+
it 'should support checking if a field exists in the entry' do
|
67
88
|
expect(@entry).to include 'author'
|
68
89
|
expect(@entry).to include 'title'
|
69
90
|
end
|
70
91
|
|
71
|
-
it
|
72
|
-
expect(@entry['author']).to eq
|
73
|
-
|
92
|
+
it 'should allow access to fields with hash syntax' do
|
93
|
+
expect(@entry['author']).to eq 'Leena Rao'
|
94
|
+
title = 'Angie’s List Sets Price Range IPO At $11 To $13 Per Share; Valued At Over $600M' # rubocop:disable Metrics/LineLength
|
95
|
+
expect(@entry['title']).to eq title
|
74
96
|
end
|
75
97
|
|
76
|
-
it
|
77
|
-
@entry['title'] =
|
78
|
-
expect(@entry.title).to eq
|
98
|
+
it 'should allow setting field values with hash syntax' do
|
99
|
+
@entry['title'] = 'Foobar'
|
100
|
+
expect(@entry.title).to eq 'Foobar'
|
79
101
|
end
|
80
102
|
end
|
@@ -1,56 +1,61 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
describe
|
5
|
-
it
|
6
|
-
expect(
|
3
|
+
module Feedjira::Parser
|
4
|
+
describe '#will_parse?' do
|
5
|
+
it 'should return true for a feedburner rss feed' do
|
6
|
+
expect(RSSFeedBurner).to be_able_to_parse sample_rss_feed_burner_feed
|
7
7
|
end
|
8
8
|
|
9
|
-
it
|
10
|
-
|
11
|
-
|
9
|
+
it 'should return false for a regular RSS feed' do
|
10
|
+
expect(RSSFeedBurner).to_not be_able_to_parse sample_rss_feed
|
11
|
+
end
|
12
12
|
|
13
|
-
it
|
14
|
-
expect(
|
13
|
+
it 'should return false for a feedburner atom feed' do
|
14
|
+
expect(RSSFeedBurner).to_not be_able_to_parse sample_feedburner_atom_feed
|
15
15
|
end
|
16
16
|
|
17
|
-
it
|
18
|
-
expect(
|
17
|
+
it 'should return false for an rdf feed' do
|
18
|
+
expect(RSSFeedBurner).to_not be_able_to_parse sample_rdf_feed
|
19
19
|
end
|
20
20
|
|
21
|
-
it
|
22
|
-
expect(
|
21
|
+
it 'should return false for a regular atom feed' do
|
22
|
+
expect(RSSFeedBurner).to_not be_able_to_parse sample_atom_feed
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
describe
|
26
|
+
describe 'parsing' do
|
27
27
|
before(:each) do
|
28
|
-
@feed =
|
28
|
+
@feed = RSSFeedBurner.parse(sample_rss_feed_burner_feed)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should parse the title' do
|
32
|
+
expect(@feed.title).to eq 'TechCrunch'
|
29
33
|
end
|
30
34
|
|
31
|
-
it
|
32
|
-
|
35
|
+
it 'should parse the description' do
|
36
|
+
description = 'TechCrunch is a group-edited blog that profiles the companies, products and events defining and transforming the new web.' # rubocop:disable Metrics/LineLength
|
37
|
+
expect(@feed.description).to eq description
|
33
38
|
end
|
34
39
|
|
35
|
-
it
|
36
|
-
expect(@feed.
|
40
|
+
it 'should parse the url' do
|
41
|
+
expect(@feed.url).to eq 'http://techcrunch.com'
|
37
42
|
end
|
38
43
|
|
39
|
-
it
|
40
|
-
expect(@feed.
|
44
|
+
it 'should parse the last build date' do
|
45
|
+
expect(@feed.last_built).to eq 'Wed, 02 Nov 2011 17:29:59 +0000'
|
41
46
|
end
|
42
47
|
|
43
|
-
it
|
48
|
+
it 'should parse the hub urls' do
|
44
49
|
expect(@feed.hubs.count).to eq 2
|
45
|
-
expect(@feed.hubs.first).to eq
|
50
|
+
expect(@feed.hubs.first).to eq 'http://pubsubhubbub.appspot.com/'
|
46
51
|
end
|
47
52
|
|
48
|
-
it
|
53
|
+
it 'should provide an accessor for the feed_url' do
|
49
54
|
expect(@feed).to respond_to :feed_url
|
50
55
|
expect(@feed).to respond_to :feed_url=
|
51
56
|
end
|
52
57
|
|
53
|
-
it
|
58
|
+
it 'should parse entries' do
|
54
59
|
expect(@feed.entries.size).to eq 20
|
55
60
|
end
|
56
61
|
end
|
@@ -1,57 +1,89 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Feedjira::Parser::RSS do
|
4
|
-
describe
|
5
|
-
it
|
4
|
+
describe '#will_parse?' do
|
5
|
+
it 'should return true for an RSS feed' do
|
6
6
|
expect(Feedjira::Parser::RSS).to be_able_to_parse(sample_rss_feed)
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
# it "should return false for an rdf feed" do
|
11
|
-
# Feedjira::RSS.should_not be_able_to_parse(sample_rdf_feed)
|
12
|
-
# end
|
13
|
-
|
14
|
-
it "should return false for an atom feed" do
|
9
|
+
it 'should return false for an atom feed' do
|
15
10
|
expect(Feedjira::Parser::RSS).to_not be_able_to_parse(sample_atom_feed)
|
16
11
|
end
|
17
12
|
|
18
|
-
it
|
19
|
-
|
13
|
+
it 'should return false for an rss feedburner feed' do
|
14
|
+
able = Feedjira::Parser::RSS.able_to_parse? sample_rss_feed_burner_feed
|
15
|
+
expect(able).to eq false
|
20
16
|
end
|
21
17
|
end
|
22
18
|
|
23
|
-
describe
|
19
|
+
describe 'parsing' do
|
24
20
|
before(:each) do
|
25
21
|
@feed = Feedjira::Parser::RSS.parse(sample_rss_feed)
|
26
22
|
end
|
27
23
|
|
28
|
-
it
|
29
|
-
expect(@feed.version).to eq
|
24
|
+
it 'should parse the version' do
|
25
|
+
expect(@feed.version).to eq '2.0'
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should parse the title' do
|
29
|
+
expect(@feed.title).to eq 'Tender Lovemaking'
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should parse the description' do
|
33
|
+
expect(@feed.description).to eq 'The act of making love, tenderly.'
|
30
34
|
end
|
31
35
|
|
32
|
-
it
|
33
|
-
expect(@feed.
|
36
|
+
it 'should parse the url' do
|
37
|
+
expect(@feed.url).to eq 'http://tenderlovemaking.com'
|
34
38
|
end
|
35
39
|
|
36
|
-
it
|
37
|
-
expect(@feed.
|
40
|
+
it 'should parse the ttl' do
|
41
|
+
expect(@feed.ttl).to eq '60'
|
38
42
|
end
|
39
43
|
|
40
|
-
it
|
41
|
-
expect(@feed.
|
44
|
+
it 'should parse the last build date' do
|
45
|
+
expect(@feed.last_built).to eq 'Sat, 07 Sep 2002 09:42:31 GMT'
|
42
46
|
end
|
43
47
|
|
44
|
-
it
|
48
|
+
it 'should parse the hub urls' do
|
45
49
|
expect(@feed.hubs.count).to eq 1
|
46
|
-
expect(@feed.hubs.first).to eq
|
50
|
+
expect(@feed.hubs.first).to eq 'http://pubsubhubbub.appspot.com/'
|
47
51
|
end
|
48
52
|
|
49
|
-
it
|
53
|
+
it 'should provide an accessor for the feed_url' do
|
50
54
|
expect(@feed).to respond_to :feed_url
|
51
55
|
expect(@feed).to respond_to :feed_url=
|
52
56
|
end
|
53
57
|
|
54
|
-
it
|
58
|
+
it 'should parse the language' do
|
59
|
+
expect(@feed.language).to eq 'en'
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should parse the image url' do
|
63
|
+
expect(@feed.image.url).to eq 'https://tenderlovemaking.com/images/header-logo-text-trimmed.png'
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should parse the image title' do
|
67
|
+
expect(@feed.image.title).to eq 'Tender Lovemaking'
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should parse the image link' do
|
71
|
+
expect(@feed.image.link).to eq 'http://tenderlovemaking.com'
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should parse the image width' do
|
75
|
+
expect(@feed.image.width).to eq '766'
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should parse the image height' do
|
79
|
+
expect(@feed.image.height).to eq '138'
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'should parse the image description' do
|
83
|
+
expect(@feed.image.description).to eq 'The act of making love, tenderly.'
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should parse entries' do
|
55
87
|
expect(@feed.entries.size).to eq 10
|
56
88
|
end
|
57
89
|
end
|