Skip to content

Instantly share code, notes, and snippets.

@dgtm
Created May 16, 2019 20:37
Show Gist options
  • Save dgtm/b8e835a8a057af628de76a8ed8a888ca to your computer and use it in GitHub Desktop.
Save dgtm/b8e835a8a057af628de76a8ed8a888ca to your computer and use it in GitHub Desktop.
class LocalCampaign
attr_accessor :id, :job_id, :status, :external_reference, :ad_description, :discrepancies
def self.remote_mappings
{
external_reference: :external_reference,
ad_description: :ad_description
}
end
def eql?(remote_campaign)
remote_mappings.each |local_key,remote_key|
@discrepancies << { ..fill in.. } unless self.send(local_key) == remote_campaign.send(remote_key)
end
@discrepancies.present?
end
end
class RemoteCampaign
URL = ""
attr_accessor :id, :external_reference, :ad_description
def self.fetch
puts "Fetching details from external service ..."
response = HTTParty.get(URL)
if response.ok?
return JSON.parse(response.body)['ads']
else
raise 'External service not accessible.'
end
end
def self.call
# This is supposed to build objs
fetch.each {|ad| self.class.new(ad) }
end
end
class Sync
def call
remotes = RemoteCampaign.call
discrepancies = []
LocalCampaign.all.each do |campaign_local|
campaign_remote = remotes.find_by(id: campaign_local.id )
unless campaign_local.eql?(campaign_remote)
discrepancies << {discrepancies: campaign_local.discrepancies, id: campaign_local.id}
end
end
discrepancies
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment