feedjira 2.2.0 → 3.0.0.beta1

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 (70) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +635 -6
  3. data/.travis.yml +1 -1
  4. data/CHANGELOG.md +6 -12
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +5 -5
  7. data/README.md +37 -99
  8. data/Rakefile +5 -5
  9. data/feedjira.gemspec +27 -19
  10. data/lib/feedjira.rb +69 -41
  11. data/lib/feedjira/configuration.rb +3 -8
  12. data/lib/feedjira/core_ext.rb +3 -3
  13. data/lib/feedjira/core_ext/date.rb +1 -1
  14. data/lib/feedjira/core_ext/time.rb +2 -2
  15. data/lib/feedjira/date_time_utilities.rb +2 -2
  16. data/lib/feedjira/date_time_utilities/date_time_pattern_parser.rb +2 -2
  17. data/lib/feedjira/feed.rb +10 -80
  18. data/lib/feedjira/feed_entry_utilities.rb +4 -4
  19. data/lib/feedjira/parser.rb +4 -1
  20. data/lib/feedjira/parser/atom.rb +3 -3
  21. data/lib/feedjira/parser/atom_entry.rb +1 -1
  22. data/lib/feedjira/parser/atom_feed_burner.rb +4 -4
  23. data/lib/feedjira/parser/atom_feed_burner_entry.rb +1 -1
  24. data/lib/feedjira/parser/atom_youtube.rb +2 -2
  25. data/lib/feedjira/parser/atom_youtube_entry.rb +1 -1
  26. data/lib/feedjira/parser/google_docs_atom.rb +3 -3
  27. data/lib/feedjira/parser/google_docs_atom_entry.rb +1 -1
  28. data/lib/feedjira/parser/itunes_rss_item.rb +1 -1
  29. data/lib/feedjira/parser/json_feed.rb +39 -0
  30. data/lib/feedjira/parser/json_feed_item.rb +51 -0
  31. data/lib/feedjira/parser/podlove_chapter.rb +1 -1
  32. data/lib/feedjira/parser/rss.rb +1 -1
  33. data/lib/feedjira/parser/rss_entry.rb +5 -1
  34. data/lib/feedjira/parser/rss_feed_burner.rb +1 -1
  35. data/lib/feedjira/preprocessor.rb +1 -1
  36. data/lib/feedjira/version.rb +1 -1
  37. data/spec/feedjira/configuration_spec.rb +9 -16
  38. data/spec/feedjira/date_time_utilities_spec.rb +20 -20
  39. data/spec/feedjira/feed_entry_utilities_spec.rb +18 -18
  40. data/spec/feedjira/feed_spec.rb +15 -229
  41. data/spec/feedjira/feed_utilities_spec.rb +72 -72
  42. data/spec/feedjira/parser/atom_entry_spec.rb +34 -34
  43. data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +16 -16
  44. data/spec/feedjira/parser/atom_feed_burner_spec.rb +121 -119
  45. data/spec/feedjira/parser/atom_spec.rb +78 -76
  46. data/spec/feedjira/parser/atom_youtube_entry_spec.rb +38 -38
  47. data/spec/feedjira/parser/atom_youtube_spec.rb +15 -15
  48. data/spec/feedjira/parser/google_docs_atom_entry_spec.rb +8 -8
  49. data/spec/feedjira/parser/google_docs_atom_spec.rb +23 -21
  50. data/spec/feedjira/parser/itunes_rss_item_spec.rb +37 -37
  51. data/spec/feedjira/parser/itunes_rss_owner_spec.rb +5 -5
  52. data/spec/feedjira/parser/itunes_rss_spec.rb +118 -116
  53. data/spec/feedjira/parser/json_feed_item_spec.rb +79 -0
  54. data/spec/feedjira/parser/json_feed_spec.rb +53 -0
  55. data/spec/feedjira/parser/podlove_chapter_spec.rb +12 -12
  56. data/spec/feedjira/parser/rss_entry_spec.rb +30 -30
  57. data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +32 -32
  58. data/spec/feedjira/parser/rss_feed_burner_spec.rb +47 -45
  59. data/spec/feedjira/parser/rss_spec.rb +36 -36
  60. data/spec/feedjira/preprocessor_spec.rb +6 -6
  61. data/spec/feedjira_spec.rb +145 -0
  62. data/spec/sample_feeds.rb +27 -26
  63. data/spec/sample_feeds/HuffPostCanada.xml +279 -0
  64. data/spec/sample_feeds/json_feed.json +156 -0
  65. data/spec/spec_helper.rb +5 -5
  66. metadata +31 -49
  67. data/fixtures/vcr_cassettes/fetch_failure.yml +0 -62
  68. data/fixtures/vcr_cassettes/parse_error.yml +0 -222
  69. data/fixtures/vcr_cassettes/success.yml +0 -281
  70. data/spec/sample_feeds/InvalidDateFormat.xml +0 -20
