Module: Mailchimp::Collection::Paging

Included in:
Mailchimp::Collection
Defined in:
lib/mailchimp_api_v3/collection/paging.rb

Constant Summary collapse

DEFAULT_PAGE_SIZE =
500

Instance Method Summary collapse

Instance Method Details

#fetch_optionsObject



13
14
15
16
17
18
19
20
21
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 13

def fetch_options
  links_delim = self.class::DATA_KEY.empty? ? '' : '._links,'

  {
    'exclude_fields' => "#{self.class::DATA_KEY}#{links_delim}_links",
    'offset' => offset,
    'count' => page_size
  }
end

#find_eachObject



55
56
57
58
59
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 55

def find_each
  find_in_pages do |p|
    p.each { |child| yield child }
  end
end

#find_in_pages(options = {}) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 39

def find_in_pages(options = {})
  parse_options(options)

  loop do
    yield page_children
    @offset += page_size

    if offset > count
      @offset = 0
      break
    end

    invalidate_current_page
  end
end

#invalidate_current_pageObject



70
71
72
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 70

def invalidate_current_page
  @page = @page_array = @page_children = nil
end

#offsetObject



31
32
33
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 31

def offset
  @offset ||= 0
end

#pageObject



8
9
10
11
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 8

def page
  return @page if @page
  @page = @client.get(path, fetch_options)
end

#page_arrayObject



23
24
25
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 23

def page_array
  @page_array ||= page[self.class::DATA_KEY]
end

#page_childrenObject



27
28
29
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 27

def page_children
  @page_children ||= page_array.map { |d| self.class::CHILD_CLASS.new @client, d, path }
end

#page_sizeObject



35
36
37
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 35

def page_size
  @page_size ||= DEFAULT_PAGE_SIZE
end

#parse_options(options = {}) ⇒ Object



61
62
63
64
65
66
67
68
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 61

def parse_options(options = {})
  if options
    @offset = options['start'] if options.key? 'start'
    @page_size = options['page_size'] if options.key? 'page_size'
  end

  invalidate_current_page
end