html2rss 0.20.0 → 0.20.1

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: 1e4867b7a4906d0e4bb9d6cb9facfe96da516175a82fe10824e9ed579cf4aa3d
4
- data.tar.gz: 53a8f699b87817b2b62cbe5d5d1761f33004f0b3be1ddb6c7e2428d449923a7c
3
+ metadata.gz: 3eb20836fb55a5e33d114634c7c20bf2a65afd1a923af1bba82896797fdb099d
4
+ data.tar.gz: 97c00923e0ca5744cf82f22d54aa428cc784cba3e259bbcdcd9252928f9bc3c0
5
5
  SHA512:
6
- metadata.gz: a38e85afebf7bd17739915cf9f59846a76212690dc5309a02f37b24f4910247a1e34e3c3eeede165f52ea8c77dff39de472a65b5b5d3b6d8b99c02a19f6dfb0a
7
- data.tar.gz: e3a0ad5868a070adf65a0cd78b560d196df7ed932fa424372397f906e0e2afc362eeb0afa864ddcb9bef10cf344efc2f6d9505c8515be502df342fc2a0975252
6
+ metadata.gz: 36431edafddcca32a53f562a75fbcd77fae969ca8c8fa7c2b6de77f121add2ee3c34c2b6e2e7b57109742780d62eeddde823b1a9bf8f4c1aaeed08a0ae4e5c90
7
+ data.tar.gz: d3eafa9cbbecc5ccaded7b21508e0af1c43337999cb5651f2d879df5217c1aa1f3e5484bcfd6354037d709715db1cc106f2946dd592745c0ac58252bcdd26ac8
@@ -132,10 +132,7 @@ module Html2rss
132
132
  def default_config
133
133
  {
134
134
  strategy: default_strategy_name,
135
- request: {
136
- max_redirects: RequestService::Policy::DEFAULTS[:max_redirects],
137
- max_requests: RequestService::Policy::DEFAULTS[:max_requests]
138
- },
135
+ request: default_request_config,
139
136
  channel: { time_zone: 'UTC' },
140
137
  headers: RequestHeaders.browser_defaults,
141
138
  stylesheets: Html2rss.configuration.stylesheets || []
@@ -149,6 +146,14 @@ module Html2rss
149
146
 
150
147
  private
151
148
 
149
+ def default_request_config
150
+ {
151
+ max_redirects: RequestService::Policy::DEFAULTS[:max_redirects],
152
+ max_requests: RequestService::Policy::DEFAULTS[:max_requests],
153
+ total_timeout_seconds: RequestService::Policy::DEFAULTS[:total_timeout_seconds]
154
+ }
155
+ end
156
+
152
157
  def resolve_effective_config(config, params:)
153
158
  effective_config = HashUtil.deep_symbolize_keys(config, context: 'config')
154
159
  resolved_params = parameter_defaults(effective_config)
@@ -80,6 +80,7 @@ module Html2rss
80
80
  RequestConfig = Dry::Schema.Params do
81
81
  optional(:max_redirects).filled(:integer, gteq?: 0)
82
82
  optional(:max_requests).filled(:integer, gt?: 0)
83
+ optional(:total_timeout_seconds).filled(:integer, gt?: 0)
83
84
  optional(:browserless).hash(BrowserlessRequestConfig)
84
85
  optional(:botasaurus).hash(BotasaurusRequestConfig)
85
86
  end
@@ -31,7 +31,8 @@ module Html2rss
31
31
  @request_controls = request_controls.with_effective_values(
32
32
  strategy: validated_config[:strategy],
33
33
  max_redirects: validated_config.dig(:request, :max_redirects),
34
- max_requests: validated_config.dig(:request, :max_requests)
34
+ max_requests: validated_config.dig(:request, :max_requests),
35
+ total_timeout_seconds: validated_config.dig(:request, :total_timeout_seconds)
35
36
  )
36
37
  end
37
38
 
@@ -41,6 +42,8 @@ module Html2rss
41
42
  def max_redirects = request_controls.max_redirects
42
43
  # @return [Integer, nil] configured request budget
43
44
  def max_requests = request_controls.max_requests
45
+ # @return [Integer, nil] configured request timeout
46
+ def total_timeout_seconds = request_controls.total_timeout_seconds
44
47
  # @return [Array<Hash>] stylesheet definitions
45
48
  def stylesheets = config[:stylesheets]
46
49
 
@@ -7,7 +7,7 @@ module Html2rss
7
7
  # Request-control keys accepted at the top level of feed config.
8
8
  TOP_LEVEL_KEYS = %i[strategy].freeze
9
9
  # Request-control keys accepted under the nested `request` config.
10
- REQUEST_KEYS = %i[max_redirects max_requests].freeze
10
+ REQUEST_KEYS = %i[max_redirects max_requests total_timeout_seconds].freeze
11
11
 
12
12
  ##
13
13
  # @param config [Hash{Symbol => Object}] raw config input
@@ -20,6 +20,7 @@ module Html2rss
20
20
  strategy: config[:strategy],
21
21
  max_redirects: request_value_for(config, :max_redirects),
22
22
  max_requests: request_value_for(config, :max_requests),
23
+ total_timeout_seconds: request_value_for(config, :total_timeout_seconds),
23
24
  explicit_keys: explicit_keys_for(config)
24
25
  )
25
26
  end
@@ -47,11 +48,13 @@ module Html2rss
47
48
  # @param strategy [Symbol, nil] effective request strategy
48
49
  # @param max_redirects [Integer, nil] effective redirect limit
49
50
  # @param max_requests [Integer, nil] effective request budget
51
+ # @param total_timeout_seconds [Integer, nil] effective request timeout
50
52
  # @param explicit_keys [Array<Symbol>] controls explicitly supplied by the caller
51
- def initialize(strategy: nil, max_redirects: nil, max_requests: nil, explicit_keys: [])
53
+ def initialize(strategy: nil, max_redirects: nil, max_requests: nil, total_timeout_seconds: nil, explicit_keys: [])
52
54
  @strategy = strategy
53
55
  @max_redirects = max_redirects
54
56
  @max_requests = max_requests
57
+ @total_timeout_seconds = total_timeout_seconds
55
58
  @explicit_keys = explicit_keys.map(&:to_sym).uniq.freeze
56
59
  freeze
57
60
  end
@@ -68,6 +71,10 @@ module Html2rss
68
71
  # @return [Integer, nil] effective request budget
69
72
  attr_reader :max_requests
70
73
 
74
+ ##
75
+ # @return [Integer, nil] effective request timeout
76
+ attr_reader :total_timeout_seconds
77
+
71
78
  ##
72
79
  # @param name [Symbol, String] request control name
73
80
  # @return [Boolean] whether the control was explicitly supplied
@@ -79,12 +86,14 @@ module Html2rss
79
86
  # @param strategy [Symbol, nil] validated request strategy
80
87
  # @param max_redirects [Integer, nil] validated redirect limit
81
88
  # @param max_requests [Integer, nil] validated request budget
89
+ # @param total_timeout_seconds [Integer, nil] validated request timeout
82
90
  # @return [RequestControls] controls updated with validated effective values
83
- def with_effective_values(strategy:, max_redirects:, max_requests:)
91
+ def with_effective_values(strategy:, max_redirects:, max_requests:, total_timeout_seconds:)
84
92
  self.class.new(
85
93
  strategy:,
86
94
  max_redirects:,
87
95
  max_requests:,
96
+ total_timeout_seconds:,
88
97
  explicit_keys:
89
98
  )
90
99
  end
@@ -98,6 +107,7 @@ module Html2rss
98
107
  config[:strategy] = strategy if explicit?(:strategy)
99
108
  apply_request_value(config, :max_redirects, max_redirects)
100
109
  apply_request_value(config, :max_requests, max_requests)
110
+ apply_request_value(config, :total_timeout_seconds, total_timeout_seconds)
101
111
  config
102
112
  end
103
113
 
@@ -30,9 +30,9 @@ module Html2rss
30
30
 
31
31
  # Default policy values used when request controls are not explicitly set.
32
32
  DEFAULTS = {
33
- connect_timeout_seconds: 5,
34
- read_timeout_seconds: 10,
35
- total_timeout_seconds: 30,
33
+ connect_timeout_seconds: Integer(ENV.fetch('HTML2RSS_CONNECT_TIMEOUT_SECONDS', 5)),
34
+ read_timeout_seconds: Integer(ENV.fetch('HTML2RSS_READ_TIMEOUT_SECONDS', 10)),
35
+ total_timeout_seconds: Integer(ENV.fetch('HTML2RSS_TOTAL_TIMEOUT_SECONDS', 30)),
36
36
  max_redirects: 3,
37
37
  max_response_bytes: 5_242_880,
38
38
  max_decompressed_bytes: 10_485_760,
@@ -11,7 +11,8 @@ module Html2rss
11
11
  def self.from_config(config)
12
12
  RequestService::Policy.new(
13
13
  max_requests: effective_max_requests_for(config),
14
- max_redirects: config.max_redirects
14
+ max_redirects: config.max_redirects,
15
+ total_timeout_seconds: config.total_timeout_seconds || RequestService::Policy::DEFAULTS[:total_timeout_seconds]
15
16
  )
16
17
  end
17
18
 
@@ -4,6 +4,6 @@
4
4
  # The Html2rss namespace.
5
5
  module Html2rss
6
6
  # Current application version.
7
- VERSION = '0.20.0'
7
+ VERSION = '0.20.1'
8
8
  public_constant :VERSION
9
9
  end
@@ -379,6 +379,13 @@
379
379
  },
380
380
  "exclusiveMinimum": 0
381
381
  },
382
+ "total_timeout_seconds": {
383
+ "type": "integer",
384
+ "not": {
385
+ "type": "null"
386
+ },
387
+ "exclusiveMinimum": 0
388
+ },
382
389
  "browserless": {
383
390
  "type": "object",
384
391
  "properties": {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html2rss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.20.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gil Desmarais
@@ -390,7 +390,7 @@ licenses:
390
390
  - MIT
391
391
  metadata:
392
392
  allowed_push_host: https://rubygems.org
393
- changelog_uri: https://github.com/html2rss/html2rss/releases/tag/v0.20.0
393
+ changelog_uri: https://github.com/html2rss/html2rss/releases/tag/v0.20.1
394
394
  rubygems_mfa_required: 'true'
395
395
  rdoc_options: []
396
396
  require_paths: