feedjira 3.2.0 → 3.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/general-issue.md +8 -0
  3. data/.github/workflows/ruby.yml +1 -1
  4. data/.rubocop.yml +33 -1
  5. data/CHANGELOG.md +13 -0
  6. data/Gemfile +0 -3
  7. data/README.md +1 -2
  8. data/feedjira.gemspec +7 -3
  9. data/lib/feedjira/core_ext/date.rb +3 -2
  10. data/lib/feedjira/core_ext/time.rb +1 -1
  11. data/lib/feedjira/date_time_utilities/date_time_language_parser.rb +1 -1
  12. data/lib/feedjira/feed_utilities.rb +3 -3
  13. data/lib/feedjira/parser/atom_feed_burner.rb +1 -1
  14. data/lib/feedjira/parser/atom_google_alerts_entry.rb +2 -0
  15. data/lib/feedjira/parser/atom_youtube.rb +2 -2
  16. data/lib/feedjira/parser/google_docs_atom.rb +1 -1
  17. data/lib/feedjira/parser/itunes_rss_category.rb +2 -2
  18. data/lib/feedjira/parser/podlove_chapter.rb +2 -2
  19. data/lib/feedjira/parser/rss.rb +1 -1
  20. data/lib/feedjira/parser/rss_feed_burner.rb +2 -2
  21. data/lib/feedjira/rss_entry_utilities.rb +5 -1
  22. data/lib/feedjira/version.rb +1 -1
  23. data/lib/feedjira.rb +2 -2
  24. data/spec/feedjira/feed_spec.rb +11 -10
  25. data/spec/feedjira/{date_time_utilities_spec.rb → feed_utilities_date_time_spec.rb} +8 -8
  26. data/spec/feedjira/{feed_entry_utilities_spec.rb → feed_utilities_entry_spec.rb} +9 -9
  27. data/spec/feedjira/feed_utilities_spec.rb +37 -42
  28. data/spec/feedjira/parser/atom_entry_spec.rb +16 -16
  29. data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +10 -10
  30. data/spec/feedjira/parser/atom_feed_burner_spec.rb +26 -26
  31. data/spec/feedjira/parser/atom_google_alerts_entry_spec.rb +6 -6
  32. data/spec/feedjira/parser/atom_google_alerts_spec.rb +13 -13
  33. data/spec/feedjira/parser/atom_spec.rb +23 -23
  34. data/spec/feedjira/parser/atom_youtube_entry_spec.rb +19 -19
  35. data/spec/feedjira/parser/atom_youtube_spec.rb +13 -13
  36. data/spec/feedjira/parser/google_docs_atom_entry_spec.rb +3 -3
  37. data/spec/feedjira/parser/google_docs_atom_spec.rb +8 -8
  38. data/spec/feedjira/parser/{itunes_rss_item_spec.rb → i_tunes_rss_item_spec.rb} +18 -18
  39. data/spec/feedjira/parser/{itunes_rss_owner_spec.rb → i_tunes_rss_owner_spec.rb} +3 -3
  40. data/spec/feedjira/parser/itunes_rss_spec.rb +26 -26
  41. data/spec/feedjira/parser/json_feed_item_spec.rb +11 -11
  42. data/spec/feedjira/parser/json_feed_spec.rb +14 -14
  43. data/spec/feedjira/parser/podlove_chapter_spec.rb +7 -7
  44. data/spec/feedjira/parser/rss_entry_spec.rb +26 -20
  45. data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +16 -15
  46. data/spec/feedjira/parser/rss_feed_burner_spec.rb +17 -17
  47. data/spec/feedjira/parser/rss_spec.rb +25 -25
  48. data/spec/feedjira/preprocessor_spec.rb +3 -3
  49. data/spec/feedjira_spec.rb +41 -41
  50. data/spec/sample_feeds/RSSWithComments.xml +277 -0
  51. data/spec/sample_feeds.rb +2 -1
  52. metadata +68 -77
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: db9d2eb01b3bf275ae7d0599df9bef74ea336ddfb9afdcc31998c4f79890cf51
4
- data.tar.gz: 30de1f11b4054c3860ca79a27f8fb54b2244e8140bd26340d3f64f84c2d29884
3
+ metadata.gz: 5169a51338551c1253b148e944e9b63cff818f85ba5eeafd2c3239ea007b5012
4
+ data.tar.gz: c9966b308d0f57873c56b474cdbdc7a1a96ee6dd64d5a0ca56f30c333ada9298
5
5
  SHA512:
