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



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

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



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

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

#find_in_pages(options = {}) ⇒ Object



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

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



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

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

#offsetObject



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

def offset
  @offset ||= 0
end

#pageObject



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

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

#page_arrayObject



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

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

#page_childrenObject



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

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

#page_sizeObject



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

def page_size
  @page_size ||= DEFAULT_PAGE_SIZE
end

#parse_options(options = {}) ⇒ Object



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

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