Class: Bronto::Contact
Defined Under Namespace
Classes: Field
Instance Attribute Summary collapse
-
#email ⇒ Object
Returns the value of attribute email.
-
#fields ⇒ Object
Returns the value of attribute fields.
-
#list_ids ⇒ Object
Returns the value of attribute list_ids.
Attributes inherited from Base
Class Method Summary collapse
-
.find(filter = Bronto::Filter.new, page_number = 1, fields = nil, include_lists = false, api_key = nil) ⇒ Object
Finds contacts based on the ‘filter` (Bronto::Filter object).
- .save(*objs) ⇒ Object
Instance Method Summary collapse
- #get_field(field) ⇒ Object
-
#initialize(options = {}) ⇒ Contact
constructor
A new instance of Contact.
- #reload ⇒ Object
- #save ⇒ Object
- #set_field(field, value) ⇒ Object
- #to_hash ⇒ Object
Methods inherited from Base
api, api_key, api_key=, #create, create, #destroy, destroy, plural_class_name, request, #request, soap_header, update, #update
Constructor Details
Instance Attribute Details
#email ⇒ Object
Returns the value of attribute email.
3 4 5 |
# File 'lib/bronto/contact.rb', line 3 def email @email end |
#fields ⇒ Object
Returns the value of attribute fields.
3 4 5 |
# File 'lib/bronto/contact.rb', line 3 def fields @fields end |
#list_ids ⇒ Object
Returns the value of attribute list_ids.
3 4 5 |
# File 'lib/bronto/contact.rb', line 3 def list_ids @list_ids end |
Class Method Details
.find(filter = Bronto::Filter.new, page_number = 1, fields = nil, include_lists = false, api_key = nil) ⇒ Object
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.
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/bronto/contact.rb', line 10 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, api_key) do soap.body = body end Array.wrap(resp[:return]).map { |hash| new(hash) } end |
.save(*objs) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/bronto/contact.rb', line 24 def self.save(*objs) objs = objs.flatten api_key = objs.first.is_a?(String) ? objs.shift : self.api_key resp = request(:add_or_update, api_key) do soap.body = { plural_class_name => objs.map(&:to_hash) } end 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 |
Instance Method Details
#get_field(field) ⇒ Object
87 88 89 90 |
# File 'lib/bronto/contact.rb', line 87 def get_field(field) id = field.is_a?(Bronto::Field) ? field.id : field self.fields[id].try(:content) end |
#reload ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/bronto/contact.rb', line 55 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 ⇒ Object
70 71 72 |
# File 'lib/bronto/contact.rb', line 70 def save self.class.save(self) end |
#set_field(field, value) ⇒ Object
82 83 84 85 |
# File 'lib/bronto/contact.rb', line 82 def set_field(field, value) id = field.is_a?(Bronto::Field) ? field.id : field self.fields[id] = Field.new(id, value) end |
#to_hash ⇒ Object
74 75 76 77 78 79 80 |
# File 'lib/bronto/contact.rb', line 74 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 |