feedjira 3.2.6 → 4.0.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.
- checksums.yaml +4 -4
- data/.github/copilot-instructions.md +176 -0
- data/.github/workflows/ruby.yml +1 -1
- data/.gitignore +1 -0
- data/.rubocop.yml +4 -2
- data/.rubocop_todo.yml +354 -5
- data/CHANGELOG.md +10 -0
- data/feedjira.gemspec +1 -1
- data/lib/feedjira/feed_entry_utilities.rb +6 -3
- data/lib/feedjira/feed_utilities.rb +2 -2
- data/lib/feedjira/parser/json_feed_item.rb +2 -2
- data/lib/feedjira/preprocessor.rb +1 -1
- data/lib/feedjira/util/parse_time.rb +52 -0
- data/lib/feedjira/util.rb +7 -0
- data/lib/feedjira/version.rb +1 -1
- data/lib/feedjira.rb +2 -1
- data/spec/feedjira/atom_entry_utilities_spec.rb +50 -0
- data/spec/feedjira/feed_utilities_entry_spec.rb +75 -3
- data/spec/feedjira/feed_utilities_spec.rb +19 -0
- data/spec/feedjira/parser/atom_entry_spec.rb +2 -2
- data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +1 -1
- data/spec/feedjira/parser/atom_google_alerts_entry_spec.rb +19 -4
- data/spec/feedjira/parser/atom_youtube_entry_spec.rb +2 -2
- data/spec/feedjira/parser/google_docs_atom_spec.rb +36 -0
- data/spec/feedjira/parser/i_tunes_rss_category_spec.rb +40 -0
- data/spec/feedjira/parser/i_tunes_rss_item_spec.rb +1 -1
- data/spec/feedjira/parser/json_feed_item_spec.rb +37 -1
- data/spec/feedjira/parser/podlove_chapter_spec.rb +15 -7
- data/spec/feedjira/parser/rss_entry_spec.rb +37 -1
- data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +1 -1
- data/spec/feedjira/{core_ext/time_spec.rb → util/parse_time_spec.rb} +11 -11
- data/spec/feedjira_spec.rb +10 -10
- data/spec/support/coverage.rb +1 -1
- metadata +8 -7
- data/lib/feedjira/core_ext/date.rb +0 -19
- data/lib/feedjira/core_ext/string.rb +0 -11
- data/lib/feedjira/core_ext/time.rb +0 -38
- data/lib/feedjira/core_ext.rb +0 -5
@@ -2,44 +2,44 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
-
RSpec.describe
|
6
|
-
describe "
|
5
|
+
RSpec.describe Feedjira::Util::ParseTime do
|
6
|
+
describe ".call" do
|
7
7
|
it "returns the datetime in utc when given a Time" do
|
8
|
-
time =
|
8
|
+
time = Time.now
|
9
9
|
|
10
|
-
expect(described_class.
|
10
|
+
expect(described_class.call(time)).to eq(time.utc)
|
11
11
|
end
|
12
12
|
|
13
13
|
it "returns the datetime in utc when given a Date" do
|
14
14
|
date = Date.today
|
15
15
|
|
16
|
-
expect(described_class.
|
16
|
+
expect(described_class.call(date)).to eq(date.to_time.utc)
|
17
17
|
end
|
18
18
|
|
19
19
|
it "returns the datetime in utc when given a String" do
|
20
20
|
timestamp = "2016-01-01 00:00:00"
|
21
21
|
|
22
|
-
expect(described_class.
|
22
|
+
expect(described_class.call(timestamp)).to eq(Time.parse(timestamp).utc)
|
23
23
|
end
|
24
24
|
|
25
25
|
it "returns nil when given an empty String" do
|
26
26
|
timestamp = ""
|
27
27
|
|
28
|
-
expect(described_class.
|
28
|
+
expect(described_class.call(timestamp)).to be_nil
|
29
29
|
end
|
30
30
|
|
31
31
|
it "returns the the datetime in utc given a 14-digit time" do
|
32
|
-
time =
|
32
|
+
time = Time.now.utc
|
33
33
|
timestamp = time.strftime("%Y%m%d%H%M%S")
|
34
34
|
|
35
|
-
expect(described_class.
|
35
|
+
expect(described_class.call(timestamp)).to eq(time.floor)
|
36
36
|
end
|
37
37
|
|
38
38
|
context "when given an invalid time string" do
|
39
39
|
it "returns nil" do
|
40
40
|
timestamp = "2016-51-51 00:00:00"
|
41
41
|
|
42
|
-
expect(described_class.
|
42
|
+
expect(described_class.call(timestamp)).to be_nil
|
43
43
|
end
|
44
44
|
|
45
45
|
it "logs an error" do
|
@@ -50,7 +50,7 @@ RSpec.describe Time do
|
|
50
50
|
expect(Feedjira.logger)
|
51
51
|
.to receive(:debug).with(an_instance_of(ArgumentError))
|
52
52
|
|
53
|
-
described_class.
|
53
|
+
described_class.call(timestamp)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
data/spec/feedjira_spec.rb
CHANGED
@@ -10,7 +10,7 @@ RSpec.describe Feedjira do
|
|
10
10
|
feed = described_class.parse(sample_rss_feed, parser: parser)
|
11
11
|
|
12
12
|
expect(feed.title).to eq "Tender Lovemaking"
|
13
|
-
published =
|
13
|
+
published = Feedjira::Util::ParseTime.call "Thu Dec 04 17:17:49 UTC 2008"
|
14
14
|
expect(feed.entries.first.published).to eq published
|
15
15
|
expect(feed.entries.size).to eq 10
|
16
16
|
end
|
@@ -20,7 +20,7 @@ RSpec.describe Feedjira do
|
|
20
20
|
it "parses an rdf feed" do
|
21
21
|
feed = described_class.parse(sample_rdf_feed)
|
22
22
|
expect(feed.title).to eq "HREF Considered Harmful"
|
23
|
-
published =
|
23
|
+
published = Feedjira::Util::ParseTime.call("Tue Sep 02 19:50:07 UTC 2008")
|
24
24
|
expect(feed.entries.first.published).to eq published
|
25
25
|
expect(feed.entries.size).to eq 10
|
26
26
|
end
|
@@ -28,7 +28,7 @@ RSpec.describe Feedjira do
|
|
28
28
|
it "parses an rss feed" do
|
29
29
|
feed = described_class.parse(sample_rss_feed)
|
30
30
|
expect(feed.title).to eq "Tender Lovemaking"
|
31
|
-
published =
|
31
|
+
published = Feedjira::Util::ParseTime.call "Thu Dec 04 17:17:49 UTC 2008"
|
32
32
|
expect(feed.entries.first.published).to eq published
|
33
33
|
expect(feed.entries.size).to eq 10
|
34
34
|
end
|
@@ -36,7 +36,7 @@ RSpec.describe Feedjira do
|
|
36
36
|
it "parses an atom feed" do
|
37
37
|
feed = described_class.parse(sample_atom_feed)
|
38
38
|
expect(feed.title).to eq "Amazon Web Services Blog"
|
39
|
-
published =
|
39
|
+
published = Feedjira::Util::ParseTime.call "Fri Jan 16 18:21:00 UTC 2009"
|
40
40
|
expect(feed.entries.first.published).to eq published
|
41
41
|
expect(feed.entries.size).to eq 10
|
42
42
|
end
|
@@ -44,7 +44,7 @@ RSpec.describe Feedjira do
|
|
44
44
|
it "parses an feedburner atom feed" do
|
45
45
|
feed = described_class.parse(sample_feedburner_atom_feed)
|
46
46
|
expect(feed.title).to eq "Paul Dix Explains Nothing"
|
47
|
-
published =
|
47
|
+
published = Feedjira::Util::ParseTime.call "Thu Jan 22 15:50:22 UTC 2009"
|
48
48
|
expect(feed.entries.first.published).to eq published
|
49
49
|
expect(feed.entries.size).to eq 5
|
50
50
|
end
|
@@ -52,7 +52,7 @@ RSpec.describe Feedjira do
|
|
52
52
|
it "parses an itunes feed" do
|
53
53
|
feed = described_class.parse(sample_itunes_feed)
|
54
54
|
expect(feed.title).to eq "All About Everything"
|
55
|
-
published =
|
55
|
+
published = Feedjira::Util::ParseTime.call "Wed, 15 Jun 2005 19:00:00 GMT"
|
56
56
|
expect(feed.entries.first.published).to eq published
|
57
57
|
expect(feed.entries.size).to eq 3
|
58
58
|
end
|
@@ -60,7 +60,7 @@ RSpec.describe Feedjira do
|
|
60
60
|
it "parses an itunes feedburner feed" do
|
61
61
|
feed = described_class.parse(sample_itunes_feedburner_feed)
|
62
62
|
expect(feed.title).to eq "Welcome to Night Vale"
|
63
|
-
published =
|
63
|
+
published = Feedjira::Util::ParseTime.call "2023-09-22 16:30:15 UTC"
|
64
64
|
expect(feed.entries.first.published).to eq published
|
65
65
|
expect(feed.entries.size).to eq 3
|
66
66
|
url = "https://www.podtrac.com/pts/redirect.mp3/dovetail.prxu.org/_/126/e3dafc45-a202-42d0-a55b-216e733a2d7a/2023_09_17_BTS_Episode_EXCERPT_v2.mp3"
|
@@ -80,7 +80,7 @@ RSpec.describe Feedjira do
|
|
80
80
|
|
81
81
|
feed = described_class.parse(sample_invalid_date_format_feed)
|
82
82
|
expect(feed.title).to eq "Invalid date format feed"
|
83
|
-
published =
|
83
|
+
published = Feedjira::Util::ParseTime.call "Mon, 16 Oct 2017 15:10:00 GMT"
|
84
84
|
expect(feed.entries.first.published).to eq published
|
85
85
|
expect(feed.entries.size).to eq 2
|
86
86
|
end
|
@@ -97,7 +97,7 @@ RSpec.describe Feedjira do
|
|
97
97
|
it "parses an feedburner rss feed" do
|
98
98
|
feed = described_class.parse(sample_rss_feed_burner_feed)
|
99
99
|
expect(feed.title).to eq "TechCrunch"
|
100
|
-
published =
|
100
|
+
published = Feedjira::Util::ParseTime.call "Wed Nov 02 17:25:27 UTC 2011"
|
101
101
|
expect(feed.entries.first.published).to eq published
|
102
102
|
expect(feed.entries.size).to eq 20
|
103
103
|
end
|
@@ -106,7 +106,7 @@ RSpec.describe Feedjira do
|
|
106
106
|
feed = described_class.parse(sample_rss_feed_with_a10_namespace)
|
107
107
|
expect(feed.url).to eq "http://www.example.com/"
|
108
108
|
expect(feed.entries.first.url).to eq "http://www.example.com/5"
|
109
|
-
expect(feed.entries.first.updated).to eq
|
109
|
+
expect(feed.entries.first.updated).to eq Feedjira::Util::ParseTime.call("2020-05-14T10:00:18Z")
|
110
110
|
expect(feed.entries.first.author).to eq "John Doe"
|
111
111
|
expect(feed.entries.size).to eq 5
|
112
112
|
end
|
data/spec/support/coverage.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feedjira
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Hess
|
@@ -81,6 +81,7 @@ extra_rdoc_files: []
|
|
81
81
|
files:
|
82
82
|
- ".github/ISSUE_TEMPLATE/feed-parsing.md"
|
83
83
|
- ".github/ISSUE_TEMPLATE/general-issue.md"
|
84
|
+
- ".github/copilot-instructions.md"
|
84
85
|
- ".github/dependabot.yml"
|
85
86
|
- ".github/workflows/ruby.yml"
|
86
87
|
- ".gitignore"
|
@@ -97,10 +98,6 @@ files:
|
|
97
98
|
- lib/feedjira.rb
|
98
99
|
- lib/feedjira/atom_entry_utilities.rb
|
99
100
|
- lib/feedjira/configuration.rb
|
100
|
-
- lib/feedjira/core_ext.rb
|
101
|
-
- lib/feedjira/core_ext/date.rb
|
102
|
-
- lib/feedjira/core_ext/string.rb
|
103
|
-
- lib/feedjira/core_ext/time.rb
|
104
101
|
- lib/feedjira/feed.rb
|
105
102
|
- lib/feedjira/feed_entry_utilities.rb
|
106
103
|
- lib/feedjira/feed_utilities.rb
|
@@ -130,9 +127,11 @@ files:
|
|
130
127
|
- lib/feedjira/parser/rss_image.rb
|
131
128
|
- lib/feedjira/preprocessor.rb
|
132
129
|
- lib/feedjira/rss_entry_utilities.rb
|
130
|
+
- lib/feedjira/util.rb
|
131
|
+
- lib/feedjira/util/parse_time.rb
|
133
132
|
- lib/feedjira/version.rb
|
133
|
+
- spec/feedjira/atom_entry_utilities_spec.rb
|
134
134
|
- spec/feedjira/configuration_spec.rb
|
135
|
-
- spec/feedjira/core_ext/time_spec.rb
|
136
135
|
- spec/feedjira/feed_spec.rb
|
137
136
|
- spec/feedjira/feed_utilities_entry_spec.rb
|
138
137
|
- spec/feedjira/feed_utilities_spec.rb
|
@@ -146,6 +145,7 @@ files:
|
|
146
145
|
- spec/feedjira/parser/atom_youtube_spec.rb
|
147
146
|
- spec/feedjira/parser/google_docs_atom_entry_spec.rb
|
148
147
|
- spec/feedjira/parser/google_docs_atom_spec.rb
|
148
|
+
- spec/feedjira/parser/i_tunes_rss_category_spec.rb
|
149
149
|
- spec/feedjira/parser/i_tunes_rss_item_spec.rb
|
150
150
|
- spec/feedjira/parser/i_tunes_rss_owner_spec.rb
|
151
151
|
- spec/feedjira/parser/itunes_rss_spec.rb
|
@@ -157,6 +157,7 @@ files:
|
|
157
157
|
- spec/feedjira/parser/rss_feed_burner_spec.rb
|
158
158
|
- spec/feedjira/parser/rss_spec.rb
|
159
159
|
- spec/feedjira/preprocessor_spec.rb
|
160
|
+
- spec/feedjira/util/parse_time_spec.rb
|
160
161
|
- spec/feedjira_spec.rb
|
161
162
|
- spec/sample_feeds.rb
|
162
163
|
- spec/sample_feeds/AmazonWebServicesBlog.xml
|
@@ -218,7 +219,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
218
219
|
requirements:
|
219
220
|
- - ">="
|
220
221
|
- !ruby/object:Gem::Version
|
221
|
-
version: '
|
222
|
+
version: '3.1'
|
222
223
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
223
224
|
requirements:
|
224
225
|
- - ">="
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Date code pulled and adapted from:
|
4
|
-
# Ruby Cookbook by Lucas Carlson and Leonard Richardson
|
5
|
-
# Published by O'Reilly
|
6
|
-
# ISBN: 0-596-52369-6
|
7
|
-
class Date
|
8
|
-
def feed_utils_to_gm_time
|
9
|
-
feed_utils_to_time(new_offset, :gm)
|
10
|
-
end
|
11
|
-
|
12
|
-
private
|
13
|
-
|
14
|
-
def feed_utils_to_time(dest, method)
|
15
|
-
# Convert a fraction of a day to a number of microseconds
|
16
|
-
usec = (dest.sec_fraction * (10**6)).to_i
|
17
|
-
Time.send(method, dest.year, dest.month, dest.day, dest.hour, dest.min, dest.sec, usec)
|
18
|
-
end
|
19
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "time"
|
4
|
-
require "date"
|
5
|
-
|
6
|
-
class Time
|
7
|
-
# Parse a time string and convert it to UTC without raising errors.
|
8
|
-
# Parses a flattened 14-digit time (YYYYmmddHHMMMSS) as UTC.
|
9
|
-
#
|
10
|
-
# === Parameters
|
11
|
-
# [dt<String or Time>] Time definition to be parsed.
|
12
|
-
#
|
13
|
-
# === Returns
|
14
|
-
# A Time instance in UTC or nil if there were errors while parsing.
|
15
|
-
def self.parse_safely(datetime)
|
16
|
-
if datetime.is_a?(Time)
|
17
|
-
datetime.utc
|
18
|
-
elsif datetime.respond_to?(:to_datetime)
|
19
|
-
datetime.to_time.utc
|
20
|
-
else
|
21
|
-
parse_string_safely datetime.to_s
|
22
|
-
end
|
23
|
-
rescue StandardError => e
|
24
|
-
Feedjira.logger.debug("Failed to parse time #{datetime}")
|
25
|
-
Feedjira.logger.debug(e)
|
26
|
-
nil
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.parse_string_safely(string)
|
30
|
-
return nil if string.empty?
|
31
|
-
|
32
|
-
if /\A\d{14}\z/.match?(string)
|
33
|
-
parse("#{string}Z", true)
|
34
|
-
else
|
35
|
-
parse(string).utc
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|