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