@@ -12,7 +12,7 @@ module Feedjira
12
12
 
13
13
  def start
14
14
  return unless start_ntp
15
- parts = start_ntp.split(':')
15
+ parts = start_ntp.split(":")
16
16
  parts.reverse.to_enum.with_index.map do |part, index|
17
17
  part.to_f * (60**index)
18
18
  end.reduce(:+)
@@ -14,7 +14,7 @@ module Feedjira
14
14
  element :rss, as: :version, value: :version
15
15
  element :title
16
16
  element :ttl
17
- elements :"atom:link", as: :hubs, value: :href, with: { rel: 'hub' }
17
+ elements :"atom:link", as: :hubs, value: :href, with: { rel: "hub" }
18
18
  elements :item, as: :entries, class: RSSEntry
19
19
 
20
20
  attr_accessor :feed_url
@@ -27,7 +27,11 @@ module Feedjira
27
27
  elements :category, as: :categories
28
28
 
29
29
  element :guid, as: :entry_id
30
- element :"dc:identifier", as: :entry_id
30
+ element :"dc:identifier", as: :dc_identifier
31
+
32
+ def id
33
+ @entry_id ||= @dc_identifier || @url
34
+ end
31
35
  end
32
36
  end
33
37
  end
@@ -9,7 +9,7 @@ module Feedjira
9
9
  element :description
10
10
  element :link, as: :url
11
11
  element :lastBuildDate, as: :last_built
12
- elements :"atom10:link", as: :hubs, value: :href, with: { rel: 'hub' }
12
+ elements :"atom10:link", as: :hubs, value: :href, with: { rel: "hub" }
13
13
  elements :item, as: :entries, class: RSSFeedBurnerEntry
14
14
 
15
15
  attr_accessor :feed_url
@@ -24,7 +24,7 @@ module Feedjira
24
24
  end
25
25
 
26
26
  def raw_html(node)
27
- node.search('./div').inner_html
27
+ node.search("./div").inner_html
28
28
  end
29
29
 
30
30
  def doc
@@ -1,3 +1,3 @@
1
1
  module Feedjira
2
- VERSION = '2.2.0'.freeze
2
+ VERSION = "3.0.0.beta1".freeze
3
3
  end
@@ -1,25 +1,18 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Feedjira::Configuration do
4
- describe '.configure' do
5
- it 'sets follow_redirect_limit config' do
6
- Feedjira.configure { |config| config.follow_redirect_limit = 10 }
7
- expect(Feedjira.follow_redirect_limit).to eq(10)
8
- end
9
-
10
- it 'sets request_timeout config' do
11
- Feedjira.configure { |config| config.request_timeout = 45 }
12
- expect(Feedjira.request_timeout).to eq(45)
13
- end
14
-
15
- it 'sets strip_whitespace config' do
4
+ describe ".configure" do
5
+ it "sets strip_whitespace config" do
16
6
  Feedjira.configure { |config| config.strip_whitespace = true }
17
7
  expect(Feedjira.strip_whitespace).to be true
18
8
  end
19
9
 
