From be1a69217fa9c8c1dd75dac430bff85339a74816 Mon Sep 17 00:00:00 2001 From: Rick Barrette Date: Thu, 12 Mar 2026 21:05:39 -0400 Subject: [PATCH] created a shared helper for authenticated requests. --- app/services/sync_service_base.rb | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/app/services/sync_service_base.rb b/app/services/sync_service_base.rb index 754036d..645814b 100644 --- a/app/services/sync_service_base.rb +++ b/app/services/sync_service_base.rb @@ -32,17 +32,11 @@ class SyncServiceBase # Sync all entities, or only those updated since the last sync def sync(full_sync: false) log "Starting #{full_sync ? 'full' : 'incremental'} #{@entity.name} sync with page size of: #{@page_size}" - - @qbo.perform_authenticated_request do |access_token| - service_class = "Quickbooks::Service::#{@entity.name}".constantize - service = service_class.new(company_id: @qbo.realm_id, access_token: access_token) - - query = build_query(full_sync) - + with_qbo_service do |service| + query = build_query(full_sync) service.query_in_batches(query, per_page: @page_size) do |batch| entries = Array(batch) log "Processing batch of #{entries.size} #{@entity.name}" - entries.each do |remote| persist(remote) end @@ -55,10 +49,7 @@ class SyncServiceBase # Sync a single entity by its QBO ID (webhook usage) def sync_by_id(id) log "Syncing #{@entity.name} with ID #{id}" - - @qbo.perform_authenticated_request do |access_token| - service_class = "Quickbooks::Service::#{@entity.name}".constantize - service = service_class.new(company_id: @qbo.realm_id, access_token: access_token) + with_qbo_service do |service| remote = service.fetch_by_id(id) persist(remote) end @@ -124,4 +115,17 @@ class SyncServiceBase def process_attributes(local, remote) raise NotImplementedError, "Subclasses must implement process_attributes" end + + # Dynamically get the Quickbooks Service Class + def service_class + @service_class ||= "Quickbooks::Service::#{@entity}".constantize + end + + # Performs authenticaed requests with QBO service + def with_qbo_service + @qbo.perform_authenticated_request do |access_token| + service = service_class.new( company_id: @qbo.realm_id, access_token: access_token ) + yield service + end + end end \ No newline at end of file