lib/active_campaign/models/contact.rb in ractive_campaign-0.1.0 vs lib/active_campaign/models/contact.rb in ractive_campaign-0.1.1

- old
+ new

@@ -1,36 +1,49 @@ # frozen_string_literal: true module ActiveCampaign - class Contact < Model # :nodoc: + # + # @example Contacts + # + # ActiveCampaign::Contact.find(1) + # ActiveCampaign::Contact.find_by email: "contact-1@mail.com" + # ActiveCampaign::Contact.find(1).destroy + # ActiveCampaign::Contact.find(1).contact_tags + # + class Contact < Model define_attributes :email, :phone, :firstName, - :lastName, - :orgid, - :orgname, - :segmentio_id, - :bounced_hard, - :bounced_soft, - :bounced_date, - :ip, - :ua, - :hash, - :socialdata_lastcheck, - :email_local, - :email_domain, - :sentcnt, - :rating_tstamp, - :gravatar, - :deleted, - :anonymized, - :adate, - :udate, - :edate, - :deleted_at, - :email_empty, - :mpp_tracking, - :scoreValues, - :accountContacts, - :organization + :lastName + + # @example Find contact's tags. + # + # ActiveCampaign::Contact.find(1).contact_tags + # ActiveCampaign::Contact.find(1).contact_tags.last.destroy + # + def contact_tags + ContactTag.get "#{self.class.endpoint}/#{id}/contactTags" + end + + # @example Apply a tag to a contact. + # + # ActiveCampaign::Contact.find(1).add_tag "tag-name" + # + def add_tag(tag) + tag_id = Tag.find_by(tag: tag)&.id + + ActiveCampaign::ContactTag.create contact: id, tag: tag_id if tag_id + end + + # @example Remove a tag from a contact. + # + # ActiveCampaign::Contact.find(1).remove_tag "tag-name" + # + def remove_tag(tag) + tag_id = Tag.find_by(tag: tag)&.id + + contact_tag = contact_tags.filter_map { |ct| ct if ct.tag == tag_id }.last + + contact_tag&.destroy + end end end