strongmind-platform-sdk 3.21.1 → 3.21.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/platform_sdk/active_record/data_pipelineable.rb +6 -17
- data/lib/platform_sdk/canvas_api/client.rb +13 -5
- data/lib/platform_sdk/jobs/send_noun_to_pipeline_job.rb +31 -0
- data/lib/platform_sdk/spec_support/shared_examples/data_pipelineable_examples.rb +18 -8
- data/lib/platform_sdk/spec_support/shared_examples/one_roster_data_pipelineable_examples.rb +18 -8
- data/lib/platform_sdk/version.rb +1 -1
- data/lib/platform_sdk.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: efa1b649bf5efa1b5b2becd402edd82a48f3c56cfc138c4c6e48190b30c4c1ea
|
4
|
+
data.tar.gz: 8ec2206a55dc2ba2ed803509a3686761dcb544fb6c25b91d668dad8910fea3dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e97d871efc15d00d8508e9a0cc6dca74fcfa8a390385b18285253e0e50b9224fa9596f10c4ce576abf40329adf90f73df37c9db2c061345269e271bad25c5173
|
7
|
+
data.tar.gz: fc0e5681fecc25c5eef70ae0873511a70b7cd05d970d133464a37353f13d6d4efd1ce43484a792ba25fbbfb493d353fd5e87b4d899b4c6621987f312cfc3ece0
|
@@ -13,15 +13,18 @@ module PlatformSdk
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def send_pipeline_create
|
16
|
-
|
16
|
+
Jobs::SendNounToPipelineJob.perform_later(pipeline_payload('created'),
|
17
|
+
one_roster_pipeline_payload)
|
17
18
|
end
|
18
19
|
|
19
20
|
def send_pipeline_update
|
20
|
-
|
21
|
+
Jobs::SendNounToPipelineJob.perform_later(pipeline_payload('modified'),
|
22
|
+
one_roster_pipeline_payload)
|
21
23
|
end
|
22
24
|
|
23
25
|
def send_pipeline_destroy
|
24
|
-
|
26
|
+
Jobs::SendNounToPipelineJob.perform_later(pipeline_payload('destroyed'),
|
27
|
+
one_roster_pipeline_payload(deleted: true))
|
25
28
|
end
|
26
29
|
|
27
30
|
def pipeline_payload(action)
|
@@ -67,20 +70,6 @@ module PlatformSdk
|
|
67
70
|
def one_roster_pipeline_payload(deleted: false)
|
68
71
|
{}
|
69
72
|
end
|
70
|
-
|
71
|
-
def send_to_pipeline(action)
|
72
|
-
credentials = {
|
73
|
-
pipeline_host: ENV.fetch('DATA_PIPELINE_HOST', 'stage-di-data-pipeline-api.strongmind.com'),
|
74
|
-
pipeline_username: ENV.fetch('DATA_PIPELINE_USERNAME', 'canvas_prod'),
|
75
|
-
pipeline_password: ENV.fetch('DATA_PIPELINE_PASSWORD', '')
|
76
|
-
}
|
77
|
-
client = PlatformSdk::DataPipeline::Client.new(credentials)
|
78
|
-
|
79
|
-
client.post(pipeline_payload(action)) unless Rails.env.development?
|
80
|
-
return unless respond_to?(:one_roster_data_type) && !Rails.env.development? && one_roster_pipeline_payload(deleted: action == "destroyed").present?
|
81
|
-
|
82
|
-
client.post(one_roster_pipeline_payload(deleted: action == "destroyed"))
|
83
|
-
end
|
84
73
|
end
|
85
74
|
end
|
86
75
|
end
|
@@ -552,7 +552,7 @@ module PlatformSdk
|
|
552
552
|
error_messages << "#{error[:message]} "
|
553
553
|
end
|
554
554
|
end
|
555
|
-
"#{message}:
|
555
|
+
"#{message}: #{error_messages}"
|
556
556
|
end
|
557
557
|
|
558
558
|
def handle_rate_limiting(response)
|
@@ -568,10 +568,17 @@ module PlatformSdk
|
|
568
568
|
# @param response [Faraday::Response]
|
569
569
|
# @param message [String]
|
570
570
|
def handle_post_response_errors(response, message)
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
571
|
+
message = "#{message},\n" + "host: #{host},\n" + "response: #{response.body}"
|
572
|
+
case response.status
|
573
|
+
when 403
|
574
|
+
raise LockedModuleItemError, message
|
575
|
+
when 404
|
576
|
+
raise MissingModuleItemError, message
|
577
|
+
when 401
|
578
|
+
raise UnauthorizedError, message
|
579
|
+
else
|
580
|
+
raise CanvasClientError, message
|
581
|
+
end
|
575
582
|
end
|
576
583
|
end
|
577
584
|
|
@@ -580,5 +587,6 @@ module PlatformSdk
|
|
580
587
|
class LockedModuleItemError < CanvasClientError; end
|
581
588
|
|
582
589
|
class MissingModuleItemError < CanvasClientError; end
|
590
|
+
class UnauthorizedError < CanvasClientError; end
|
583
591
|
end
|
584
592
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_job'
|
4
|
+
|
5
|
+
module PlatformSdk
|
6
|
+
module Jobs
|
7
|
+
class SendNounToPipelineJob < ActiveJob::Base
|
8
|
+
queue_as :default
|
9
|
+
|
10
|
+
def perform(message, one_roster_message)
|
11
|
+
send_to_pipeline(message, one_roster_message)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def send_to_pipeline(message, one_roster_message)
|
17
|
+
credentials = {
|
18
|
+
pipeline_host: ENV.fetch('DATA_PIPELINE_HOST', 'stage-di-data-pipeline-api.strongmind.com'),
|
19
|
+
pipeline_username: ENV.fetch('DATA_PIPELINE_USERNAME', 'canvas_prod'),
|
20
|
+
pipeline_password: ENV.fetch('DATA_PIPELINE_PASSWORD', '')
|
21
|
+
}
|
22
|
+
client = PlatformSdk::DataPipeline::Client.new(credentials)
|
23
|
+
|
24
|
+
client.post(message) unless Rails.env.development?
|
25
|
+
return unless one_roster_message && !Rails.env.development?
|
26
|
+
|
27
|
+
client.post(one_roster_message)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module PlatformSdk
|
2
2
|
module SpecSupport
|
3
3
|
RSpec.shared_examples 'DataPipelineable' do |params = {}|
|
4
|
+
include ActiveJob::TestHelper
|
5
|
+
|
4
6
|
let(:shared_params) { params }
|
5
7
|
let(:record) { build(described_class.to_s.underscore.to_sym) }
|
6
8
|
let(:data_pipeline_client) { double(PlatformSdk::DataPipeline::Client) }
|
@@ -16,7 +18,9 @@ module PlatformSdk
|
|
16
18
|
context 'create' do
|
17
19
|
|
18
20
|
it 'posts a copy of our data to the data pipeline' do
|
19
|
-
|
21
|
+
perform_enqueued_jobs do
|
22
|
+
record.save!
|
23
|
+
end
|
20
24
|
expect(data_pipeline_client).to have_received(:post).once.with(hash_including(
|
21
25
|
noun: described_class.pipeline_noun,
|
22
26
|
data: record.pipeline_data('created'),
|
@@ -31,8 +35,10 @@ module PlatformSdk
|
|
31
35
|
context 'destroy' do
|
32
36
|
|
33
37
|
it 'posts a copy of our data to the data pipeline' do
|
34
|
-
|
35
|
-
|
38
|
+
perform_enqueued_jobs do
|
39
|
+
record.save!
|
40
|
+
record.destroy
|
41
|
+
end
|
36
42
|
|
37
43
|
expect(data_pipeline_client).to have_received(:post).once.with(hash_including(
|
38
44
|
noun: described_class.pipeline_noun,
|
@@ -54,7 +60,9 @@ module PlatformSdk
|
|
54
60
|
it 'posts a copy of our data to the data pipeline' do
|
55
61
|
column = column_to_update(record)
|
56
62
|
unless column.nil?
|
57
|
-
|
63
|
+
perform_enqueued_jobs do
|
64
|
+
update_record(record, column)
|
65
|
+
end
|
58
66
|
expect(data_pipeline_client).to have_received(:post).once.with(hash_including(
|
59
67
|
noun: described_class.pipeline_noun,
|
60
68
|
data: record.pipeline_data('modified'),
|
@@ -71,10 +79,12 @@ module PlatformSdk
|
|
71
79
|
let(:action) { 'modified' }
|
72
80
|
|
73
81
|
it 'does not post to the data pipeline' do
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
82
|
+
perform_enqueued_jobs do
|
83
|
+
record.save!
|
84
|
+
column = column_to_update(record)
|
85
|
+
update_record(record, column)
|
86
|
+
record.save!
|
87
|
+
end
|
78
88
|
expect(data_pipeline_client).to have_received(:post).once.with(hash_including(
|
79
89
|
noun: described_class.pipeline_noun,
|
80
90
|
data: record.pipeline_data('modified'),
|
@@ -3,6 +3,8 @@
|
|
3
3
|
module PlatformSdk
|
4
4
|
module SpecSupport
|
5
5
|
RSpec.shared_examples 'OneRosterDataPipelineable' do |record_keys|
|
6
|
+
include ActiveJob::TestHelper
|
7
|
+
|
6
8
|
let(:data) do
|
7
9
|
record_keys.each_with_object({}) do |key, hash|
|
8
10
|
if key == '_type'
|
@@ -50,7 +52,9 @@ module PlatformSdk
|
|
50
52
|
let(:action) { 'created' }
|
51
53
|
|
52
54
|
it 'posts to the data pipeline' do
|
53
|
-
|
55
|
+
perform_enqueued_jobs do
|
56
|
+
record.save!
|
57
|
+
end
|
54
58
|
expect(data_pipeline_client).to have_received(:post).with(pipeline_payload)
|
55
59
|
end
|
56
60
|
end
|
@@ -68,8 +72,10 @@ module PlatformSdk
|
|
68
72
|
end
|
69
73
|
|
70
74
|
it 'posts to the data pipeline' do
|
71
|
-
|
72
|
-
|
75
|
+
perform_enqueued_jobs do
|
76
|
+
record.save!
|
77
|
+
record.destroy
|
78
|
+
end
|
73
79
|
expect(data_pipeline_client).to have_received(:post).with(pipeline_payload)
|
74
80
|
expect(data_pipeline_client).to have_received(:post).with(pipeline_payload_deleted)
|
75
81
|
end
|
@@ -86,7 +92,9 @@ module PlatformSdk
|
|
86
92
|
|
87
93
|
it 'posts a copy of our data to the data pipeline' do
|
88
94
|
column = column_to_update(record)
|
89
|
-
|
95
|
+
perform_enqueued_jobs do
|
96
|
+
update_record(record, column)
|
97
|
+
end
|
90
98
|
expect(data_pipeline_client).to have_received(:post).with(pipeline_payload)
|
91
99
|
end
|
92
100
|
|
@@ -96,10 +104,12 @@ module PlatformSdk
|
|
96
104
|
let(:action) { 'modified' }
|
97
105
|
|
98
106
|
it 'does not post to the data pipeline' do
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
107
|
+
perform_enqueued_jobs do
|
108
|
+
record.save!
|
109
|
+
column = column_to_update(record)
|
110
|
+
update_record(record, column)
|
111
|
+
record.save!
|
112
|
+
end
|
103
113
|
expect(data_pipeline_client).to have_received(:post).once.with(pipeline_payload)
|
104
114
|
end
|
105
115
|
end
|
data/lib/platform_sdk/version.rb
CHANGED
data/lib/platform_sdk.rb
CHANGED
@@ -23,6 +23,7 @@ require "fog-aws"
|
|
23
23
|
require "platform_sdk/asset_sync_initializer"
|
24
24
|
require "platform_sdk/sidekiq/ecs_task_protection_middleware"
|
25
25
|
require "platform_sdk/sidekiq"
|
26
|
+
require "platform_sdk/jobs/send_noun_to_pipeline_job"
|
26
27
|
|
27
28
|
module PlatformSdk
|
28
29
|
class Error < StandardError; end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: strongmind-platform-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.21.
|
4
|
+
version: 3.21.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Platform Team
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -273,6 +273,7 @@ files:
|
|
273
273
|
- lib/platform_sdk/id_mapper/models/domain.rb
|
274
274
|
- lib/platform_sdk/identity.rb
|
275
275
|
- lib/platform_sdk/identity/clients.rb
|
276
|
+
- lib/platform_sdk/jobs/send_noun_to_pipeline_job.rb
|
276
277
|
- lib/platform_sdk/learnosity_api.rb
|
277
278
|
- lib/platform_sdk/learnosity_api/client.rb
|
278
279
|
- lib/platform_sdk/one_roster.rb
|