feedjira 3.2.0 → 3.2.1
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.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/general-issue.md +8 -0
- data/.rubocop.yml +32 -0
- data/Gemfile +0 -3
- data/feedjira.gemspec +6 -1
- data/lib/feedjira/core_ext/date.rb +1 -1
- data/lib/feedjira/core_ext/time.rb +1 -1
- data/lib/feedjira/date_time_utilities/date_time_language_parser.rb +1 -1
- data/lib/feedjira/feed_utilities.rb +3 -3
- data/lib/feedjira/parser/atom_feed_burner.rb +1 -1
- data/lib/feedjira/parser/atom_google_alerts_entry.rb +2 -0
- data/lib/feedjira/parser/atom_youtube.rb +2 -2
- data/lib/feedjira/parser/google_docs_atom.rb +1 -1
- data/lib/feedjira/parser/itunes_rss_category.rb +2 -2
- data/lib/feedjira/parser/podlove_chapter.rb +2 -2
- data/lib/feedjira/parser/rss.rb +1 -1
- data/lib/feedjira/parser/rss_feed_burner.rb +2 -2
- data/lib/feedjira/version.rb +1 -1
- data/lib/feedjira.rb +2 -2
- data/spec/feedjira/feed_spec.rb +11 -10
- data/spec/feedjira/{date_time_utilities_spec.rb → feed_utilities_date_time_spec.rb} +7 -7
- data/spec/feedjira/{feed_entry_utilities_spec.rb → feed_utilities_entry_spec.rb} +8 -8
- data/spec/feedjira/feed_utilities_spec.rb +35 -40
- data/spec/feedjira/parser/atom_entry_spec.rb +16 -16
- data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +10 -10
- data/spec/feedjira/parser/atom_feed_burner_spec.rb +26 -26
- data/spec/feedjira/parser/atom_google_alerts_entry_spec.rb +6 -6
- data/spec/feedjira/parser/atom_google_alerts_spec.rb +13 -13
- data/spec/feedjira/parser/atom_spec.rb +23 -23
- data/spec/feedjira/parser/atom_youtube_entry_spec.rb +19 -19
- data/spec/feedjira/parser/atom_youtube_spec.rb +13 -13
- data/spec/feedjira/parser/google_docs_atom_entry_spec.rb +3 -3
- data/spec/feedjira/parser/google_docs_atom_spec.rb +8 -8
- data/spec/feedjira/parser/{itunes_rss_item_spec.rb → i_tunes_rss_item_spec.rb} +18 -18
- data/spec/feedjira/parser/{itunes_rss_owner_spec.rb → i_tunes_rss_owner_spec.rb} +3 -3
- data/spec/feedjira/parser/itunes_rss_spec.rb +26 -26
- data/spec/feedjira/parser/json_feed_item_spec.rb +11 -11
- data/spec/feedjira/parser/json_feed_spec.rb +13 -13
- data/spec/feedjira/parser/podlove_chapter_spec.rb +7 -7
- data/spec/feedjira/parser/rss_entry_spec.rb +19 -19
- data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +15 -15
- data/spec/feedjira/parser/rss_feed_burner_spec.rb +17 -17
- data/spec/feedjira/parser/rss_spec.rb +24 -24
- data/spec/feedjira/preprocessor_spec.rb +3 -3
- data/spec/feedjira_spec.rb +41 -41
- metadata +69 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6930aadfe8b2a06d65aa2a8dfaad0d8fcc4f34356a3c3646cf75ef70a753a8d
|
4
|
+
data.tar.gz: 00a921f06c7542ca84d552a6f680e56d99f4b0b3aa830113b75c0545f6fdbcf7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5970d946d3673ff856f95bef75e09b4cc0b6dbc3b8b9ba66a3ebade66d93fd894b23e784d8e9c3ab345eb6deae2094878e60be2164aae46623e2159bcf4530c0
|
7
|
+
data.tar.gz: ae1466452711a547ec9f2ad42ab34b11a8ce03a1886e6ddeb56f3a8723c3d1ab6f1a0b22461c339a0a5c490e64965a37da9329bcd701fd4d10117c8b9e28fbe1
|
data/.rubocop.yml
CHANGED
@@ -1,5 +1,10 @@
|
|
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
9
|
TargetRubyVersion: 2.5
|
5
10
|
NewCops: enable
|
@@ -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/Gemfile
CHANGED
data/feedjira.gemspec
CHANGED
@@ -22,7 +22,8 @@ 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")
|
@@ -35,7 +36,11 @@ Gem::Specification.new do |s|
|
|
35
36
|
s.add_dependency "sax-machine", ">= 1.0"
|
36
37
|
|
37
38
|
s.add_development_dependency "faraday"
|
39
|
+
s.add_development_dependency "pry"
|
38
40
|
s.add_development_dependency "rspec"
|
39
41
|
s.add_development_dependency "rubocop"
|
42
|
+
s.add_development_dependency "rubocop-performance"
|
43
|
+
s.add_development_dependency "rubocop-rake"
|
44
|
+
s.add_development_dependency "rubocop-rspec"
|
40
45
|
s.add_development_dependency "yard"
|
41
46
|
end
|
@@ -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
|
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
|
@@ -21,7 +21,7 @@ module Feedjira
|
|
21
21
|
attr_writer :url, :feed_url
|
22
22
|
|
23
23
|
def self.able_to_parse?(xml)
|
24
|
-
((
|
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,
|
@@ -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)
|
18
|
-
|
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
|
@@ -13,7 +13,7 @@ module Feedjira
|
|
13
13
|
class: ITunesRSSCategory
|
14
14
|
|
15
15
|
def each_subcategory(&block)
|
16
|
-
return to_enum(__method__) unless
|
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
|
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.
|
17
|
+
parts.reverse.to_enum.with_index.sum do |part, index|
|
18
18
|
part.to_f * (60**index)
|
19
|
-
end
|
19
|
+
end
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
data/lib/feedjira/parser/rss.rb
CHANGED
data/lib/feedjira/version.rb
CHANGED
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
|
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
|
80
|
+
module_function :parser_for_xml
|
81
81
|
end
|
data/spec/feedjira/feed_spec.rb
CHANGED
@@ -5,26 +5,27 @@ require "spec_helper"
|
|
5
5
|
class Hell < StandardError; end
|
6
6
|
|
7
7
|
class FailParser
|
8
|
-
def self.parse(_xml
|
9
|
-
|
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
|
-
|
17
|
+
described_class.add_common_feed_element("generator")
|
17
18
|
end
|
18
19
|
|
19
|
-
it "
|
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 "
|
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 "
|
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
|
-
|
36
|
+
described_class.add_common_feed_entry_element tag, as: :comment_rss
|
36
37
|
end
|
37
38
|
|
38
|
-
it "
|
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 "
|
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 "
|
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
|
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 "
|
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 "
|
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
22
|
expect(time).to eq Time.parse_safely("Tue Sep 17 12:20:13 UTC 2013")
|
23
23
|
end
|
24
24
|
|
25
|
-
it "
|
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 "
|
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 "
|
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 "
|
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,20 +3,20 @@
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
5
|
describe Feedjira::FeedUtilities do
|
6
|
-
before
|
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 "
|
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 "
|
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
22
|
expect(time).to eq Time.parse_safely("Tue Sep 17 12:20:13 UTC 2013")
|
@@ -24,23 +24,23 @@ describe Feedjira::FeedUtilities do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
describe "sanitizing" do
|
27
|
-
before
|
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! }.
|
33
|
+
expect { @klass.new.sanitize! }.not_to raise_error
|
34
34
|
end
|
35
35
|
|
36
|
-
it "
|
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 "
|
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 "
|
53
|
+
it "sanitizes things in place" do
|
54
54
|
@entry.title += "<script>"
|
55
55
|
@entry.author += "<script>"
|
56
56
|
@entry.content += "<script>"
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
5
|
describe Feedjira::FeedUtilities do
|
6
|
-
before
|
6
|
+
before do
|
7
7
|
@klass = Class.new do
|
8
8
|
include SAXMachine
|
9
9
|
include Feedjira::FeedUtilities
|
@@ -14,7 +14,7 @@ describe Feedjira::FeedUtilities do
|
|
14
14
|
context "when the flag is not set" do
|
15
15
|
it "does not call the preprocessing method" do
|
16
16
|
@klass.preprocess_xml = false
|
17
|
-
expect(@klass).
|
17
|
+
expect(@klass).not_to receive :preprocess
|
18
18
|
@klass.parse sample_rss_feed
|
19
19
|
end
|
20
20
|
end
|
@@ -22,14 +22,14 @@ describe Feedjira::FeedUtilities do
|
|
22
22
|
context "when the flag is set" do
|
23
23
|
it "calls the preprocessing method" do
|
24
24
|
@klass.preprocess_xml = true
|
25
|
-
|
25
|
+
allow(@klass).to receive(:preprocess).and_return sample_rss_feed
|
26
26
|
@klass.parse sample_rss_feed
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
describe "strip whitespace" do
|
32
|
-
context "strip_whitespace config is true" do
|
31
|
+
describe "when configured to strip whitespace" do
|
32
|
+
context "when strip_whitespace config is true" do
|
33
33
|
it "strips all XML whitespace" do
|
34
34
|
Feedjira.configure { |config| config.strip_whitespace = true }
|
35
35
|
|
@@ -39,7 +39,7 @@ describe Feedjira::FeedUtilities do
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
context "strip_whitespace
|
42
|
+
context "when strip_whitespace is configured false" do
|
43
43
|
it "lstrips XML whitespace" do
|
44
44
|
expect(@klass.strip_whitespace("\nfoobar\n")).to eq("foobar\n")
|
45
45
|
end
|
@@ -47,27 +47,27 @@ describe Feedjira::FeedUtilities do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
describe "instance methods" do
|
50
|
-
it "
|
50
|
+
it "provides an updated? accessor" do
|
51
51
|
feed = @klass.new
|
52
|
-
expect(feed).
|
52
|
+
expect(feed).not_to be_updated
|
53
53
|
feed.updated = true
|
54
54
|
expect(feed).to be_updated
|
55
55
|
end
|
56
56
|
|
57
|
-
it "
|
57
|
+
it "provides a new_entries accessor" do
|
58
58
|
feed = @klass.new
|
59
59
|
expect(feed.new_entries).to eq []
|
60
60
|
feed.new_entries = [:foo]
|
61
61
|
expect(feed.new_entries).to eq [:foo]
|
62
62
|
end
|
63
63
|
|
64
|
-
it "
|
64
|
+
it "provides an etag accessor" do
|
65
65
|
feed = @klass.new
|
66
66
|
feed.etag = "foo"
|
67
67
|
expect(feed.etag).to eq "foo"
|
68
68
|
end
|
69
69
|
|
70
|
-
it "
|
70
|
+
it "provides a last_modified accessor" do
|
71
71
|
feed = @klass.new
|
72
72
|
time = Time.now
|
73
73
|
feed.last_modified = time
|
@@ -75,13 +75,13 @@ describe Feedjira::FeedUtilities do
|
|
75
75
|
expect(feed.last_modified.class).to eq Time
|
76
76
|
end
|
77
77
|
|
78
|
-
it "
|
78
|
+
it "returns new_entries? as true when entries are put into new_entries" do
|
79
79
|
feed = @klass.new
|
80
80
|
feed.new_entries << :foo
|
81
81
|
expect(feed.new_entries?).to eq true
|
82
82
|
end
|
83
83
|
|
84
|
-
it "
|
84
|
+
it "returns a last_modified value from the entry with the most recent published date if the last_modified date hasn't been set" do
|
85
85
|
feed = Feedjira::Parser::Atom.new
|
86
86
|
entry = Feedjira::Parser::AtomEntry.new
|
87
87
|
entry.published = Time.now.to_s
|
@@ -89,7 +89,7 @@ describe Feedjira::FeedUtilities do
|
|
89
89
|
expect(feed.last_modified).to eq entry.published
|
90
90
|
end
|
91
91
|
|
92
|
-
it "
|
92
|
+
it "does not throw an error if one of the entries has published date of nil" do
|
93
93
|
feed = Feedjira::Parser::Atom.new
|
94
94
|
entry = Feedjira::Parser::AtomEntry.new
|
95
95
|
entry.published = Time.now.to_s
|
@@ -101,7 +101,7 @@ describe Feedjira::FeedUtilities do
|
|
101
101
|
|
102
102
|
describe "#update_from_feed" do
|
103
103
|
describe "updating feed attributes" do
|
104
|
-
before
|
104
|
+
before do
|
105
105
|
# I'm using the Atom class when I know I should be using a different
|
106
106
|
# one. However, this update_from_feed method would only be called
|
107
107
|
# against a feed item.
|
@@ -113,44 +113,39 @@ describe Feedjira::FeedUtilities do
|
|
113
113
|
@updated_feed = @feed.dup
|
114
114
|
end
|
115
115
|
|
116
|
-
it "
|
116
|
+
it "updates the title if changed" do
|
117
117
|
@updated_feed.title = "new title"
|
118
118
|
@feed.update_from_feed(@updated_feed)
|
119
119
|
expect(@feed.title).to eq @updated_feed.title
|
120
120
|
expect(@feed).to be_updated
|
121
121
|
end
|
122
122
|
|
123
|
-
it "
|
123
|
+
it "does not update the title if the same" do
|
124
124
|
@feed.update_from_feed(@updated_feed)
|
125
|
-
expect(@feed).
|
125
|
+
expect(@feed).not_to be_updated
|
126
126
|
end
|
127
127
|
|
128
|
-
it "
|
128
|
+
it "updates the feed_url if changed" do
|
129
129
|
@updated_feed.feed_url = "a new feed url"
|
130
130
|
@feed.update_from_feed(@updated_feed)
|
131
131
|
expect(@feed.feed_url).to eq @updated_feed.feed_url
|
132
132
|
expect(@feed).to be_updated
|
133
133
|
end
|
134
134
|
|
135
|
-
it "
|
136
|
-
@feed.update_from_feed(@updated_feed)
|
137
|
-
expect(@feed).to_not be_updated
|
138
|
-
end
|
139
|
-
|
140
|
-
it "should update the url if changed" do
|
135
|
+
it "updates the url if changed" do
|
141
136
|
@updated_feed.url = "a new url"
|
142
137
|
@feed.update_from_feed(@updated_feed)
|
143
138
|
expect(@feed.url).to eq @updated_feed.url
|
144
139
|
end
|
145
140
|
|
146
|
-
it "
|
141
|
+
it "does not update the url if not changed" do
|
147
142
|
@feed.update_from_feed(@updated_feed)
|
148
|
-
expect(@feed).
|
143
|
+
expect(@feed).not_to be_updated
|
149
144
|
end
|
150
145
|
end
|
151
146
|
|
152
147
|
describe "updating entries" do
|
153
|
-
before
|
148
|
+
before do
|
154
149
|
# I'm using the Atom class when I know I should be using a different
|
155
150
|
# one. However, this update_from_feed method would only be called
|
156
151
|
# against a feed item.
|
@@ -173,17 +168,17 @@ describe Feedjira::FeedUtilities do
|
|
173
168
|
@updated_feed.entries << @old_entry
|
174
169
|
end
|
175
170
|
|
176
|
-
it "
|
171
|
+
it "updates last-modified from the latest entry date" do
|
177
172
|
@feed.update_from_feed(@updated_feed)
|
178
173
|
expect(@feed.last_modified).to eq @new_entry.published
|
179
174
|
end
|
180
175
|
|
181
|
-
it "
|
176
|
+
it "puts new entries into new_entries" do
|
182
177
|
@feed.update_from_feed(@updated_feed)
|
183
178
|
expect(@feed.new_entries).to eq [@new_entry]
|
184
179
|
end
|
185
180
|
|
186
|
-
it "
|
181
|
+
it "alsoes put new entries into the entries collection" do
|
187
182
|
@feed.update_from_feed(@updated_feed)
|
188
183
|
expect(@feed.entries).to include(@new_entry)
|
189
184
|
expect(@feed.entries).to include(@old_entry)
|
@@ -194,7 +189,7 @@ describe Feedjira::FeedUtilities do
|
|
194
189
|
let(:recent_entry_id) { "entry_id" }
|
195
190
|
let(:old_entry_id) { nil }
|
196
191
|
|
197
|
-
before
|
192
|
+
before do
|
198
193
|
# I'm using the Atom class when I know I should be using a different
|
199
194
|
# one. However, this update_from_feed method would only be called
|
200
195
|
# against a feed item.
|
@@ -226,26 +221,26 @@ describe Feedjira::FeedUtilities do
|
|
226
221
|
@updated_feed.entries << @old_entry
|
227
222
|
end
|
228
223
|
|
229
|
-
context "changing the url of an existing entry" do
|
230
|
-
it "
|
224
|
+
context "when changing the url of an existing entry" do
|
225
|
+
it "does not put the complete feed into new_entries" do
|
231
226
|
@feed.update_from_feed(@updated_feed)
|
232
|
-
expect(@feed.new_entries).
|
233
|
-
expect(@feed.new_entries).
|
227
|
+
expect(@feed.new_entries).not_to include(@entry_changed_url)
|
228
|
+
expect(@feed.new_entries).not_to include(@old_entry)
|
234
229
|
expect(@feed.new_entries.size).to eq 0
|
235
|
-
expect(@feed.new_entries.size).
|
230
|
+
expect(@feed.new_entries.size).not_to eq 2
|
236
231
|
end
|
237
232
|
end
|
238
233
|
|
239
|
-
context "feed not have entry id and only difference is a url" do
|
234
|
+
context "when feed does not have entry id and only difference is a url" do
|
240
235
|
let(:recent_entry_id) { nil }
|
241
236
|
let(:old_entry_id) { nil }
|
242
237
|
|
243
|
-
it "
|
238
|
+
it "puts the complete feed into new_entries" do
|
244
239
|
@feed.update_from_feed(@updated_feed)
|
245
240
|
expect(@feed.new_entries).to include(@entry_changed_url)
|
246
241
|
expect(@feed.new_entries).to include(@old_entry)
|
247
242
|
expect(@feed.new_entries.size).to eq 2
|
248
|
-
expect(@feed.new_entries.size).
|
243
|
+
expect(@feed.new_entries.size).not_to eq 0
|
249
244
|
end
|
250
245
|
end
|
251
246
|
end
|