newsfetcher 0.85 → 0.87
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/lib/newsfetcher/command.rb +1 -1
- data/lib/newsfetcher/commands/add.rb +2 -2
- data/lib/newsfetcher/extensions/addressable-uri.rb +4 -4
- data/lib/newsfetcher/fetcher.rb +1 -1
- data/lib/newsfetcher/item.rb +11 -2
- data/lib/newsfetcher/profile.rb +9 -9
- data/lib/newsfetcher/subscription.rb +8 -1
- data/lib/newsfetcher.rb +11 -10
- data/newsfetcher.gemspec +5 -5
- data/test/main_test.rb +3 -3
- metadata +10 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6b822d63d603e3bb424e7e5222a71f0c399dd8f771c26c284c9100344e17f827
|
|
4
|
+
data.tar.gz: 20cefc24db63cb25b31a9bdd1406af0bb2e98286ca467a7fc244186824391332
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: afa5c0d81d76cb20a8229cd7cfa215f013343a546a282c3d39b749c5d3518530a6acebcb6a6356ce19149e361cfd4847a5b4dcae76b55e1d7fb8edaa473f82bc
|
|
7
|
+
data.tar.gz: 61ac122ca9b74c773a6411697c28943cca4f66d3ca9b438cca518953f292b7221003a05fcf9a9c92e9f30f5facca829d546416185e15d7364e75cd6d5a2714b6
|
data/lib/newsfetcher/command.rb
CHANGED
|
@@ -12,7 +12,7 @@ module NewsFetcher
|
|
|
12
12
|
config = config_file.exist? ? BaseConfig.load(config_file) : BaseConfig.make
|
|
13
13
|
config.log_level = @log_level.downcase.to_sym if @log_level
|
|
14
14
|
config.max_threads = @max_threads&.to_i if @max_threads
|
|
15
|
-
@profile = Profile.new(dir
|
|
15
|
+
@profile = Profile.new(dir:, config:) or raise Error, "Profile not loaded"
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
end
|
|
@@ -8,8 +8,8 @@ module NewsFetcher
|
|
|
8
8
|
super
|
|
9
9
|
uri, path, id = *args
|
|
10
10
|
raise Error, "No URI specified" unless uri
|
|
11
|
-
|
|
12
|
-
warn "Added subscription: #{
|
|
11
|
+
subscription = @profile.add_subscription(uri:, id:, path:)
|
|
12
|
+
warn "Added subscription: #{subscription.id}"
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
end
|
|
@@ -4,12 +4,12 @@ module Addressable
|
|
|
4
4
|
|
|
5
5
|
def make_subscription_id
|
|
6
6
|
[
|
|
7
|
-
host.to_s
|
|
8
|
-
.sub(/^(www|ssl|en|feeds
|
|
7
|
+
host.to_s
|
|
8
|
+
.sub(/^(www|ssl|en|feeds?|rss|blogs?|news?|old)[\d\-]?.*?\./i, '')
|
|
9
9
|
.sub(/\.(com|org|net|info|edu|co\.uk|wordpress\.com|blogspot\.com|feedburner\.com)$/i, ''),
|
|
10
|
-
path.to_s
|
|
10
|
+
path.to_s
|
|
11
11
|
.gsub(/\b(\.?feeds?|index|atom|rss|rss2|xml|rdf|php|blog|posts|default)\b/i, ''),
|
|
12
|
-
query.to_s
|
|
12
|
+
query.to_s
|
|
13
13
|
.gsub(/\b(format|feed|type|q)=(atom|rss\.xml|rss2?|xml)/i, ''),
|
|
14
14
|
] \
|
|
15
15
|
.join(' ')
|
data/lib/newsfetcher/fetcher.rb
CHANGED
data/lib/newsfetcher/item.rb
CHANGED
|
@@ -8,6 +8,7 @@ module NewsFetcher
|
|
|
8
8
|
attr_accessor :uri
|
|
9
9
|
attr_accessor :author
|
|
10
10
|
attr_accessor :content
|
|
11
|
+
attr_accessor :links
|
|
11
12
|
|
|
12
13
|
include SetParams
|
|
13
14
|
include Simple::Printer::Printable
|
|
@@ -23,13 +24,20 @@ module NewsFetcher
|
|
|
23
24
|
uri = nil
|
|
24
25
|
end
|
|
25
26
|
id = entry.entry_id || uri or raise Error, "Can't determine ID or URL for entry"
|
|
27
|
+
content = (entry.content || entry.summary)&.to_s
|
|
28
|
+
if entry.respond_to?(:links)
|
|
29
|
+
links = (entry.links.map { |l| Addressable::URI.parse(l) rescue nil } - [uri]).compact
|
|
30
|
+
else
|
|
31
|
+
links = nil
|
|
32
|
+
end
|
|
26
33
|
super(
|
|
27
34
|
id: id.to_s,
|
|
28
|
-
uri
|
|
35
|
+
uri:,
|
|
29
36
|
date: entry.published || Time.now,
|
|
30
37
|
title: entry.title,
|
|
31
38
|
author: entry.respond_to?(:author) ? entry.author&.sub(/^by\s+/i, '') : nil,
|
|
32
|
-
content
|
|
39
|
+
content:,
|
|
40
|
+
links:,
|
|
33
41
|
)
|
|
34
42
|
end
|
|
35
43
|
|
|
@@ -40,6 +48,7 @@ module NewsFetcher
|
|
|
40
48
|
:title,
|
|
41
49
|
:uri,
|
|
42
50
|
:author,
|
|
51
|
+
:links,
|
|
43
52
|
]
|
|
44
53
|
end
|
|
45
54
|
|
data/lib/newsfetcher/profile.rb
CHANGED
|
@@ -7,7 +7,7 @@ module NewsFetcher
|
|
|
7
7
|
|
|
8
8
|
include SetParams
|
|
9
9
|
|
|
10
|
-
def initialize(
|
|
10
|
+
def initialize(...)
|
|
11
11
|
super
|
|
12
12
|
setup_logger
|
|
13
13
|
setup_styles
|
|
@@ -59,7 +59,7 @@ module NewsFetcher
|
|
|
59
59
|
subscription_dir = subscriptions_dir / id
|
|
60
60
|
begin
|
|
61
61
|
subscription_config = @config.load(subscription_dir / ConfigFileName)
|
|
62
|
-
rescue
|
|
62
|
+
rescue Simple::Configurator::Error => e
|
|
63
63
|
raise "#{id}: #{e}"
|
|
64
64
|
end
|
|
65
65
|
Subscription.new(id: id, dir: subscription_dir, config: subscription_config, styles: @styles)
|
|
@@ -74,14 +74,14 @@ module NewsFetcher
|
|
|
74
74
|
raise Error, "Bad URI: #{uri}" unless uri.absolute?
|
|
75
75
|
id ||= uri.make_subscription_id
|
|
76
76
|
id = "#{path}/#{id}" if path
|
|
77
|
-
|
|
78
|
-
raise Error, "Subscription already exists in #{
|
|
79
|
-
|
|
80
|
-
config = @config.make(uri:
|
|
81
|
-
config_file =
|
|
77
|
+
dir = subscriptions_dir / id
|
|
78
|
+
raise Error, "Subscription already exists in #{dir}" if dir.exist?
|
|
79
|
+
dir.mkpath
|
|
80
|
+
config = @config.make(uri:)
|
|
81
|
+
config_file = dir / ConfigFileName
|
|
82
82
|
config.save(config_file)
|
|
83
|
-
$logger.info { "
|
|
84
|
-
|
|
83
|
+
$logger.info { "Added new subscription: #{id} (#{config_file})" }
|
|
84
|
+
Subscription.new(id:, dir:, config:, styles: @styles)
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
end
|
|
@@ -12,7 +12,7 @@ module NewsFetcher
|
|
|
12
12
|
include SetParams
|
|
13
13
|
include Simple::Printer::Printable
|
|
14
14
|
|
|
15
|
-
def initialize(
|
|
15
|
+
def initialize(...)
|
|
16
16
|
@title = nil
|
|
17
17
|
@items = []
|
|
18
18
|
super
|
|
@@ -264,6 +264,13 @@ module NewsFetcher
|
|
|
264
264
|
html << Scrubber.text_to_html(item.content)
|
|
265
265
|
end
|
|
266
266
|
end
|
|
267
|
+
if item.links
|
|
268
|
+
item.links.each do |link|
|
|
269
|
+
html.ul do
|
|
270
|
+
html.a(link.prettify, href: link)
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
end
|
|
267
274
|
end
|
|
268
275
|
end
|
|
269
276
|
end.to_html
|
data/lib/newsfetcher.rb
CHANGED
|
@@ -42,19 +42,20 @@ module NewsFetcher
|
|
|
42
42
|
application/xml
|
|
43
43
|
text/xml
|
|
44
44
|
]
|
|
45
|
+
|
|
45
46
|
end
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
require_relative 'newsfetcher/extensions/string'
|
|
49
|
+
require_relative 'newsfetcher/extensions/mail'
|
|
50
|
+
require_relative 'newsfetcher/extensions/addressable-uri'
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
52
|
+
require_relative 'newsfetcher/error'
|
|
53
|
+
require_relative 'newsfetcher/fetcher'
|
|
54
|
+
require_relative 'newsfetcher/history'
|
|
55
|
+
require_relative 'newsfetcher/item'
|
|
56
|
+
require_relative 'newsfetcher/profile'
|
|
57
|
+
require_relative 'newsfetcher/scrubber'
|
|
58
|
+
require_relative 'newsfetcher/subscription'
|
|
58
59
|
|
|
59
60
|
module NewsFetcher
|
|
60
61
|
|
data/newsfetcher.gemspec
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Gem::Specification.new do |s|
|
|
2
2
|
s.name = 'newsfetcher'
|
|
3
|
-
s.version = '0.
|
|
3
|
+
s.version = '0.87'
|
|
4
4
|
s.summary = 'Monitor RSS/Atom feeds and deliver new items by email'
|
|
5
5
|
s.author = 'John Labovitz'
|
|
6
6
|
s.email = 'johnl@johnlabovitz.com'
|
|
@@ -20,20 +20,20 @@ Gem::Specification.new do |s|
|
|
|
20
20
|
s.add_dependency 'erb', '~> 6.0'
|
|
21
21
|
s.add_dependency 'faraday', '~> 2.14'
|
|
22
22
|
s.add_dependency 'feedjira', '~> 4.0'
|
|
23
|
-
s.add_dependency 'loofah', '~> 2.
|
|
23
|
+
s.add_dependency 'loofah', '~> 2.25'
|
|
24
24
|
s.add_dependency 'mail', '~> 2.9'
|
|
25
25
|
s.add_dependency 'maildir', '~> 2.2'
|
|
26
|
-
s.add_dependency 'ostruct', '0.6'
|
|
26
|
+
s.add_dependency 'ostruct', '~> 0.6'
|
|
27
27
|
s.add_dependency 'path', '~> 2.1'
|
|
28
28
|
s.add_dependency 'rubypants', '~> 0.7'
|
|
29
29
|
s.add_dependency 'sassc', '~> 2.4'
|
|
30
30
|
s.add_dependency 'set_params', '~> 0.3'
|
|
31
31
|
s.add_dependency 'simple-builder', '~> 0.4'
|
|
32
|
-
s.add_dependency 'simple-command-parser', '~> 1.
|
|
32
|
+
s.add_dependency 'simple-command-parser', '~> 1.3'
|
|
33
33
|
s.add_dependency 'simple-configurator', '~> 0.2'
|
|
34
34
|
s.add_dependency 'simple-printer', '~> 0.4'
|
|
35
35
|
|
|
36
|
-
s.add_development_dependency 'minitest', '~>
|
|
36
|
+
s.add_development_dependency 'minitest', '~> 6.0'
|
|
37
37
|
s.add_development_dependency 'minitest-power_assert', '~> 0.3'
|
|
38
38
|
s.add_development_dependency 'rake', '~> 13.3'
|
|
39
39
|
s.add_development_dependency 'simple-rake-tasks', '~> 0.1'
|
data/test/main_test.rb
CHANGED
|
@@ -48,9 +48,9 @@ module NewsFetcher
|
|
|
48
48
|
assert { feed }
|
|
49
49
|
uri = feed[:uri]
|
|
50
50
|
assert { uri }
|
|
51
|
-
|
|
52
|
-
assert { dir.exist? }
|
|
53
|
-
|
|
51
|
+
subscription = @profile.add_subscription(uri: uri, id: id, path: path)
|
|
52
|
+
assert { subscription.dir.exist? }
|
|
53
|
+
subscription
|
|
54
54
|
end
|
|
55
55
|
subscriptions = @profile.find_subscriptions
|
|
56
56
|
assert { subscriptions.count == initial_subscriptions.count }
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: newsfetcher
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '0.
|
|
4
|
+
version: '0.87'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- John Labovitz
|
|
@@ -85,14 +85,14 @@ dependencies:
|
|
|
85
85
|
requirements:
|
|
86
86
|
- - "~>"
|
|
87
87
|
- !ruby/object:Gem::Version
|
|
88
|
-
version: '2.
|
|
88
|
+
version: '2.25'
|
|
89
89
|
type: :runtime
|
|
90
90
|
prerelease: false
|
|
91
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
92
92
|
requirements:
|
|
93
93
|
- - "~>"
|
|
94
94
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: '2.
|
|
95
|
+
version: '2.25'
|
|
96
96
|
- !ruby/object:Gem::Dependency
|
|
97
97
|
name: mail
|
|
98
98
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -125,14 +125,14 @@ dependencies:
|
|
|
125
125
|
name: ostruct
|
|
126
126
|
requirement: !ruby/object:Gem::Requirement
|
|
127
127
|
requirements:
|
|
128
|
-
- -
|
|
128
|
+
- - "~>"
|
|
129
129
|
- !ruby/object:Gem::Version
|
|
130
130
|
version: '0.6'
|
|
131
131
|
type: :runtime
|
|
132
132
|
prerelease: false
|
|
133
133
|
version_requirements: !ruby/object:Gem::Requirement
|
|
134
134
|
requirements:
|
|
135
|
-
- -
|
|
135
|
+
- - "~>"
|
|
136
136
|
- !ruby/object:Gem::Version
|
|
137
137
|
version: '0.6'
|
|
138
138
|
- !ruby/object:Gem::Dependency
|
|
@@ -211,14 +211,14 @@ dependencies:
|
|
|
211
211
|
requirements:
|
|
212
212
|
- - "~>"
|
|
213
213
|
- !ruby/object:Gem::Version
|
|
214
|
-
version: '1.
|
|
214
|
+
version: '1.3'
|
|
215
215
|
type: :runtime
|
|
216
216
|
prerelease: false
|
|
217
217
|
version_requirements: !ruby/object:Gem::Requirement
|
|
218
218
|
requirements:
|
|
219
219
|
- - "~>"
|
|
220
220
|
- !ruby/object:Gem::Version
|
|
221
|
-
version: '1.
|
|
221
|
+
version: '1.3'
|
|
222
222
|
- !ruby/object:Gem::Dependency
|
|
223
223
|
name: simple-configurator
|
|
224
224
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -253,14 +253,14 @@ dependencies:
|
|
|
253
253
|
requirements:
|
|
254
254
|
- - "~>"
|
|
255
255
|
- !ruby/object:Gem::Version
|
|
256
|
-
version: '
|
|
256
|
+
version: '6.0'
|
|
257
257
|
type: :development
|
|
258
258
|
prerelease: false
|
|
259
259
|
version_requirements: !ruby/object:Gem::Requirement
|
|
260
260
|
requirements:
|
|
261
261
|
- - "~>"
|
|
262
262
|
- !ruby/object:Gem::Version
|
|
263
|
-
version: '
|
|
263
|
+
version: '6.0'
|
|
264
264
|
- !ruby/object:Gem::Dependency
|
|
265
265
|
name: minitest-power_assert
|
|
266
266
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -365,7 +365,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
365
365
|
- !ruby/object:Gem::Version
|
|
366
366
|
version: '0'
|
|
367
367
|
requirements: []
|
|
368
|
-
rubygems_version:
|
|
368
|
+
rubygems_version: 4.0.5
|
|
369
369
|
specification_version: 4
|
|
370
370
|
summary: Monitor RSS/Atom feeds and deliver new items by email
|
|
371
371
|
test_files:
|