20
- it 'sets user_agent config' do
21
- Feedjira.configure { |config| config.user_agent = 'Test User Agent' }
22
- expect(Feedjira.user_agent).to eq('Test User Agent')
10
+ it "allows parsers to be modified" do
11
+ CustomParser = Class.new
12
+
13
+ Feedjira.configure { |config| config.parsers.unshift(CustomParser) }
14
+ expect(Feedjira.parsers.first).to eq(CustomParser)
15
+ Feedjira.reset_configuration!
23
16
  end
24
17
  end
25
18
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Feedjira::FeedUtilities do
4
4
  before(:each) do
@@ -7,41 +7,41 @@ describe Feedjira::FeedUtilities do
7
7
  end
8
8
  end
9
9
 
10
- describe 'handling dates' do
11
- it 'should parse an ISO 8601 formatted datetime into Time' do
12
- time = @klass.new.parse_datetime('2008-02-20T8:05:00-010:00')
10
+ describe "handling dates" do
11
+ it "should parse an ISO 8601 formatted datetime into Time" do
12
+ time = @klass.new.parse_datetime("2008-02-20T8:05:00-010:00")
13
13
  expect(time.class).to eq Time
14
- expect(time).to eq Time.parse_safely('Wed Feb 20 18:05:00 UTC 2008')
14
+ expect(time).to eq Time.parse_safely("Wed Feb 20 18:05:00 UTC 2008")
15
15
  end
16
16
 
17
- it 'should parse a ISO 8601 with milliseconds into Time' do
18
- time = @klass.new.parse_datetime('2013-09-17T08:20:13.931-04:00')
17
+ it "should parse a ISO 8601 with milliseconds into Time" do
18
+ time = @klass.new.parse_datetime("2013-09-17T08:20:13.931-04:00")
19
19
  expect(time.class).to eq Time
20
- expect(time).to eq Time.parse_safely('Tue Sep 17 12:20:13 UTC 2013')
20
+ expect(time).to eq Time.parse_safely("Tue Sep 17 12:20:13 UTC 2013")
21
21
  end
22
22
 
23
- it 'should parse a US Format into Time' do
24
- time = @klass.new.parse_datetime('8/23/2016 12:29:58 PM')
23
+ it "should parse a US Format into Time" do
24
+ time = @klass.new.parse_datetime("8/23/2016 12:29:58 PM")
25
25
  expect(time.class).to eq Time
26
- expect(time).to eq Time.parse_safely('Wed Aug 23 12:29:58 UTC 2016')
26
+ expect(time).to eq Time.parse_safely("Wed Aug 23 12:29:58 UTC 2016")
27
27
  end
28
28
 
29
- it 'should parse a Spanish Format into Time' do
30
- time = @klass.new.parse_datetime('Wed, 31 Ago 2016 11:08:22 GMT')
29
+ it "should parse a Spanish Format into Time" do
30
+ time = @klass.new.parse_datetime("Wed, 31 Ago 2016 11:08:22 GMT")
31
31
  expect(time.class).to eq Time
32
- expect(time).to eq Time.parse_safely('Wed Aug 31 11:08:22 UTC 2016')
32
+ expect(time).to eq Time.parse_safely("Wed Aug 31 11:08:22 UTC 2016")
33
33
  end
34
34
 
35
- it 'should parse Format with japanese symbols into Time' do
36
- time = @klass.new.parse_datetime('水, 31 8 2016 07:37:00 PDT')
35
+ it "should parse Format with japanese symbols into Time" do
36
+ time = @klass.new.parse_datetime("水, 31 8 2016 07:37:00 PDT")
37
37
  expect(time.class).to eq Time
38
- expect(time).to eq Time.parse_safely('Wed Aug 31 14:37:00 UTC 2016')
38
+ expect(time).to eq Time.parse_safely("Wed Aug 31 14:37:00 UTC 2016")
39
39
  end
40
40
 
41
- it 'should parse epoch into Time' do
42
- time = @klass.new.parse_datetime('1472654220')
41
+ it "should parse epoch into Time" do
42
+ time = @klass.new.parse_datetime("1472654220")
43
43
  expect(time.class).to eq Time
