strongmind-platform-sdk 3.26.21 → 3.27.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9bf954ff38af3f4ea2265c5b1130138130d7122e9bd2253c17f7b8ae1317dc14
4
- data.tar.gz: 40acedd434a8a09742f30a597a6d084f257a536fa886b1aabe123627785e3ad3
3
+ metadata.gz: 810243f0c080ad6d0d3de344f35be529792ed8f8b46a2e26ec73d848cc2ec55b
4
+ data.tar.gz: f194d6d594cd91f90dd5cb61ef73963d2616c8ed15ac34b5dfc976a2d37f14c2
5
5
  SHA512:
6
- metadata.gz: fcfda3a8756c2814ec1800adc35bed5b8a449a07a1d390e7cb8ef99de40657d03d1ac5e47191138392511485d255dec08de5660980e155078daa79799da3d8c6
7
- data.tar.gz: 03e3d406908aa3ce885bb4c76c2c8265b727958d409e37860957ce40e852f559dad4b60c758bf04e27582a73e60d6d33e030060fb77c00e07dd6c04d81afe714
6
+ metadata.gz: 0f8a9dcb3b3084e352f3dcac40ca9f2cc59ef951e8124483ac06790cd065f555a25f08b4018bc74d7e77b06083683783bf0e8cbf000f1af1a37f55f85fb0c022
7
+ data.tar.gz: 77cfa7f41f67166ff0107134aaf07ca0d44d3075cb44fd4c12ccb3f4903fe9ae117acc90f2530f28e99090b724f1cbb6d28dec23fe881fbbcd358cf8457a9f7a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- strongmind-platform-sdk (3.26.0)
4
+ strongmind-platform-sdk (3.27.0)
5
5
  asset_sync
6
6
  aws-sdk-cloudwatch
7
7
  aws-sdk-secretsmanager (~> 1.66)
@@ -128,13 +128,14 @@ GEM
128
128
  bigdecimal
129
129
  rexml
130
130
  crass (1.0.6)
131
- date (3.4.1)
131
+ date (3.5.1)
132
132
  diff-lcs (1.5.1)
133
133
  drb (2.2.1)
134
134
  erubi (1.13.0)
135
135
  ethon (0.16.0)
136
136
  ffi (>= 1.15.0)
137
- excon (1.2.3)
137
+ excon (1.3.0)
138
+ logger
138
139
  factory_bot (6.4.6)
139
140
  activesupport (>= 5.0.0)
140
141
  faker (3.4.2)
@@ -149,8 +150,8 @@ GEM
149
150
  ffi (1.17.0)
150
151
  ffi (1.17.0-x86_64-darwin)
151
152
  ffi (1.17.0-x86_64-linux-gnu)
152
- fog-aws (3.30.0)
153
- base64 (~> 0.2.0)
153
+ fog-aws (3.33.0)
154
+ base64 (>= 0.2, < 0.4)
154
155
  fog-core (~> 2.6)
155
156
  fog-json (~> 1.1)
156
157
  fog-xml (~> 0.1)
@@ -165,8 +166,9 @@ GEM
165
166
  fog-xml (0.1.5)
166
167
  fog-core
167
168
  nokogiri (>= 1.5.11, < 2.0.0)
168
- formatador (1.1.0)
169
- globalid (1.2.1)
169
+ formatador (1.2.2)
170
+ reline
171
+ globalid (1.3.0)
170
172
  activesupport (>= 6.1)
171
173
  hashdiff (1.1.0)
172
174
  i18n (1.14.5)
@@ -185,17 +187,18 @@ GEM
185
187
  loofah (2.22.0)
186
188
  crass (~> 1.0.2)
187
189
  nokogiri (>= 1.12.0)
188
- mail (2.8.1)
190
+ mail (2.9.0)
191
+ logger
189
192
  mini_mime (>= 0.1.1)
190
193
  net-imap
191
194
  net-pop
192
195
  net-smtp
193
- marcel (1.0.4)
196
+ marcel (1.1.0)
194
197
  method_source (1.1.0)
