feedjira 2.2.0 → 3.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
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