Skip to content

Instantly share code, notes, and snippets.

@AugustoPedraza
Last active February 16, 2016 21:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AugustoPedraza/c11d08260577b2faa06e to your computer and use it in GitHub Desktop.
Save AugustoPedraza/c11d08260577b2faa06e to your computer and use it in GitHub Desktop.
Code sketch for yodlee providers synchronization
# lib/yodlee/api/v1/provider.rb
class Yodlee::Api::V1::Provider < Yodlee::Api::V1::Base
# [ {id: 1, lastModified: 2013-01-02T00:39:52Z}, {id: 3, lastModified: 2013-01-02T00:39:52Z}, {id: 4, lastModified: 2013-01-02T00:39:52Z} ]
def list_all
caller_result = for_session.list_providers
list = []
caller_result.provider.map do |provider|
partial_provider = {}
fields.each { |f| partial_provider[f] = provider[f] }
list << partial_provider
end
list
end
def get_details(provider_id)
caller_result = for_session.get_provider_details(provider_id)
caller_result['provider'].first
end
end
# app/services/synchronize_yodlee_providers.rb
class SynchronizeYodleeProviders
class << self
def call!
providers = Yodlee::Api::V1::Provider.new.list
existing_providers = YodleeProvider.pluck(:yodlee_id, :last_modified)
#TODO: get updated providers
providers_to_update= providers - existing_providers
providers_to_update.each do |provider|
CreateOrUpdateYodleeProvider.call!(provider.id)
end
end
end
end
# app/services/update_yodlee_provider
class CreateOrUpdateYodleeProvider
class << self
def call!(provider_id)
provider_hash = Yodlee::Api::V1::Provider.new.get_details(provider_id: provider_id)
yodlee_provider = YodleeProvider.find_or_initialize_by(yodlee_id: provider_id)
yodlee_provider.update_from_camelized_hash!(provider_hash)
end
end
end
# app/models/yodlee_provider.rb
class YodleeProvider < ActiveRecord::Base
def update_from_camelized_hash!(camelized_hash)
#TODO: Implement deserialization
save!
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment