Module: PlatformSdk::ActiveRecord::DataPipelineable

Extended by:
ActiveSupport::Concern
Defined in:
lib/platform_sdk/active_record/data_pipelineable.rb

Instance Method Summary collapse

Instance Method Details

#one_roster_pipeline_payload(deleted: false) ⇒ Object



54
55
56
# File 'lib/platform_sdk/active_record/data_pipelineable.rb', line 54

def one_roster_pipeline_payload(deleted: false)
  {}
end

#pipeline_additional_attributesObject



50
51
52
# File 'lib/platform_sdk/active_record/data_pipelineable.rb', line 50

def pipeline_additional_attributes
  {}
end

#pipeline_data(action) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/platform_sdk/active_record/data_pipelineable.rb', line 42

def pipeline_data(action)
  data_hash = { action: }.merge!(attributes.symbolize_keys)

  data_hash.merge!(pipeline_additional_attributes)

  data_hash
end

#pipeline_identifiersObject



30
31
32
33
34
# File 'lib/platform_sdk/active_record/data_pipelineable.rb', line 30

def pipeline_identifiers
  {
    "id": id
  }
end

#pipeline_metaObject



36
37
38
39
40
# File 'lib/platform_sdk/active_record/data_pipelineable.rb', line 36

def pipeline_meta
  {
    "source": 'strongmind-central'
  }
end

#pipeline_nounObject



26
27
28
# File 'lib/platform_sdk/active_record/data_pipelineable.rb', line 26

def pipeline_noun
  "StrongMind.Central.#{self.class.name}"
end

#pipeline_payload(action) ⇒ Object



15
16
17
18
19
20
21
22
23
24
# File 'lib/platform_sdk/active_record/data_pipelineable.rb', line 15

def pipeline_payload(action)
  {
    "noun": pipeline_noun,
    "identifiers": pipeline_identifiers,
    "meta": pipeline_meta,
    "data": pipeline_data(action),
    "envelope_version": '1.0.0',
    "message_timestamp": Time.current.utc.iso8601
  }
end

#send_to_pipeline(action) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/platform_sdk/active_record/data_pipelineable.rb', line 58

def send_to_pipeline(action)
  credentials = {
    pipeline_host: ENV.fetch('DATA_PIPELINE_HOST', 'stage-di-data-pipeline-api.strongmind.com'),
    pipeline_username: ENV.fetch('DATA_PIPELINE_USERNAME', 'canvas_prod'),
    pipeline_password: ENV.fetch('DATA_PIPELINE_PASSWORD', '')
  }
  client = PlatformSdk::DataPipeline::Client.new(credentials)
  client.post(pipeline_payload(action)) unless Rails.env.development?
  return unless respond_to?(:one_roster_data_type) && !Rails.env.development?

  client.post(one_roster_pipeline_payload(deleted: action == "destroyed"))
end