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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e0579bb8a9cf7eb109782ed98b7f38a49c6be3c0959d139df070a1ca87b76833
4
- data.tar.gz: 49ab3d91511500f363f679439c4892ae0cbff6b8b614916d4e295c9cb0f712f4
3
+ metadata.gz: 6b822d63d603e3bb424e7e5222a71f0c399dd8f771c26c284c9100344e17f827
4
+ data.tar.gz: 20cefc24db63cb25b31a9bdd1406af0bb2e98286ca467a7fc244186824391332
5
5
  SHA512:
6
- metadata.gz: 541e173927f3726bc50b107d33eae98e97a9abd57d86ddb2c0bb96ed9a8db9eab4c9ac78c6bbb6f70319d689eff04381a3dc98514ab2be5db16c351cdf71b519
7
- data.tar.gz: 888e0742c7f2d189dee6f104ed850b9b60c22459279567fa2059e6c45f0271b5358126b6b56a3a1f992b88e04d413ba2b6bebbcd39e21497d0977dbf9a816e53
6
+ metadata.gz: afa5c0d81d76cb20a8229cd7cfa215f013343a546a282c3d39b749c5d3518530a6acebcb6a6356ce19149e361cfd4847a5b4dcae76b55e1d7fb8edaa473f82bc
7
+ data.tar.gz: 61ac122ca9b74c773a6411697c28943cca4f66d3ca9b438cca518953f292b7221003a05fcf9a9c92e9f30f5facca829d546416185e15d7364e75cd6d5a2714b6
@@ -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: dir, config: config) or raise Error, "Profile not loaded"
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
- dir = @profile.add_subscription(uri: uri, id: id, path: path)
12
- warn "Added subscription: #{dir}"
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|rss|blogs?|news).*?\./i, '') \
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(' ')
@@ -11,7 +11,7 @@ module NewsFetcher
11
11
  include SetParams
12
12
 
13
13
  def self.get(uri)
14
- new(uri: uri).tap(&:get)
14
+ new(uri:).tap(&:get)
15
15
  end
16
16
 
17
17
  def initialize(**params)
@@ -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: 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: (entry.content || entry.summary)&.to_s,
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
 
@@ -7,7 +7,7 @@ module NewsFetcher
7
7
 
8
8
  include SetParams
9
9
 
10
- def initialize(params={})
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 Config::Error => e
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
- subscription_dir = subscriptions_dir / id
78
- raise Error, "Subscription already exists in #{subscription_dir}" if subscription_dir.exist?
79
- subscription_dir.mkpath
80
- config = @config.make(uri: uri)
81
- config_file = subscription_dir / ConfigFileName
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 { "Saved new subscription to #{config_file}" }
84
- subscription_dir
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(**params)
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
- require 'newsfetcher/extensions/string'
48
- require 'newsfetcher/extensions/mail'
49
- require 'newsfetcher/extensions/addressable-uri'
48
+ require_relative 'newsfetcher/extensions/string'
49
+ require_relative 'newsfetcher/extensions/mail'
50
+ require_relative 'newsfetcher/extensions/addressable-uri'
50
51
 
51
- require 'newsfetcher/error'
52
- require 'newsfetcher/fetcher'
53
- require 'newsfetcher/history'
54
- require 'newsfetcher/item'
55
- require 'newsfetcher/profile'
56
- require 'newsfetcher/scrubber'
57
- require 'newsfetcher/subscription'
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.85'
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.24'
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.2'
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', '~> 5.26'
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
- dir = @profile.add_subscription(uri: uri, id: id, path: path)
52
- assert { dir.exist? }
53
- dir
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.85'
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.24'
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.24'
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.2'
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.2'
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: '5.26'
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: '5.26'
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: 3.7.2
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: