rss2mail 0.4.5 → 0.4.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9caa784387678cab2092fbd159b7b03491445d62
4
- data.tar.gz: 5a8b2b47e81fa752ddd9c2c05fe91929159f3723
3
+ metadata.gz: 8cfccc00c87ea1cfb42ac84ec359ab83ab127f9b
4
+ data.tar.gz: 0821128c1c9a3816ff2ad772919c34eb3cb97c3a
5
5
  SHA512:
6
- metadata.gz: 4d3090010753a6f3b9e802f32a61952e7b923dd8b02c48b8d5898cbc88efe83776358c61c3f92897e3a5e52c69311cfb987fca7d1d4284230b4da43cfa53f227
7
- data.tar.gz: 633772786d5ee96802a14f3f7f3c25c608310e7be6693c5f479b01b9022ed004e80872d91e76f35df64c06275527ad23cf1ea4904115ae4408bc8ad767d4d9a7
6
+ metadata.gz: 6ed5b865c7051d96d44c35e3ddb5ca2e41db2ab46c8b780c7e5e8cc9fd4f99b9a6e67333912c25e803c1972217f6c8ae0aba4d03bcda70a666f07d6c7f743831
7
+ data.tar.gz: 5f706b37c825e27719acc0fb2449625797edd7bd7d4cf87f6a2631fceddbc3b1da0a263a2b6311c95fd2c161baac013a1838c37a1c94f22046d827b8f4783c24
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to rss2mail version 0.4.5
5
+ This documentation refers to rss2mail version 0.4.6
6
6
 
7
7
 
8
8
  == DESCRIPTION
@@ -5,7 +5,7 @@
5
5
  # #
6
6
  # A component of rss2mail, the RSS to e-mail forwarder. #
7
7
  # #
8
- # Copyright (C) 2007-2014 Jens Wille #
8
+ # Copyright (C) 2007-2015 Jens Wille #
9
9
  # #
10
10
  # Authors: #
11
11
  # Jens Wille <jens.wille@gmail.com> #
@@ -43,9 +43,10 @@ helpers ERB::Util
43
43
  get '/' do
44
44
  prepare
45
45
 
46
- if @feed_url = RSS2Mail::Util.discover_feed(@url = params[:url])
47
- @title = Nokogiri.HTML(open(@feed_url)).at_css('title').content rescue nil
48
- end
46
+ @feed_url = RSS2Mail::Util.discover_feed(@url = params[:url])
47
+
48
+ RSS2Mail::Util.load_feed(@feed_url) { |doc|
49
+ @title = doc.at_css('title').content } if @feed_url
49
50
 
50
51
  erb :index
51
52
  end
@@ -95,7 +95,7 @@ module RSS2Mail
95
95
  send_mail(to, "[#{title}] #{subject}", body, type) {
96
96
  sent << link
97
97
  count += 1
98
- }
98
+ } if link
99
99
  }
100
100
 
101
101
  sent.uniq!
@@ -218,6 +218,8 @@ module RSS2Mail
218
218
  log "<#{link}>", debug
219
219
 
220
220
  [link, subject, ERB.new(template).result(binding)]
221
+ rescue => err
222
+ error err, 'while rendering feed', title
221
223
  end
222
224
 
223
225
  def send_mail(*args)
@@ -174,12 +174,12 @@ module RSS2Mail
174
174
 
175
175
  def get_body(tag, encoding)
176
176
  body = case tag
177
- when nil then return
177
+ when nil then # nothing
178
178
  when true then open_feed(link).read
179
179
  when String then extract_body(tag)
180
180
  when Array then extract_body(*tag)
181
181
  else raise ArgumentError, "don't know how to handle tag of type #{tag.class}"
182
- end
182
+ end or return
183
183
 
184
184
  body.gsub!(/<\/?(.*?)>/) { |m| m if KEEP.include?($1.split.first.downcase) }