6
- metadata.gz: a83a5507737ed80d62515733dad8005f0f3d0bce59558d6b6f252a94084d459b664b7a56c5355d853cb706b62c1a7c804e5bd68df74f4cb9091bc12ce475d075
7
- data.tar.gz: 8af825f5c5cde56ba80d69cbd7d55b1e36e4cb2c6c401f7092a9a8654757fcc133666dbd7ad38527b45f790523aa5449c29dd6886f43112dac49c328ccce816d
6
+ metadata.gz: ad3fc7290af22ec75dbba64b2397ad3e8e6f283f73c3c793eaf9b33d28410dcaa6439618c47d741858a732df7478cbcb21f987314880ef5acd108224cc6fa7a2
7
+ data.tar.gz: 20422cf9fdf53491356726c29b118ce6e1b3b37c0ef7294f1c01bcaf00df72097ae6afd1a88191ca765217fe7a159996247de4837a14a1716d33ad8024f7f784
@@ -0,0 +1,8 @@
1
+ ---
2
+ name: Feed Parsing
3
+ about: Anything else
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
@@ -12,7 +12,7 @@ jobs:
12
12
  fail-fast: false
13
13
  matrix:
14
14
  os: [ubuntu]
15
- ruby: [2.5, 2.6, 2.7, 3.0]
15
+ ruby: [2.7, 3.0, 3.1]
16
16
  handler: [nokogiri, ox, oga]
17
17
  exclude:
18
18
  - { ruby: jruby, handler: ox }
data/.rubocop.yml CHANGED
@@ -1,7 +1,12 @@
1
1
  inherit_from: .rubocop_todo.yml
2
2
 
3
+ require:
4
+ - rubocop-rake
5
+ - rubocop-rspec
6
+ - rubocop-performance
7
+
3
8
  AllCops:
4
- TargetRubyVersion: 2.5
9
+ TargetRubyVersion: 2.7
5
10
  NewCops: enable
6
11
 
7
12
  # Offense count: 3
@@ -32,3 +37,30 @@ Style/IfUnlessModifier:
32
37
 
33
38
  Style/StringLiterals:
34
39
  EnforcedStyle: double_quotes
40
+
41
+ RSpec/MultipleExpectations:
42
+ Max: 10
43
+
44
+ RSpec/ExampleLength:
45
+ Max: 30
46
+
47
+ RSpec/InstanceVariable:
48
+ Enabled: false
49
+
50
+ RSpec/MessageSpies:
51
+ Enabled: false
52
+
53
+ RSpec/NestedGroups:
54
+ Max: 5
55
+
56
+ RSpec/MultipleMemoizedHelpers:
57
+ Max: 10
58
+
59
+ RSpec/BeforeAfterAll:
60
+ Enabled: false
61
+
62
+ RSpec/VerifiedDoubles:
63
+ Enabled: false
64
+
65
+ RSpec/RepeatedExample:
66
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Feedjira Changelog
2
2
 
3
+ ## 3.2.2
4
+
5
+ * Fix time handling again usec is not a timezone
6
+
7
+ * Update rubocop * drop official support for eol Ruby
8
+
9
+
10
+ ## 3.2.1
11
+
12
+ * Fix time handling in ruby 3.1
13
+
14
+ * Atom feeds now have an icon field via https://github.com/feedjira/feedjira/pull/452 (@jswanner)
15
+
3
16
  ## 3.2.0
4
17
 
5
18
  * Atom `feed_url` no longer falls back to `url` via https://github.com/feedjira/feedjira/pull/451 (@frederfred)
data/Gemfile CHANGED
@@ -4,9 +4,6 @@ source "https://rubygems.org/"
4
4
 
5
5
  gemspec
6
6
 
7
- gem "pry"
8
- gem "rubocop", "~> 0.90"
9
-
10
7
  group :test do
11
8
  gem "oga"
12
9
  gem "ox", platforms: %i[mri rbx]
data/README.md CHANGED
@@ -1,13 +1,12 @@
1
1
  # Feedjira
2
2
 
3
- [![Build Status][travis-badge]][travis] [![Code Climate][code-climate-badge]][code-climate] [![Gitter][gitter-badge]][gitter]
3
+ [![Build Status][travis-badge]][travis] [![Code Climate][code-climate-badge]][code-climate]
4
4
 
