yarss 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f5fc31207ee7282e79e3f9d031087d1c77e8dba7
4
- data.tar.gz: 0e06a204c7c09a60c6c9ea09666b1aebe6a82d2a
3
+ metadata.gz: df8227811b0fa37c7605e53cbe37106a67fd4f5f
4
+ data.tar.gz: 239430b572285f2db67d39c3bc29ca743118eee3
5
5
  SHA512:
6
- metadata.gz: d2c85c04789c1e6864756f26bd5951ba92475dea47f228b78f09c2300e0f719c00042a198a5c515855aee9b275f3cf64bd4154d506a2485247b6f224c10136da
7
- data.tar.gz: 581178f47cc9542e111f2211ecf79e05961657807f8cf92c4a4fe5a94e3be46db2e601d3b9095c4a7be5634665b2f157c14418914780933051099480d75a7dee
6
+ metadata.gz: 01c7ee7bb21d06cf598ad31f9b80980487ad52e62e3380c6125c2bc14204855faed438347b5109e2a272bcba3128ee620ca1b428e2a05bdf74f2dff8655a4e04
7
+ data.tar.gz: 318a7f1a2d7589e1e2ed8a887ddc15ff31126c4ce2ac8e9c49ca45f66957887241efa9a8304958bdf3617cc05dc054b99cb1bd68d5858893ae313a46112825f3
@@ -78,7 +78,7 @@ module Yarss
78
78
  def items
79
79
  items = feed.fetch('entry')
80
80
  items = [items] unless items.is_a?(Array)
81
- items.map { |d| ItemParser.new(d).parse }
81
+ items.map { |d| ItemParser.new(d, feed_link: link).parse }
82
82
  rescue KeyError => e
83
83
  raise ParseError, e
84
84
  end
@@ -11,9 +11,16 @@ module Yarss
11
11
  # @return [Hash]
12
12
  attr_accessor :data
13
13
 
14
- # @param data [Hash] Parsed Atom feed item.
15
- def initialize(data)
16
- self.data = data
14
+ # Feed link URL.
15
+ #
16
+ # @return [String]
17
+ attr_accessor :feed_link
18
+
19
+ # @param data [Hash] Parsed Atom feed item.
20
+ # @param feed_link [String] Feed link URL.
21
+ def initialize(data, feed_link: '')
22
+ self.data = data
23
+ self.feed_link = feed_link
17
24
  end
18
25
 
19
26
  # Parse out the feed item id, title, updated, link and content and wrap
@@ -92,8 +99,9 @@ module Yarss
92
99
  def content
93
100
  summary = Attribute.value(data['summary'] || '')
94
101
  content = Attribute.value(data['content'] || '')
95
- return content unless content.empty?
96
- summary
102
+ content = summary if content.empty?
103
+
104
+ Attribute.absolutize_urls(content, feed_link)
97
105
  end
98
106
  end
99
107
  end
@@ -79,8 +79,8 @@ module Yarss
79
79
  link_value(value.fetch('href'))
80
80
  when Array
81
81
  item = value.find { |l| l.is_a?(String) } ||
82
- value.find { |l| l['rel'] && l['rel'] == 'self' } ||
83
- value.find { |l| l['rel'] && l['rel'] == 'alternate' }
82
+ value.find { |l| l['rel'] && l['rel'] == 'alternate' } ||
83
+ value.find { |l| l['rel'].nil? }
84
84
  raise KeyError unless item
85
85
  link_value(item)
86
86
  when String
@@ -91,5 +91,29 @@ module Yarss
91
91
  rescue KeyError => e
92
92
  raise ParseError, e
93
93
  end
