feedjira 3.1.0 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/feed-parsing.md +15 -0
  3. data/.github/ISSUE_TEMPLATE/general-issue.md +8 -0
  4. data/.github/workflows/ruby.yml +39 -0
  5. data/.rubocop.yml +34 -615
  6. data/.rubocop_todo.yml +4 -29
  7. data/CHANGELOG.md +60 -13
  8. data/Gemfile +3 -4
  9. data/Rakefile +3 -1
  10. data/feedjira.gemspec +12 -12
  11. data/lib/feedjira/configuration.rb +5 -3
  12. data/lib/feedjira/core_ext/date.rb +3 -1
  13. data/lib/feedjira/core_ext/string.rb +2 -0
  14. data/lib/feedjira/core_ext/time.rb +3 -1
  15. data/lib/feedjira/core_ext.rb +2 -0
  16. data/lib/feedjira/date_time_utilities/date_time_epoch_parser.rb +3 -0
  17. data/lib/feedjira/date_time_utilities/date_time_language_parser.rb +5 -3
  18. data/lib/feedjira/date_time_utilities/date_time_pattern_parser.rb +9 -9
  19. data/lib/feedjira/date_time_utilities.rb +8 -8
  20. data/lib/feedjira/feed.rb +3 -1
  21. data/lib/feedjira/feed_entry_utilities.rb +5 -3
  22. data/lib/feedjira/feed_utilities.rb +8 -5
  23. data/lib/feedjira/parser/atom.rb +5 -6
  24. data/lib/feedjira/parser/atom_entry.rb +2 -0
  25. data/lib/feedjira/parser/atom_feed_burner.rb +4 -2
  26. data/lib/feedjira/parser/atom_feed_burner_entry.rb +2 -2
  27. data/lib/feedjira/parser/atom_google_alerts.rb +3 -1
  28. data/lib/feedjira/parser/atom_google_alerts_entry.rb +8 -5
  29. data/lib/feedjira/parser/atom_youtube.rb +4 -2
  30. data/lib/feedjira/parser/atom_youtube_entry.rb +2 -0
  31. data/lib/feedjira/parser/globally_unique_identifier.rb +2 -0
  32. data/lib/feedjira/parser/google_docs_atom.rb +5 -3
  33. data/lib/feedjira/parser/google_docs_atom_entry.rb +2 -0
  34. data/lib/feedjira/parser/itunes_rss.rb +4 -2
  35. data/lib/feedjira/parser/itunes_rss_category.rb +8 -6
  36. data/lib/feedjira/parser/itunes_rss_item.rb +3 -1
  37. data/lib/feedjira/parser/itunes_rss_owner.rb +2 -0
  38. data/lib/feedjira/parser/json_feed.rb +4 -2
  39. data/lib/feedjira/parser/json_feed_item.rb +7 -1
  40. data/lib/feedjira/parser/podlove_chapter.rb +5 -2
  41. data/lib/feedjira/parser/rss.rb +4 -1
  42. data/lib/feedjira/parser/rss_entry.rb +2 -0
  43. data/lib/feedjira/parser/rss_feed_burner.rb +4 -2
  44. data/lib/feedjira/parser/rss_feed_burner_entry.rb +2 -2
  45. data/lib/feedjira/parser/rss_image.rb +2 -0
  46. data/lib/feedjira/parser.rb +2 -0
  47. data/lib/feedjira/preprocessor.rb +3 -1
  48. data/lib/feedjira/rss_entry_utilities.rb +6 -2
  49. data/lib/feedjira/version.rb +3 -1
  50. data/lib/feedjira.rb +2 -1
  51. data/spec/feedjira/configuration_spec.rb +5 -3
  52. data/spec/feedjira/feed_spec.rb +13 -10
  53. data/spec/feedjira/{date_time_utilities_spec.rb → feed_utilities_date_time_spec.rb} +9 -7
  54. data/spec/feedjira/{feed_entry_utilities_spec.rb → feed_utilities_entry_spec.rb} +12 -10
  55. data/spec/feedjira/feed_utilities_spec.rb +37 -40
  56. data/spec/feedjira/parser/atom_entry_spec.rb +22 -20
  57. data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +16 -14
  58. data/spec/feedjira/parser/atom_feed_burner_spec.rb +30 -28
  59. data/spec/feedjira/parser/atom_google_alerts_entry_spec.rb +12 -10
  60. data/spec/feedjira/parser/atom_google_alerts_spec.rb +15 -13
  61. data/spec/feedjira/parser/atom_spec.rb +44 -25
  62. data/spec/feedjira/parser/atom_youtube_entry_spec.rb +25 -23
  63. data/spec/feedjira/parser/atom_youtube_spec.rb +16 -14
  64. data/spec/feedjira/parser/google_docs_atom_entry_spec.rb +5 -3
  65. data/spec/feedjira/parser/google_docs_atom_spec.rb +10 -8
  66. data/spec/feedjira/parser/{itunes_rss_item_spec.rb → i_tunes_rss_item_spec.rb} +21 -19
  67. data/spec/feedjira/parser/{itunes_rss_owner_spec.rb → i_tunes_rss_owner_spec.rb} +5 -3
  68. data/spec/feedjira/parser/itunes_rss_spec.rb +35 -33
  69. data/spec/feedjira/parser/json_feed_item_spec.rb +16 -14
  70. data/spec/feedjira/parser/json_feed_spec.rb +15 -13
  71. data/spec/feedjira/parser/podlove_chapter_spec.rb +9 -7
  72. data/spec/feedjira/parser/rss_entry_spec.rb +25 -23
  73. data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +24 -22
  74. data/spec/feedjira/parser/rss_feed_burner_spec.rb +20 -18
  75. data/spec/feedjira/parser/rss_spec.rb +26 -24
  76. data/spec/feedjira/preprocessor_spec.rb +6 -4
  77. data/spec/feedjira_spec.rb +50 -39
  78. data/spec/sample_feeds/a10.xml +72 -0
  79. data/spec/sample_feeds/atom_simple_single_entry.xml +17 -0
  80. data/spec/sample_feeds/atom_simple_single_entry_link_self.xml +17 -0
  81. data/spec/sample_feeds.rb +6 -1
  82. data/spec/spec_helper.rb +3 -7
  83. metadata +60 -24
  84. data/.travis.yml +0 -34
  85. data/Dangerfile +0 -1
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  class GoogleDocsAtomEntry
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  # iTunes is RSS 2.0 + some apple extensions
@@ -18,7 +20,7 @@ module Feedjira
18
20
  element :language
