class Bronto::Contact

Attributes

created[RW]
email[RW]
fields[RW]
list_ids[RW]
modified[RW]
num_clicks[RW]
num_opens[RW]
num_sends[RW]
status[RW]

Public Class Methods

find(filter = Bronto::Filter.new, page_number = 1, fields = nil, include_lists = false, api_key = nil) click to toggle source

Finds contacts based on the `filter` (Bronto::Filter object).

  • `page_number` is the page of contacts to request. Bronto doesn't specify how many contacts are returned per page,

    only that you should keep increasing the number until no more contacts are returned.
  • `fields` can be an array of field IDs or an array of Field objects.

  • `include_lists` determines whether to include the list IDs each contact belongs to.

# File lib/bronto/contact.rb, line 9
def self.find(filter = Bronto::Filter.new, page_number = 1, fields = nil, include_lists = false, api_key = nil)
  body = { filter: filter.to_hash, page_number: page_number }
  api_key = api_key || self.api_key

  body[:fields] = Array.wrap(fields).map { |f| f.is_a?(Bronto::Field) ? f.id : f } if Array(fields).length > 0
  body[:include_lists] = include_lists

  resp = request(:read, body)

  Array.wrap(resp[:return]).map { |hash| new(hash) }
end
new(options = {}) click to toggle source
Calls superclass method Bronto::Base::new
# File lib/bronto/contact.rb, line 40
def initialize(options = {})
  self.fields = {}
  fields = options.delete(:fields)
  Array.wrap(fields).each { |field| set_field(field[:field_id], field[:content]) }

  super(options)
end
save(*objs) click to toggle source
# File lib/bronto/contact.rb, line 21
def self.save(*objs)
  objs = objs.flatten
  api_key = objs.first.is_a?(String) ? objs.shift : self.api_key

  resp = request(:add_or_update, {plural_class_name => objs.map(&:to_hash)})

  objs.each { |o| o.errors.clear }

  Array.wrap(resp[:return][:results]).each_with_index do |result, i|
    if result[:is_error]
      objs[i].errors.add(result[:error_code], result[:error_string])
    else
      objs[i].id = result[:id]
    end
  end

  objs
end

Public Instance Methods

get_field(field) click to toggle source
# File lib/bronto/contact.rb, line 80
def get_field(field)
  id = field.is_a?(Bronto::Field) ? field.id : field
  self.fields[id].try(:content)
end
reload() click to toggle source
# File lib/bronto/contact.rb, line 48
def reload
  return false if self.email.blank?

  filter = Bronto::Filter.new
  filter.add_filter("email", "EqualTo", self.email)

  new_contact = self.class.find(filter, 1, self.fields, true, self.api_key).first

  self.id = new_contact.id
  self.fields = new_contact.fields
  self.list_ids = new_contact.list_ids

  true
end
save() click to toggle source
# File lib/bronto/contact.rb, line 63
def save
  self.class.save(self)
end
set_field(field, value) click to toggle source
# File lib/bronto/contact.rb, line 75
def set_field(field, value)
  id = field.is_a?(Bronto::Field) ? field.id : field
  self.fields[id] = Field.new(id, value)
end
to_hash() click to toggle source
# File lib/bronto/contact.rb, line 67
def to_hash
  if id.present?
    { id: id, email: email, fields: fields.values.map(&:to_hash) }
  else
    { email: email, fields: fields.values.map(&:to_hash) }
  end
end