Class: CoreLibrary::PaginatedData
- Inherits:
-
Object
- Object
- CoreLibrary::PaginatedData
- Includes:
- Enumerable
- Defined in:
- lib/apimatic-core/pagination/paginated_data.rb
Overview
Iterator class for handling paginated API responses.
Provides methods to iterate over items and pages, fetch next pages using defined pagination strategies, and access the latest HTTP response and request builder.
Instance Attribute Summary collapse
-
#page_size ⇒ Object
readonly
Returns the value of attribute page_size.
Instance Method Summary collapse
-
#clone ⇒ Object
Returns a new independent PaginatedData instance.
-
#each ⇒ Object
Enables iteration over individual items.
-
#initialize(api_call, paginated_items_converter) ⇒ PaginatedData
constructor
A new instance of PaginatedData.
-
#last_response ⇒ Object
Returns the most recent HTTP response received during pagination.
-
#pages ⇒ Object
Yields each page of the paginated response.
-
#request_builder ⇒ Object
Returns the appropriate request builder for the current pagination state.
Constructor Details
#initialize(api_call, paginated_items_converter) ⇒ PaginatedData
Returns a new instance of PaginatedData.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/apimatic-core/pagination/paginated_data.rb', line 11 def initialize(api_call, paginated_items_converter) raise ArgumentError, 'paginated_items_converter cannot be nil' if paginated_items_converter.nil? @api_call = api_call @paginated_items_converter = paginated_items_converter @initial_request_builder = api_call.request_builder @pagination_strategies = @api_call.pagination_strategy_list @http_call_context = HttpCallContext.new( @api_call.global_configuration.client_configuration.http_callback ) http_client_config = @api_call.global_configuration.client_configuration.clone_with( http_callback: @http_call_context ) @global_configuration = @api_call.global_configuration.clone_with( client_configuration: http_client_config ) @last_request_builder = nil @locked_strategy = nil @page_size = 0 end |
Instance Attribute Details
#page_size ⇒ Object
Returns the value of attribute page_size.
9 10 11 |
# File 'lib/apimatic-core/pagination/paginated_data.rb', line 9 def page_size @page_size end |
Instance Method Details
#clone ⇒ Object
Returns a new independent PaginatedData instance.
88 89 90 91 |
# File 'lib/apimatic-core/pagination/paginated_data.rb', line 88 def clone cloned_api_call = @api_call.clone_with(request_builder: @initial_request_builder) PaginatedData.new(cloned_api_call, @paginated_items_converter) end |
#each ⇒ Object
Enables iteration over individual items.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/apimatic-core/pagination/paginated_data.rb', line 44 def each return enum_for(:each) unless block_given? paginated_data = clone current_index = 0 items = [] loop do if current_index < paginated_data.page_size yield items[current_index] current_index += 1 else response = paginated_data.fetch_next_page break if response.nil? items = @paginated_items_converter.call(response.data) break if items.nil? || items.empty? paginated_data.page_size = items.length current_index = 0 end end end |
#last_response ⇒ Object
Returns the most recent HTTP response received during pagination.
34 35 36 |
# File 'lib/apimatic-core/pagination/paginated_data.rb', line 34 def last_response @last_request_builder.nil? ? nil : @http_call_context.response end |
#pages ⇒ Object
Yields each page of the paginated response.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/apimatic-core/pagination/paginated_data.rb', line 69 def pages Enumerator.new do |page| paginated_data = clone loop do response = paginated_data.fetch_next_page break if response.nil? items = @paginated_items_converter.call(response.data) break if items.nil? || items.empty? paginated_data.page_size = items.length page << response end end end |
#request_builder ⇒ Object
Returns the appropriate request builder for the current pagination state.
39 40 41 |
# File 'lib/apimatic-core/pagination/paginated_data.rb', line 39 def request_builder @last_request_builder || @initial_request_builder end |