Module: PlatformSdk::ActiveRecord::DataPipelineable

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.pipeline_metaObject

Raises:

  • (NotImplementedError)


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

def self.pipeline_meta
  raise NotImplementedError, 'You must implement the pipeline_meta class method, an example value is { "source": "strongmind-central" }'
end

.pipeline_nounObject

Raises:

  • (NotImplementedError)


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

def self.pipeline_noun
  raise NotImplementedError, 'You must implement the pipeline_noun class method'
end

Instance Method Details

#one_roster_pipeline_payload(deleted: false) ⇒ Object



56
57
58
# File 'lib/platform_sdk/active_record/data_pipelineable.rb', line 56

def one_roster_pipeline_payload(deleted: false)
  {}
end

#pipeline_additional_attributesObject



52
53
54
# File 'lib/platform_sdk/active_record/data_pipelineable.rb', line 52

def pipeline_additional_attributes
  {}
end

#pipeline_data(action) ⇒ Object



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

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

  data_hash.merge!(pipeline_additional_attributes)

  data_hash.except(*pipeline_excluded_attributes)
end

#pipeline_excluded_attributesObject



34
35
36
# File 'lib/platform_sdk/active_record/data_pipelineable.rb', line 34

def pipeline_excluded_attributes
  []
end

#pipeline_identifiersObject



38
39
40
41
42
# File 'lib/platform_sdk/active_record/data_pipelineable.rb', line 38

def pipeline_identifiers
  {
    "id": id
  }
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": self.class.pipeline_noun,
    "identifiers": pipeline_identifiers,
    "meta": self.class.pipeline_meta,
    "data": pipeline_data(action),
    "envelope_version": '1.0.0',
    "message_timestamp": Time.current.utc.iso8601
  }
end

#send_to_pipeline(action) ⇒ Object



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

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