5
5
  [travis-badge]: https://travis-ci.org/feedjira/feedjira.svg?branch=master
6
6
  [travis]: http://travis-ci.org/feedjira/feedjira
7
7
  [code-climate-badge]: https://codeclimate.com/github/feedjira/feedjira/badges/gpa.svg
8
8
  [code-climate]: https://codeclimate.com/github/feedjira/feedjira
9
9
  [gitter-badge]: https://badges.gitter.im/feedjira/feedjira.svg
10
- [gitter]: https://gitter.im/feedjira/feedjira?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge
11
10
 
12
11
  Feedjira is a Ruby library designed to parse feeds.
13
12
 
data/feedjira.gemspec CHANGED
@@ -22,20 +22,24 @@ Gem::Specification.new do |s|
22
22
  s.metadata = {
23
23
  "homepage_uri" => "https://github.com/feedjira/feedjira",
24
24
  "source_code_uri" => "https://github.com/feedjira/feedjira",
25
- "changelog_uri" => "https://github.com/feedjira/feedjira/blob/master/CHANGELOG.md"
25
+ "changelog_uri" => "https://github.com/feedjira/feedjira/blob/master/CHANGELOG.md",
26
+ "rubygems_mfa_required" => "true"
26
27
  }
27
28
 
28
29
  s.files = `git ls-files`.split("\n")
29
30
  s.require_paths = ["lib"]
30
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
31
31
 
32
- s.required_ruby_version = ">=2.5"
32
+ s.required_ruby_version = ">=2.7"
33
33
 
34
34
  s.add_dependency "loofah", ">= 2.3.1"
35
35
  s.add_dependency "sax-machine", ">= 1.0"
36
36
 
37
37
  s.add_development_dependency "faraday"
38
+ s.add_development_dependency "pry"
38
39
  s.add_development_dependency "rspec"
39
40
  s.add_development_dependency "rubocop"
41
+ s.add_development_dependency "rubocop-performance"
42
+ s.add_development_dependency "rubocop-rake"
43
+ s.add_development_dependency "rubocop-rspec"
40
44
  s.add_development_dependency "yard"
41
45
  end
@@ -16,7 +16,8 @@ class Date
16
16
  private
17
17
 
18
18
  def feed_utils_to_time(dest, method)
19
- Time.send(method, dest.year, dest.month, dest.day, dest.hour, dest.min,
20
- dest.sec, dest.zone)
19
+ # Convert a fraction of a day to a number of microseconds
20
+ usec = (dest.sec_fraction * (10**6)).to_i
21
+ Time.send(method, dest.year, dest.month, dest.day, dest.hour, dest.min, dest.sec, usec)
21
22
  end
22
23
  end
@@ -29,7 +29,7 @@ class Time
29
29
  def self.parse_string_safely(string)
30
30
  return nil if string.empty?
31
31
 
32
- if string =~ /\A\d{14}\z/
32
+ if /\A\d{14}\z/.match?(string)
33
33
  parse("#{string}Z", true)
34
34
  else
35
35
  parse(string).utc
@@ -15,7 +15,7 @@ module Feedjira
15
15
  def self.translate(string)
16
16
  MONTHS_SPANISH.each_with_index do |m, i|
17
17
  rgx = Regexp.new("\s#{m}\s", Regexp::IGNORECASE)
18
- return string.gsub(rgx, MONTHS_ENGLISH[i]) if string =~ rgx
18
+ return string.gsub(rgx, MONTHS_ENGLISH[i]) if string&.match?(rgx)
19
19
  end
20
20
  raise "No translation found for #{string}"
21
21
  end
@@ -75,11 +75,11 @@ module Feedjira
75
75
  old_value = send(name)
76
76
  new_value = feed.send(name)
77
77
 
78
- if old_value != new_value
78
+ if old_value == new_value
79
+ false
80
+ else
79
81
  send("#{name}=", new_value)
80
82
  true
81
- else
82
- false
83
83
  end
84
84
  end
85
85
 
@@ -21,7 +21,7 @@ module Feedjira
21
21
  attr_writer :url, :feed_url
22
22
 
23
23
  def self.able_to_parse?(xml)
24
- ((/<feed/ =~ xml) && (/Atom/ =~ xml) && (/feedburner/ =~ xml) && !(/<rss|<rdf/ =~ xml)) || false
24
+ (xml.include?("<feed") && xml.include?("Atom") && xml.include?("feedburner") && !(/<rss|<rdf/ =~ xml)) || false
25
25
  end