44
- expect(time).to eq Time.parse_safely('Wed Aug 31 14:37:00 UTC 2016')
44
+ expect(time).to eq Time.parse_safely("Wed Aug 31 14:37:00 UTC 2016")
45
45
  end
46
46
  end
47
47
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Feedjira::FeedUtilities do
4
4
  before(:each) do
@@ -7,23 +7,23 @@ describe Feedjira::FeedUtilities do
7
7
  end
8
8
  end
9
9
 
10
- describe 'handling dates' do
11
- it 'should parse an ISO 8601 formatted datetime into Time' do
12
- time = @klass.new.parse_datetime('2008-02-20T8:05:00-010:00')
10
+ describe "handling dates" do
11
+ it "should parse an ISO 8601 formatted datetime into Time" do
12
+ time = @klass.new.parse_datetime("2008-02-20T8:05:00-010:00")
13
13
  expect(time.class).to eq Time
14
- expect(time).to eq Time.parse_safely('Wed Feb 20 18:05:00 UTC 2008')
14
+ expect(time).to eq Time.parse_safely("Wed Feb 20 18:05:00 UTC 2008")
15
15
  end
16
16
 
17
- it 'should parse a ISO 8601 with milliseconds into Time' do
18
- time = @klass.new.parse_datetime('2013-09-17T08:20:13.931-04:00')
17
+ it "should parse a ISO 8601 with milliseconds into Time" do
18
+ time = @klass.new.parse_datetime("2013-09-17T08:20:13.931-04:00")
19
19
  expect(time.class).to eq Time
20
- expect(time).to eq Time.parse_safely('Tue Sep 17 12:20:13 UTC 2013')
20
+ expect(time).to eq Time.parse_safely("Tue Sep 17 12:20:13 UTC 2013")
21
21
  end
22
22
  end
23
23
 
24
- describe 'sanitizing' do
24
+ describe "sanitizing" do
25
25
  before(:each) do
26
- @feed = Feedjira::Feed.parse(sample_atom_feed)
26
+ @feed = Feedjira.parse(sample_atom_feed)
27
27
  @entry = @feed.entries.first
28
28
  end
29
29
 
@@ -31,15 +31,15 @@ describe Feedjira::FeedUtilities do
31
31
  expect { @klass.new.sanitize! }.to_not raise_error
32
32
  end
33
33
 
34
- it 'should provide a sanitized title' do
35
- new_title = '<script>this is not safe</script>' + @entry.title
34
+ it "should provide a sanitized title" do
35
+ new_title = "<script>this is not safe</script>" + @entry.title
36
36
  @entry.title = new_title
37
37
  scrubbed_title = Loofah.scrub_fragment(new_title, :prune).to_s
38
38
  expect(@entry.title.sanitize).to eq scrubbed_title
39
39
  end
40
40
 
41
- it 'should sanitize content in place' do
42
- new_content = '<script>' + @entry.content
41
+ it "should sanitize content in place" do
42
+ new_content = "<script>" + @entry.content
43
43
  @entry.content = new_content.dup
44
44
 
45
45
  scrubbed_content = Loofah.scrub_fragment(new_content, :prune).to_s
@@ -48,10 +48,10 @@ describe Feedjira::FeedUtilities do
48
48
  expect(@entry.content).to eq scrubbed_content
49
49
  end
50
50
 
51
- it 'should sanitize things in place' do
52
- @entry.title += '<script>'
53
- @entry.author += '<script>'
54
- @entry.content += '<script>'
51
+ it "should sanitize things in place" do
52
+ @entry.title += "<script>"
53
+ @entry.author += "<script>"
54
+ @entry.content += "<script>"
55
55
 
56
56
  cleaned_title = Loofah.scrub_fragment(@entry.title, :prune).to_s
57
57
  cleaned_author = Loofah.scrub_fragment(@entry.author, :prune).to_s
@@ -1,263 +1,49 @@
1
- require 'spec_helper'
2
-
3
- # rubocop:disable Style/BlockDelimiters
1
+ require "spec_helper"
4
2
 
