From aaa5d31971ebf2b429efea3c869a8e132f9d0836 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 16 Oct 2017 21:50:56 +0200 Subject: Refs: #4727@3h; Specing and implementing lib function to clone ComplianceControlSet --- lib/compliance_control_set_cloner.rb | 89 ++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 lib/compliance_control_set_cloner.rb (limited to 'lib') diff --git a/lib/compliance_control_set_cloner.rb b/lib/compliance_control_set_cloner.rb new file mode 100644 index 000000000..50c757a9f --- /dev/null +++ b/lib/compliance_control_set_cloner.rb @@ -0,0 +1,89 @@ +class ComplianceControlSetCloner + + # Naming Convention: As we are in a domain with quite long names we + # abbreviate compliance_control to cc and + # compliance_check to cck iff used as prefixes. + + attr_reader :source_set_id + + def copy source_set_id + @source_set_id = source_set_id + copy_set + end + + + private + + # Workers + # ------- + + # Copy Set: + def copy_set + # Force lazy creation of target_set, just in case source_set is _empty_. + target_set + copy_controls + copy_blocks + end + + # Copy Blocks: + def copy_block source_block + target_set.compliance_control_blocks.create( + name: name_of_copy(:compliance_control_blocks, source_block.name), + condition_attributes: source_block.condition_attributes).tap do | target_block | + relink_checks_to_block source_block, target_block + end + end + def copy_blocks + source_set.compliance_control_blocks.order(:id).each(&method(:copy_block)) + end + def relink_checks_to_block source_block, target_block + source_block + .compliance_controls + .order(:id) + .each do | source_control | + control_id_map[source_control.id] + .update(compliance_control_block_id: target_block.id) + end + end + + # Copy Controls: + def copy_controls + source_set.compliance_controls.order(:id).each(&method(:copy_control)) + end + def copy_control(compliance_control) + target_set.compliance_controls.create( + code: compliance_control.code, + comment: compliance_control.comment, + control_attributes: compliance_control.control_attributes, + criticity: compliance_control.criticity, + name: name_of_copy(:compliance_controls, compliance_control.name), + origin_code: compliance_control.origin_code, + type: compliance_control.type + ).tap do | control | + control_id_map.update compliance_control.id => control + end + end + + def name_of_copy resource, name + [I18n.t("#{resource}.clone.prefix"), name].join(' ') + end + + # Lazy Values + # ----------- + def source_set + @__source_set__ ||= ComplianceControlSet.find(source_set_id) + end + def target_set + @__target_set__ ||= ComplianceControlSet.create!( + organisation: source_set.organisation, + name: name_of_copy(:compliance_control_sets, source_set.name) + ) + end + def control_id_map + # Map: compliance_control_id -> compliance_control (origin_id -> copied object) + @__control_id_to_check__ ||= Hash.new + end + def referential + @__referential__ ||= Referential.find(referential_id) + end +end -- cgit v1.2.3 From 8fffc6dd27175b20cc18c246a10151bc98bba4ee Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 17 Oct 2017 10:32:33 +0200 Subject: Refs: #4727@2h; Debugged test setup to comply to new validation --- lib/compliance_control_set_cloner.rb | 1 + 1 file changed, 1 insertion(+) (limited to 'lib') diff --git a/lib/compliance_control_set_cloner.rb b/lib/compliance_control_set_cloner.rb index 50c757a9f..3856ce25e 100644 --- a/lib/compliance_control_set_cloner.rb +++ b/lib/compliance_control_set_cloner.rb @@ -58,6 +58,7 @@ class ComplianceControlSetCloner criticity: compliance_control.criticity, name: name_of_copy(:compliance_controls, compliance_control.name), origin_code: compliance_control.origin_code, + target: compliance_control.target, type: compliance_control.type ).tap do | control | control_id_map.update compliance_control.id => control -- cgit v1.2.3 From 0b744d48fdc84445f593114fe61baaafca4e17f4 Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 17 Oct 2017 12:28:35 +0200 Subject: Fixes: #4727@0.1h; Added organisation to clone for and rebased master --- lib/compliance_control_set_cloner.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/compliance_control_set_cloner.rb b/lib/compliance_control_set_cloner.rb index 3856ce25e..1cf58a38d 100644 --- a/lib/compliance_control_set_cloner.rb +++ b/lib/compliance_control_set_cloner.rb @@ -4,10 +4,11 @@ class ComplianceControlSetCloner # abbreviate compliance_control to cc and # compliance_check to cck iff used as prefixes. - attr_reader :source_set_id - - def copy source_set_id + attr_reader :organisation_id, :source_set_id + + def copy source_set_id, organisation_id @source_set_id = source_set_id + @organisation_id = organisation_id copy_set end @@ -71,12 +72,15 @@ class ComplianceControlSetCloner # Lazy Values # ----------- + def organisation + @__organisation__ ||= Organisation.find(organisation_id) + end def source_set @__source_set__ ||= ComplianceControlSet.find(source_set_id) end def target_set @__target_set__ ||= ComplianceControlSet.create!( - organisation: source_set.organisation, + organisation: organisation, name: name_of_copy(:compliance_control_sets, source_set.name) ) end -- cgit v1.2.3 From 34e17a46d1564aafb05a4fb7e123188df58bc297 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 23 Oct 2017 11:41:49 +0200 Subject: Hotfix ComplianceControlSet.clone --- lib/compliance_control_set_cloner.rb | 1 - 1 file changed, 1 deletion(-) (limited to 'lib') diff --git a/lib/compliance_control_set_cloner.rb b/lib/compliance_control_set_cloner.rb index 1cf58a38d..12e1eccb5 100644 --- a/lib/compliance_control_set_cloner.rb +++ b/lib/compliance_control_set_cloner.rb @@ -59,7 +59,6 @@ class ComplianceControlSetCloner criticity: compliance_control.criticity, name: name_of_copy(:compliance_controls, compliance_control.name), origin_code: compliance_control.origin_code, - target: compliance_control.target, type: compliance_control.type ).tap do | control | control_id_map.update compliance_control.id => control -- cgit v1.2.3 From 5e5d06c815ea0b67c4e970011470dd7ac4a42431 Mon Sep 17 00:00:00 2001 From: Luc Donnet Date: Tue, 24 Oct 2017 12:40:04 +0200 Subject: Make erd patch for multi relationships and add merge png in output --- lib/tasks/erd.rake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/tasks/erd.rake b/lib/tasks/erd.rake index 6b79967de..e2665374e 100644 --- a/lib/tasks/erd.rake +++ b/lib/tasks/erd.rake @@ -7,9 +7,9 @@ namespace :generate do sh "bundle exec rake erd only='Organisation,StopAreaReferential,StopAreaReferentialSync,StopAreaReferentialSyncMessage,StopAreaReferentialMembership,LineReferential,LineReferentialSync,LineReferentialSyncMessage,LineReferentialMembership' filename='referentiels_externes' title='Référentiels externes'" sh "bundle exec rake erd only='NetexImport,Import,WorkbenchImport,ImportResource,ImportMessage' filename='import' title='Import'" sh "bundle exec rake erd only='ComplianceControlSet,ComplianceControlBlock,ComplianceControl,ComplianceCheckSet,ComplianceCheckBlock,ComplianceCheck,ComplianceCheckResource,ComplianceCheckMessage' filename='validation' title='Validation'" + sh "bundle exec rake erd only='Organisation,Workbench,ReferentialSuite,Referential' filename='merge' title='Merge'" #sh "bundle exec rake erd only='VehicleJourney,VehicleJourneyExport' filename='export' title='Export'" - #sh "bundle exec rake erd only='' filename='intégration' title='Integration'" - #sh "bundle exec rake erd only='' filename='fusion' title='Fusion'" + #sh "bundle exec rake erd only='' filename='integration' title='Integration'" #sh "bundle exec rake erd only='' filename='publication' title='Publication'" end -- cgit v1.2.3