Class: DataComApi::Responses::SearchBase
- Inherits:
-
Base
- Object
- Base
- DataComApi::Responses::SearchBase
show all
- Defined in:
- lib/data-com-api/responses/search_base.rb
Overview
Constant Summary
collapse
- OFFSET_KEYS =
[:start_at_offset, :end_at_offset].freeze
Instance Method Summary
collapse
Constructor Details
#initialize(api_client, received_options) ⇒ SearchBase
Options accept 2 special params: :start_at_offset and :end_at_offset which is where the records will be start being fetched from
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/data-com-api/responses/search_base.rb', line 12
def initialize(api_client, received_options)
@start_at_offset = 0
@end_at_offset = nil
unless received_options[OFFSET_KEYS[0]].nil?
@start_at_offset = received_options[OFFSET_KEYS[0]].to_i
end
unless received_options[OFFSET_KEYS[1]].nil?
@end_at_offset = received_options[OFFSET_KEYS[1]].to_i
end
@options = received_options.reject { |key| OFFSET_KEYS.include? key.to_sym }
super(api_client)
@page_size = client.page_size
end
|
Instance Method Details
#all ⇒ Object
Also known as:
to_a
Be careful, this will load all records in memory, check total_records before doing such a thing
63
64
65
66
67
68
69
|
# File 'lib/data-com-api/responses/search_base.rb', line 63
def all
all_records = Array.new(self.real_size)
self.each_with_index { |record, index| all_records[index] = record }
all_records
end
|
#at_offset(offset) ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/data-com-api/responses/search_base.rb', line 49
def at_offset(offset)
page_options = options.merge(
offset: offset,
page_size: page_size
)
request = self.perform_request(page_options)
calculate_size_from_request! request
self.transform_request request
end
|
#each_with_index ⇒ Object
Also known as:
each
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/data-com-api/responses/search_base.rb', line 71
def each_with_index
records_per_previous_page = page_size
current_offset = @start_at_offset
total_records = current_offset
loop do
break if current_offset > self.real_max_offset
records = at_offset(current_offset)
records.each_with_index do |record, index|
yield(record, index + current_offset)
end
records_per_previous_page = records.size
current_offset += page_size
total_records += records_per_previous_page
if records_per_previous_page != page_size || total_records == self.size
break
end
end
end
|
#max_size ⇒ Object
41
42
43
|
# File 'lib/data-com-api/responses/search_base.rb', line 41
def max_size
self.real_max_offset + page_size
end
|
#real_max_offset ⇒ Object
95
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/data-com-api/responses/search_base.rb', line 95
def real_max_offset
return @real_max_offset if @real_max_offset
@real_max_offset = client.max_offset
@real_max_offset = @real_max_offset - (@real_max_offset % page_size)
unless @end_at_offset.nil? || @real_max_offset < @end_at_offset
@real_max_offset = @end_at_offset
end
@real_max_offset
end
|
#real_size ⇒ Object
45
46
47
|
# File 'lib/data-com-api/responses/search_base.rb', line 45
def real_size
self.size > self.real_max_offset ? self.max_size : self.size
end
|
#size ⇒ Object
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/data-com-api/responses/search_base.rb', line 30
def size
return @size if @size
size_options = options.merge(
offset: 0,
page_size: client.size_only_page_size
)
calculate_size_from_request! self.perform_request(size_options)
end
|