Class: Mailchimp::Collection

Inherits:
Array
  • Object
show all
Includes:
Paging
Defined in:
lib/mailchimp_api_v3/collection.rb,
lib/mailchimp_api_v3/collection/paging.rb

Defined Under Namespace

Modules: Paging

Constant Summary

Constants included from Paging

Paging::DEFAULT_PAGE_SIZE

Instance Method Summary collapse

Methods included from Paging

#fetch_options, #find_each, #find_in_pages, #invalidate_current_page, #offset, #page, #page_array, #page_children, #page_size, #parse_options

Constructor Details

#initialize(client, parent_path = '', options = {}) ⇒ Collection

Returns a new instance of Collection.



7
8
9
10
11
12
13
# File 'lib/mailchimp_api_v3/collection.rb', line 7

def initialize(client, parent_path = '', options = {})
  @client = client
  @parent_path = parent_path

  parse_options(options)
  super page_children
end

Instance Method Details

#countObject



15
16
17
# File 'lib/mailchimp_api_v3/collection.rb', line 15

def count
  page['total_items']
end

#create(data) ⇒ Object



41
42
43
44
# File 'lib/mailchimp_api_v3/collection.rb', line 41

def create(data)
  response = @client.post path, data
  self.class::CHILD_CLASS.new @client, response, path
end

#create_or_update(data) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/mailchimp_api_v3/collection.rb', line 52

def create_or_update(data)
  clean_data = data.deep_stringify_keys

  if clean_data.key? 'id'
    instance = self.class::CHILD_CLASS.get @client, path, clean_data.delete('id')
    instance ? instance.update(clean_data) : create(clean_data)
  else
    find_by(clean_data) || create(clean_data)
  end
end

#find_by(data) ⇒ Object



36
37
38
39
# File 'lib/mailchimp_api_v3/collection.rb', line 36

def find_by(data)
  instances = where(data, 1)
  instances ? instances.first : nil
end

#first_or_create(data) ⇒ Object



46
47
48
49
50
# File 'lib/mailchimp_api_v3/collection.rb', line 46

def first_or_create(data)
  instance = find_by(data)
  return instance if instance
  create(data)
end

#name_fieldObject



63
64
65
# File 'lib/mailchimp_api_v3/collection.rb', line 63

def name_field
  self.class.const_defined?(:NAME_FIELD) ? self.class::NAME_FIELD : 'name'
end

#pathObject



19
20
21
# File 'lib/mailchimp_api_v3/collection.rb', line 19

def path
  @path ||= "#{@parent_path}/#{self.class::PATH_KEY}"
end

#where(data, limit = nil) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/mailchimp_api_v3/collection.rb', line 23

def where(data, limit = nil)
  instances = []

  find_each do |instance|
    if instance.matches? data
      instances << instance
      break if instances.count == limit
    end
  end

  instances
end