feedjira 2.0.0 → 2.2.0

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 (90) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +15 -0
  4. data/.travis.yml +31 -12
  5. data/CHANGELOG.md +34 -1
  6. data/Dangerfile +1 -0
  7. data/Gemfile +2 -1
  8. data/LICENSE +1 -1
  9. data/README.md +210 -7
  10. data/Rakefile +11 -1
  11. data/feedjira.gemspec +17 -14
  12. data/fixtures/vcr_cassettes/fetch_failure.yml +62 -0
  13. data/fixtures/vcr_cassettes/parse_error.yml +222 -0
  14. data/fixtures/vcr_cassettes/success.yml +281 -0
  15. data/lib/feedjira/configuration.rb +76 -0
  16. data/lib/feedjira/core_ext/date.rb +3 -1
  17. data/lib/feedjira/core_ext/string.rb +2 -1
  18. data/lib/feedjira/core_ext/time.rb +24 -17
  19. data/lib/feedjira/core_ext.rb +3 -3
  20. data/lib/feedjira/date_time_utilities/date_time_epoch_parser.rb +13 -0
  21. data/lib/feedjira/date_time_utilities/date_time_language_parser.rb +24 -0
  22. data/lib/feedjira/date_time_utilities/date_time_pattern_parser.rb +34 -0
  23. data/lib/feedjira/date_time_utilities.rb +32 -0
  24. data/lib/feedjira/feed.rb +89 -62
  25. data/lib/feedjira/feed_entry_utilities.rb +20 -19
  26. data/lib/feedjira/feed_utilities.rb +37 -22
  27. data/lib/feedjira/parser/atom.rb +10 -8
  28. data/lib/feedjira/parser/atom_entry.rb +11 -13
  29. data/lib/feedjira/parser/atom_feed_burner.rb +27 -10
  30. data/lib/feedjira/parser/atom_feed_burner_entry.rb +12 -14
  31. data/lib/feedjira/parser/atom_youtube.rb +21 -0
  32. data/lib/feedjira/parser/atom_youtube_entry.rb +30 -0
  33. data/lib/feedjira/parser/google_docs_atom.rb +8 -7
  34. data/lib/feedjira/parser/google_docs_atom_entry.rb +13 -11
  35. data/lib/feedjira/parser/itunes_rss.rb +41 -22
  36. data/lib/feedjira/parser/itunes_rss_category.rb +39 -0
  37. data/lib/feedjira/parser/itunes_rss_item.rb +32 -20
  38. data/lib/feedjira/parser/itunes_rss_owner.rb +4 -4
  39. data/lib/feedjira/parser/podlove_chapter.rb +22 -0
  40. data/lib/feedjira/parser/rss.rb +11 -8
  41. data/lib/feedjira/parser/rss_entry.rb +17 -21
  42. data/lib/feedjira/parser/rss_feed_burner.rb +5 -6
  43. data/lib/feedjira/parser/rss_feed_burner_entry.rb +24 -28
  44. data/lib/feedjira/parser/rss_image.rb +15 -0
  45. data/lib/feedjira/parser.rb +1 -1
  46. data/lib/feedjira/preprocessor.rb +4 -2
  47. data/lib/feedjira/version.rb +1 -1
  48. data/lib/feedjira.rb +15 -0
  49. data/spec/feedjira/configuration_spec.rb +25 -0
  50. data/spec/feedjira/date_time_utilities_spec.rb +47 -0
  51. data/spec/feedjira/feed_entry_utilities_spec.rb +23 -19
  52. data/spec/feedjira/feed_spec.rb +140 -75
  53. data/spec/feedjira/feed_utilities_spec.rb +83 -63
  54. data/spec/feedjira/parser/atom_entry_spec.rb +54 -34
  55. data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +27 -20
  56. data/spec/feedjira/parser/atom_feed_burner_spec.rb +87 -30
  57. data/spec/feedjira/parser/atom_spec.rb +50 -48
  58. data/spec/feedjira/parser/atom_youtube_entry_spec.rb +86 -0
  59. data/spec/feedjira/parser/atom_youtube_spec.rb +43 -0
  60. data/spec/feedjira/parser/google_docs_atom_entry_spec.rb +5 -4
  61. data/spec/feedjira/parser/google_docs_atom_spec.rb +6 -6
  62. data/spec/feedjira/parser/itunes_rss_item_spec.rb +49 -29
  63. data/spec/feedjira/parser/itunes_rss_owner_spec.rb +10 -9
  64. data/spec/feedjira/parser/itunes_rss_spec.rb +87 -30
  65. data/spec/feedjira/parser/podlove_chapter_spec.rb +37 -0
  66. data/spec/feedjira/parser/rss_entry_spec.rb +50 -33
  67. data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +55 -33
  68. data/spec/feedjira/parser/rss_feed_burner_spec.rb +31 -26
  69. data/spec/feedjira/parser/rss_spec.rb +56 -24
  70. data/spec/feedjira/preprocessor_spec.rb +11 -3
  71. data/spec/sample_feeds/AmazonWebServicesBlog.xml +797 -797
  72. data/spec/sample_feeds/AtomEscapedHTMLInPreTag.xml +13 -0
  73. data/spec/sample_feeds/CRE.xml +5849 -0
  74. data/spec/sample_feeds/FeedBurnerXHTML.xml +400 -400
  75. data/spec/sample_feeds/GiantRobotsSmashingIntoOtherGiantRobots.xml +682 -0
  76. data/spec/sample_feeds/ITunesWithSingleQuotedAttributes.xml +67 -0
  77. data/spec/sample_feeds/InvalidDateFormat.xml +20 -0
  78. data/spec/sample_feeds/PaulDixExplainsNothing.xml +175 -175
  79. data/spec/sample_feeds/PaulDixExplainsNothingAlternate.xml +175 -175
  80. data/spec/sample_feeds/PaulDixExplainsNothingFirstEntryContent.xml +16 -16
  81. data/spec/sample_feeds/PaulDixExplainsNothingWFW.xml +174 -174
  82. data/spec/sample_feeds/TenderLovemaking.xml +12 -2
  83. data/spec/sample_feeds/TrotterCashionHome.xml +611 -611
  84. data/spec/sample_feeds/TypePadNews.xml +368 -368
  85. data/spec/sample_feeds/itunes.xml +31 -2
  86. data/spec/sample_feeds/pet_atom.xml +229 -229
  87. data/spec/sample_feeds/youtube_atom.xml +395 -0
  88. data/spec/sample_feeds.rb +31 -21
  89. data/spec/spec_helper.rb +6 -0
  90. metadata +132 -25