195
- mime-types (3.6.0)
198
+ mime-types (3.7.0)
196
199
  logger
197
- mime-types-data (~> 3.2015)
198
- mime-types-data (3.2025.0107)
200
+ mime-types-data (~> 3.2025, >= 3.2025.0507)
201
+ mime-types-data (3.2025.0924)
199
202
  mini_mime (1.1.5)
200
203
  mini_portile2 (2.8.7)
201
204
  minitest (5.24.1)
@@ -203,16 +206,16 @@ GEM
203
206
  mutex_m (0.2.0)
204
207
  net-http (0.4.1)
205
208
  uri
206
- net-imap (0.5.6)
209
+ net-imap (0.5.12)
207
210
  date
208
211
  net-protocol
209
212
  net-pop (0.1.2)
210
213
  net-protocol
211
214
  net-protocol (0.2.2)
212
215
  timeout
213
- net-smtp (0.5.0)
216
+ net-smtp (0.5.1)
214
217
  net-protocol
215
- nio4r (2.7.4)
218
+ nio4r (2.7.5)
216
219
  nokogiri (1.16.7)
217
220
  mini_portile2 (~> 2.8.2)
218
221
  racc (~> 1.4)
@@ -339,20 +342,20 @@ GEM
339
342
  ffi (~> 1.1)
340
343
  thor (1.3.1)
341
344
  timecop (0.9.10)
342
- timeout (0.4.3)
345
+ timeout (0.4.4)
343
346
  typhoeus (1.4.1)
344
347
  ethon (>= 0.9.0)
345
348
  tzinfo (2.0.6)
346
349
  concurrent-ruby (~> 1.0)
347
350
  unf (0.2.0)
348
351
  unicode-display_width (2.5.0)
349
- uri (0.13.1)
352
+ uri (1.1.1)
350
353
  webmock (3.23.1)
351
354
  addressable (>= 2.8.0)
352
355
  crack (>= 0.3.2)
353
356
  hashdiff (>= 0.4.0, < 2.0.0)
354
357
  webrick (1.8.1)
355
- websocket-driver (0.7.7)
358
+ websocket-driver (0.8.0)
356
359
  base64
357
360
  websocket-extensions (>= 0.1.0)
358
361
  websocket-extensions (0.1.5)
@@ -1,47 +1,81 @@
1
1
  # frozen_string_literal: true
2
- require "learnosity/sdk/request/init"
3
- require "securerandom"
4
- require "net/http"
2
+
3
+ require 'learnosity/sdk/request/init'
4
+ require 'securerandom'
5
5
 
6
6
  module PlatformSdk
7
7
  module LearnosityApi
8
- # Learnosity::Client
9
8
  class Client
10
- attr_reader :credentials, :security
9
+ attr_reader :credentials, :security, :conn
11
10
 
12
11
  def initialize(credentials)
13
12
  @credentials = credentials
14
13
 
15
- raise ArgumentError, "learnosity_host is required" if @credentials[:learnosity_host].nil?
16
- raise ArgumentError, "learnosity_version is required" if @credentials[:learnosity_version].nil?
17
- raise ArgumentError, "service is required" if @credentials[:service].nil?
18
- raise ArgumentError, "consumer_key is required" if @credentials[:consumer_key].nil?
19
- raise ArgumentError, "consumer_secret is required" if @credentials[:consumer_secret].nil?
20
- raise ArgumentError, "organisation_id is required" if @credentials[:organisation_id].nil?
21
- raise ArgumentError, "domain is required" if @credentials[:domain].nil?
14
+ raise ArgumentError, 'learnosity_host is required' if @credentials[:learnosity_host].nil?
15
+ raise ArgumentError, 'learnosity_version is required' if @credentials[:learnosity_version].nil?
16
+ raise ArgumentError, 'service is required' if @credentials[:service].nil?
17
+ raise ArgumentError, 'consumer_key is required' if @credentials[:consumer_key].nil?
18
+ raise ArgumentError, 'consumer_secret is required' if @credentials[:consumer_secret].nil?
19
+ raise ArgumentError, 'organisation_id is required' if @credentials[:organisation_id].nil?
20
+ raise ArgumentError, 'domain is required' if @credentials[:domain].nil?
22
21
 
