Sha256: 5d6991d6f41816c723d0cf635bad0d6ba7c0a47d18ed80f885e4f6a2caa29d14

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

module PlaidRails
  class Account < ActiveRecord::Base
    belongs_to :owner, polymorphic: true, foreign_key: :owner_id
    
    before_destroy :delete_connect, :unless=> :accounts_with_same_token?
    before_update :delete_updated_token, :if=> :access_token_changed?
    
    validates :plaid_id, presence: true
    validates :name, presence: true
    validates :access_token, presence: true
    validates :plaid_type, presence: true
    
    private
    
    # delete token from Plaid if there are no more accounts for this token
    def delete_updated_token
      # change all matching tokens on update
      accounts = PlaidRails::Account.where(access_token: my_token)
      if  accounts.size > 0
        delete_connect
      end
    end
    
    # delete Plaid user  
    def delete_connect
      begin
        Rails.logger.info "Deleting Plaid User with token #{token_last_8}"
        user = Plaid::User.load(:connect, my_token)
        # skip delete if there are no transactions
        if user.transactions.any?
          user.delete 
          Rails.logger.info "Deleted Plaid User with token #{token_last_8}"
        end
      rescue  => e
        message = "Unable to delete user with token #{token_last_8}"
        Rails.logger.error "#{message}: #{e.message}"
      end
    end
      
    # check if access token changed and use that token 
    # means the bank password was changed
    # return token changed token if it was changed
    def my_token
      self.access_token_changed? ? self.access_token_was : self.access_token
    end
      
    # hide full token from logs
    def token_last_8
      my_token[-8..-1]
    end
    
    # are there more accounts that use the same token
    def accounts_with_same_token?
      PlaidRails::Account.where(access_token: my_token).size > 1
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
plaid_rails-0.10.0 app/models/plaid_rails/account.rb