class Multiwoven::Integrations::Destination::Hubspot::Client
def authenticate_client
def authenticate_client @client.crm.contacts.basic_api.get_page end
def build_args(action, stream_name, record)
def build_args(action, stream_name, record) case action when :upsert [stream_name, record[:external_key], record] when :destroy [stream_name, record[:id]] else record end end
def check_connection(connection_config)
def check_connection(connection_config) connection_config = connection_config.with_indifferent_access initialize_client(connection_config) authenticate_client success_status rescue StandardError => e handle_exception("HUBSPOT:CRM:DISCOVER:EXCEPTION", "error", e) failure_status(e) end
def discover(_connection_config = nil)
def discover(_connection_config = nil) catalog = build_catalog(load_catalog) catalog.to_multiwoven_message rescue StandardError => e handle_exception("HUBSPOT:CRM:DISCOVER:EXCEPTION", "error", e) end
def failure_status(error)
def failure_status(error) ConnectionStatus.new(status: ConnectionStatusType["failed"], message: error.message).to_multiwoven_message end
def initialize_client(config)
def initialize_client(config) config = config.with_indifferent_access @client = ::Hubspot::Client.new(access_token: config[:access_token]) end
def load_catalog
def load_catalog read_json(CATALOG_SPEC_PATH) end
def log_debug(message)
def log_debug(message) Multiwoven::Integrations::Service.logger.debug(message) end
def process_records(records, stream)
def process_records(records, stream) write_success = 0 write_failure = 0 properties = stream.json_schema.with_indifferent_access[:properties] records.each do |record_object| record = extract_data(record_object, properties) send_data_to_hubspot(stream.name, record) write_success += 1 rescue StandardError => e handle_exception("HUBSPOT:CRM:WRITE:EXCEPTION", "error", e) write_failure += 1 end tracking_message(write_success, write_failure) end
def send_data_to_hubspot(stream_name, record = {})
def send_data_to_hubspot(stream_name, record = {}) args = build_args(@action, stream_name, record) hubspot_stream = @client.crm.send(stream_name) hubspot_data = { simple_public_object_input_for_create: args } hubspot_stream.basic_api.send(@action, hubspot_data) end
def success_status
def success_status ConnectionStatus.new(status: ConnectionStatusType["succeeded"]).to_multiwoven_message end
def tracking_message(success, failure)
def tracking_message(success, failure) Multiwoven::Integrations::Protocol::TrackingMessage.new( success: success, failed: failure ).to_multiwoven_message end
def write(sync_config, records, action = "create")
def write(sync_config, records, action = "create") @action = sync_config.stream.action || action initialize_client(sync_config.destination.connection_specification) process_records(records, sync_config.stream) rescue StandardError => e handle_exception("HUBSPOT:CRM:WRITE:EXCEPTION", "error", e) end