5
3
  class Hell < StandardError; end
6
4
 
7
5
  class FailParser
8
6
  def self.parse(_, &on_failure)
9
- on_failure.call 'this parser always fails.'
7
+ on_failure.call "this parser always fails."
10
8
  end
11
9
  end
12
10
 
13
11
  describe Feedjira::Feed do
14
- describe '.fetch_and_parse' do
15
- it 'raises an error when the fetch fails' do
16
- VCR.use_cassette('fetch_failure') do
17
- url = 'http://www.example.com/feed.xml'
18
- expect {
19
- Feedjira::Feed.fetch_and_parse url
20
- }.to raise_error Feedjira::FetchFailure
21
- end
22
- end
23
-
24
- it 'raises an error when no parser can be found' do
25
- VCR.use_cassette('parse_error') do
26
- url = 'http://feedjira.com'
27
- expect {
28
- Feedjira::Feed.fetch_and_parse url
29
- }.to raise_error Feedjira::NoParserAvailable
30
- end
31
- end
32
-
33
- it 'fetches and parses the feed' do
34
- VCR.use_cassette('success') do
35
- url = 'http://feedjira.com/blog/feed.xml'
36
- expected_time = DateTime.parse('Fri, 07 Oct 2016 14:37:00 GMT').to_time
37
- feed = Feedjira::Feed.fetch_and_parse url
38
-
39
- expect(feed.class).to eq Feedjira::Parser::Atom
40
- expect(feed.entries.count).to eq 4
41
- expect(feed.feed_url).to eq url
42
- expect(feed.etag).to eq('393e-53e4757c9db00-gzip')
43
- expect(feed.last_modified).to eq(expected_time)
44
- end
45
- end
46
- end
47
-
48
- describe '#add_common_feed_element' do
12
+ describe "#add_common_feed_element" do
49
13
  before(:all) do
50
- Feedjira::Feed.add_common_feed_element('generator')
14
+ Feedjira::Feed.add_common_feed_element("generator")
51
15
  end
52
16
 
53
- it 'should parse the added element out of Atom feeds' do
54
- expect(Feedjira::Feed.parse(sample_wfw_feed).generator).to eq 'TypePad'
17
+ it "should parse the added element out of Atom feeds" do
18
+ expect(Feedjira.parse(sample_wfw_feed).generator).to eq "TypePad"
55
19
  end
56
20
 
57
- it 'should parse the added element out of Atom Feedburner feeds' do
21
+ it "should parse the added element out of Atom Feedburner feeds" do
58
22
  expect(Feedjira::Parser::Atom.new).to respond_to(:generator)
59
23
  end
60
24
 
61
- it 'should parse the added element out of RSS feeds' do
25
+ it "should parse the added element out of RSS feeds" do
62
26
  expect(Feedjira::Parser::RSS.new).to respond_to(:generator)
63
27
  end
64
28
  end
65
29
 
66
- describe '#add_common_feed_entry_element' do
30
+ describe "#add_common_feed_entry_element" do
67
31
  before(:all) do
68
- tag = 'wfw:commentRss'
32
+ tag = "wfw:commentRss"
69
33
  Feedjira::Feed.add_common_feed_entry_element tag, as: :comment_rss
70
34
  end
71
35
 
72
- it 'should parse the added element out of Atom feeds entries' do
73
- entry = Feedjira::Feed.parse(sample_wfw_feed).entries.first
74
- expect(entry.comment_rss).to eq 'this is the new val'
36
+ it "should parse the added element out of Atom feeds entries" do
37
+ entry = Feedjira.parse(sample_wfw_feed).entries.first
38
+ expect(entry.comment_rss).to eq "this is the new val"
75
39
  end
76
40
 
77
- it 'should parse the added element out of Atom Feedburner feeds entries' do
41
+ it "should parse the added element out of Atom Feedburner feeds entries" do
78
42
  expect(Feedjira::Parser::AtomEntry.new).to respond_to(:comment_rss)
79
43
  end
80
44
 