26
26
 
27
27
  # Feed url is <link> with type="text/html" if present,
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "uri"
4
+
3
5
  module Feedjira
4
6
  module Parser
5
7
  # Parser for dealing with Feedburner Atom feed entries.
@@ -14,8 +14,8 @@ module Feedjira
14
14
 
15
15
  elements :entry, as: :entries, class: AtomYoutubeEntry
16
16
 
17
- def self.able_to_parse?(xml) #:nodoc:
18
- %r{xmlns:yt="http://www.youtube.com/xml/schemas/2015"} =~ xml
17
+ def self.able_to_parse?(xml) # :nodoc:
18
+ xml.include?("xmlns:yt=\"http://www.youtube.com/xml/schemas/2015\"")
19
19
  end
20
20
  end
21
21
  end
@@ -17,7 +17,7 @@ module Feedjira
17
17
  @url ||= links.first
18
18
  end
19
19
 
20
- def self.able_to_parse?(xml) #:nodoc:
20
+ def self.able_to_parse?(xml) # :nodoc:
21
21
  %r{<id>https?://docs\.google\.com/.*</id>} =~ xml
22
22
  end
23
23
 
@@ -13,7 +13,7 @@ module Feedjira
13
13
  class: ITunesRSSCategory
14
14
 
15
15
  def each_subcategory(&block)
16
- return to_enum(__method__) unless block_given?
16
+ return to_enum(__method__) unless block
17
17
 
18
18
  yield text
19
19
 
@@ -23,7 +23,7 @@ module Feedjira
23
23
  end
24
24
 
25
25
  def each_path(ancestors = [], &block)
26
- return to_enum(__method__, ancestors) unless block_given?
26
+ return to_enum(__method__, ancestors) unless block
27
27
 
28
28
  category_hierarchy = ancestors + [text]
29
29
 
@@ -14,9 +14,9 @@ module Feedjira
14
14
  return unless start_ntp
15
15
 
16
16
  parts = start_ntp.split(":")
17
- parts.reverse.to_enum.with_index.map do |part, index|
17
+ parts.reverse.to_enum.with_index.sum do |part, index|
18
18
  part.to_f * (60**index)
19
- end.reduce(:+)
19
+ end
20
20
  end
21
21
  end
22
22
  end
@@ -22,7 +22,7 @@ module Feedjira
22
22
  attr_accessor :feed_url
23
23
 
24
24
  def self.able_to_parse?(xml)
25
- (/<rss|<rdf/ =~ xml) && !(/feedburner/ =~ xml)
25
+ (/<rss|<rdf/ =~ xml) && !xml.include?("feedburner")
26
26
  end
27
27
  end
28
28
  end
@@ -15,8 +15,8 @@ module Feedjira
15
15
 
16
16
  attr_accessor :feed_url
17
17
 
18
- def self.able_to_parse?(xml) #:nodoc:
19
- (/<rss|<rdf/ =~ xml) && (/feedburner/ =~ xml)
18
+ def self.able_to_parse?(xml) # :nodoc:
19
+ (/<rss|<rdf/ =~ xml) && xml.include?("feedburner")
20
20
  end
21
21
  end
22
22
  end
@@ -2,7 +2,8 @@
2
2
 
3
3
  module Feedjira
4
4
  module RSSEntryUtilities
5
- def self.included(mod)
5
+ # rubocop:todo Metrics/MethodLength
6
+ def self.included(mod) # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
6
7
  mod.class_exec do
7
8
  element :title
8
9
 
@@ -34,9 +35,12 @@ module Feedjira
34
35
  element :"media:content", as: :image, value: :url
35
36
  element :enclosure, as: :image, value: :url
36
37
 
38
+ element :comments
39
+
37
40
  elements :category, as: :categories
38
41
  end
39
42
  end
43
+ # rubocop:enable Metrics/MethodLength
40
44
 
41
45
  def entry_id
42
46
  @entry_id&.guid
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Feedjira
4
- VERSION = "3.2.0"
4
+ VERSION = "3.2.2"
5
5
  end
data/lib/feedjira.rb CHANGED
@@ -65,7 +65,7 @@ module Feedjira
65
65
 
66
66
  parser.parse(xml, &block)
67
67
  end
68
- module_function :parse # rubocop:disable Style/AccessModifierDeclarations
68
+ module_function :parse
69
69
 
70
70
  # Find compatible parser for given XML
71
71
  #
@@ -77,5 +77,5 @@ module Feedjira
77
77
  start_of_doc = xml.slice(0, 2000)
78
78
  Feedjira.parsers.detect { |klass| klass.able_to_parse?(start_of_doc) }
79
79
  end
80
- module_function :parser_for_xml # rubocop:disable Style/AccessModifierDeclarations
80
+ module_function :parser_for_xml
81
81
  end
@@ -5,26 +5,27 @@ require "spec_helper"
5
5
  class Hell < StandardError; end
6
6
 
7
7
  class FailParser
8
- def self.parse(_xml, &on_failure)
9
- on_failure.call "this parser always fails."
8
+ def self.parse(_xml)
9
+ yield "this parser always fails."
10
+ # on_failure.call
10
11
  end
11
12
  end
12
13
 
13
14
  describe Feedjira::Feed do
14
15
  describe "#add_common_feed_element" do
15
16
  before(:all) do
16
- Feedjira::Feed.add_common_feed_element("generator")
17
+ described_class.add_common_feed_element("generator")
17
18
  end
18
19
 
19
- it "should parse the added element out of Atom feeds" do
20
+ it "parses the added element out of Atom feeds" do
20
21
  expect(Feedjira.parse(sample_wfw_feed).generator).to eq "TypePad"
21
22
  end
22
23
 
23
- it "should parse the added element out of Atom Feedburner feeds" do
24
+ it "parses the added element out of Atom Feedburner feeds" do
24
25
  expect(Feedjira::Parser::Atom.new).to respond_to(:generator)
25
26
  end
26
27
 
27
- it "should parse the added element out of RSS feeds" do
28
+ it "parses the added element out of RSS feeds" do
28
29
  expect(Feedjira::Parser::RSS.new).to respond_to(:generator)
29
30
  end
30
31
  end
@@ -32,19 +33,19 @@ describe Feedjira::Feed do
32
33
  describe "#add_common_feed_entry_element" do
33
34
  before(:all) do
34
35
  tag = "wfw:commentRss"
35
- Feedjira::Feed.add_common_feed_entry_element tag, as: :comment_rss
36
+ described_class.add_common_feed_entry_element tag, as: :comment_rss
36
37
  end
37
38
 
38
- it "should parse the added element out of Atom feeds entries" do
39
+ it "parses the added element out of Atom feeds entries" do
39
40
  entry = Feedjira.parse(sample_wfw_feed).entries.first
40
41
  expect(entry.comment_rss).to eq "this is the new val"
41
42
  end
42
43
 
43
- 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
44
45
  expect(Feedjira::Parser::AtomEntry.new).to respond_to(:comment_rss)
45
46
  end
46
47
 
47
- it "should parse the added element out of RSS feeds entries" do
48
+ it "parses the added element out of RSS feeds entries" do
48
49
  expect(Feedjira::Parser::RSSEntry.new).to respond_to(:comment_rss)
49
50
  end
50
51
  end
@@ -3,44 +3,44 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe Feedjira::FeedUtilities do
6
- before(:each) do
6
+ before do
7
7
  @klass = Class.new do
8
8
  include Feedjira::DateTimeUtilities
9
9
  end
10
10
  end
11
11
 
12
12
  describe "handling dates" do
13
- it "should parse an ISO 8601 formatted datetime into Time" do
13
+ it "parses an ISO 8601 formatted datetime into Time" do
14
14
  time = @klass.new.parse_datetime("2008-02-20T8:05:00-010:00")
15
15
  expect(time.class).to eq Time
16
16
  expect(time).to eq Time.parse_safely("Wed Feb 20 18:05:00 UTC 2008")
17
17
  end
18
18
 
19
- it "should parse a ISO 8601 with milliseconds into Time" do
19
+ it "parses a ISO 8601 with milliseconds into Time" do
20
20
  time = @klass.new.parse_datetime("2013-09-17T08:20:13.931-04:00")
21
21
  expect(time.class).to eq Time
22
- expect(time).to eq Time.parse_safely("Tue Sep 17 12:20:13 UTC 2013")
22
+ expect(time).to eq Time.strptime("Tue Sep 17 12:20:13.931 UTC 2013", "%a %b %d %H:%M:%S.%N %Z %Y")
23
23
  end
24
24
 
25
- it "should parse a US Format into Time" do
25
+ it "parses a US Format into Time" do
26
26
  time = @klass.new.parse_datetime("8/23/2016 12:29:58 PM")
27
27
  expect(time.class).to eq Time
28
28
  expect(time).to eq Time.parse_safely("Wed Aug 23 12:29:58 UTC 2016")
29
29
  end
30
30
 
31
- it "should parse a Spanish Format into Time" do
31
+ it "parses a Spanish Format into Time" do
32
32
  time = @klass.new.parse_datetime("Wed, 31 Ago 2016 11:08:22 GMT")
33
33
  expect(time.class).to eq Time
34
34
  expect(time).to eq Time.parse_safely("Wed Aug 31 11:08:22 UTC 2016")
35
35
  end
36
36
 
37
- it "should parse Format with japanese symbols into Time" do
37
+ it "parses Format with japanese symbols into Time" do
38
38
  time = @klass.new.parse_datetime("水, 31 8 2016 07:37:00 PDT")
39
39
  expect(time.class).to eq Time
40
40
  expect(time).to eq Time.parse_safely("Wed Aug 31 14:37:00 UTC 2016")
41
41
  end
42
42
 
43
- it "should parse epoch into Time" do
43
+ it "parses epoch into Time" do
44
44
  time = @klass.new.parse_datetime("1472654220")
45
45
  expect(time.class).to eq Time
46
46
  expect(time).to eq Time.parse_safely("Wed Aug 31 14:37:00 UTC 2016")
@@ -3,44 +3,44 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe Feedjira::FeedUtilities do
6
- before(:each) do
6
+ before do
7
7
  @klass = Class.new do
8
8
  include Feedjira::FeedEntryUtilities
9
9
  end
10
10
  end
11
11
 
12
12
  describe "handling dates" do
13
- it "should parse an ISO 8601 formatted datetime into Time" do
13
+ it "parses an ISO 8601 formatted datetime into Time" do
14
14
  time = @klass.new.parse_datetime("2008-02-20T8:05:00-010:00")
15
15
  expect(time.class).to eq Time
16
16
  expect(time).to eq Time.parse_safely("Wed Feb 20 18:05:00 UTC 2008")
17
17
  end
18
18
 
19
- it "should parse a ISO 8601 with milliseconds into Time" do
19
+ it "parses a ISO 8601 with milliseconds into Time" do
20
20
  time = @klass.new.parse_datetime("2013-09-17T08:20:13.931-04:00")
21
21
  expect(time.class).to eq Time
22
- expect(time).to eq Time.parse_safely("Tue Sep 17 12:20:13 UTC 2013")
22
+ expect(time).to eq Time.strptime("Tue Sep 17 12:20:13.931 UTC 2013", "%a %b %d %H:%M:%S.%N %Z %Y")
23
23
  end
24
24
  end
25
25
 
26
26
  describe "sanitizing" do
27
- before(:each) do
27
+ before do
28
28
  @feed = Feedjira.parse(sample_atom_feed)
29
29
  @entry = @feed.entries.first
30
30
  end
31
31
 
32
32
  it "doesn't fail when no elements are defined on includer" do
33
- expect { @klass.new.sanitize! }.to_not raise_error
33
+ expect { @klass.new.sanitize! }.not_to raise_error
34
34
  end
35
35
 
36
- it "should provide a sanitized title" do
36
+ it "provides a sanitized title" do
37
37
  new_title = "<script>this is not safe</script>#{@entry.title}"
38
38
  @entry.title = new_title
39
39
  scrubbed_title = Loofah.scrub_fragment(new_title, :prune).to_s
40
40
  expect(@entry.title.sanitize).to eq scrubbed_title
41
41
  end
42
42
 
43
- it "should sanitize content in place" do
43
+ it "sanitizes content in place" do
44
44
  new_content = "<script>#{@entry.content}"
45
45
  @entry.content = new_content.dup
46
46
 
@@ -50,7 +50,7 @@ describe Feedjira::FeedUtilities do
50
50
  expect(@entry.content).to eq scrubbed_content
51
51
  end
52
52
 
53
- it "should sanitize things in place" do
53
+ it "sanitizes things in place" do
54
54
  @entry.title += "<script>"
55
55
  @entry.author += "<script>"
56
56
  @entry.content += "<script>"