Class: Html2rss::RequestSession::Pager::Base

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/html2rss/request_session/pager/base.rb

Overview

Abstract base class for pagination strategies.

Direct Known Subclasses

CustomSelector, JsonCursor, Offset, RelNext, UrlTemplate

Constant Summary collapse

DEFAULT_MAX_PAGES =

Default maximum number of pages to fetch if omitted.

Returns:

  • (Integer)
5

Instance Method Summary collapse

Constructor Details

#initialize(session:, initial_response:, config: {}, logger: Html2rss::Log) ⇒ Base

Returns a new instance of Base.

Parameters:

  • session (RequestSession)

    request session used to execute follow-ups

  • initial_response (RequestService::Response)

    first page response

  • config (Hash, Integer) (defaults to: {})

    pagination configuration or max_pages integer

  • logger (Logger) (defaults to: Html2rss::Log)

    logger used for pagination stop warnings



19
20
21
22
23
24
# File 'lib/html2rss/request_session/pager/base.rb', line 19

def initialize(session:, initial_response:, config: {}, logger: Html2rss::Log)
  @session = session
  @initial_response = initial_response
  @config = config.is_a?(Hash) ? config : { max_pages: config }
  @logger = logger
end

Instance Method Details

#each {|RequestService::Response| ... } ⇒ Enumerator

Returns enumerator when no block is given.

Yields:

Returns:

  • (Enumerator)

    enumerator when no block is given



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/html2rss/request_session/pager/base.rb', line 28

def each
  return enum_for(:each) unless block_given?

  yield initial_response

  current_response = initial_response
  session.effective_page_budget(max_pages).pred.times do |index|
    next_url = next_page_url(current_response, page_number: index + 2)
    break unless follow_up_allowed?(next_url)

    current_response = fetch_follow_up_response_or_stop(next_url, current_response.url)
    break unless current_response

    yield current_response
  end
end