185
185
  body.gsub!(/<a\s+href=['"](?!http:).*?>(.*?)<\/a>/mi, '\1')
@@ -190,8 +190,8 @@ module RSS2Mail
190
190
  end
191
191
 
192
192
  def extract_body(expr, attribute = nil)
193
- elem = Nokogiri.HTML(open_feed(link)).at(expr)
194
- attribute ? elem[attribute] : elem.to_s
193
+ load_feed(link) { |doc| elem = doc.at(expr)
194
+ attribute ? elem[attribute] : elem.to_s }
195
195
  end
196
196
 
197
197
  def clean_subject(str)
@@ -51,11 +51,7 @@ module RSS2Mail
51
51
  # cf. <http://www.rssboard.org/rss-autodiscovery>
52
52
  def discover_feed(url, fallback = false)
53
53
  unless url.nil? || url.empty? || url == 'about:blank'
54
- begin
55
- doc = Nokogiri.HTML(open_feed(url))
56
- rescue => err
57
- warn "Unable to discover feed `#{url}': #{err} (#{err.class})"
58
- else
54
+ load_feed(url) { |doc|
59
55
  doc.xpath(ALTERNATE_XPATH).each { |link|
60
56
  if link[:type] =~ FEED_RE && href = link[:href]
61
57
  return href =~ URI_RE ? href : begin
@@ -68,14 +64,26 @@ module RSS2Mail
68
64
  doc.xpath(FACEBOOK_XPATH).each { |node|
69
65
  return FACEBOOK_FEED + node[:id][/\d+/]
70
66
  } if url.include?('facebook.com')
71
- end
67
+ }
72
68
  end
73
69
 
74
70
  url if fallback
75
71
  end
76
72
 
77
- def open_feed(url, options = {}, &block)
73
+ def load_feed(url)
74
+ doc = Nokogiri.HTML(open_feed(url))
75
+ rescue => err
76
+ warn "Unable to load feed `#{url}': #{err} (#{err.class})"
77
+ else
78
+ block_given? ? yield(doc) : doc
79
+ end
80
+
81
+ def open_feed(url, options = {}, tries = 10, &block)
78
82
  open(url, options.merge('User-Agent' => USER_AGENT), &block)
83
+ rescue RuntimeError => err
84
+ raise unless err.to_s.include?('redirection loop') && (tries -= 1) > 0
85
+ sleep 10 - tries
86
+ retry
79
87
  end
80
88
 
81
89
  def load_feeds(feeds_file, options = { deserialize_symbols: true })
@@ -4,7 +4,7 @@ module RSS2Mail
4
4
 
5
5
  MAJOR = 0
6
6
  MINOR = 4
7
- TINY = 5
7
+ TINY = 6
8
8
 
9
9
  class << self
10
10
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rss2mail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Wille
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-16 00:00:00.000000000 Z
11
+ date: 2015-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cyclops
@@ -117,7 +117,7 @@ dependencies:
117
117
  version: '0.8'
118
118
  - - ">="
119
119
  - !ruby/object:Gem::Version
120
- version: 0.8.1
120
+ version: 0.8.2
121
121
  type: :development
122
122
  prerelease: false
123
123
  version_requirements: !ruby/object:Gem::Requirement
@@ -127,7 +127,7 @@ dependencies:
127
127
  version: '0.8'
128
128
  - - ">="
129
129
  - !ruby/object:Gem::Version
130
- version: 0.8.1
130
+ version: 0.8.2
131
131
  - !ruby/object:Gem::Dependency
132
132
  name: rake
133
133
  requirement: !ruby/object:Gem::Requirement
@@ -176,7 +176,7 @@ metadata: {}
176
176
  post_install_message:
177
177
  rdoc_options:
178
178
  - "--title"
179
- - rss2mail Application documentation (v0.4.5)
179
+ - rss2mail Application documentation (v0.4.6)
180
180
  - "--charset"
181
181
  - UTF-8
182
182
  - "--line-numbers"
@@ -197,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
197
  version: '0'
198
198
  requirements: []
199
199
  rubyforge_project:
200
- rubygems_version: 2.4.6
200
+ rubygems_version: 2.4.8
201
201
  signing_key:
202
202
  specification_version: 4
203
203
  summary: Send RSS feeds as e-mail