global-registry-bindings 0.6.1 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/global_registry_bindings/entity/entity_type_methods.rb +16 -18
- data/lib/global_registry_bindings/entity/mdm_methods.rb +11 -12
- data/lib/global_registry_bindings/entity/push_entity_methods.rb +23 -23
- data/lib/global_registry_bindings/entity/push_relationship_methods.rb +18 -18
- data/lib/global_registry_bindings/entity/relationship_type_methods.rb +26 -26
- data/lib/global_registry_bindings/exceptions.rb +7 -2
- data/lib/global_registry_bindings/global_registry_bindings.rb +19 -19
- data/lib/global_registry_bindings/model/delete_entity.rb +4 -4
- data/lib/global_registry_bindings/model/entity.rb +25 -25
- data/lib/global_registry_bindings/model/pull_mdm.rb +5 -5
- data/lib/global_registry_bindings/model/push_entity.rb +4 -4
- data/lib/global_registry_bindings/model/push_relationship.rb +12 -10
- data/lib/global_registry_bindings/model/relationship.rb +18 -18
- data/lib/global_registry_bindings/options/entity_class_options.rb +15 -15
- data/lib/global_registry_bindings/options/entity_instance_options.rb +11 -11
- data/lib/global_registry_bindings/options/entity_options_parser.rb +3 -3
- data/lib/global_registry_bindings/options/relationship_class_options.rb +22 -22
- data/lib/global_registry_bindings/options/relationship_instance_options.rb +12 -12
- data/lib/global_registry_bindings/options/relationship_options_parser.rb +7 -7
- data/lib/global_registry_bindings/options.rb +6 -6
- data/lib/global_registry_bindings/railtie.rb +7 -7
- data/lib/global_registry_bindings/testing.rb +3 -3
- data/lib/global_registry_bindings/version.rb +3 -3
- data/lib/global_registry_bindings/worker.rb +5 -5
- data/lib/global_registry_bindings/workers/delete_entity_worker.rb +3 -3
- data/lib/global_registry_bindings/workers/pull_mdm_id_worker.rb +5 -5
- data/lib/global_registry_bindings/workers/push_entity_worker.rb +6 -6
- data/lib/global_registry_bindings/workers/push_relationship_worker.rb +6 -6
- data/lib/global_registry_bindings.rb +3 -3
- metadata +16 -156
- data/spec/acceptance/global_registry_bindings_spec.rb +0 -191
- data/spec/factories/factories.rb +0 -72
- data/spec/fixtures/get_entities_person.json +0 -8
- data/spec/fixtures/get_entities_person_mdm.json +0 -13
- data/spec/fixtures/get_entities_person_relationship.json +0 -32
- data/spec/fixtures/get_entity_types.json +0 -9
- data/spec/fixtures/get_entity_types_address.json +0 -59
- data/spec/fixtures/get_entity_types_address_partial.json +0 -43
- data/spec/fixtures/get_entity_types_area.json +0 -44
- data/spec/fixtures/get_entity_types_community.json +0 -18
- data/spec/fixtures/get_entity_types_fancy_org.json +0 -43
- data/spec/fixtures/get_entity_types_fancy_org_assignment.json +0 -35
- data/spec/fixtures/get_entity_types_fancy_org_partial.json +0 -35
- data/spec/fixtures/get_entity_types_ministry.json +0 -18
- data/spec/fixtures/get_entity_types_person.json +0 -42
- data/spec/fixtures/get_entity_types_person_partial.json +0 -34
- data/spec/fixtures/get_relationship_types.json +0 -9
- data/spec/fixtures/get_relationship_types_person_fancy_org.json +0 -41
- data/spec/fixtures/get_relationship_types_person_fancy_org_partial.json +0 -33
- data/spec/fixtures/post_entities_community.json +0 -8
- data/spec/fixtures/post_entities_fancy_org.json +0 -8
- data/spec/fixtures/post_entities_fancy_org_parent.json +0 -8
- data/spec/fixtures/post_entities_person.json +0 -8
- data/spec/fixtures/post_entity_types_address.json +0 -9
- data/spec/fixtures/post_entity_types_fancy_org.json +0 -9
- data/spec/fixtures/post_entity_types_person.json +0 -9
- data/spec/fixtures/post_relationship_types_assigned_by.json +0 -16
- data/spec/fixtures/post_relationship_types_community_ministry.json +0 -16
- data/spec/fixtures/post_relationship_types_fancy_org_area.json +0 -16
- data/spec/fixtures/post_relationship_types_person_fancy_org.json +0 -16
- data/spec/fixtures/put_entities_address.json +0 -20
- data/spec/fixtures/put_entities_community_relationship.json +0 -16
- data/spec/fixtures/put_entities_fancy_org_area_relationship.json +0 -8
- data/spec/fixtures/put_entities_fancy_org_assignment_assigned_by.json +0 -20
- data/spec/fixtures/put_entities_fancy_org_relationship.json +0 -17
- data/spec/fixtures/put_entities_person_country_relationship.json +0 -23
- data/spec/fixtures/put_entities_person_relationship.json +0 -29
- data/spec/fixtures/put_entities_relationship.json +0 -8
- data/spec/fixtures/put_entities_relationship_400.json +0 -3
- data/spec/fixtures/put_relationship_types_fields.json +0 -33
- data/spec/fixtures/put_relationship_types_fields_fancy_org_area.json +0 -25
- data/spec/helpers/sidekiq_helpers.rb +0 -14
- data/spec/internal/app/models/address.rb +0 -17
- data/spec/internal/app/models/application_record.rb +0 -5
- data/spec/internal/app/models/area.rb +0 -7
- data/spec/internal/app/models/assignment.rb +0 -21
- data/spec/internal/app/models/community.rb +0 -20
- data/spec/internal/app/models/country.rb +0 -8
- data/spec/internal/app/models/default.rb +0 -6
- data/spec/internal/app/models/namespaced/person/user_edited.rb +0 -8
- data/spec/internal/app/models/namespaced/person.rb +0 -68
- data/spec/internal/app/models/organization.rb +0 -37
- data/spec/internal/config/database.yml +0 -4
- data/spec/internal/config/initializers/global_registry.rb +0 -8
- data/spec/internal/config/routes.rb +0 -5
- data/spec/internal/db/schema.rb +0 -75
- data/spec/internal/db/test.sqlite +0 -0
- data/spec/internal/log/test.log +0 -1457
- data/spec/models/address_spec.rb +0 -30
- data/spec/models/assignment_spec.rb +0 -54
- data/spec/models/organization_spec.rb +0 -125
- data/spec/models/person_spec.rb +0 -191
- data/spec/models/testing_spec.rb +0 -55
- data/spec/models/user_edited_person_spec.rb +0 -14
- data/spec/options/if_unless_spec.rb +0 -147
- data/spec/spec_helper.rb +0 -52
- data/spec/workers/delete_gr_entity_worker_spec.rb +0 -33
- data/spec/workers/pull_mdm_id_worker_spec.rb +0 -133
- data/spec/workers/push_entity_worker_spec.rb +0 -506
- data/spec/workers/push_relationship_worker_spec.rb +0 -503
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e4acb61aa233cff5f2948d77c78a90e208c29cf0a1e88e1335749beec9c5059
|
4
|
+
data.tar.gz: 3e013e74ff1c6afe972cbe49983a72a50c04433ebd21533aa29865a6eba4ae34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0c2cb36c94004bd09186cb8ce24344826b0dfdf54f89fed7fc639c8b2fac7fc6f14942bb52a0ac35d89c8ad574d67eba32a215197d1d59bd0b69df498c68e8b
|
7
|
+
data.tar.gz: d74b7b86153c1a2024d4bd2cf3457ac907a4cc392b45e7a2c4d860fd06e6342ee4cffbf21f2ae88944ac8c10b269db5fd52596fe963490fadd19398b5233e3b6
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "global_registry"
|
4
4
|
|
5
|
-
module GlobalRegistry
|
6
|
-
module Bindings
|
7
|
-
module Entity
|
5
|
+
module GlobalRegistry # :nodoc:
|
6
|
+
module Bindings # :nodoc:
|
7
|
+
module Entity # :nodoc:
|
8
8
|
module EntityTypeMethods
|
9
9
|
extend ActiveSupport::Concern
|
10
10
|
|
@@ -12,15 +12,13 @@ module GlobalRegistry #:nodoc:
|
|
12
12
|
return unless global_registry_entity.ensure_type?
|
13
13
|
parent_entity_id = parent_entity_type_id
|
14
14
|
entity_type = Rails.cache.fetch(entity_type_cache_key, expires_in: 1.hour) do
|
15
|
-
GlobalRegistry::EntityType.get(
|
16
|
-
|
15
|
+
GlobalRegistry::EntityType.get("filters[name]" => global_registry_entity.type,
|
16
|
+
"filters[parent_id]" => parent_entity_id)["entity_types"]&.first
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
field_type: 'entity' })['entity_type']
|
23
|
-
end
|
19
|
+
entity_type ||= GlobalRegistry::EntityType.post(entity_type: {name: global_registry_entity.type,
|
20
|
+
parent_id: parent_entity_id,
|
21
|
+
field_type: "entity"})["entity_type"]
|
24
22
|
|
25
23
|
push_entity_type_fields_to_global_registry(entity_type)
|
26
24
|
entity_type
|
@@ -29,13 +27,13 @@ module GlobalRegistry #:nodoc:
|
|
29
27
|
private
|
30
28
|
|
31
29
|
def push_entity_type_fields_to_global_registry(entity_type)
|
32
|
-
existing_fields = entity_type[
|
30
|
+
existing_fields = entity_type["fields"]&.collect { |f| f["name"].to_sym } || []
|
33
31
|
model.entity_columns_to_push
|
34
|
-
|
35
|
-
|
36
|
-
GlobalRegistry::EntityType.post(entity_type: {
|
37
|
-
|
38
|
-
|
32
|
+
.except(*existing_fields)
|
33
|
+
.each do |name, type|
|
34
|
+
GlobalRegistry::EntityType.post(entity_type: {name: name,
|
35
|
+
parent_id: entity_type["id"],
|
36
|
+
field_type: type})
|
39
37
|
end
|
40
38
|
end
|
41
39
|
|
@@ -44,7 +42,7 @@ module GlobalRegistry #:nodoc:
|
|
44
42
|
return if parent.blank? || global_registry_entity.parent_is_self?
|
45
43
|
worker = GlobalRegistry::Bindings::Workers::PushEntityWorker.new parent
|
46
44
|
parent_entity_type = worker.send :push_entity_type_to_global_registry
|
47
|
-
parent_entity_type&.dig(
|
45
|
+
parent_entity_type&.dig("id")
|
48
46
|
end
|
49
47
|
|
50
48
|
def entity_type_cache_key
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module GlobalRegistry
|
4
|
-
module Bindings
|
5
|
-
module Entity
|
3
|
+
module GlobalRegistry # :nodoc:
|
4
|
+
module Bindings # :nodoc:
|
5
|
+
module Entity # :nodoc:
|
6
6
|
module MdmMethods
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
@@ -11,23 +11,22 @@ module GlobalRegistry #:nodoc:
|
|
11
11
|
# Record missing Global Registry ID, enqueue it to be pushed.
|
12
12
|
model.push_entity_to_global_registry_async
|
13
13
|
raise GlobalRegistry::Bindings::RecordMissingGlobalRegistryId,
|
14
|
-
|
14
|
+
"#{model.class.name}(#{model.id}) has no #{global_registry_entity.id_column}; will retry"
|
15
15
|
end
|
16
|
-
entity = GlobalRegistry::Entity.find(global_registry_entity.id_value,
|
16
|
+
entity = GlobalRegistry::Entity.find(global_registry_entity.id_value, "filters[owned_by]" => "mdm")
|
17
17
|
mdm_entity_id = dig_global_registry_mdm_id_from_entity(entity, global_registry_entity.type.to_s)
|
18
18
|
unless mdm_entity_id
|
19
19
|
raise GlobalRegistry::Bindings::EntityMissingMdmId,
|
20
|
-
|
21
|
-
|
20
|
+
"GR entity #{global_registry_entity.id_value} for #{model.class.name}(#{model.id}) has no mdm id; " \
|
21
|
+
"will retry"
|
22
22
|
end
|
23
|
-
# rubocop:disable Rails/SkipsModelValidations
|
24
|
-
model.update_column(global_registry_entity.mdm_id_column, mdm_entity_id)
|
23
|
+
model.update_column(global_registry_entity.mdm_id_column, mdm_entity_id) # rubocop:disable Rails/SkipsModelValidations
|
25
24
|
end
|
26
25
|
|
27
26
|
def dig_global_registry_mdm_id_from_entity(entity, type)
|
28
|
-
Array.wrap(entity.dig(
|
29
|
-
|
30
|
-
|
27
|
+
Array.wrap(entity.dig("entity", type, "master_#{type}:relationship"))
|
28
|
+
.first # although there should not be more than one
|
29
|
+
.try(:[], "master_#{type}")
|
31
30
|
end
|
32
31
|
end
|
33
32
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "deepsort"
|
4
|
+
require "digest/md5"
|
5
5
|
|
6
|
-
module GlobalRegistry
|
7
|
-
module Bindings
|
8
|
-
module Entity
|
6
|
+
module GlobalRegistry # :nodoc:
|
7
|
+
module Bindings # :nodoc:
|
8
|
+
module Entity # :nodoc:
|
9
9
|
module PushEntityMethods
|
10
10
|
extend ActiveSupport::Concern
|
11
11
|
|
@@ -25,7 +25,7 @@ module GlobalRegistry #:nodoc:
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def update_entity_in_global_registry
|
28
|
-
entity_attributes = {
|
28
|
+
entity_attributes = {global_registry_entity.type => model.entity_attributes_to_push}
|
29
29
|
GlobalRegistry::Entity.put(global_registry_entity.id_value, entity: entity_attributes)
|
30
30
|
update_fingerprint
|
31
31
|
rescue RestClient::ResourceNotFound
|
@@ -35,12 +35,12 @@ module GlobalRegistry #:nodoc:
|
|
35
35
|
|
36
36
|
def create_entity_in_global_registry
|
37
37
|
ensure_parent_entity_has_global_registry_id! if global_registry_entity.parent.present?
|
38
|
-
entity_attributes = {
|
38
|
+
entity_attributes = {global_registry_entity.type => model.entity_attributes_to_push}
|
39
39
|
entity = GlobalRegistry::Entity.post(entity: entity_attributes)
|
40
|
-
global_registry_entity.id_value = dig_global_registry_id_from_entity(entity[
|
41
|
-
|
40
|
+
global_registry_entity.id_value = dig_global_registry_id_from_entity(entity["entity"],
|
41
|
+
global_registry_entity.type)
|
42
42
|
model.update_column(global_registry_entity.id_column, # rubocop:disable Rails/SkipsModelValidations
|
43
|
-
|
43
|
+
global_registry_entity.id_value)
|
44
44
|
update_fingerprint
|
45
45
|
end
|
46
46
|
|
@@ -50,35 +50,35 @@ module GlobalRegistry #:nodoc:
|
|
50
50
|
ensure_parent_entity_has_global_registry_id!
|
51
51
|
entity_attributes = {
|
52
52
|
global_registry_entity.parent_type => {
|
53
|
-
client_integration_id
|
53
|
+
:client_integration_id => global_registry_entity.parent.id,
|
54
54
|
global_registry_entity.type => model.entity_attributes_to_push
|
55
55
|
}
|
56
56
|
}
|
57
57
|
entity = GlobalRegistry::Entity.put(global_registry_entity.parent_id_value, entity: entity_attributes)
|
58
|
-
global_registry_entity.id_value = dig_global_registry_id_from_entity(entity[
|
59
|
-
|
60
|
-
|
58
|
+
global_registry_entity.id_value = dig_global_registry_id_from_entity(entity["entity"],
|
59
|
+
global_registry_entity.type,
|
60
|
+
global_registry_entity.parent_type)
|
61
61
|
model.update_column(global_registry_entity.id_column, # rubocop:disable Rails/SkipsModelValidations
|
62
|
-
|
62
|
+
global_registry_entity.id_value)
|
63
63
|
update_fingerprint
|
64
64
|
end
|
65
65
|
|
66
66
|
def dig_global_registry_id_from_entity(entity, type, parent_type = nil)
|
67
|
-
return entity&.dig(type.to_s,
|
67
|
+
return entity&.dig(type.to_s, "id") unless parent_type
|
68
68
|
Array.wrap(entity&.dig(parent_type.to_s, type.to_s)).detect do |item|
|
69
|
-
item[
|
70
|
-
end&.dig(
|
69
|
+
item["client_integration_id"] == model.id.to_s
|
70
|
+
end&.dig("id")
|
71
71
|
end
|
72
72
|
|
73
73
|
def ensure_parent_entity_has_global_registry_id!
|
74
74
|
return unless (global_registry_entity.parent_is_self? && global_registry_entity.parent_id_value.blank?) ||
|
75
|
-
|
75
|
+
global_registry_entity.parent_id_value.blank?
|
76
76
|
# Push parent entity if it exists and is missing global_registry_id
|
77
77
|
global_registry_entity.parent.push_entity_to_global_registry_async
|
78
78
|
raise GlobalRegistry::Bindings::ParentEntityMissingGlobalRegistryId,
|
79
|
-
|
80
|
-
|
81
|
-
|
79
|
+
"#{model.class.name}(#{model.id}) has parent entity " \
|
80
|
+
"#{global_registry_entity.parent.class.name}(#{global_registry_entity.parent.id}) missing " \
|
81
|
+
"global_registry_id; will retry."
|
82
82
|
end
|
83
83
|
|
84
84
|
def entity_fingerprint
|
@@ -89,7 +89,7 @@ module GlobalRegistry #:nodoc:
|
|
89
89
|
def update_fingerprint
|
90
90
|
return if global_registry_entity.fingerprint_column.blank?
|
91
91
|
model.update_column(global_registry_entity.fingerprint_column, # rubocop:disable Rails/SkipsModelValidations
|
92
|
-
|
92
|
+
entity_fingerprint)
|
93
93
|
end
|
94
94
|
|
95
95
|
def fingerprints_match?
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "global_registry"
|
4
|
+
require "global_registry_bindings/workers/delete_entity_worker"
|
5
5
|
|
6
|
-
module GlobalRegistry
|
7
|
-
module Bindings
|
8
|
-
module Entity
|
6
|
+
module GlobalRegistry # :nodoc:
|
7
|
+
module Bindings # :nodoc:
|
8
|
+
module Entity # :nodoc:
|
9
9
|
module PushRelationshipMethods
|
10
10
|
extend ActiveSupport::Concern
|
11
11
|
|
@@ -46,15 +46,15 @@ module GlobalRegistry #:nodoc:
|
|
46
46
|
|
47
47
|
def global_registry_relationship_entity_id_from_entity(entity)
|
48
48
|
relationships = Array.wrap entity.dig(
|
49
|
-
|
49
|
+
"entity",
|
50
50
|
relationship.primary_type.to_s,
|
51
51
|
"#{relationship.related_name}:relationship"
|
52
52
|
)
|
53
53
|
relationships.detect do |rel|
|
54
|
-
cid = rel[
|
55
|
-
cid = cid[
|
54
|
+
cid = rel["client_integration_id"]
|
55
|
+
cid = cid["value"] if cid.is_a?(Hash)
|
56
56
|
cid == relationship.client_integration_id.to_s
|
57
|
-
end&.dig(
|
57
|
+
end&.dig("relationship_entity_id")
|
58
58
|
end
|
59
59
|
|
60
60
|
def ensure_related_entities_have_global_registry_ids!
|
@@ -68,8 +68,8 @@ module GlobalRegistry #:nodoc:
|
|
68
68
|
names << push_related_to_global_registry
|
69
69
|
end
|
70
70
|
raise GlobalRegistry::Bindings::RelatedEntityMissingGlobalRegistryId,
|
71
|
-
|
72
|
-
|
71
|
+
"#{model.class.name}(#{model.id}) has related entities [#{names.compact.join ", "}] missing " \
|
72
|
+
"global_registry_id; will retry."
|
73
73
|
end
|
74
74
|
|
75
75
|
def push_primary_to_global_registry
|
@@ -89,12 +89,12 @@ module GlobalRegistry #:nodoc:
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def relationship_entity
|
92
|
-
{
|
92
|
+
{entity: {relationship.primary_type => {
|
93
93
|
"#{relationship.related_name}:relationship" =>
|
94
94
|
model.relationship_attributes_to_push(type)
|
95
|
-
|
95
|
+
.merge(relationship.related_type =>
|
96
96
|
relationship.related_id_value)
|
97
|
-
}, client_integration_id
|
97
|
+
}, :client_integration_id => relationship.primary.id}}
|
98
98
|
end
|
99
99
|
|
100
100
|
def put_relationship_to_global_registry
|
@@ -108,7 +108,7 @@ module GlobalRegistry #:nodoc:
|
|
108
108
|
)
|
109
109
|
rescue RestClient::BadRequest => e
|
110
110
|
response = JSON.parse(e.response.body)
|
111
|
-
raise unless
|
111
|
+
raise unless /^Validation failed:.*already exists$/i.match?(response["error"])
|
112
112
|
# Delete relationship entity and retry on 400 Bad Request (client_integration_id already exists)
|
113
113
|
delete_relationship_from_global_registry
|
114
114
|
end
|
@@ -120,9 +120,9 @@ module GlobalRegistry #:nodoc:
|
|
120
120
|
)
|
121
121
|
return unless and_retry
|
122
122
|
raise GlobalRegistry::Bindings::RelatedEntityExistsWithCID,
|
123
|
-
|
124
|
-
|
125
|
-
|
123
|
+
"#{model.class.name}(#{model.id}) #{relationship.related_name}" \
|
124
|
+
":relationship already exists with client_integration_id(" \
|
125
|
+
"#{relationship.client_integration_id}). Will delete and retry."
|
126
126
|
end
|
127
127
|
end
|
128
128
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "global_registry"
|
4
4
|
|
5
|
-
module GlobalRegistry
|
6
|
-
module Bindings
|
7
|
-
module Entity
|
5
|
+
module GlobalRegistry # :nodoc:
|
6
|
+
module Bindings # :nodoc:
|
7
|
+
module Entity # :nodoc:
|
8
8
|
module RelationshipTypeMethods
|
9
9
|
extend ActiveSupport::Concern
|
10
10
|
|
@@ -17,9 +17,9 @@ module GlobalRegistry #:nodoc:
|
|
17
17
|
|
18
18
|
relationship_type = Rails.cache.fetch(relationship_type_cache_key, expires_in: 1.hour) do
|
19
19
|
rel = GlobalRegistry::RelationshipType.get(
|
20
|
-
|
21
|
-
)[
|
22
|
-
r[
|
20
|
+
"filters[between]" => "#{primary_entity_type_id},#{related_entity_type_id}"
|
21
|
+
)["relationship_types"].detect do |r|
|
22
|
+
r["relationship1"]["relationship_name"] ==
|
23
23
|
global_registry_relationship(type).primary_name.to_s
|
24
24
|
end
|
25
25
|
unless rel
|
@@ -30,7 +30,7 @@ module GlobalRegistry #:nodoc:
|
|
30
30
|
relationship1: global_registry_relationship(type).primary_name,
|
31
31
|
relationship2: global_registry_relationship(type).related_name
|
32
32
|
}
|
33
|
-
)[
|
33
|
+
)["relationship_type"]
|
34
34
|
rename_relationship_entity_type(rel)
|
35
35
|
end
|
36
36
|
rel
|
@@ -48,10 +48,10 @@ module GlobalRegistry #:nodoc:
|
|
48
48
|
unless entity_type
|
49
49
|
primary_type = global_registry_relationship(type).primary_type
|
50
50
|
entity_type = GlobalRegistry::EntityType.get(
|
51
|
-
|
52
|
-
)[
|
51
|
+
"filters[name]" => primary_type
|
52
|
+
)["entity_types"]&.first
|
53
53
|
end
|
54
|
-
entity_type&.dig(
|
54
|
+
entity_type&.dig("id")
|
55
55
|
end
|
56
56
|
|
57
57
|
def related_associated_entity_type_id
|
@@ -59,37 +59,37 @@ module GlobalRegistry #:nodoc:
|
|
59
59
|
related_type = global_registry_relationship(type).related_type
|
60
60
|
# remote foreign_key doesn't have a model class in rails. Short-circuit and fetch entity_type by name
|
61
61
|
entity_type = GlobalRegistry::EntityType.get(
|
62
|
-
|
63
|
-
)[
|
62
|
+
"filters[name]" => related_type
|
63
|
+
)["entity_types"]&.first
|
64
64
|
unless entity_type
|
65
65
|
raise GlobalRegistry::Bindings::RelatedEntityTypeMissing,
|
66
|
-
|
67
|
-
|
66
|
+
"#{model.class.name}(#{model.id}) has unknown related entity_type(#{related_type}) in " \
|
67
|
+
"global_registry. Entity Type must exist in Global Registry for remote foreign_key relationship."
|
68
68
|
end
|
69
|
-
return entity_type&.dig(
|
69
|
+
return entity_type&.dig("id")
|
70
70
|
end
|
71
71
|
related_worker =
|
72
72
|
GlobalRegistry::Bindings::Workers::PushEntityWorker.new global_registry_relationship(type).related
|
73
|
-
related_worker.send(:push_entity_type_to_global_registry)&.dig(
|
73
|
+
related_worker.send(:push_entity_type_to_global_registry)&.dig("id")
|
74
74
|
end
|
75
75
|
|
76
76
|
def push_global_registry_relationship_type_fields(relationship_type)
|
77
|
-
existing_fields = relationship_type[
|
77
|
+
existing_fields = relationship_type["fields"]&.collect { |f| f["name"].to_sym } || []
|
78
78
|
fields = model.relationship_columns_to_push(type)
|
79
|
-
|
80
|
-
|
79
|
+
.except(*existing_fields)
|
80
|
+
.map { |name, type| {name: name, field_type: type} }
|
81
81
|
return if fields.empty?
|
82
|
-
relationship_type = GlobalRegistry::RelationshipType.put(relationship_type[
|
83
|
-
|
84
|
-
&.dig(
|
82
|
+
relationship_type = GlobalRegistry::RelationshipType.put(relationship_type["id"],
|
83
|
+
relationship_type: {fields: fields})
|
84
|
+
&.dig("relationship_type")
|
85
85
|
Rails.cache.write(relationship_type_cache_key, relationship_type, expires_in: 1.hour) if relationship_type
|
86
86
|
end
|
87
87
|
|
88
88
|
def rename_relationship_entity_type(relationship_type)
|
89
89
|
return unless global_registry_relationship(type).rename_entity_type?
|
90
|
-
entity_type_id = relationship_type&.dig(
|
91
|
-
GlobalRegistry::EntityType.put(entity_type_id, entity_type: {
|
92
|
-
|
90
|
+
entity_type_id = relationship_type&.dig("relationship_entity_type_id")
|
91
|
+
GlobalRegistry::EntityType.put(entity_type_id, entity_type: {id: entity_type_id,
|
92
|
+
name: global_registry_relationship(type).type})
|
93
93
|
end
|
94
94
|
|
95
95
|
def relationship_type_cache_key
|
@@ -1,12 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module GlobalRegistry
|
4
|
-
module Bindings
|
3
|
+
module GlobalRegistry # :nodoc:
|
4
|
+
module Bindings # :nodoc:
|
5
5
|
class RecordMissingGlobalRegistryId < StandardError; end
|
6
|
+
|
6
7
|
class EntityMissingMdmId < StandardError; end
|
8
|
+
|
7
9
|
class RelatedEntityMissingGlobalRegistryId < StandardError; end
|
10
|
+
|
8
11
|
class ParentEntityMissingGlobalRegistryId < StandardError; end
|
12
|
+
|
9
13
|
class RelatedEntityExistsWithCID < StandardError; end
|
14
|
+
|
10
15
|
class RelatedEntityTypeMissing < StandardError; end
|
11
16
|
end
|
12
17
|
end
|
@@ -1,33 +1,33 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
3
|
+
require "active_support/core_ext"
|
4
|
+
require "global_registry"
|
5
|
+
require "global_registry_bindings/exceptions"
|
6
|
+
require "global_registry_bindings/options"
|
7
|
+
require "global_registry_bindings/options/entity_options_parser"
|
8
|
+
require "global_registry_bindings/options/relationship_options_parser"
|
9
|
+
require "global_registry_bindings/model/entity"
|
10
|
+
require "global_registry_bindings/model/push_entity"
|
11
|
+
require "global_registry_bindings/model/push_relationship"
|
12
|
+
require "global_registry_bindings/model/delete_entity"
|
13
|
+
require "global_registry_bindings/model/pull_mdm"
|
14
|
+
require "global_registry_bindings/model/relationship"
|
15
|
+
require "global_registry_bindings/worker"
|
16
16
|
|
17
|
-
module GlobalRegistry
|
18
|
-
module Bindings
|
17
|
+
module GlobalRegistry # :nodoc:
|
18
|
+
module Bindings # :nodoc:
|
19
19
|
def global_registry_bindings(options = {})
|
20
20
|
options[:binding] ||= :entity
|
21
21
|
unless method_defined? :_global_registry_bindings_options
|
22
22
|
class_attribute :_global_registry_bindings_options
|
23
|
-
self._global_registry_bindings_options = {
|
23
|
+
self._global_registry_bindings_options = {entity: nil, relationships: {}}
|
24
24
|
end
|
25
25
|
if options[:binding] == :entity
|
26
26
|
global_registry_bindings_entity options
|
27
27
|
elsif options[:binding] == :relationship
|
28
28
|
global_registry_bindings_relationship options
|
29
29
|
else
|
30
|
-
raise ArgumentError,
|
30
|
+
raise ArgumentError, ":binding option must be :entity or :relationship"
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -35,10 +35,10 @@ module GlobalRegistry #:nodoc:
|
|
35
35
|
|
36
36
|
def global_registry_bindings_entity(options = {})
|
37
37
|
if _global_registry_bindings_options[:entity].present?
|
38
|
-
raise
|
38
|
+
raise "#global_registry_bindings with :entity binding called more than once."
|
39
39
|
end
|
40
40
|
_global_registry_bindings_options[:entity] = GlobalRegistry::Bindings::Options::EntityOptionsParser.new(self)
|
41
|
-
|
41
|
+
.parse(options)
|
42
42
|
include Options unless respond_to? :global_registry_entity
|
43
43
|
global_registry_bindings_entity_includes
|
44
44
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "global_registry_bindings/workers/delete_entity_worker"
|
4
4
|
|
5
|
-
module GlobalRegistry
|
6
|
-
module Bindings
|
7
|
-
module Model
|
5
|
+
module GlobalRegistry # :nodoc:
|
6
|
+
module Bindings # :nodoc:
|
7
|
+
module Model # :nodoc:
|
8
8
|
module DeleteEntity
|
9
9
|
extend ActiveSupport::Concern
|
10
10
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module GlobalRegistry
|
4
|
-
module Bindings
|
5
|
-
module Model
|
3
|
+
module GlobalRegistry # :nodoc:
|
4
|
+
module Bindings # :nodoc:
|
5
|
+
module Model # :nodoc:
|
6
6
|
module Entity
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
@@ -11,7 +11,7 @@ module GlobalRegistry #:nodoc:
|
|
11
11
|
value_for_global_registry(name, type)
|
12
12
|
end.compact.to_h
|
13
13
|
entity_attributes[:client_integration_id] = id unless global_registry_entity.exclude
|
14
|
-
|
14
|
+
.include?(:client_integration_id)
|
15
15
|
if respond_to?(:updated_at) && updated_at.present?
|
16
16
|
entity_attributes[:client_updated_at] = updated_at.to_s(:db)
|
17
17
|
end
|
@@ -25,13 +25,13 @@ module GlobalRegistry #:nodoc:
|
|
25
25
|
value = send(name)
|
26
26
|
return [name, value] if value.nil?
|
27
27
|
value = case type
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
when :datetime, :date
|
29
|
+
value.to_s(:db)
|
30
|
+
when :boolean
|
31
|
+
value ? "true" : "false"
|
32
|
+
else
|
33
|
+
value.to_s.strip
|
34
|
+
end
|
35
35
|
[name, value]
|
36
36
|
rescue ::NoMethodError
|
37
37
|
nil
|
@@ -39,26 +39,26 @@ module GlobalRegistry #:nodoc:
|
|
39
39
|
|
40
40
|
def entity_columns_to_push
|
41
41
|
@columns_to_push ||= if global_registry_entity.include_all_columns?
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
42
|
+
self
|
43
|
+
.class
|
44
|
+
.columns
|
45
|
+
.collect do |c|
|
46
|
+
{c.name.underscore.to_sym => normalize_entity_column_type(c.type, c.name)}
|
47
|
+
end # rubocop:disable Style/MultilineBlockChain
|
48
|
+
.reduce(&:merge)
|
49
|
+
.except(*global_registry_entity.exclude)
|
50
|
+
.merge(global_registry_entity.fields)
|
51
|
+
else
|
52
|
+
global_registry_entity.fields
|
53
|
+
end
|
54
54
|
end
|
55
55
|
|
56
56
|
protected
|
57
57
|
|
58
58
|
def normalize_entity_column_type(type, name)
|
59
|
-
if type.to_s ==
|
59
|
+
if type.to_s == "text"
|
60
60
|
:string
|
61
|
-
elsif name.ends_with?(
|
61
|
+
elsif name.ends_with?("_id")
|
62
62
|
:uuid
|
63
63
|
else
|
64
64
|
type
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "global_registry_bindings/workers/pull_mdm_id_worker"
|
4
4
|
|
5
|
-
module GlobalRegistry
|
6
|
-
module Bindings
|
7
|
-
module Model
|
5
|
+
module GlobalRegistry # :nodoc:
|
6
|
+
module Bindings # :nodoc:
|
7
|
+
module Model # :nodoc:
|
8
8
|
module PullMdm
|
9
9
|
extend ActiveSupport::Concern
|
10
10
|
|
@@ -17,7 +17,7 @@ module GlobalRegistry #:nodoc:
|
|
17
17
|
return if global_registry_entity.condition?(:if)
|
18
18
|
return unless global_registry_entity.condition?(:unless)
|
19
19
|
"::GlobalRegistry::Bindings::Workers::#{global_registry_entity.mdm_worker_class_name}"
|
20
|
-
.constantize
|
20
|
+
.constantize.perform_async(self.class.name, id)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "global_registry_bindings/workers/push_entity_worker"
|
4
4
|
|
5
|
-
module GlobalRegistry
|
6
|
-
module Bindings
|
7
|
-
module Model
|
5
|
+
module GlobalRegistry # :nodoc:
|
6
|
+
module Bindings # :nodoc:
|
7
|
+
module Model # :nodoc:
|
8
8
|
module PushEntity
|
9
9
|
extend ActiveSupport::Concern
|
10
10
|
|