Class: Html2rss::RequestSession
- Inherits:
-
Object
- Object
- Html2rss::RequestSession
- Defined in:
- lib/html2rss/request_session.rb,
lib/html2rss/request_session/runtime_input.rb,
lib/html2rss/request_session/rel_next_pager.rb,
lib/html2rss/request_session/runtime_policy.rb
Overview
Coordinates multi-request feed builds on top of RequestService.
Defined Under Namespace
Classes: RelNextPager, RuntimeInput, RuntimePolicy
Class Method Summary collapse
-
.from_runtime_input(runtime_input, logger: Html2rss::Log) ⇒ RequestSession
Builds a request session from translated runtime request inputs.
Instance Method Summary collapse
-
#effective_page_budget(requested_pages) ⇒ Integer
Returns the effective page budget after applying the policy ceiling.
-
#fetch_initial_response ⇒ RequestService::Response
Executes the initial request for the session.
-
#follow_up(url:, relation:, origin_url:) ⇒ RequestService::Response
Executes a follow-up request sharing policy, headers, and budget.
-
#initialize(context:, strategy:, logger: Html2rss::Log) ⇒ RequestSession
constructor
A new instance of RequestSession.
-
#max_requests ⇒ Integer
Returns the configured request budget for the session.
-
#remember!(url) ⇒ Set<Html2rss::Url>
Records a visited url in the session.
-
#visited?(url) ⇒ Boolean
Whether the url was already visited in this session.
Constructor Details
#initialize(context:, strategy:, logger: Html2rss::Log) ⇒ RequestSession
Returns a new instance of RequestSession.
32 33 34 35 36 37 |
# File 'lib/html2rss/request_session.rb', line 32 def initialize(context:, strategy:, logger: Html2rss::Log) @context = context @strategy = strategy @logger = logger @visited_urls = Set.new end |
Class Method Details
.from_runtime_input(runtime_input, logger: Html2rss::Log) ⇒ RequestSession
Builds a request session from translated runtime request inputs.
14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/html2rss/request_session.rb', line 14 def from_runtime_input(runtime_input, logger: Html2rss::Log) new( context: RequestService::Context.new( url: runtime_input.url, headers: runtime_input.headers, request: runtime_input.request, policy: runtime_input.request_policy ), strategy: runtime_input.strategy, logger: ) end |
Instance Method Details
#effective_page_budget(requested_pages) ⇒ Integer
Returns the effective page budget after applying the policy ceiling.
63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/html2rss/request_session.rb', line 63 def effective_page_budget(requested_pages) effective_pages = [requested_pages, context.policy.max_requests].min return effective_pages if effective_pages == requested_pages logger.warn( "#{self.class}: pagination max_pages=#{requested_pages} " \ "exceeds system ceiling=#{context.policy.max_requests}; " \ "clamping to #{effective_pages}" ) effective_pages end |
#fetch_initial_response ⇒ RequestService::Response
Executes the initial request for the session.
43 44 45 |
# File 'lib/html2rss/request_session.rb', line 43 def fetch_initial_response execute(context).tap { |response| remember!(response.url) } end |
#follow_up(url:, relation:, origin_url:) ⇒ RequestService::Response
Executes a follow-up request sharing policy, headers, and budget.
54 55 56 |
# File 'lib/html2rss/request_session.rb', line 54 def follow_up(url:, relation:, origin_url:) execute(context.follow_up(url:, relation:, origin_url:)).tap { |response| remember!(response.url) } end |
#max_requests ⇒ Integer
Returns the configured request budget for the session.
79 80 81 |
# File 'lib/html2rss/request_session.rb', line 79 def max_requests context.policy.max_requests end |
#remember!(url) ⇒ Set<Html2rss::Url>
Records a visited url in the session.
95 96 97 |
# File 'lib/html2rss/request_session.rb', line 95 def remember!(url) visited_urls.add(normalize_url(url)) end |
#visited?(url) ⇒ Boolean
Returns whether the url was already visited in this session.
86 87 88 |
# File 'lib/html2rss/request_session.rb', line 86 def visited?(url) visited_urls.include?(normalize_url(url)) end |