Class: Html2rss::RequestService

Inherits:
Object
  • Object
show all
Defined in:
lib/html2rss/request_service.rb,
lib/html2rss/request_service/budget.rb,
lib/html2rss/request_service/policy.rb,
lib/html2rss/request_service/context.rb,
lib/html2rss/request_service/response.rb,
lib/html2rss/request_service/strategy.rb,
lib/html2rss/request_service/network_guard.rb,
lib/html2rss/request_service/httpx_strategy.rb,
lib/html2rss/request_service/response_guard.rb,
lib/html2rss/request_service/blocked_surface.rb,
lib/html2rss/request_service/compressed_body.rb,
lib/html2rss/request_service/botasaurus_contract.rb,
lib/html2rss/request_service/botasaurus_strategy.rb,
lib/html2rss/request_service/local_file_strategy.rb

Overview

Requests website URLs to retrieve their HTML for further processing. Provides concrete transport strategies (e.g. HttpxStrategy, BotasaurusStrategy).

Feed-level :auto is not registered here — FeedPipeline::StrategyPlan resolves it to a concrete strategy (or FeedPipeline::AutoFallback chain) before execute.

Defined Under Namespace

Modules: BlockedSurface, CompressedBody Classes: BlockedSurfaceDetected, BotasaurusConfigurationError, BotasaurusConnectionFailed, BotasaurusContract, BotasaurusServiceError, BotasaurusStrategy, Budget, Context, CrossOriginFollowUpDenied, HttpxStrategy, InvalidUrl, LocalFileStrategy, NetworkGuard, Policy, PrivateNetworkDenied, RedirectLimitReached, RequestBudgetExceeded, RequestTimedOut, Response, ResponseGuard, ResponseTooLarge, Strategy, UnknownStrategy, UnsupportedResponseContentType, UnsupportedUrlScheme

Constant Summary collapse

STRATEGIES =

Map of supported strategy names to their implementation classes.

Returns:

{
  default: HttpxStrategy,
  httpx: HttpxStrategy,
  faraday: HttpxStrategy,
  botasaurus: BotasaurusStrategy,
  local_file: LocalFileStrategy
}.freeze
DEFAULT_STRATEGY_NAME =

Canonical default strategy symbol.

Returns:

  • (Symbol)
:default

Class Method Summary collapse

Class Method Details

.default_strategy_nameSymbol

Returns the default strategy name.

Returns:

  • (Symbol)

    the default strategy name



73
# File 'lib/html2rss/request_service.rb', line 73

def default_strategy_name = DEFAULT_STRATEGY_NAME

.execute(ctx, strategy: default_strategy_name) ⇒ Response

Executes the request using the specified strategy.

Parameters:

  • ctx (Context)

    the context for the request.

  • strategy (Symbol, String) (defaults to: default_strategy_name)

    the strategy to use (defaults to the default strategy).

Returns:

  • (Response)

    the response from the executed strategy.

Raises:



92
93
94
95
96
97
98
99
100
101
# File 'lib/html2rss/request_service.rb', line 92

def execute(ctx, strategy: default_strategy_name)
  strategy_sym = strategy.to_sym
  strategy_class = STRATEGIES.fetch(strategy_sym) do
    raise UnknownStrategy,
          "The strategy '#{strategy}' is not known. Available strategies: #{strategy_names.join(', ')}"
  end

  warn_migration_strategy(strategy_sym) if strategy_sym == :faraday
  strategy_class.new(ctx).execute
end

.strategy_namesArray<String>

Returns the names of the registered strategies.

Returns:

  • (Array<String>)

    the names of the registered strategies



76
# File 'lib/html2rss/request_service.rb', line 76

def strategy_names = STRATEGIES.keys.map(&:to_s)

.strategy_registered?(name) ⇒ Boolean

Checks if a strategy is registered.

Parameters:

  • name (Symbol, String)

    the name of the strategy

Returns:

  • (Boolean)

    true if the strategy is registered, false otherwise.



82
83
84
# File 'lib/html2rss/request_service.rb', line 82

def strategy_registered?(name)
  STRATEGIES.key?(name.to_sym)
end