Sha256: 25a8729d84656187dd776bf5998dfae4d216c5a16e1bc9c1345fa67288a386f9

Contents?: true

Size: 1.36 KB

Versions: 4

Compression:

Stored size: 1.36 KB

Contents

module Transactionable
  class RemoteCustomer < RemoteEntity
    before_create :build_or_update_remote

    def build_or_update_remote
      build_remote unless synced?
      update_remote
    end

    def build_remote
      balanced_customer = Balanced::Customer.new.save
      self.uri = balanced_customer.uri
      self.synced_at = Time.now
    end

    def update_remote
      balanced_customer = fetch
      if self.local_entity.respond_to?(:sync_attributes)
        balanced_customer_attributes = local_entity.sync_attributes
        non_address_keys = [:name, :email, :phone]
        new_customer_attributes = balanced_customer_attributes.reject { |k,v| v.blank? }
        address = new_customer_attributes.slice!(*non_address_keys)
        new_customer_attributes.merge!(address: address)
        new_customer_attributes.each { |k,v| balanced_customer.send("#{k}=", v) }
        balanced_customer.save
      else
        balanced_customer = fetch
        balanced_customer.name = "#{self.local_entity_type} #{self.local_entity_id}"
        balanced_customer.meta = {
                                    entity: self.local_entity_type,
                                    entity_id: self.local_entity_id
                                 }
        balanced_customer.save
      end
      update_attribute(:synced_at, Time.now) unless new_record?
      balanced_customer
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
transactionable-0.3.1 app/models/transactionable/remote_customer.rb
transactionable-0.3.0 app/models/transactionable/remote_customer.rb
transactionable-0.2.0 app/models/transactionable/remote_customer.rb
transactionable-0.1.0 app/models/transactionable/remote_customer.rb