81
- it 'should parse the added element out of RSS feeds entries' do
45
+ it "should parse the added element out of RSS feeds entries" do
82
46
  expect(Feedjira::Parser::RSSEntry.new).to respond_to(:comment_rss)
83
47
  end
84
48
  end
85
-
86
- describe '#parse_with' do
87
- let(:xml) { '<xml></xml>' }
88
-
89
- it 'invokes the parser and passes the xml' do
90
- parser = double 'Parser', parse: nil
91
- expect(parser).to receive(:parse).with xml
92
- Feedjira::Feed.parse_with parser, xml
93
- end
94
-
95
- context 'with a callback block' do
96
- it 'passes the callback to the parser' do
97
- callback = ->(*) { raise Hell }
98
-
99
- expect do
100
- Feedjira::Feed.parse_with FailParser, xml, &callback
101
- end.to raise_error Hell
102
- end
103
- end
104
- end
105
-
106
- describe '#parse' do
107
- context "when there's an available parser" do
108
- it 'should parse an rdf feed' do
109
- feed = Feedjira::Feed.parse(sample_rdf_feed)
110
- expect(feed.title).to eq 'HREF Considered Harmful'
111
- published = Time.parse_safely('Tue Sep 02 19:50:07 UTC 2008')
112
- expect(feed.entries.first.published).to eq published
113
- expect(feed.entries.size).to eq 10
114
- end
115
-
116
- it 'should parse an rss feed' do
117
- feed = Feedjira::Feed.parse(sample_rss_feed)
118
- expect(feed.title).to eq 'Tender Lovemaking'
119
- published = Time.parse_safely 'Thu Dec 04 17:17:49 UTC 2008'
120
- expect(feed.entries.first.published).to eq published
121
- expect(feed.entries.size).to eq 10
122
- end
123
-
124
- it 'should parse an atom feed' do
125
- feed = Feedjira::Feed.parse(sample_atom_feed)
126
- expect(feed.title).to eq 'Amazon Web Services Blog'
127
- published = Time.parse_safely 'Fri Jan 16 18:21:00 UTC 2009'
128
- expect(feed.entries.first.published).to eq published
129
- expect(feed.entries.size).to eq 10
130
- end
131
-
132
- it 'should parse an feedburner atom feed' do
133
- feed = Feedjira::Feed.parse(sample_feedburner_atom_feed)
134
- expect(feed.title).to eq 'Paul Dix Explains Nothing'
135
- published = Time.parse_safely 'Thu Jan 22 15:50:22 UTC 2009'
136
- expect(feed.entries.first.published).to eq published
137
- expect(feed.entries.size).to eq 5
138
- end
139
-
140
- it 'should parse an itunes feed' do
141
- feed = Feedjira::Feed.parse(sample_itunes_feed)
142
- expect(feed.title).to eq 'All About Everything'
143
- published = Time.parse_safely 'Wed, 15 Jun 2005 19:00:00 GMT'
144
- expect(feed.entries.first.published).to eq published
145
- expect(feed.entries.size).to eq 3
146
- end
147
-
148
- # rubocop:disable Metrics/LineLength
149
- it 'does not fail if multiple published dates exist and some are unparseable' do
150
- expect(Feedjira.logger).to receive(:warn).once
151
-
152
- feed = Feedjira::Feed.parse(sample_invalid_date_format_feed)
153
- expect(feed.title).to eq 'Invalid date format feed'
154
- published = Time.parse_safely 'Mon, 16 Oct 2017 15:10:00 GMT'
155
- expect(feed.entries.first.published).to eq published
156
- expect(feed.entries.size).to eq 2
157
- end
158
- # rubocop:enable Metrics/LineLength
159
- end
160
-
161
- context "when there's no available parser" do
162
- it 'raises Feedjira::NoParserAvailable' do
163
- expect {
164
- Feedjira::Feed.parse("I'm an invalid feed")
165
- }.to raise_error(Feedjira::NoParserAvailable)
166
- end
167
- end
168
-
169
- it 'should parse an feedburner rss feed' do
170
- feed = Feedjira::Feed.parse(sample_rss_feed_burner_feed)
171
- expect(feed.title).to eq 'TechCrunch'
172
- published = Time.parse_safely 'Wed Nov 02 17:25:27 UTC 2011'
173
- expect(feed.entries.first.published).to eq published
174
- expect(feed.entries.size).to eq 20
175
- end
176
- end
177
-
178
- describe '#determine_feed_parser_for_xml' do
179
- it 'with Google Docs atom feed it returns the GoogleDocsAtom parser' do
180
- xml = sample_google_docs_list_feed
181
- actual_parser = Feedjira::Feed.determine_feed_parser_for_xml xml
182
- expect(actual_parser).to eq Feedjira::Parser::GoogleDocsAtom
183
- end
184
-
185
- it 'with an atom feed it returns the Atom parser' do
186
- xml = sample_atom_feed
187
- actual_parser = Feedjira::Feed.determine_feed_parser_for_xml xml
188
- expect(actual_parser).to eq Feedjira::Parser::Atom
189
- end
190
-
191
- it 'with an atom feedburner feed it returns the AtomFeedBurner parser' do
192
- xml = sample_feedburner_atom_feed
193
- actual_parser = Feedjira::Feed.determine_feed_parser_for_xml xml
194
- expect(actual_parser).to eq Feedjira::Parser::AtomFeedBurner
195
- end
196
-
197
- it 'with an rdf feed it returns the RSS parser' do
198
- xml = sample_rdf_feed
199
- actual_parser = Feedjira::Feed.determine_feed_parser_for_xml xml
200
- expect(actual_parser).to eq Feedjira::Parser::RSS
201
- end
202
-
203
- it 'with an rss feedburner feed it returns the RSSFeedBurner parser' do
204
- xml = sample_rss_feed_burner_feed
205
- actual_parser = Feedjira::Feed.determine_feed_parser_for_xml xml
206
- expect(actual_parser).to eq Feedjira::Parser::RSSFeedBurner
207
- end
208
-
209
- it 'with an rss 2.0 feed it returns the RSS parser' do
210
- xml = sample_rss_feed
211
- actual_parser = Feedjira::Feed.determine_feed_parser_for_xml xml
212
- expect(actual_parser).to eq Feedjira::Parser::RSS
213
- end
214
-
215
- it 'with an itunes feed it returns the RSS parser' do
216
- xml = sample_itunes_feed
217
- actual_parser = Feedjira::Feed.determine_feed_parser_for_xml xml
218
- expect(actual_parser).to eq Feedjira::Parser::ITunesRSS
219
- end
220
- end
221
-
222
- describe 'when adding feed types' do
223
- it 'should prioritize added types over the built in ones' do
224
- xml = 'Atom asdf'
225
- allow(Feedjira::Parser::Atom).to receive(:able_to_parse?).and_return(true)
226
- new_parser = Class.new do
227
- def self.able_to_parse?(_)
228
- true
229
- end
230
- end
231
-
232
- expect(new_parser).to be_able_to_parse(xml)
233
-
234
- Feedjira::Feed.add_feed_class(new_parser)
235
-
236
- parser = Feedjira::Feed.determine_feed_parser_for_xml xml
237
- expect(parser).to eq new_parser
238
-
239
- Feedjira::Feed.reset_parsers!
240
- end
241
- end
242
-
243
- describe 'when parsers are configured' do
244
- it 'does not use default parsers' do
245
- xml = 'Atom asdf'
246
- new_parser = Class.new do
247
- def self.able_to_parse?(_)
248
- true
249
- end
250
- end
251
-
252
- Feedjira.configure { |config| config.parsers = [new_parser] }
253
-
254
- parser = Feedjira::Feed.determine_feed_parser_for_xml(xml)
255
- expect(parser).to eq(new_parser)
256
-
257
- Feedjira.reset_configuration!
258
- Feedjira::Feed.reset_parsers!
259
- end
260
- end
261
49
  end
262
-
263
- # rubocop:enable Style/BlockDelimiters