19
21
  element :lastBuildDate, as: :last_built
20
22
  element :link, as: :url
21
- element :managingEditor
23
+ element :managingEditor, as: :managing_editor
22
24
  element :rss, as: :version, value: :version
23
25
  element :title
24
26
  element :ttl
@@ -61,7 +63,7 @@ module Feedjira
61
63
  elements :item, as: :entries, class: ITunesRSSItem
62
64
 
63
65
  def self.able_to_parse?(xml)
64
- %r{xmlns:itunes\s?=\s?[\"\']http://www\.itunes\.com/dtds/podcast-1\.0\.dtd[\"\']}i =~ xml # rubocop:disable Metrics/LineLength
66
+ %r{xmlns:itunes\s?=\s?["']http://www\.itunes\.com/dtds/podcast-1\.0\.dtd["']}i =~ xml
65
67
  end
66
68
  end
67
69
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  # iTunes extensions to the standard RSS2.0 item
@@ -10,18 +12,18 @@ module Feedjira
10
12
  elements :"itunes:category", as: :itunes_categories,
11
13
  class: ITunesRSSCategory
12
14
 
13
- def each_subcategory
14
- return to_enum(__method__) unless block_given?
15
+ def each_subcategory(&block)
16
+ return to_enum(__method__) unless block
15
17
 
16
18
  yield text
17
19
 
18
20
  itunes_categories.each do |itunes_category|
19
- itunes_category.each_subcategory(&proc)
21
+ itunes_category.each_subcategory(&block)
20
22
  end
21
23
  end
22
24
 
23
- def each_path(ancestors = [])
24
- return to_enum(__method__, ancestors) unless block_given?
25
+ def each_path(ancestors = [], &block)
26
+ return to_enum(__method__, ancestors) unless block
25
27
 
26
28
  category_hierarchy = ancestors + [text]
27
29
 
@@ -29,7 +31,7 @@ module Feedjira
29
31
  yield category_hierarchy
30
32
  else
31
33
  itunes_categories.each do |itunes_category|
32
- itunes_category.each_path(category_hierarchy, &proc)
34
+ itunes_category.each_path(category_hierarchy, &block)
33
35
  end
34
36
  end
35
37
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  # iTunes extensions to the standard RSS2.0 item
@@ -29,7 +31,7 @@ module Feedjira
29
31
  element :enclosure, value: :length, as: :enclosure_length
30
32
  element :enclosure, value: :type, as: :enclosure_type
31
33
  element :enclosure, value: :url, as: :enclosure_url
32
- elements "psc:chapter", as: :raw_chapters, class: Feedjira::Parser::PodloveChapter # rubocop:disable Metrics/LineLength
34
+ elements "psc:chapter", as: :raw_chapters, class: Feedjira::Parser::PodloveChapter
33
35
 
34
36
  # Podlove requires clients to re-order by start time in the
35
37
  # event the publisher doesn't provide them in that
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  class ITunesRSSOwner
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  # Parser for dealing with JSON Feeds.
@@ -6,7 +8,7 @@ module Feedjira
6
8
  include FeedUtilities
7
9
 
8
10
  def self.able_to_parse?(json)
9
- %r{https:\/\/jsonfeed.org\/version\/} =~ json
11
+ %r{https://jsonfeed.org/version/} =~ json
10
12
  end
11
13
 
12
14
  def self.parse(json)
@@ -14,7 +16,7 @@ module Feedjira
14
16
  end
15
17
 
16
18
  attr_reader :json, :version, :title, :url, :feed_url, :description,
17
- :expired, :entries
19
+ :expired, :entries
18
20
 
19
21
  def initialize(json)
20
22
  @json = json
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  # Parser for dealing with JSON Feed items.
@@ -5,7 +7,7 @@ module Feedjira
5
7
  include FeedEntryUtilities
6
8
 
7
9
  attr_reader :json, :entry_id, :url, :external_url, :title, :content, :summary,
8
- :published, :updated, :image, :banner_image, :author, :categories
10
+ :published, :updated, :image, :banner_image, :author, :categories
9
11
 
10
12
  def initialize(json)
11
13
  @json = json
@@ -27,11 +29,13 @@ module Feedjira
27
29
 
28
30
  def parse_published(date_published)
29
31
  return nil unless date_published
32
+
30
33
  Time.parse_safely(date_published)
31
34
  end
32
35
 
33
36
  def parse_updated(date_modified)
34
37
  return nil unless date_modified
38
+
35
39
  Time.parse_safely(date_modified)
36
40
  end
37
41
 
@@ -39,11 +43,13 @@ module Feedjira
39
43
  # Prefer content_html unless it isn't included.
40
44
  def parse_content(content_html, content_text)
41
45
  return content_html unless content_html.nil?
46
+
42
47
  content_text
43
48
  end
44
49
 
45
50
  def author_name(author_obj)
46
51
  return nil if author_obj.nil?
52
+
47
53
  author_obj["name"]
48
54
  end
49
55
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  class PodloveChapter
@@ -10,10 +12,11 @@ module Feedjira
10
12
 
11
13
  def start
12
14
  return unless start_ntp
15
+
13
16
  parts = start_ntp.split(":")
14
- parts.reverse.to_enum.with_index.map do |part, index|
17
+ parts.reverse.to_enum.with_index.sum do |part, index|
15
18
  part.to_f * (60**index)
16
- end.reduce(:+)
19
+ end
17
20
  end
18
21
  end
19
22
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  # Parser for dealing with RSS feeds.
@@ -10,6 +12,7 @@ module Feedjira
10
12
  element :language
11
13
  element :lastBuildDate, as: :last_built
12
14
  element :link, as: :url
15
+ element :"a10:link", as: :url, value: :href
13
16
  element :rss, as: :version, value: :version
14
17
  element :title
15
18
  element :ttl
@@ -19,7 +22,7 @@ module Feedjira
19
22
  attr_accessor :feed_url
20
23
 
21
24
  def self.able_to_parse?(xml)
22
- (/\<rss|\<rdf/ =~ xml) && !(/feedburner/ =~ xml)
25
+ (/<rss|<rdf/ =~ xml) && !xml.include?("feedburner")
23
26
  end
24
27
  end
25
28
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  # Parser for dealing with RDF feed entries.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  # Parser for dealing with RSS feeds.
@@ -13,8 +15,8 @@ module Feedjira
13
15
 
14
16
  attr_accessor :feed_url
15
17
 
16
- def self.able_to_parse?(xml) #:nodoc:
17
- (/\<rss|\<rdf/ =~ xml) && (/feedburner/ =~ xml)
18
+ def self.able_to_parse?(xml) # :nodoc:
19
+ (/<rss|<rdf/ =~ xml) && xml.include?("feedburner")
18
20
  end
19
21
  end
20
22
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  # Parser for dealing with RDF feed entries.
@@ -7,9 +9,7 @@ module Feedjira
7
9
  include RSSEntryUtilities
8
10
 
9
11
  element :"feedburner:origLink", as: :orig_link
10
- # rubocop:disable Style/AccessModifierDeclarations
11
12
  private :orig_link
12
- # rubocop:enable Style/AccessModifierDeclarations
13
13
 
14
14
  def url
15
15
  orig_link || super
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  # Parser for dealing with RSS images
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  module Parser
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
4
  class Preprocessor
3
5
  def initialize(xml)
@@ -18,7 +20,7 @@ module Feedjira
18
20
  end
19
21
 
20
22
  def content_nodes
21
- doc.search 'entry > content[type="xhtml"], entry > summary[type="xhtml"], entry > title[type="xhtml"]' # rubocop:disable Metrics/LineLength
23
+ doc.search 'entry > content[type="xhtml"], entry > summary[type="xhtml"], entry > title[type="xhtml"]'
22
24
  end
23
25
 
24
26
  def raw_html(node)
@@ -7,12 +7,15 @@ module Feedjira
7
7
  element :title
8
8
 
9
9
  element :"content:encoded", as: :content
10
+ element :"a10:content", as: :content
10
11
  element :description, as: :summary
11
12
 
12
13
  element :link, as: :url
14
+ element :"a10:link", as: :url, value: :href
13
15
 
14
16
  element :author
15
17
  element :"dc:creator", as: :author
18
+ element :"a10:name", as: :author
16
19
 
17
20
  element :pubDate, as: :published
18
21
  element :pubdate, as: :published
@@ -22,6 +25,7 @@ module Feedjira
22
25
  element :"dcterms:created", as: :published
23
26
 
24
27
  element :"dcterms:modified", as: :updated
28
+ element :"a10:updated", as: :updated
25
29
 
26
30
  element :guid, as: :entry_id, class: Feedjira::Parser::GloballyUniqueIdentifier
27
31
  element :"dc:identifier", as: :dc_identifier
@@ -35,11 +39,11 @@ module Feedjira
35
39
  end
36
40
 
37
41
  def entry_id
38
- @entry_id && @entry_id.guid
42
+ @entry_id&.guid
39
43
  end
40
44
 
41
45
  def url
42
- @url || (@entry_id && @entry_id.url)
46
+ @url || @entry_id&.url
43
47
  end
44
48
 
45
49
  def id
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Feedjira
2
- VERSION = "3.1.0".freeze
4
+ VERSION = "3.2.1"
3
5
  end
data/lib/feedjira.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "zlib"
2
4
  require "sax-machine"
3
5
  require "loofah"
@@ -10,7 +12,6 @@ require "feedjira/date_time_utilities/date_time_epoch_parser"
10
12
  require "feedjira/date_time_utilities/date_time_language_parser"
11
13
  require "feedjira/date_time_utilities/date_time_pattern_parser"
12
14
  require "feedjira/date_time_utilities"
13
- require "feedjira/date_time_utilities"
14
15
  require "feedjira/feed_entry_utilities"
15
16
  require "feedjira/feed_utilities"
16
17
  require "feedjira/feed"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Feedjira::Configuration do
@@ -8,10 +10,10 @@ describe Feedjira::Configuration do
8
10
  end
9
11
 
10
12
  it "allows parsers to be modified" do
11
- CustomParser = Class.new
13
+ custom_parser = Class.new
12
14
 
13
- Feedjira.configure { |config| config.parsers.unshift(CustomParser) }
14
- expect(Feedjira.parsers.first).to eq(CustomParser)
15
+ Feedjira.configure { |config| config.parsers.unshift(custom_parser) }
16
+ expect(Feedjira.parsers.first).to eq(custom_parser)
15
17
  Feedjira.reset_configuration!
16
18
  end
17
19
  end
@@ -1,28 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  class Hell < StandardError; end
4
6
 
5
7
  class FailParser
6
- def self.parse(_xml, &on_failure)
7
- on_failure.call "this parser always fails."
8
+ def self.parse(_xml)
9
+ yield "this parser always fails."
10
+ # on_failure.call
8
11
  end
9
12
  end
10
13
 
11
14
  describe Feedjira::Feed do
12
15
  describe "#add_common_feed_element" do
13
16
  before(:all) do
14
- Feedjira::Feed.add_common_feed_element("generator")
17
+ described_class.add_common_feed_element("generator")
15
18
  end
16
19
 
17
- it "should parse the added element out of Atom feeds" do
20
+ it "parses the added element out of Atom feeds" do
18
21
  expect(Feedjira.parse(sample_wfw_feed).generator).to eq "TypePad"
19
22
  end
20
23
 
21
- it "should parse the added element out of Atom Feedburner feeds" do
24
+ it "parses the added element out of Atom Feedburner feeds" do
22
25
  expect(Feedjira::Parser::Atom.new).to respond_to(:generator)
23
26
  end
24
27
 
25
- it "should parse the added element out of RSS feeds" do
28
+ it "parses the added element out of RSS feeds" do
26
29
  expect(Feedjira::Parser::RSS.new).to respond_to(:generator)
27
30
  end
28
31
  end
@@ -30,19 +33,19 @@ describe Feedjira::Feed do
30
33
  describe "#add_common_feed_entry_element" do
31
34
  before(:all) do
32
35
  tag = "wfw:commentRss"
33
- Feedjira::Feed.add_common_feed_entry_element tag, as: :comment_rss
36
+ described_class.add_common_feed_entry_element tag, as: :comment_rss
34
37
  end
35
38
 
36
- it "should parse the added element out of Atom feeds entries" do
39
+ it "parses the added element out of Atom feeds entries" do
37
40
  entry = Feedjira.parse(sample_wfw_feed).entries.first
38
41
  expect(entry.comment_rss).to eq "this is the new val"
39
42
  end
40
43
 
41
- it "should parse the added element out of Atom Feedburner feeds entries" do
44
+ it "parses the added element out of Atom Feedburner feeds entries" do
42
45
  expect(Feedjira::Parser::AtomEntry.new).to respond_to(:comment_rss)
43
46
  end
44
47
 
45
- it "should parse the added element out of RSS feeds entries" do
48
+ it "parses the added element out of RSS feeds entries" do
46
49
  expect(Feedjira::Parser::RSSEntry.new).to respond_to(:comment_rss)
47
50
  end
48
51
  end
@@ -1,44 +1,46 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Feedjira::FeedUtilities do
4
- before(:each) do
6
+ before do
5
7
  @klass = Class.new do
6
8
  include Feedjira::DateTimeUtilities
7
9
  end
8
10
  end
9
11
 
10
12
  describe "handling dates" do
11
- it "should parse an ISO 8601 formatted datetime into Time" do
13
+ it "parses an ISO 8601 formatted datetime into Time" do
12
14
  time = @klass.new.parse_datetime("2008-02-20T8:05:00-010:00")
13
15
  expect(time.class).to eq Time
14
16
  expect(time).to eq Time.parse_safely("Wed Feb 20 18:05:00 UTC 2008")
15
17
  end
16
18
 
17
- it "should parse a ISO 8601 with milliseconds into Time" do
19
+ it "parses a ISO 8601 with milliseconds into Time" do
18
20
  time = @klass.new.parse_datetime("2013-09-17T08:20:13.931-04:00")
19
21
  expect(time.class).to eq Time
20
22
  expect(time).to eq Time.parse_safely("Tue Sep 17 12:20:13 UTC 2013")
21
23
  end
22
24
 
23
- it "should parse a US Format into Time" do
25
+ it "parses a US Format into Time" do
24
26
  time = @klass.new.parse_datetime("8/23/2016 12:29:58 PM")
25
27
  expect(time.class).to eq Time
26
28
  expect(time).to eq Time.parse_safely("Wed Aug 23 12:29:58 UTC 2016")
27
29
  end
28
30
 
29
- it "should parse a Spanish Format into Time" do
31
+ it "parses a Spanish Format into Time" do
30
32
  time = @klass.new.parse_datetime("Wed, 31 Ago 2016 11:08:22 GMT")
31
33
  expect(time.class).to eq Time
32
34
  expect(time).to eq Time.parse_safely("Wed Aug 31 11:08:22 UTC 2016")
33
35
  end
34
36
 
35
- it "should parse Format with japanese symbols into Time" do
37
+ it "parses Format with japanese symbols into Time" do
36
38
  time = @klass.new.parse_datetime("水, 31 8 2016 07:37:00 PDT")
37
39
  expect(time.class).to eq Time
38
40
  expect(time).to eq Time.parse_safely("Wed Aug 31 14:37:00 UTC 2016")
39
41
  end
40
42
 
41
- it "should parse epoch into Time" do
43
+ it "parses epoch into Time" do
42
44
  time = @klass.new.parse_datetime("1472654220")
43
45
  expect(time.class).to eq Time
44
46
  expect(time).to eq Time.parse_safely("Wed Aug 31 14:37:00 UTC 2016")
@@ -1,20 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Feedjira::FeedUtilities do
4
- before(:each) do
6
+ before do
5
7
  @klass = Class.new do
6
8
  include Feedjira::FeedEntryUtilities
7
9
  end
8
10
  end
9
11
 
10
12
  describe "handling dates" do
11
- it "should parse an ISO 8601 formatted datetime into Time" do
13
+ it "parses an ISO 8601 formatted datetime into Time" do
12
14
  time = @klass.new.parse_datetime("2008-02-20T8:05:00-010:00")
13
15
  expect(time.class).to eq Time
14
16
  expect(time).to eq Time.parse_safely("Wed Feb 20 18:05:00 UTC 2008")
15
17
  end
16
18
 
17
- it "should parse a ISO 8601 with milliseconds into Time" do
19
+ it "parses a ISO 8601 with milliseconds into Time" do
18
20
  time = @klass.new.parse_datetime("2013-09-17T08:20:13.931-04:00")
19
21
  expect(time.class).to eq Time
20
22
  expect(time).to eq Time.parse_safely("Tue Sep 17 12:20:13 UTC 2013")
@@ -22,24 +24,24 @@ describe Feedjira::FeedUtilities do
22
24
  end
23
25
 
24
26
  describe "sanitizing" do
25
- before(:each) do
27
+ before do
26
28
  @feed = Feedjira.parse(sample_atom_feed)
27
29
  @entry = @feed.entries.first
28
30
  end
29
31
 
30
32
  it "doesn't fail when no elements are defined on includer" do
31
- expect { @klass.new.sanitize! }.to_not raise_error
33
+ expect { @klass.new.sanitize! }.not_to raise_error
32
34
  end
33
35
 
34
- it "should provide a sanitized title" do
35
- new_title = "<script>this is not safe</script>" + @entry.title
36
+ it "provides a sanitized title" do
37
+ new_title = "<script>this is not safe</script>#{@entry.title}"
36
38
  @entry.title = new_title
37
39
  scrubbed_title = Loofah.scrub_fragment(new_title, :prune).to_s
38
40
  expect(@entry.title.sanitize).to eq scrubbed_title
39
41
  end
40
42
 
41
- it "should sanitize content in place" do
42
- new_content = "<script>" + @entry.content
43
+ it "sanitizes content in place" do
44
+ new_content = "<script>#{@entry.content}"
43
45
  @entry.content = new_content.dup
44
46
 
45
47
  scrubbed_content = Loofah.scrub_fragment(new_content, :prune).to_s
@@ -48,7 +50,7 @@ describe Feedjira::FeedUtilities do
48
50
  expect(@entry.content).to eq scrubbed_content
49
51
  end
50
52
 
51
- it "should sanitize things in place" do
53
+ it "sanitizes things in place" do
52
54
  @entry.title += "<script>"
53
55
  @entry.author += "<script>"
54
56
  @entry.content += "<script>"