feedjira 3.1.1 → 3.1.2
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/feed-parsing.md +15 -0
- data/.rubocop.yml +19 -627
- data/.rubocop_todo.yml +4 -29
- data/.travis.yml +0 -1
- data/CHANGELOG.md +5 -0
- data/Gemfile +4 -2
- data/Rakefile +3 -1
- data/feedjira.gemspec +6 -10
- data/lib/feedjira.rb +4 -3
- data/lib/feedjira/configuration.rb +5 -3
- data/lib/feedjira/core_ext.rb +2 -0
- data/lib/feedjira/core_ext/date.rb +3 -1
- data/lib/feedjira/core_ext/string.rb +2 -0
- data/lib/feedjira/core_ext/time.rb +2 -0
- data/lib/feedjira/date_time_utilities.rb +8 -8
- data/lib/feedjira/date_time_utilities/date_time_epoch_parser.rb +3 -0
- data/lib/feedjira/date_time_utilities/date_time_language_parser.rb +4 -2
- data/lib/feedjira/date_time_utilities/date_time_pattern_parser.rb +9 -9
- data/lib/feedjira/feed.rb +2 -0
- data/lib/feedjira/feed_entry_utilities.rb +5 -3
- data/lib/feedjira/feed_utilities.rb +5 -2
- data/lib/feedjira/parser.rb +2 -0
- data/lib/feedjira/parser/atom.rb +3 -1
- data/lib/feedjira/parser/atom_entry.rb +2 -0
- data/lib/feedjira/parser/atom_feed_burner.rb +4 -2
- data/lib/feedjira/parser/atom_feed_burner_entry.rb +2 -2
- data/lib/feedjira/parser/atom_google_alerts.rb +3 -1
- data/lib/feedjira/parser/atom_google_alerts_entry.rb +6 -5
- data/lib/feedjira/parser/atom_youtube.rb +2 -0
- data/lib/feedjira/parser/atom_youtube_entry.rb +2 -0
- data/lib/feedjira/parser/globally_unique_identifier.rb +2 -0
- data/lib/feedjira/parser/google_docs_atom.rb +4 -2
- data/lib/feedjira/parser/google_docs_atom_entry.rb +2 -0
- data/lib/feedjira/parser/itunes_rss.rb +4 -2
- data/lib/feedjira/parser/itunes_rss_category.rb +2 -0
- data/lib/feedjira/parser/itunes_rss_item.rb +3 -1
- data/lib/feedjira/parser/itunes_rss_owner.rb +2 -0
- data/lib/feedjira/parser/json_feed.rb +4 -2
- data/lib/feedjira/parser/json_feed_item.rb +7 -1
- data/lib/feedjira/parser/podlove_chapter.rb +3 -0
- data/lib/feedjira/parser/rss.rb +4 -1
- data/lib/feedjira/parser/rss_entry.rb +2 -0
- data/lib/feedjira/parser/rss_feed_burner.rb +3 -1
- data/lib/feedjira/parser/rss_feed_burner_entry.rb +2 -2
- data/lib/feedjira/parser/rss_image.rb +2 -0
- data/lib/feedjira/preprocessor.rb +3 -1
- data/lib/feedjira/rss_entry_utilities.rb +6 -2
- data/lib/feedjira/version.rb +3 -1
- data/spec/feedjira/configuration_spec.rb +2 -0
- data/spec/feedjira/date_time_utilities_spec.rb +2 -0
- data/spec/feedjira/feed_entry_utilities_spec.rb +4 -2
- data/spec/feedjira/feed_spec.rb +2 -0
- data/spec/feedjira/feed_utilities_spec.rb +5 -3
- data/spec/feedjira/parser/atom_entry_spec.rb +6 -4
- data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +7 -5
- data/spec/feedjira/parser/atom_feed_burner_spec.rb +4 -2
- data/spec/feedjira/parser/atom_google_alerts_entry_spec.rb +6 -4
- data/spec/feedjira/parser/atom_google_alerts_spec.rb +2 -0
- data/spec/feedjira/parser/atom_spec.rb +9 -7
- data/spec/feedjira/parser/atom_youtube_entry_spec.rb +6 -4
- data/spec/feedjira/parser/atom_youtube_spec.rb +6 -4
- data/spec/feedjira/parser/google_docs_atom_entry_spec.rb +2 -0
- data/spec/feedjira/parser/google_docs_atom_spec.rb +2 -0
- data/spec/feedjira/parser/itunes_rss_item_spec.rb +3 -1
- data/spec/feedjira/parser/itunes_rss_owner_spec.rb +2 -0
- data/spec/feedjira/parser/itunes_rss_spec.rb +11 -9
- data/spec/feedjira/parser/json_feed_item_spec.rb +5 -3
- data/spec/feedjira/parser/json_feed_spec.rb +2 -0
- data/spec/feedjira/parser/podlove_chapter_spec.rb +2 -0
- data/spec/feedjira/parser/rss_entry_spec.rb +6 -4
- data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +9 -7
- data/spec/feedjira/parser/rss_feed_burner_spec.rb +3 -1
- data/spec/feedjira/parser/rss_spec.rb +2 -0
- data/spec/feedjira/preprocessor_spec.rb +4 -2
- data/spec/feedjira_spec.rb +11 -0
- data/spec/sample_feeds.rb +4 -1
- data/spec/sample_feeds/a10.xml +72 -0
- data/spec/spec_helper.rb +3 -1
- metadata +13 -25
- data/Dangerfile +0 -1
data/.rubocop_todo.yml
CHANGED
|
@@ -1,36 +1,11 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on
|
|
3
|
+
# on 2020-09-02 20:02:06 UTC using RuboCop version 0.90.0.
|
|
4
4
|
# The point is for the user to remove these configuration records
|
|
5
5
|
# one by one as the offenses are removed from the code base.
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
|
8
8
|
|
|
9
|
-
# Offense count:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Exclude:
|
|
13
|
-
- 'lib/feedjira/date_time_utilities/date_time_epoch_parser.rb'
|
|
14
|
-
- 'lib/feedjira/feed_utilities.rb'
|
|
15
|
-
- 'lib/feedjira/parser/json_feed_item.rb'
|
|
16
|
-
- 'lib/feedjira/parser/podlove_chapter.rb'
|
|
17
|
-
|
|
18
|
-
# Offense count: 1
|
|
19
|
-
# Cop supports --auto-correct.
|
|
20
|
-
Performance/UnneededSort:
|
|
21
|
-
Exclude:
|
|
22
|
-
- 'lib/feedjira/feed_utilities.rb'
|
|
23
|
-
|
|
24
|
-
# Offense count: 3
|
|
25
|
-
# Configuration parameters: EnforcedStyle.
|
|
26
|
-
# SupportedStyles: inline, group
|
|
27
|
-
Style/AccessModifierDeclarations:
|
|
28
|
-
Exclude:
|
|
29
|
-
- 'lib/feedjira.rb'
|
|
30
|
-
- 'lib/feedjira/parser/itunes_rss.rb'
|
|
31
|
-
|
|
32
|
-
# Offense count: 1
|
|
33
|
-
# Cop supports --auto-correct.
|
|
34
|
-
Style/UnneededCondition:
|
|
35
|
-
Exclude:
|
|
36
|
-
- 'lib/feedjira/feed_utilities.rb'
|
|
9
|
+
# Offense count: 20
|
|
10
|
+
Style/Documentation:
|
|
11
|
+
Enabled: false
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Feedjira Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
* Enhancements
|
|
6
|
+
* Add support for the `a10` namespace used in RSS 2.0 feeds generated by .NET applications. Currently `a10:link`, `a10:updated`, `a10:content` and `a10:name` are supported. [#440][] (@knu)
|
|
7
|
+
|
|
3
8
|
## 3.1.0
|
|
4
9
|
|
|
5
10
|
* Breaking Changes
|
data/Gemfile
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
source "https://rubygems.org/"
|
|
2
4
|
|
|
3
5
|
gemspec
|
|
4
6
|
|
|
5
7
|
gem "pry"
|
|
6
|
-
gem "rubocop", "~> 0.
|
|
8
|
+
gem "rubocop", "~> 0.90"
|
|
7
9
|
|
|
8
10
|
group :test do
|
|
9
11
|
gem "oga"
|
|
10
|
-
gem "ox", platforms: [
|
|
12
|
+
gem "ox", platforms: %i[mri rbx]
|
|
11
13
|
gem "rake"
|
|
12
14
|
end
|
data/Rakefile
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "rspec/core/rake_task"
|
|
2
4
|
require "rubocop/rake_task"
|
|
3
5
|
require "yard"
|
|
@@ -14,4 +16,4 @@ YARD::Rake::YardocTask.new do |t|
|
|
|
14
16
|
t.files = ["lib/**/*.rb", "-", "LICENSE"]
|
|
15
17
|
end
|
|
16
18
|
|
|
17
|
-
task default: [
|
|
19
|
+
task default: %i[spec rubocop]
|
data/feedjira.gemspec
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require File.expand_path("lib/feedjira/version", __dir__)
|
|
4
4
|
|
|
5
|
-
# rubocop:disable Metrics/BlockLength
|
|
6
5
|
Gem::Specification.new do |s|
|
|
7
6
|
s.authors = [
|
|
8
7
|
"Adam Hess",
|
|
@@ -11,10 +10,9 @@ Gem::Specification.new do |s|
|
|
|
11
10
|
"Jon Allured",
|
|
12
11
|
"Julien Kirch",
|
|
13
12
|
"Michael Stock",
|
|
14
|
-
"Paul Dix"
|
|
13
|
+
"Paul Dix"
|
|
15
14
|
]
|
|
16
|
-
s.
|
|
17
|
-
s.homepage = "http://feedjira.com"
|
|
15
|
+
s.homepage = "https://github.com/feedjira/feedjira"
|
|
18
16
|
s.license = "MIT"
|
|
19
17
|
s.name = "feedjira"
|
|
20
18
|
s.platform = Gem::Platform::RUBY
|
|
@@ -22,9 +20,9 @@ Gem::Specification.new do |s|
|
|
|
22
20
|
s.version = Feedjira::VERSION
|
|
23
21
|
|
|
24
22
|
s.metadata = {
|
|
25
|
-
"homepage_uri"
|
|
23
|
+
"homepage_uri" => "http://feedjira.com",
|
|
26
24
|
"source_code_uri" => "https://github.com/feedjira/feedjira",
|
|
27
|
-
"changelog_uri"
|
|
25
|
+
"changelog_uri" => "https://github.com/feedjira/feedjira/blob/master/CHANGELOG.md"
|
|
28
26
|
}
|
|
29
27
|
|
|
30
28
|
s.files = `git ls-files`.split("\n")
|
|
@@ -36,11 +34,9 @@ Gem::Specification.new do |s|
|
|
|
36
34
|
s.add_dependency "loofah", ">= 2.3.1"
|
|
37
35
|
s.add_dependency "sax-machine", ">= 1.0"
|
|
38
36
|
|
|
39
|
-
s.add_development_dependency "
|
|
40
|
-
s.add_development_dependency "danger-commit_lint"
|
|
37
|
+
s.add_development_dependency "faraday"
|
|
41
38
|
s.add_development_dependency "rspec"
|
|
42
39
|
s.add_development_dependency "rubocop"
|
|
43
40
|
s.add_development_dependency "vcr"
|
|
44
41
|
s.add_development_dependency "yard"
|
|
45
42
|
end
|
|
46
|
-
# rubocop:enable Metrics/BlockLength
|
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"
|
|
@@ -64,7 +65,7 @@ module Feedjira
|
|
|
64
65
|
|
|
65
66
|
parser.parse(xml, &block)
|
|
66
67
|
end
|
|
67
|
-
module_function :parse
|
|
68
|
+
module_function :parse # rubocop:disable Style/AccessModifierDeclarations
|
|
68
69
|
|
|
69
70
|
# Find compatible parser for given XML
|
|
70
71
|
#
|
|
@@ -76,5 +77,5 @@ module Feedjira
|
|
|
76
77
|
start_of_doc = xml.slice(0, 2000)
|
|
77
78
|
Feedjira.parsers.detect { |klass| klass.able_to_parse?(start_of_doc) }
|
|
78
79
|
end
|
|
79
|
-
module_function :parser_for_xml
|
|
80
|
+
module_function :parser_for_xml # rubocop:disable Style/AccessModifierDeclarations
|
|
80
81
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Feedjira::Configuration
|
|
2
4
|
module Feedjira
|
|
3
5
|
# Provides global configuration options for Feedjira
|
|
@@ -10,7 +12,7 @@ module Feedjira
|
|
|
10
12
|
attr_accessor(
|
|
11
13
|
:logger,
|
|
12
14
|
:parsers,
|
|
13
|
-
:strip_whitespace
|
|
15
|
+
:strip_whitespace
|
|
14
16
|
)
|
|
15
17
|
|
|
16
18
|
# Modify Feedjira's current configuration
|
|
@@ -48,7 +50,7 @@ module Feedjira
|
|
|
48
50
|
|
|
49
51
|
# @private
|
|
50
52
|
def default_logger
|
|
51
|
-
Logger.new(
|
|
53
|
+
Logger.new($stdout).tap do |logger|
|
|
52
54
|
logger.progname = "Feedjira"
|
|
53
55
|
logger.level = Logger::WARN
|
|
54
56
|
end
|
|
@@ -65,7 +67,7 @@ module Feedjira
|
|
|
65
67
|
Feedjira::Parser::Atom,
|
|
66
68
|
Feedjira::Parser::ITunesRSS,
|
|
67
69
|
Feedjira::Parser::RSS,
|
|
68
|
-
Feedjira::Parser::JSONFeed
|
|
70
|
+
Feedjira::Parser::JSONFeed
|
|
69
71
|
]
|
|
70
72
|
end
|
|
71
73
|
end
|
data/lib/feedjira/core_ext.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Date code pulled and adapted from:
|
|
2
4
|
# Ruby Cookbook by Lucas Carlson and Leonard Richardson
|
|
3
5
|
# Published by O'Reilly
|
|
@@ -15,6 +17,6 @@ class Date
|
|
|
15
17
|
|
|
16
18
|
def feed_utils_to_time(dest, method)
|
|
17
19
|
Time.send(method, dest.year, dest.month, dest.day, dest.hour, dest.min,
|
|
18
|
-
|
|
20
|
+
dest.sec, dest.zone)
|
|
19
21
|
end
|
|
20
22
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Feedjira
|
|
2
4
|
module DateTimeUtilities
|
|
3
5
|
# This is our date parsing heuristic.
|
|
@@ -6,20 +8,18 @@ module Feedjira
|
|
|
6
8
|
DateTimePatternParser,
|
|
7
9
|
DateTimeLanguageParser,
|
|
8
10
|
DateTimeEpochParser,
|
|
9
|
-
DateTime
|
|
11
|
+
DateTime
|
|
10
12
|
].freeze
|
|
11
13
|
|
|
12
14
|
# Parse the given string starting with the most common parser (default ruby)
|
|
13
15
|
# and going over all other available parsers
|
|
14
16
|
def parse_datetime(string)
|
|
15
17
|
res = DATE_PARSERS.detect do |parser|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
nil
|
|
22
|
-
end
|
|
18
|
+
return parser.parse(string).feed_utils_to_gm_time
|
|
19
|
+
rescue StandardError => e
|
|
20
|
+
Feedjira.logger.debug { "Failed to parse date #{string}" }
|
|
21
|
+
Feedjira.logger.debug(e)
|
|
22
|
+
nil
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
Feedjira.logger.warn { "Failed to parse date #{string}" } if res.nil?
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Feedjira
|
|
2
4
|
module DateTimeUtilities
|
|
3
5
|
class DateTimeEpochParser
|
|
4
6
|
def self.parse(string)
|
|
5
7
|
epoch_time = string.to_i
|
|
6
8
|
return Time.at(epoch_time).to_datetime if epoch_time.to_s == string
|
|
9
|
+
|
|
7
10
|
raise "#{string} is not a valid epoch time"
|
|
8
11
|
end
|
|
9
12
|
end
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Feedjira
|
|
2
4
|
module DateTimeUtilities
|
|
3
5
|
class DateTimeLanguageParser
|
|
4
6
|
MONTHS_ENGLISH =
|
|
5
|
-
%w
|
|
7
|
+
%w[Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec].freeze
|
|
6
8
|
MONTHS_SPANISH =
|
|
7
|
-
%w
|
|
9
|
+
%w[Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic].freeze
|
|
8
10
|
|
|
9
11
|
def self.parse(string)
|
|
10
12
|
DateTime.parse(translate(string))
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Feedjira
|
|
2
4
|
module DateTimeUtilities
|
|
3
5
|
class DateTimePatternParser
|
|
4
6
|
# Japanese Symbols are required for strange Date Strings like
|
|
5
7
|
# '水, 31 8 2016 07:37:00 PDT'
|
|
6
|
-
JAPANESE_SYMBOLS = %w
|
|
8
|
+
JAPANESE_SYMBOLS = %w[日 月 火 水 木 金 土].freeze
|
|
7
9
|
PATTERNS = ["%m/%d/%Y %T %p", "%d %m %Y %T %Z"].freeze
|
|
8
10
|
|
|
9
11
|
def self.parse(string)
|
|
10
12
|
PATTERNS.each do |p|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
nil
|
|
18
|
-
end
|
|
13
|
+
datetime = DateTime.strptime(prepare(string), p)
|
|
14
|
+
return datetime
|
|
15
|
+
rescue StandardError => e
|
|
16
|
+
Feedjira.logger.debug("Failed to parse date #{string}")
|
|
17
|
+
Feedjira.logger.debug(e)
|
|
18
|
+
nil
|
|
19
19
|
end
|
|
20
20
|
raise "No pattern matched #{string}"
|
|
21
21
|
end
|
data/lib/feedjira/feed.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Feedjira
|
|
2
4
|
module FeedEntryUtilities
|
|
3
5
|
include Enumerable
|
|
@@ -39,9 +41,9 @@ module Feedjira
|
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
def sanitize!
|
|
42
|
-
%w
|
|
44
|
+
%w[title author summary content image].each do |name|
|
|
43
45
|
if respond_to?(name) && send(name).respond_to?(:sanitize!)
|
|
44
|
-
send(name).send
|
|
46
|
+
send(name).send(:sanitize!)
|
|
45
47
|
end
|
|
46
48
|
end
|
|
47
49
|
end
|
|
@@ -51,7 +53,7 @@ module Feedjira
|
|
|
51
53
|
def each
|
|
52
54
|
@rss_fields ||= instance_variables.map do |ivar|
|
|
53
55
|
ivar.to_s.sub("@", "")
|
|
54
|
-
end.select do |field|
|
|
56
|
+
end.select do |field| # rubocop:disable Style/MultilineBlockChain
|
|
55
57
|
# select callable (public) methods only
|
|
56
58
|
respond_to?(field)
|
|
57
59
|
end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Feedjira
|
|
2
4
|
module FeedUtilities
|
|
3
|
-
UPDATABLE_ATTRIBUTES = %w
|
|
5
|
+
UPDATABLE_ATTRIBUTES = %w[title feed_url url last_modified etag].freeze
|
|
4
6
|
|
|
5
7
|
attr_writer :new_entries, :updated, :last_modified
|
|
6
8
|
attr_accessor :etag
|
|
@@ -41,7 +43,7 @@ module Feedjira
|
|
|
41
43
|
def last_modified
|
|
42
44
|
@last_modified ||= begin
|
|
43
45
|
published = entries.reject { |e| e.published.nil? }
|
|
44
|
-
entry = published.
|
|
46
|
+
entry = published.max_by(&:published)
|
|
45
47
|
entry ? entry.published : nil
|
|
46
48
|
end
|
|
47
49
|
end
|
|
@@ -100,6 +102,7 @@ module Feedjira
|
|
|
100
102
|
|
|
101
103
|
feed.entries.each do |entry|
|
|
102
104
|
break unless new_entry?(entry, latest_entry)
|
|
105
|
+
|
|
103
106
|
found_new_entries << entry
|
|
104
107
|
end
|
|
105
108
|
|
data/lib/feedjira/parser.rb
CHANGED
data/lib/feedjira/parser/atom.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Feedjira
|
|
2
4
|
module Parser
|
|
3
5
|
# Parser for dealing with Atom feeds.
|
|
@@ -14,7 +16,7 @@ module Feedjira
|
|
|
14
16
|
elements :entry, as: :entries, class: AtomEntry
|
|
15
17
|
|
|
16
18
|
def self.able_to_parse?(xml)
|
|
17
|
-
%r{
|
|
19
|
+
%r{<feed[^>]+xmlns\s?=\s?["'](http://www\.w3\.org/2005/Atom|http://purl\.org/atom/ns\#)["'][^>]*>} =~ xml
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
def url
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Feedjira
|
|
2
4
|
module Parser
|
|
3
5
|
# Parser for dealing with Feedburner Atom feeds.
|
|
@@ -10,7 +12,7 @@ module Feedjira
|
|
|
10
12
|
element :link, as: :url_text_html, value: :href,
|
|
11
13
|
with: { type: "text/html" }
|
|
12
14
|
element :link, as: :url_notype, value: :href, with: { type: nil }
|
|
13
|
-
element :link, as: :feed_url_link, value: :href, with: { type: "application/atom+xml" }
|
|
15
|
+
element :link, as: :feed_url_link, value: :href, with: { type: "application/atom+xml" }
|
|
14
16
|
element :"atom10:link", as: :feed_url_atom10_link, value: :href,
|
|
15
17
|
with: { type: "application/atom+xml" }
|
|
16
18
|
elements :"atom10:link", as: :hubs, value: :href, with: { rel: "hub" }
|
|
@@ -19,7 +21,7 @@ module Feedjira
|
|
|
19
21
|
attr_writer :url, :feed_url
|
|
20
22
|
|
|
21
23
|
def self.able_to_parse?(xml)
|
|
22
|
-
((/<feed/ =~ xml) && (/Atom/ =~ xml) && (/feedburner/ =~ xml) && !(
|
|
24
|
+
((/<feed/ =~ xml) && (/Atom/ =~ xml) && (/feedburner/ =~ xml) && !(/<rss|<rdf/ =~ xml)) || false
|
|
23
25
|
end
|
|
24
26
|
|
|
25
27
|
# Feed url is <link> with type="text/html" if present,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Feedjira
|
|
2
4
|
module Parser
|
|
3
5
|
# Parser for dealing with Feedburner Atom feed entries.
|
|
@@ -7,9 +9,7 @@ module Feedjira
|
|
|
7
9
|
include AtomEntryUtilities
|
|
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
|
element :"media:thumbnail", as: :image, value: :url
|
|
15
15
|
element :"media:content", as: :image, value: :url
|