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



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

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

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

#find_eachObject



53
54
55
56
57
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 53

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

#find_in_pages(options = {}) ⇒ Object



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

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



65
66
67
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 65

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

#offsetObject



29
30
31
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 29

def offset
  @offset ||= 0
end

#pageObject



6
7
8
9
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 6

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

#page_arrayObject



21
22
23
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 21

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

#page_childrenObject



25
26
27
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 25

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

#page_sizeObject



33
34
35
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 33

def page_size
  @page_size ||= DEFAULT_PAGE_SIZE
end

#parse_options(options = {}) ⇒ Object



59
60
61
62
63
# File 'lib/mailchimp_api_v3/collection/paging.rb', line 59

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