Class: Multiwoven::Integrations::Source::EpicFhir::Client

Inherits:
SourceConnector
  • Object
show all
Includes:
Core::OauthClientCredentials
Defined in:
lib/multiwoven/integrations/source/epic_fhir/client.rb

Constant Summary

Constants included from Core::OauthClientCredentials

Core::OauthClientCredentials::ALLOWED_JWT_ALGORITHMS, Core::OauthClientCredentials::AUTH_TYPE_OAUTH_CLIENT_CREDENTIALS, Core::OauthClientCredentials::AUTH_TYPE_PRIVATE_KEY_JWT, Core::OauthClientCredentials::CLIENT_ASSERTION_TYPE, Core::OauthClientCredentials::DEFAULT_JWT_ALGORITHM, Core::OauthClientCredentials::JWT_ASSERTION_LIFETIME_SECONDS, Core::OauthClientCredentials::OAUTH_AUTH_TYPES, Core::OauthClientCredentials::TOKEN_EXPIRY_BUFFER_SECONDS

Instance Method Summary collapse

Methods included from Core::OauthClientCredentials

#build_headers, #ensure_oauth_token

Instance Method Details

#check_connection(connection_config) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/multiwoven/integrations/source/epic_fhir/client.rb', line 37

def check_connection(connection_config)
  connection_config = prepare_config(connection_config)
  validate_config!(connection_config)
  build_headers(connection_config)
  success_status
rescue StandardError => e
  handle_exception(e, {
                     context: "EPIC_FHIR:CHECK_CONNECTION:EXCEPTION",
                     type: "error"
                   })
  failure_status(e)
end

#discover(connection_config) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/multiwoven/integrations/source/epic_fhir/client.rb', line 50

def discover(connection_config)
  connection_config = prepare_config(connection_config)
  validate_config!(connection_config)
  streams = discover_resource_types(connection_config).map { |resource_type| create_stream(resource_type) }

  Catalog.new(streams: streams).to_multiwoven_message
rescue StandardError => e
  handle_exception(e, {
                     context: "EPIC_FHIR:DISCOVER:EXCEPTION",
                     type: "error"
                   })
end

#read(sync_config) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/multiwoven/integrations/source/epic_fhir/client.rb', line 63

def read(sync_config)
  connection_config = prepare_config(sync_config&.source&.connection_specification)
  validate_config!(connection_config)
  @connector_instance = sync_config&.source&.connector_instance

  sql_query = sync_config.model.query
  sql_query = batched_query(sql_query, sync_config.limit, sync_config.offset) if
    sync_config.limit.present? || sync_config.offset.present?
  query(connection_config, sql_query)
rescue StandardError => e
  handle_exception(e, {
                     context: "EPIC_FHIR:READ:EXCEPTION",
                     type: "error",
                     sync_id: sync_config.sync_id,
                     sync_run_id: sync_config.sync_run_id
                   })
end