34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/etsy/model.rb', line 34
def get_all(endpoint, options={})
limit = options[:limit]
if limit
initial_offset = options.fetch(:offset, 0)
batch_size = options.fetch(:batch_size, 100)
result = []
if limit == :all
response = Request.get(endpoint, options.merge(:limit => batch_size, :offset => initial_offset))
result << response.result
limit = [response.total - batch_size - initial_offset, 0].max
initial_offset += batch_size
end
num_batches = limit / batch_size
num_batches.times do |batch|
total_offset = initial_offset + batch * batch_size
response = Request.get(endpoint, options.merge(:limit => batch_size, :offset => total_offset))
result << response.result
end
remainder = limit % batch_size
if remainder > 0
total_offset = initial_offset + num_batches * batch_size
response = Request.get(endpoint, options.merge(:limit => remainder, :offset => total_offset))
result << response.result
end
else
response = Request.get(endpoint, options)
result = response.result
end
[result].flatten.map do |data|
if options[:access_token] && options[:access_secret]
new(data, options[:access_token], options[:access_secret])
else
new(data)
end
end
end
|