Sha256: bc3305bedf0819cbcc479af67b66970267c9d404050ab2e7fb1d0fe8d15724bb

Contents?: true

Size: 1.28 KB

Versions: 2

Compression:

Stored size: 1.28 KB

Contents

module BrontoIntegration
  class Contact

    attr_reader :token, :bronto_client

    def initialize(token,  client = nil)
      @token=token
      @bronto_client = client || Bronto.new(token)
    end

    def get_id_by_email(email)
      unless contact = bronto_client.read_contacts(email)
        contact = bronto_client.add_or_update_contacts({ email: email })
      end

      contact[:id]
    end

    alias :find_or_create :get_id_by_email

    def set_up(email,fields)
      bronto_client.add_or_update_contacts build(email,fields)
    end

    def update_status(email,status)
      bronto_client.update_contacts({:email => email, :status => status})
    end

    def build(email,fields)
      {
          :email => email,
          :fields => fields(fields).reject{|f| f[:fieldId]==nil}          #delete the non-exist fields
      }
    end

    def fields(fields)
      fields = (fields || []).map do |key, value|
        {
            :fieldId => get_field_id(key.to_s),
            :content => value.to_s
        }
      end
    end

    def get_field_id(name)
      # use cache to reduce the field id query
      Rails.cache.fetch("bronto_field_#{@token}_#{name}", :expires_in => 15.hours) {
      result = bronto_client.read_fields name
      result[:id] if result.is_a? Hash
      }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
spree_bronto-3.pre.0.pre.stable lib/bronto_integration/bronto_integration/contact.rb
spree_bronto-3.0.0 lib/bronto_integration/bronto_integration/contact.rb