@@ -1,57 +1,89 @@
1
- require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
1
+ require 'spec_helper'
2
2
 
3
3
  describe Feedjira::Parser::RSS do
4
- describe "#will_parse?" do
5
- it "should return true for an RSS feed" do
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
- # this is no longer true. combined rdf and rss into one
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 "should return false for an rss feedburner feed" do
19
- expect(Feedjira::Parser::RSS).to_not be_able_to_parse(sample_rss_feed_burner_feed)
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 "parsing" do
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 "should parse the version" do
29
- expect(@feed.version).to eq "2.0"
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 "should parse the title" do
33
- expect(@feed.title).to eq "Tender Lovemaking"
36
+ it 'should parse the url' do
37
+ expect(@feed.url).to eq 'http://tenderlovemaking.com'
34
38
  end
35
39
 
36
- it "should parse the description" do
37
- expect(@feed.description).to eq "The act of making love, tenderly."
40
+ it 'should parse the ttl' do
41
+ expect(@feed.ttl).to eq '60'
38
42
  end
39
43
 
40
- it "should parse the url" do
41
- expect(@feed.url).to eq "http://tenderlovemaking.com"
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 "should parse the hub urls" do
48
+ it 'should parse the hub urls' do
45
49
  expect(@feed.hubs.count).to eq 1
46
- expect(@feed.hubs.first).to eq "http://pubsubhubbub.appspot.com/"
50
+ expect(@feed.hubs.first).to eq 'http://pubsubhubbub.appspot.com/'
47
51
  end
48
52
 
49
- it "should provide an accessor for the feed_url" do
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 "should parse entries" do
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
@@ -13,9 +13,17 @@ describe Feedjira::Preprocessor do
13
13
  it 'escapes markup in xhtml content' do
14
14
  processor = Feedjira::Preprocessor.new sample_atom_xhtml_feed
15
15
  escaped = processor.to_xml
16
+ escaped_parts = escaped.split "\n"
16
17
 
17
- expect(escaped.split("\n")[10]).to match /<i>dogs<\/i>/ #title
18
- expect(escaped.split("\n")[16]).to match /<b>XHTML<\/b>/ #summary
19
- expect(escaped.split("\n")[26]).to match /<p>$/ #content
18
+ expect(escaped_parts[10]).to match(%r{<i>dogs</i>}) # title
19
+ expect(escaped_parts[16]).to match(%r{<b>XHTML</b>}) # summary
20
+ expect(escaped_parts[26]).to match(/<p>$/) # content
21
+ end
22
+
23
+ it 'leaves escaped html within pre tag' do
24
+ processor = Feedjira::Preprocessor.new(sample_atom_xhtml_with_escpaed_html_in_pre_tag_feed) # rubocop:disable Metrics/LineLength
25
+ escaped = processor.to_xml
26
+ expected_pre_tag = ' <pre><b>test<b></pre>' # rubocop:disable Metrics/LineLength
27
+ expect(escaped.split("\n")[7]).to eq(expected_pre_tag)
20
28
  end
21
29
  end