94
+
95
+ # Make relative URLs absolute.
96
+ #
97
+ # @param content [String] Item content.
98
+ # @param base [String] Base URL.
99
+ #
100
+ # @return [String]
101
+ def self.absolutize_urls(content, base)
102
+ return content if base.empty? || content.empty?
103
+
104
+ regex = %r{
105
+ (?<=src="|href="|src='|href=')
106
+ /
107
+ ([^/"'].+?)? # Don't match "//xx" but do match "/".
108
+ (?="|')
109
+ }x
110
+
111
+ content = content.gsub(regex) do |url|
112
+ "#{base.chomp('/')}#{url}"
113
+ end
114
+ content.gsub!("\r\n", "\n")
115
+
116
+ content.freeze
117
+ end
94
118
  end
95
119
  end
@@ -101,7 +101,7 @@ module Yarss
101
101
  def items
102
102
  items = feed.fetch('item')
103
103
  items = [items] unless items.is_a?(Array)
104
- items.map { |d| ItemParser.new(d).parse }
104
+ items.map { |d| ItemParser.new(d, feed_link: link).parse }
105
105
  rescue KeyError => e
106
106
  raise ParseError, e
107
107
  end
@@ -9,9 +9,16 @@ module Yarss
9
9
  # @return [Hash]
10
10
  attr_accessor :data
11
11
 
12
- # @param data [Hash] Parsed Rdf feed item.
13
- def initialize(data)
14
- self.data = data
12
+ # Feed link URL.
13
+ #
14
+ # @return [String]
15
+ attr_accessor :feed_link
16
+
17
+ # @param data [Hash] Parsed Rdf feed item.
18
+ # @param feed_link [String] Feed link URL.
19
+ def initialize(data, feed_link: '')
20
+ self.data = data
21
+ self.feed_link = feed_link
15
22
  end
16
23
 
17
24
  # Parse out the feed item id, title, updated, link and content and wrap
@@ -105,7 +112,8 @@ module Yarss
105
112
  #
106
113
  # @return [String]
107
114
  def description
108
- Attribute.value(data.fetch('description'))
115
+ description = Attribute.value(data.fetch('description'))
116
+ Attribute.absolutize_urls(description, feed_link)
109
117
  rescue KeyError => e
110
118
  raise ParseError, e
111
119
  end
@@ -84,7 +84,7 @@ module Yarss
84
84
  def items
85
85
  items = feed.fetch('item')
86
86
  items = [items] unless items.is_a?(Array)
87
- items.map { |d| ItemParser.new(d).parse }
87
+ items.map { |d| ItemParser.new(d, feed_link: link).parse }
88
88
  rescue KeyError => e
89
89
  raise ParseError, e
90
90
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'digest'
4
+
3
5
  module Yarss
4
6
  module Rss
5
7
  # Extract id, title, updated, link and content from a feed item.
@@ -11,9 +13,16 @@ module Yarss
11
13
  # @return [Hash]
12
14
  attr_accessor :data
13
15
 
14
- # @param data [Hash] Parsed RSS feed item.
15
- def initialize(data)
16
- self.data = data
16
+ # Feed link URL.
17
+ #
18
+ # @return [String]
19
+ attr_accessor :feed_link
20
+
21
+ # @param data [Hash] Parsed RSS feed item.
22
+ # @param feed_link [String] Feed link URL.
23
+ def initialize(data, feed_link: '')
24
+ self.data = data
25
+ self.feed_link = feed_link
17
26
  end
18
27
 
19
28
  # Parse out the feed item id, title, updated, link and content and wrap
@@ -102,12 +111,16 @@ module Yarss
102
111
  #
103
112
  # @return [String]
104
113
  def description
105
- description = Attribute.value(data['description'] || '')
106
-
107
- return Attribute.value(data['content:encoded']) if
108
- description.empty? && data['content:encoded']
114
+ content = if data['content:encoded']
115
+ data['content:encoded']
116
+ elsif data['description']
117
+ data['description']
118
+ else
119
+ ''
120
+ end
109
121
 
110
- description
122
+ content = Attribute.value(content)
123
+ Attribute.absolutize_urls(content, feed_link)
111
124
  end
112
125
  end
113
126
  end
data/lib/yarss/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Yarss
4
4
  # Version number, happy now?
5
- VERSION = '0.0.3'
5
+ VERSION = '0.0.4'
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yarss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oldrich Vetesnik