class Realogy::DataSync

Constants

ACTIVE_API_ENDPOINTS

API endpoints by type

DELTA_API_ENDPOINTS
DETAILS_API_ENDPOINTS

Public Class Methods

client() click to toggle source
# File lib/realogy/app/models/data_sync.rb, line 10
def self.client
  return @@instance
end

Private Instance Methods

auth_token() click to toggle source
# File lib/realogy/app/models/data_sync.rb, line 113
def auth_token
  oauth2_client_credentials_token(
    ENV["REALOGY_CLIENT_ID"],
    ENV["REALOGY_CLIENT_SECRET"],
    ENV["REALOGY_TOKEN_URL"],
    ENV["REALOGY_SCOPE"]
  )
end
oauth2_client_credentials_token(client_id, client_secret, token_url, scope) click to toggle source
# File lib/realogy/app/models/data_sync.rb, line 131
def oauth2_client_credentials_token(client_id, client_secret, token_url, scope)
  @token = OAuth2::AccessToken.read_token_from_file(".oauth-access-token.json")
  expiry = @token.try(:expires_at).present? ? DateTime.strptime(@token.expires_at.to_s, '%s') : 1.day.ago
  if expiry > DateTime.now.utc
    return @token.token
  else
    @token = oauth2_client_credentials_token_object(client_id, client_secret, token_url, scope)
    @token.save_token_to_file(".oauth-access-token.json")
    return @token.token
  end
end
oauth2_client_credentials_token_object(client_id, client_secret, token_url, scope) click to toggle source
# File lib/realogy/app/models/data_sync.rb, line 122
def oauth2_client_credentials_token_object(client_id, client_secret, token_url, scope)
  client = OAuth2::Client.new(
    client_id,
    client_secret,
    token_url: token_url
  )
  return client.client_credentials.get_token(scope: scope)
end
perform_api_call(endpoint, params) click to toggle source
# File lib/realogy/app/models/data_sync.rb, line 99
def perform_api_call(endpoint, params)
  query = params.present? ? URI.encode_www_form(params) : ""
  uri = uri_for_endpoint(endpoint)
  uri.query && uri.query.length > 0 ? uri.query += '&' + query : uri.query = query
  request = Net::HTTP::Get.new(uri.request_uri)
  request['Ocp-Apim-Subscription-Key'] = ENV["REALOGY_SUBSCRIPTION_KEY"]
  request['Authorization'] = "Bearer #{auth_token}"
  response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
    http.max_retries = 10
    http.request(request)
  end
  return JSON(response.body) rescue nil
end
perform_simple_call(url) click to toggle source
# File lib/realogy/app/models/data_sync.rb, line 87
def perform_simple_call(url)
  uri = URI(url)
  request = Net::HTTP::Get.new(uri)
  request['Ocp-Apim-Subscription-Key'] = ENV["REALOGY_SUBSCRIPTION_KEY"]
  request['Authorization'] = "Bearer #{auth_token}"
  response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
    http.max_retries = 10
    http.request(request)
  end
  return JSON(response.body)
end
uri_for_endpoint(endpoint) click to toggle source

Utility

# File lib/realogy/app/models/data_sync.rb, line 83
def uri_for_endpoint endpoint
  return URI([ENV["REALOGY_API_BASE_URL"], endpoint].join("/"))
end