Class: Html2rss::RequestControls

Inherits:
Object
  • Object
show all
Defined in:
lib/html2rss/request_controls.rb

Overview

Tracks runtime request controls together with whether each value was explicitly set.

Constant Summary collapse

TOP_LEVEL_KEYS =
%i[strategy].freeze
REQUEST_KEYS =
%i[max_redirects max_requests].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(strategy: nil, max_redirects: nil, max_requests: nil, explicit_keys: []) ⇒ RequestControls

Returns a new instance of RequestControls.

Parameters:

  • strategy (Symbol, nil) (defaults to: nil)

    effective request strategy

  • max_redirects (Integer, nil) (defaults to: nil)

    effective redirect limit

  • max_requests (Integer, nil) (defaults to: nil)

    effective request budget

  • explicit_keys (Array<Symbol>) (defaults to: [])

    controls explicitly supplied by the caller



56
57
58
59
60
61
62
# File 'lib/html2rss/request_controls.rb', line 56

def initialize(strategy: nil, max_redirects: nil, max_requests: nil, explicit_keys: [])
  @strategy = strategy
  @max_redirects = max_redirects
  @max_requests = max_requests
  @explicit_keys = explicit_keys.map(&:to_sym).uniq.freeze
  freeze
end

Instance Attribute Details

#max_redirectsInteger? (readonly)

Returns effective redirect limit.

Returns:

  • (Integer, nil)

    effective redirect limit



70
71
72
# File 'lib/html2rss/request_controls.rb', line 70

def max_redirects
  @max_redirects
end

#max_requestsInteger? (readonly)

Returns effective request budget.

Returns:

  • (Integer, nil)

    effective request budget



74
75
76
# File 'lib/html2rss/request_controls.rb', line 74

def max_requests
  @max_requests
end

#strategySymbol? (readonly)

Returns effective request strategy.

Returns:

  • (Symbol, nil)

    effective request strategy



66
67
68
# File 'lib/html2rss/request_controls.rb', line 66

def strategy
  @strategy
end

Class Method Details

.from_config(config) ⇒ RequestControls

Returns request controls extracted from the config hash.

Parameters:

  • config (Hash<Symbol, Object>, Hash<String, Object>)

    raw config input

Returns:



13
14
15
16
17
18
19
20
# File 'lib/html2rss/request_controls.rb', line 13

def self.from_config(config)
  new(
    strategy: value_for(config, :strategy),
    max_redirects: request_value_for(config, :max_redirects),
    max_requests: request_value_for(config, :max_requests),
    explicit_keys: explicit_keys_for(config)
  )
end

Instance Method Details

#apply_to(config) ⇒ Hash<Symbol, Object>

Applies only explicitly set controls to the provided config hash.

Parameters:

  • config (Hash<Symbol, Object>)

    mutable config hash

Returns:

  • (Hash<Symbol, Object>)

    the same hash with explicit controls written



102
103
104
105
106
107
# File 'lib/html2rss/request_controls.rb', line 102

def apply_to(config)
  config[:strategy] = strategy if explicit?(:strategy)
  apply_request_value(config, :max_redirects, max_redirects)
  apply_request_value(config, :max_requests, max_requests)
  config
end

#explicit?(name) ⇒ Boolean

Returns whether the control was explicitly supplied.

Parameters:

  • name (Symbol, String)

    request control name

Returns:

  • (Boolean)

    whether the control was explicitly supplied



79
80
81
# File 'lib/html2rss/request_controls.rb', line 79

def explicit?(name)
  explicit_keys.include?(name.to_sym)
end

#with_effective_values(strategy:, max_redirects:, max_requests:) ⇒ RequestControls

Returns controls updated with validated effective values.

Parameters:

  • strategy (Symbol, nil)

    validated request strategy

  • max_redirects (Integer, nil)

    validated redirect limit

  • max_requests (Integer, nil)

    validated request budget

Returns:



88
89
90
91
92
93
94
95
# File 'lib/html2rss/request_controls.rb', line 88

def with_effective_values(strategy:, max_redirects:, max_requests:)
  self.class.new(
    strategy:,
    max_redirects:,
    max_requests:,
    explicit_keys:
  )
end