23
22
  @security = {
24
- "consumer_key" => @credentials[:consumer_key],
25
- "user_id" => SecureRandom.uuid,
26
- "domain" => @credentials[:domain]
23
+ 'consumer_key' => @credentials[:consumer_key],
24
+ 'user_id' => @credentials[:user_id] || SecureRandom.uuid,
25
+ 'domain' => @credentials[:domain]
27
26
  }
28
27
 
28
+ @conn = build_connection
29
29
  end
30
30
 
31
- def sign(request)
32
- init = Learnosity::Sdk::Request::Init.new(
31
+ def sign(request, action)
32
+ Learnosity::Sdk::Request::Init.new(
33
33
  @credentials[:service],
34
34
  @security,
35
35
  @credentials[:consumer_secret],
36
- request
37
- )
38
- init.generate
36
+ request,
37
+ action
38
+ ).generate
39
39
  end
40
40
 
41
41
  def post(path, request)
42
- request["organisation_id"] = @credentials[:organisation_id]
43
- uri = URI("https://#{@credentials[:learnosity_host]}/#{@credentials[:learnosity_version]}/#{path}")
44
- Net::HTTP.post_form(uri, sign(request))
42
+ request['organisation_id'] ||= @credentials[:organisation_id]
43
+ # to support backwards compatibility with the old client
44
+ request = sign(request, 'get') unless request.key?('security')
45
+ # will be removed in a future release
46
+ # when all clients have been updated to use the new sign method
47
+ conn.post(path, request)
48
+ rescue Faraday::Error => e
49
+ log_warn("Learnosity Data API Error: #{e.inspect}")
50
+ raise
51
+ end
52
+
53
+ private
54
+
55
+ def build_connection
56
+ base_uri = URI("https://#{@credentials[:learnosity_host]}/#{@credentials[:learnosity_version]}/")
57
+
58
+ Faraday.new(base_uri) do |f|
59
+ f.request :url_encoded
60
+ f.request :retry, retry_statuses: [429], methods: %i[post],
61
+ max: 3, interval: 2, backoff_factor: 2,
62
+ retry_block: method(:log_rate_limit_retry)
63
+ f.response :raise_error
64
+ f.response :json
65
+ f.adapter :net_http
66
+ end
67
+ end
68
+
69
+ def log_warn(message)
70
+ if defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
71
+ Rails.logger.warn(message)
72
+ else
73
+ warn(message)
74
+ end
75
+ end
76
+
77
+ def log_rate_limit_retry(env, _opts, retries, exc)
78
+ log_warn("Learnosity rate limited (attempt #{retries}): #{env.url.path} (#{exc&.message})")
45
79
  end
46
80
  end
47
81
  end
@@ -1,14 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "faraday"
4
- require "faraday/net_http"
5
- require "faraday/retry"
6
- require "platform_sdk/learnosity_api/client"
3
+ require 'faraday'
4
+ require 'faraday/net_http'
5
+ require 'faraday/retry'
6
+ require 'platform_sdk/learnosity_api/client'
7
7
 
8
8
  module PlatformSdk
9
9
  module LearnosityApi
10
- class Error < StandardError; end
11
-
12
-
13
10
  end
14
11
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  module PlatformSdk
4
4
  MAJOR = 3
5
- MINOR = 26
6
- PATCH = 21
5
+ MINOR = 27
6
+ PATCH = 0
7
7
 
8
8
  VERSION = "#{PlatformSdk::MAJOR}.#{PlatformSdk::MINOR}.#{PlatformSdk::PATCH}"
9
9
  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.26.21
4
+ version: 3.27.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Platform Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-03-28 00:00:00.000000000 Z
11
+ date: 2026-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday