reactor_sdk 0.1.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 +7 -0
- data/CHANGELOG.md +19 -0
- data/LICENSE.txt +21 -0
- data/README.md +281 -0
- data/lib/reactor_sdk/authentication.rb +137 -0
- data/lib/reactor_sdk/client.rb +186 -0
- data/lib/reactor_sdk/configuration.rb +102 -0
- data/lib/reactor_sdk/connection.rb +342 -0
- data/lib/reactor_sdk/endpoints/app_configurations.rb +42 -0
- data/lib/reactor_sdk/endpoints/audit_events.rb +64 -0
- data/lib/reactor_sdk/endpoints/base_endpoint.rb +207 -0
- data/lib/reactor_sdk/endpoints/builds.rb +62 -0
- data/lib/reactor_sdk/endpoints/callbacks.rb +38 -0
- data/lib/reactor_sdk/endpoints/companies.rb +42 -0
- data/lib/reactor_sdk/endpoints/data_elements.rb +251 -0
- data/lib/reactor_sdk/endpoints/environments.rb +174 -0
- data/lib/reactor_sdk/endpoints/extension_package_usage_authorizations.rb +51 -0
- data/lib/reactor_sdk/endpoints/extension_packages.rb +63 -0
- data/lib/reactor_sdk/endpoints/extensions.rb +181 -0
- data/lib/reactor_sdk/endpoints/hosts.rb +101 -0
- data/lib/reactor_sdk/endpoints/libraries.rb +872 -0
- data/lib/reactor_sdk/endpoints/notes.rb +11 -0
- data/lib/reactor_sdk/endpoints/profiles.rb +14 -0
- data/lib/reactor_sdk/endpoints/properties.rb +123 -0
- data/lib/reactor_sdk/endpoints/revisions.rb +102 -0
- data/lib/reactor_sdk/endpoints/rule_components.rb +218 -0
- data/lib/reactor_sdk/endpoints/rules.rb +240 -0
- data/lib/reactor_sdk/endpoints/search.rb +23 -0
- data/lib/reactor_sdk/endpoints/secrets.rb +76 -0
- data/lib/reactor_sdk/error.rb +115 -0
- data/lib/reactor_sdk/library_comparison_builder.rb +74 -0
- data/lib/reactor_sdk/library_snapshot_builder.rb +66 -0
- data/lib/reactor_sdk/paginator.rb +92 -0
- data/lib/reactor_sdk/rate_limiter.rb +96 -0
- data/lib/reactor_sdk/reference_extractor.rb +34 -0
- data/lib/reactor_sdk/resource_metadata.rb +73 -0
- data/lib/reactor_sdk/resource_normalizer.rb +90 -0
- data/lib/reactor_sdk/resources/app_configuration.rb +20 -0
- data/lib/reactor_sdk/resources/audit_event.rb +45 -0
- data/lib/reactor_sdk/resources/base_resource.rb +181 -0
- data/lib/reactor_sdk/resources/build.rb +64 -0
- data/lib/reactor_sdk/resources/callback.rb +16 -0
- data/lib/reactor_sdk/resources/company.rb +38 -0
- data/lib/reactor_sdk/resources/comprehensive_data_element.rb +28 -0
- data/lib/reactor_sdk/resources/comprehensive_extension.rb +30 -0
- data/lib/reactor_sdk/resources/comprehensive_resource.rb +31 -0
- data/lib/reactor_sdk/resources/comprehensive_rule.rb +26 -0
- data/lib/reactor_sdk/resources/comprehensive_upstream_chain.rb +50 -0
- data/lib/reactor_sdk/resources/comprehensive_upstream_chain_entry.rb +34 -0
- data/lib/reactor_sdk/resources/data_element.rb +108 -0
- data/lib/reactor_sdk/resources/environment.rb +45 -0
- data/lib/reactor_sdk/resources/extension.rb +66 -0
- data/lib/reactor_sdk/resources/extension_package.rb +49 -0
- data/lib/reactor_sdk/resources/extension_package_usage_authorization.rb +26 -0
- data/lib/reactor_sdk/resources/host.rb +68 -0
- data/lib/reactor_sdk/resources/library.rb +67 -0
- data/lib/reactor_sdk/resources/library_comparison.rb +72 -0
- data/lib/reactor_sdk/resources/library_comparison_entry.rb +144 -0
- data/lib/reactor_sdk/resources/library_snapshot.rb +118 -0
- data/lib/reactor_sdk/resources/library_snapshot_extension_index.rb +70 -0
- data/lib/reactor_sdk/resources/library_snapshot_index.rb +169 -0
- data/lib/reactor_sdk/resources/library_with_resources.rb +194 -0
- data/lib/reactor_sdk/resources/note.rb +37 -0
- data/lib/reactor_sdk/resources/profile.rb +22 -0
- data/lib/reactor_sdk/resources/property.rb +44 -0
- data/lib/reactor_sdk/resources/revision.rb +156 -0
- data/lib/reactor_sdk/resources/rule.rb +44 -0
- data/lib/reactor_sdk/resources/rule_component.rb +101 -0
- data/lib/reactor_sdk/resources/search_results.rb +28 -0
- data/lib/reactor_sdk/resources/secret.rb +17 -0
- data/lib/reactor_sdk/resources/upstream_chain.rb +80 -0
- data/lib/reactor_sdk/resources/upstream_chain_entry.rb +55 -0
- data/lib/reactor_sdk/response_parser.rb +160 -0
- data/lib/reactor_sdk/version.rb +5 -0
- data/lib/reactor_sdk.rb +79 -0
- data/reactor_sdk.gemspec +70 -0
- data/sig/reactor_sdk.rbs +346 -0
- metadata +293 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
##
|
|
4
|
+
# @file response_parser.rb
|
|
5
|
+
# @description Transforms raw JSON:API response hashes into typed Ruby objects.
|
|
6
|
+
#
|
|
7
|
+
# The Reactor API returns JSON:API format where every resource has:
|
|
8
|
+
# id — the Adobe resource ID string
|
|
9
|
+
# type — the resource type (e.g. "rules", "properties")
|
|
10
|
+
# attributes — a hash of the resource's field values
|
|
11
|
+
# meta — optional metadata hash
|
|
12
|
+
#
|
|
13
|
+
# For Revision resources, the response also includes:
|
|
14
|
+
# relationships — identifies the entity this revision belongs to
|
|
15
|
+
# included — full snapshot of the revisioned resource at this point
|
|
16
|
+
#
|
|
17
|
+
# This parser handles both standard resources and the richer Revision
|
|
18
|
+
# response without the caller needing to know the difference.
|
|
19
|
+
#
|
|
20
|
+
# @domain Infrastructure
|
|
21
|
+
#
|
|
22
|
+
|
|
23
|
+
module ReactorSDK
|
|
24
|
+
class ResponseParser
|
|
25
|
+
TYPE_REGISTRY = {
|
|
26
|
+
'app_configurations' => Resources::AppConfiguration,
|
|
27
|
+
'audit_events' => Resources::AuditEvent,
|
|
28
|
+
'builds' => Resources::Build,
|
|
29
|
+
'callbacks' => Resources::Callback,
|
|
30
|
+
'companies' => Resources::Company,
|
|
31
|
+
'data_elements' => Resources::DataElement,
|
|
32
|
+
'environments' => Resources::Environment,
|
|
33
|
+
'extension_package_usage_authorizations' => Resources::ExtensionPackageUsageAuthorization,
|
|
34
|
+
'extension_packages' => Resources::ExtensionPackage,
|
|
35
|
+
'extensions' => Resources::Extension,
|
|
36
|
+
'hosts' => Resources::Host,
|
|
37
|
+
'libraries' => Resources::Library,
|
|
38
|
+
'notes' => Resources::Note,
|
|
39
|
+
'profiles' => Resources::Profile,
|
|
40
|
+
'properties' => Resources::Property,
|
|
41
|
+
'revisions' => Resources::Revision,
|
|
42
|
+
'rule_components' => Resources::RuleComponent,
|
|
43
|
+
'rules' => Resources::Rule,
|
|
44
|
+
'secrets' => Resources::Secret
|
|
45
|
+
}.freeze
|
|
46
|
+
|
|
47
|
+
##
|
|
48
|
+
# Parses a single JSON:API resource hash into a typed resource object.
|
|
49
|
+
#
|
|
50
|
+
# For Revision resources, also extracts the included entity snapshot
|
|
51
|
+
# and relationships from the full response envelope if provided.
|
|
52
|
+
#
|
|
53
|
+
# @param data [Hash] Raw JSON:API data hash
|
|
54
|
+
# @param resource_class [Class] Resource class to instantiate
|
|
55
|
+
# @param response [Hash, nil] Full response envelope — used to extract
|
|
56
|
+
# included array for Revision resources
|
|
57
|
+
# @return [Object] An instance of resource_class populated with parsed data
|
|
58
|
+
# @raise [ArgumentError] if data is nil
|
|
59
|
+
# @raise [KeyError] if required JSON:API fields are missing
|
|
60
|
+
#
|
|
61
|
+
def parse(data, resource_class, response: nil)
|
|
62
|
+
raise ArgumentError, 'data cannot be nil' if data.nil?
|
|
63
|
+
|
|
64
|
+
base_args = {
|
|
65
|
+
id: data.fetch('id'),
|
|
66
|
+
type: data.fetch('type'),
|
|
67
|
+
attributes: data.fetch('attributes', {}),
|
|
68
|
+
meta: data.fetch('meta', {}),
|
|
69
|
+
relationships: data.fetch('relationships', {})
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
base_args.merge!(extract_revision_extras(data, response)) if resource_class == Resources::Revision
|
|
73
|
+
|
|
74
|
+
resource_class.new(**base_args)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
##
|
|
78
|
+
# Parses an array of JSON:API resource hashes into typed resource objects.
|
|
79
|
+
# Returns an empty array if data_array is nil or empty.
|
|
80
|
+
#
|
|
81
|
+
# @param data_array [Array<Hash>] Array of raw JSON:API data hashes
|
|
82
|
+
# @param resource_class [Class] Resource class to instantiate for each item
|
|
83
|
+
# @param response [Hash, nil] Full response envelope (passed through to parse)
|
|
84
|
+
# @return [Array<Object>] Array of resource_class instances
|
|
85
|
+
#
|
|
86
|
+
def parse_many(data_array, resource_class, response: nil)
|
|
87
|
+
Array(data_array).map { |data| parse(data, resource_class, response: response) }
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
##
|
|
91
|
+
# Parses a single resource into the best matching SDK class
|
|
92
|
+
# using its JSON:API type.
|
|
93
|
+
#
|
|
94
|
+
# @param data [Hash]
|
|
95
|
+
# @param response [Hash, nil]
|
|
96
|
+
# @return [ReactorSDK::Resources::BaseResource]
|
|
97
|
+
#
|
|
98
|
+
def parse_auto(data, response: nil)
|
|
99
|
+
resource_class = TYPE_REGISTRY.fetch(data.fetch('type'), Resources::BaseResource)
|
|
100
|
+
parse(data, resource_class, response: response)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
##
|
|
104
|
+
# Parses a heterogeneous collection into typed SDK resources.
|
|
105
|
+
#
|
|
106
|
+
# @param data_array [Array<Hash>]
|
|
107
|
+
# @param response [Hash, nil]
|
|
108
|
+
# @return [Array<ReactorSDK::Resources::BaseResource>]
|
|
109
|
+
#
|
|
110
|
+
def parse_many_auto(data_array, response: nil)
|
|
111
|
+
Array(data_array).map { |data| parse_auto(data, response: response) }
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
private
|
|
115
|
+
|
|
116
|
+
##
|
|
117
|
+
# Extracts the included entity snapshot and relationships from a Revision response.
|
|
118
|
+
#
|
|
119
|
+
# When fetching GET /revisions/:id, Adobe returns the full revisioned resource
|
|
120
|
+
# in the `included` array. This method finds the matching included resource
|
|
121
|
+
# and returns it alongside the relationships hash for entity identity extraction.
|
|
122
|
+
#
|
|
123
|
+
# @param data [Hash] The revision data object
|
|
124
|
+
# @param response [Hash, nil] Full response envelope containing included array
|
|
125
|
+
# @return [Hash] Extra keyword args for Revision.new
|
|
126
|
+
#
|
|
127
|
+
def extract_revision_extras(data, response)
|
|
128
|
+
relationships = data.fetch('relationships', nil)
|
|
129
|
+
included_entity = find_included_entity(data, response)
|
|
130
|
+
|
|
131
|
+
{
|
|
132
|
+
revision_relationships: relationships,
|
|
133
|
+
included_entity: included_entity
|
|
134
|
+
}
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
##
|
|
138
|
+
# Finds the included entity resource matching this revision's entity relationship.
|
|
139
|
+
# Returns nil if no included array is present (e.g. list responses).
|
|
140
|
+
#
|
|
141
|
+
# @param data [Hash] The revision data object
|
|
142
|
+
# @param response [Hash, nil] Full response envelope
|
|
143
|
+
# @return [Hash, nil] The matching included resource hash or nil
|
|
144
|
+
#
|
|
145
|
+
def find_included_entity(data, response)
|
|
146
|
+
return nil unless response.is_a?(Hash)
|
|
147
|
+
|
|
148
|
+
included = Array(response['included'])
|
|
149
|
+
return nil if included.empty?
|
|
150
|
+
|
|
151
|
+
entity_data = data.dig('relationships', 'entity', 'data')
|
|
152
|
+
return nil unless entity_data.is_a?(Hash)
|
|
153
|
+
|
|
154
|
+
included.find do |item|
|
|
155
|
+
item['id'] == entity_data['id'] &&
|
|
156
|
+
item['type'] == entity_data['type']
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
data/lib/reactor_sdk.rb
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'faraday'
|
|
4
|
+
require 'faraday/multipart'
|
|
5
|
+
require 'faraday/net_http'
|
|
6
|
+
require 'faraday/retry'
|
|
7
|
+
require 'json'
|
|
8
|
+
require 'uri'
|
|
9
|
+
|
|
10
|
+
require_relative 'reactor_sdk/version'
|
|
11
|
+
require_relative 'reactor_sdk/error'
|
|
12
|
+
require_relative 'reactor_sdk/configuration'
|
|
13
|
+
require_relative 'reactor_sdk/authentication'
|
|
14
|
+
require_relative 'reactor_sdk/rate_limiter'
|
|
15
|
+
require_relative 'reactor_sdk/connection'
|
|
16
|
+
require_relative 'reactor_sdk/paginator'
|
|
17
|
+
require_relative 'reactor_sdk/resources/base_resource'
|
|
18
|
+
require_relative 'reactor_sdk/resources/company'
|
|
19
|
+
require_relative 'reactor_sdk/resources/property'
|
|
20
|
+
require_relative 'reactor_sdk/resources/environment'
|
|
21
|
+
require_relative 'reactor_sdk/resources/host'
|
|
22
|
+
require_relative 'reactor_sdk/resources/rule'
|
|
23
|
+
require_relative 'reactor_sdk/resources/rule_component'
|
|
24
|
+
require_relative 'reactor_sdk/resources/data_element'
|
|
25
|
+
require_relative 'reactor_sdk/resources/extension'
|
|
26
|
+
require_relative 'reactor_sdk/resources/app_configuration'
|
|
27
|
+
require_relative 'reactor_sdk/resources/callback'
|
|
28
|
+
require_relative 'reactor_sdk/resources/extension_package'
|
|
29
|
+
require_relative 'reactor_sdk/resources/extension_package_usage_authorization'
|
|
30
|
+
require_relative 'reactor_sdk/resources/library'
|
|
31
|
+
require_relative 'reactor_sdk/resources/library_with_resources'
|
|
32
|
+
require_relative 'reactor_sdk/resources/upstream_chain_entry'
|
|
33
|
+
require_relative 'reactor_sdk/resources/upstream_chain'
|
|
34
|
+
require_relative 'reactor_sdk/resources/build'
|
|
35
|
+
require_relative 'reactor_sdk/resources/revision'
|
|
36
|
+
require_relative 'reactor_sdk/resources/audit_event'
|
|
37
|
+
require_relative 'reactor_sdk/resources/note'
|
|
38
|
+
require_relative 'reactor_sdk/resources/profile'
|
|
39
|
+
require_relative 'reactor_sdk/resources/search_results'
|
|
40
|
+
require_relative 'reactor_sdk/resources/secret'
|
|
41
|
+
require_relative 'reactor_sdk/response_parser'
|
|
42
|
+
require_relative 'reactor_sdk/reference_extractor'
|
|
43
|
+
require_relative 'reactor_sdk/resource_metadata'
|
|
44
|
+
require_relative 'reactor_sdk/resource_normalizer'
|
|
45
|
+
require_relative 'reactor_sdk/library_snapshot_builder'
|
|
46
|
+
require_relative 'reactor_sdk/library_comparison_builder'
|
|
47
|
+
require_relative 'reactor_sdk/resources/comprehensive_resource'
|
|
48
|
+
require_relative 'reactor_sdk/resources/comprehensive_rule'
|
|
49
|
+
require_relative 'reactor_sdk/resources/comprehensive_data_element'
|
|
50
|
+
require_relative 'reactor_sdk/resources/comprehensive_extension'
|
|
51
|
+
require_relative 'reactor_sdk/resources/library_snapshot_extension_index'
|
|
52
|
+
require_relative 'reactor_sdk/resources/library_snapshot_index'
|
|
53
|
+
require_relative 'reactor_sdk/resources/library_snapshot'
|
|
54
|
+
require_relative 'reactor_sdk/resources/library_comparison_entry'
|
|
55
|
+
require_relative 'reactor_sdk/resources/library_comparison'
|
|
56
|
+
require_relative 'reactor_sdk/resources/comprehensive_upstream_chain_entry'
|
|
57
|
+
require_relative 'reactor_sdk/resources/comprehensive_upstream_chain'
|
|
58
|
+
require_relative 'reactor_sdk/endpoints/base_endpoint'
|
|
59
|
+
require_relative 'reactor_sdk/endpoints/companies'
|
|
60
|
+
require_relative 'reactor_sdk/endpoints/app_configurations'
|
|
61
|
+
require_relative 'reactor_sdk/endpoints/callbacks'
|
|
62
|
+
require_relative 'reactor_sdk/endpoints/secrets'
|
|
63
|
+
require_relative 'reactor_sdk/endpoints/properties'
|
|
64
|
+
require_relative 'reactor_sdk/endpoints/environments'
|
|
65
|
+
require_relative 'reactor_sdk/endpoints/hosts'
|
|
66
|
+
require_relative 'reactor_sdk/endpoints/rules'
|
|
67
|
+
require_relative 'reactor_sdk/endpoints/rule_components'
|
|
68
|
+
require_relative 'reactor_sdk/endpoints/data_elements'
|
|
69
|
+
require_relative 'reactor_sdk/endpoints/extensions'
|
|
70
|
+
require_relative 'reactor_sdk/endpoints/extension_packages'
|
|
71
|
+
require_relative 'reactor_sdk/endpoints/extension_package_usage_authorizations'
|
|
72
|
+
require_relative 'reactor_sdk/endpoints/libraries'
|
|
73
|
+
require_relative 'reactor_sdk/endpoints/builds'
|
|
74
|
+
require_relative 'reactor_sdk/endpoints/revisions'
|
|
75
|
+
require_relative 'reactor_sdk/endpoints/audit_events'
|
|
76
|
+
require_relative 'reactor_sdk/endpoints/profiles'
|
|
77
|
+
require_relative 'reactor_sdk/endpoints/search'
|
|
78
|
+
require_relative 'reactor_sdk/endpoints/notes'
|
|
79
|
+
require_relative 'reactor_sdk/client'
|
data/reactor_sdk.gemspec
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'lib/reactor_sdk/version'
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |spec|
|
|
6
|
+
spec.name = 'reactor_sdk'
|
|
7
|
+
spec.version = ReactorSDK::VERSION
|
|
8
|
+
spec.authors = ['Dhairya Gabhawala']
|
|
9
|
+
spec.email = ['gabhawaladhairya@gmail.com']
|
|
10
|
+
|
|
11
|
+
spec.summary = 'Ruby SDK for the Adobe Launch Reactor API'
|
|
12
|
+
spec.description = <<~DESC
|
|
13
|
+
A production-ready Ruby SDK for the Adobe Launch (Data Collection)
|
|
14
|
+
Reactor API v1. Handles OAuth Server-to-Server authentication,
|
|
15
|
+
JSON:API response parsing, cursor-based pagination, per-org rate
|
|
16
|
+
limiting, retry logic, and a typed error hierarchy.
|
|
17
|
+
DESC
|
|
18
|
+
spec.homepage = 'https://github.com/dhairyagabha/reactor_sdk'
|
|
19
|
+
spec.license = 'MIT'
|
|
20
|
+
spec.required_ruby_version = '>= 3.2.0'
|
|
21
|
+
|
|
22
|
+
spec.metadata = {
|
|
23
|
+
'source_code_uri' => spec.homepage,
|
|
24
|
+
'documentation_uri' => 'https://reactor-sdk.dhairyagabhawala.com',
|
|
25
|
+
'bug_tracker_uri' => "#{spec.homepage}/issues",
|
|
26
|
+
'changelog_uri' => "#{spec.homepage}/blob/main/CHANGELOG.md",
|
|
27
|
+
'rubygems_mfa_required' => 'true'
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
# Only include what belongs in the published gem
|
|
31
|
+
spec.files = Dir.chdir(__dir__) do
|
|
32
|
+
Dir.glob(%w[
|
|
33
|
+
lib/**/*.rb
|
|
34
|
+
sig/**/*.rbs
|
|
35
|
+
LICENSE.txt
|
|
36
|
+
README.md
|
|
37
|
+
CHANGELOG.md
|
|
38
|
+
reactor_sdk.gemspec
|
|
39
|
+
])
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
spec.require_paths = ['lib']
|
|
43
|
+
|
|
44
|
+
# ── Runtime dependencies ─────────────────────────────────────────
|
|
45
|
+
# HTTP client with middleware support
|
|
46
|
+
spec.add_dependency 'faraday', '~> 2.9'
|
|
47
|
+
# Automatic retry on 429 and 5xx responses
|
|
48
|
+
spec.add_dependency 'faraday-retry', '~> 2.2'
|
|
49
|
+
# Net::HTTP adapter for Faraday
|
|
50
|
+
spec.add_dependency 'faraday-net_http', '~> 3.3'
|
|
51
|
+
# Multipart upload support for extension package archive endpoints
|
|
52
|
+
spec.add_dependency 'faraday-multipart', '~> 1.1'
|
|
53
|
+
|
|
54
|
+
# ── Development dependencies ─────────────────────────────────────
|
|
55
|
+
# Interactive console for local development
|
|
56
|
+
spec.add_development_dependency 'irb', '~> 1.17'
|
|
57
|
+
# Test framework
|
|
58
|
+
spec.add_development_dependency 'rspec', '~> 3.13'
|
|
59
|
+
# Record and replay real HTTP interactions in tests
|
|
60
|
+
spec.add_development_dependency 'vcr', '~> 6.3'
|
|
61
|
+
# Block real HTTP in tests
|
|
62
|
+
spec.add_development_dependency 'webmock', '~> 3.23'
|
|
63
|
+
# Code style enforcement
|
|
64
|
+
spec.add_development_dependency 'rubocop', '~> 1.65'
|
|
65
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 3.0'
|
|
66
|
+
# Documentation generation
|
|
67
|
+
spec.add_development_dependency 'yard', '~> 0.9'
|
|
68
|
+
# Rake task runner
|
|
69
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
|
70
|
+
end
|
data/sig/reactor_sdk.rbs
ADDED
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
module ReactorSDK
|
|
2
|
+
VERSION: String
|
|
3
|
+
|
|
4
|
+
class Configuration
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
class Client
|
|
8
|
+
attr_reader companies: Endpoints::Companies
|
|
9
|
+
attr_reader properties: Endpoints::Properties
|
|
10
|
+
attr_reader app_configurations: Endpoints::AppConfigurations
|
|
11
|
+
attr_reader callbacks: Endpoints::Callbacks
|
|
12
|
+
attr_reader secrets: Endpoints::Secrets
|
|
13
|
+
attr_reader environments: Endpoints::Environments
|
|
14
|
+
attr_reader hosts: Endpoints::Hosts
|
|
15
|
+
attr_reader rules: Endpoints::Rules
|
|
16
|
+
attr_reader rule_components: Endpoints::RuleComponents
|
|
17
|
+
attr_reader data_elements: Endpoints::DataElements
|
|
18
|
+
attr_reader extensions: Endpoints::Extensions
|
|
19
|
+
attr_reader extension_packages: Endpoints::ExtensionPackages
|
|
20
|
+
attr_reader extension_package_usage_authorizations: Endpoints::ExtensionPackageUsageAuthorizations
|
|
21
|
+
attr_reader libraries: Endpoints::Libraries
|
|
22
|
+
attr_reader builds: Endpoints::Builds
|
|
23
|
+
attr_reader audit_events: Endpoints::AuditEvents
|
|
24
|
+
attr_reader revisions: Endpoints::Revisions
|
|
25
|
+
attr_reader profiles: Endpoints::Profiles
|
|
26
|
+
attr_reader search: Endpoints::Search
|
|
27
|
+
attr_reader notes: Endpoints::Notes
|
|
28
|
+
attr_reader config: Configuration
|
|
29
|
+
|
|
30
|
+
def initialize: (
|
|
31
|
+
client_id: String,
|
|
32
|
+
client_secret: String,
|
|
33
|
+
org_id: String,
|
|
34
|
+
?base_url: String,
|
|
35
|
+
?ims_token_url: String,
|
|
36
|
+
?timeout: Integer,
|
|
37
|
+
?logger: untyped,
|
|
38
|
+
?auto_refresh_token: bool
|
|
39
|
+
) -> void
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
module Endpoints
|
|
43
|
+
class BaseEndpoint
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class Companies < BaseEndpoint
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class Properties < BaseEndpoint
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
class AppConfigurations < BaseEndpoint
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class Callbacks < BaseEndpoint
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class Secrets < BaseEndpoint
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
class Environments < BaseEndpoint
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
class Hosts < BaseEndpoint
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
class Rules < BaseEndpoint
|
|
68
|
+
def upstream_chain: (String | Resources::Rule rule_or_id, library_id: String, property_id: String) -> Resources::UpstreamChain
|
|
69
|
+
def find_comprehensive: (String rule_id, library_id: String, property_id: String) -> Resources::ComprehensiveRule
|
|
70
|
+
def comprehensive_upstream_chain: (
|
|
71
|
+
String | Resources::Rule rule_or_id,
|
|
72
|
+
library_id: String,
|
|
73
|
+
property_id: String
|
|
74
|
+
) -> Resources::ComprehensiveUpstreamChain
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
class RuleComponents < BaseEndpoint
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
class DataElements < BaseEndpoint
|
|
81
|
+
def upstream_chain: (String | Resources::DataElement data_element_or_id, library_id: String, property_id: String) -> Resources::UpstreamChain
|
|
82
|
+
def find_comprehensive: (
|
|
83
|
+
String data_element_id,
|
|
84
|
+
library_id: String,
|
|
85
|
+
property_id: String
|
|
86
|
+
) -> Resources::ComprehensiveDataElement
|
|
87
|
+
def comprehensive_upstream_chain: (
|
|
88
|
+
String | Resources::DataElement data_element_or_id,
|
|
89
|
+
library_id: String,
|
|
90
|
+
property_id: String
|
|
91
|
+
) -> Resources::ComprehensiveUpstreamChain
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
class Extensions < BaseEndpoint
|
|
95
|
+
def upstream_chain: (String | Resources::Extension extension_or_id, library_id: String, property_id: String) -> Resources::UpstreamChain
|
|
96
|
+
def find_comprehensive: (
|
|
97
|
+
String extension_id,
|
|
98
|
+
library_id: String,
|
|
99
|
+
property_id: String
|
|
100
|
+
) -> Resources::ComprehensiveExtension
|
|
101
|
+
def comprehensive_upstream_chain: (
|
|
102
|
+
String | Resources::Extension extension_or_id,
|
|
103
|
+
library_id: String,
|
|
104
|
+
property_id: String
|
|
105
|
+
) -> Resources::ComprehensiveUpstreamChain
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
class ExtensionPackages < BaseEndpoint
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
class ExtensionPackageUsageAuthorizations < BaseEndpoint
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
class Libraries < BaseEndpoint
|
|
115
|
+
def find_snapshot: (String library_id, property_id: String) -> Resources::LibrarySnapshot
|
|
116
|
+
def compare: (
|
|
117
|
+
String current_library_id,
|
|
118
|
+
baseline_library_id: String,
|
|
119
|
+
property_id: String
|
|
120
|
+
) -> Resources::LibraryComparison
|
|
121
|
+
def upstream_chain_for_resource: (
|
|
122
|
+
String | Resources::BaseResource resource_or_id,
|
|
123
|
+
library_id: String,
|
|
124
|
+
property_id: String,
|
|
125
|
+
?resource_type: String
|
|
126
|
+
) -> Resources::UpstreamChain
|
|
127
|
+
def comprehensive_upstream_chain_for_resource: (
|
|
128
|
+
String | Resources::BaseResource resource_or_id,
|
|
129
|
+
library_id: String,
|
|
130
|
+
property_id: String,
|
|
131
|
+
?resource_type: String
|
|
132
|
+
) -> Resources::ComprehensiveUpstreamChain
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
class Builds < BaseEndpoint
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
class AuditEvents < BaseEndpoint
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
class Revisions < BaseEndpoint
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
class Profiles < BaseEndpoint
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
class Search < BaseEndpoint
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
class Notes < BaseEndpoint
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
module Resources
|
|
155
|
+
class BaseResource
|
|
156
|
+
attr_reader id: String
|
|
157
|
+
attr_reader type: String
|
|
158
|
+
attr_reader attributes: Hash[untyped, untyped]
|
|
159
|
+
attr_reader meta: Hash[untyped, untyped]
|
|
160
|
+
attr_reader relationships: Hash[untyped, untyped]
|
|
161
|
+
|
|
162
|
+
def initialize: (
|
|
163
|
+
id: String,
|
|
164
|
+
type: String,
|
|
165
|
+
?attributes: Hash[untyped, untyped],
|
|
166
|
+
?meta: Hash[untyped, untyped],
|
|
167
|
+
?relationships: Hash[untyped, untyped]
|
|
168
|
+
) -> void
|
|
169
|
+
def []: (String | Symbol key) -> untyped
|
|
170
|
+
def relationship_data: (String | Symbol name) -> Hash[untyped, untyped]?
|
|
171
|
+
def relationship_id: (String | Symbol name) -> String?
|
|
172
|
+
def relationship_ids: (String | Symbol name) -> Array[String]
|
|
173
|
+
def ==: (untyped other) -> bool
|
|
174
|
+
def to_h: -> Hash[Symbol, untyped]
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
class SearchResults
|
|
178
|
+
attr_reader results: Array[BaseResource]
|
|
179
|
+
attr_reader meta: Hash[untyped, untyped]
|
|
180
|
+
|
|
181
|
+
def initialize: (
|
|
182
|
+
results: Array[BaseResource],
|
|
183
|
+
?meta: Hash[untyped, untyped]
|
|
184
|
+
) -> void
|
|
185
|
+
def each: { (BaseResource) -> untyped } -> Array[BaseResource]
|
|
186
|
+
def total_hits: -> Integer
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
class UpstreamChainEntry
|
|
190
|
+
attr_reader library: BaseResource
|
|
191
|
+
attr_reader stage: String?
|
|
192
|
+
attr_reader resource: BaseResource?
|
|
193
|
+
attr_reader revision_id: String?
|
|
194
|
+
attr_reader revision: Revision?
|
|
195
|
+
|
|
196
|
+
def initialize: (
|
|
197
|
+
library: BaseResource,
|
|
198
|
+
stage: String?,
|
|
199
|
+
resource: BaseResource?,
|
|
200
|
+
revision_id: String?,
|
|
201
|
+
revision: Revision?
|
|
202
|
+
) -> void
|
|
203
|
+
def present?: -> bool
|
|
204
|
+
def entity_snapshot: -> Hash[untyped, untyped]?
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
class UpstreamChain
|
|
208
|
+
attr_reader resource_id: String
|
|
209
|
+
attr_reader resource_type: String?
|
|
210
|
+
attr_reader property_id: String
|
|
211
|
+
attr_reader target_library_id: String
|
|
212
|
+
attr_reader target_resource: BaseResource?
|
|
213
|
+
attr_reader target_revision_id: String?
|
|
214
|
+
attr_reader entries: Array[UpstreamChainEntry]
|
|
215
|
+
|
|
216
|
+
def initialize: (
|
|
217
|
+
resource_id: String,
|
|
218
|
+
resource_type: String?,
|
|
219
|
+
property_id: String,
|
|
220
|
+
target_library_id: String,
|
|
221
|
+
target_resource: BaseResource?,
|
|
222
|
+
target_revision_id: String?,
|
|
223
|
+
entries: Array[UpstreamChainEntry]
|
|
224
|
+
) -> void
|
|
225
|
+
def each: { (UpstreamChainEntry) -> untyped } -> Array[UpstreamChainEntry]
|
|
226
|
+
def nearest_match: -> UpstreamChainEntry?
|
|
227
|
+
def found?: -> bool
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
class ComprehensiveResource
|
|
231
|
+
attr_reader resource: BaseResource
|
|
232
|
+
def associated_records: -> Array[BaseResource]
|
|
233
|
+
def normalized_payload: -> Hash[untyped, untyped]
|
|
234
|
+
def normalized_json: -> String
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
class ComprehensiveRule < ComprehensiveResource
|
|
238
|
+
attr_reader rule_components: Array[RuleComponent]
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
class ComprehensiveDataElement < ComprehensiveResource
|
|
242
|
+
attr_reader referenced_data_elements: Array[DataElement]
|
|
243
|
+
attr_reader impacted_rules: Array[Rule]
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
class ComprehensiveExtension < ComprehensiveResource
|
|
247
|
+
attr_reader data_elements: Array[DataElement]
|
|
248
|
+
attr_reader rule_components: Array[RuleComponent]
|
|
249
|
+
attr_reader rules: Array[Rule]
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
class LibrarySnapshot
|
|
253
|
+
attr_reader property_id: String
|
|
254
|
+
attr_reader library: LibraryWithResources
|
|
255
|
+
attr_reader rules: Array[Rule]
|
|
256
|
+
attr_reader data_elements: Array[DataElement]
|
|
257
|
+
attr_reader extensions: Array[Extension]
|
|
258
|
+
attr_reader rule_components: Array[RuleComponent]
|
|
259
|
+
attr_reader rule_components_by_rule_id: Hash[String, Array[RuleComponent]]
|
|
260
|
+
def top_level_resources: -> Array[BaseResource]
|
|
261
|
+
def all_resources: -> Array[BaseResource]
|
|
262
|
+
def resource_by_id: -> Hash[String, BaseResource]
|
|
263
|
+
def find_resource: (String resource_id) -> BaseResource?
|
|
264
|
+
def rule_components_for_rule: (String | Rule rule_or_id) -> Array[RuleComponent]
|
|
265
|
+
def referenced_data_elements_for: (String | DataElement data_element_or_id) -> Array[DataElement]
|
|
266
|
+
def impacted_rules_for: (String | DataElement data_element_or_id) -> Array[Rule]
|
|
267
|
+
def data_elements_for_extension: (String | Extension extension_or_id) -> Array[DataElement]
|
|
268
|
+
def rule_components_for_extension: (String | Extension extension_or_id) -> Array[RuleComponent]
|
|
269
|
+
def rules_for_extension: (String | Extension extension_or_id) -> Array[Rule]
|
|
270
|
+
def resource_revision_id: (String | BaseResource resource_or_id) -> String?
|
|
271
|
+
def comprehensive_resource: (String resource_id, ?resource_type: String) -> (ComprehensiveRule | ComprehensiveDataElement | ComprehensiveExtension)?
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
class ComprehensiveUpstreamChainEntry
|
|
275
|
+
attr_reader library: BaseResource
|
|
276
|
+
attr_reader stage: String?
|
|
277
|
+
attr_reader resource: BaseResource?
|
|
278
|
+
attr_reader revision_id: String?
|
|
279
|
+
attr_reader revision: Revision?
|
|
280
|
+
attr_reader comprehensive_resource: ComprehensiveResource?
|
|
281
|
+
def present?: -> bool
|
|
282
|
+
def entity_snapshot: -> Hash[untyped, untyped]?
|
|
283
|
+
def normalized_payload: -> Hash[untyped, untyped]?
|
|
284
|
+
def normalized_json: -> String?
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
class ComprehensiveUpstreamChain
|
|
288
|
+
attr_reader resource_id: String
|
|
289
|
+
attr_reader resource_type: String?
|
|
290
|
+
attr_reader property_id: String
|
|
291
|
+
attr_reader target_library_id: String
|
|
292
|
+
attr_reader target_resource: BaseResource?
|
|
293
|
+
attr_reader target_revision_id: String?
|
|
294
|
+
attr_reader target_comprehensive_resource: ComprehensiveResource?
|
|
295
|
+
attr_reader entries: Array[ComprehensiveUpstreamChainEntry]
|
|
296
|
+
def each: { (ComprehensiveUpstreamChainEntry) -> untyped } -> Array[ComprehensiveUpstreamChainEntry]
|
|
297
|
+
def nearest_match: -> ComprehensiveUpstreamChainEntry?
|
|
298
|
+
def found?: -> bool
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
class LibraryComparisonEntry
|
|
302
|
+
attr_reader resource_id: String
|
|
303
|
+
attr_reader resource_type: String
|
|
304
|
+
attr_reader current_library_id: String
|
|
305
|
+
attr_reader baseline_library_id: String
|
|
306
|
+
attr_reader current_resource: BaseResource?
|
|
307
|
+
attr_reader baseline_resource: BaseResource?
|
|
308
|
+
attr_reader current_revision_id: String?
|
|
309
|
+
attr_reader baseline_revision_id: String?
|
|
310
|
+
attr_reader current_comprehensive_resource: ComprehensiveResource?
|
|
311
|
+
attr_reader baseline_comprehensive_resource: ComprehensiveResource?
|
|
312
|
+
def resource_name: -> String?
|
|
313
|
+
def status: -> String
|
|
314
|
+
def added?: -> bool
|
|
315
|
+
def removed?: -> bool
|
|
316
|
+
def modified?: -> bool
|
|
317
|
+
def unchanged?: -> bool
|
|
318
|
+
def changed?: -> bool
|
|
319
|
+
def present_in_current?: -> bool
|
|
320
|
+
def present_in_baseline?: -> bool
|
|
321
|
+
def current_normalized_payload: -> Hash[untyped, untyped]?
|
|
322
|
+
def baseline_normalized_payload: -> Hash[untyped, untyped]?
|
|
323
|
+
def current_normalized_json: -> String
|
|
324
|
+
def baseline_normalized_json: -> String
|
|
325
|
+
def changeset_document: (?position: Integer) -> Hash[Symbol, untyped]
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
class LibraryComparison
|
|
329
|
+
attr_reader current_library_id: String
|
|
330
|
+
attr_reader baseline_library_id: String
|
|
331
|
+
attr_reader property_id: String
|
|
332
|
+
attr_reader current_snapshot: LibrarySnapshot
|
|
333
|
+
attr_reader baseline_snapshot: LibrarySnapshot
|
|
334
|
+
attr_reader entries: Array[LibraryComparisonEntry]
|
|
335
|
+
def current_library: -> LibraryWithResources
|
|
336
|
+
def baseline_library: -> LibraryWithResources
|
|
337
|
+
def each: { (LibraryComparisonEntry) -> untyped } -> Array[LibraryComparisonEntry]
|
|
338
|
+
def added_entries: -> Array[LibraryComparisonEntry]
|
|
339
|
+
def removed_entries: -> Array[LibraryComparisonEntry]
|
|
340
|
+
def modified_entries: -> Array[LibraryComparisonEntry]
|
|
341
|
+
def unchanged_entries: -> Array[LibraryComparisonEntry]
|
|
342
|
+
def changed_entries: -> Array[LibraryComparisonEntry]
|
|
343
|
+
def changeset_documents: (?include_unchanged: bool) -> Array[Hash[Symbol, untyped]]
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
end
|