rss2mail 0.4.5 → 0.4.6

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: 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