diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/compliance_control_set_copier.rb | 98 | ||||
| -rw-r--r-- | lib/tasks/ci.rake | 10 |
2 files changed, 101 insertions, 7 deletions
diff --git a/lib/compliance_control_set_copier.rb b/lib/compliance_control_set_copier.rb new file mode 100644 index 000000000..20518ee0e --- /dev/null +++ b/lib/compliance_control_set_copier.rb @@ -0,0 +1,98 @@ +class ComplianceControlSetCopier + + # 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 :cc_set_id, :referential_id + + def copy cc_set_id, referential_id + @cc_set_id = cc_set_id + @referential_id = referential_id + check_organisation_coherence! + copy_set + end + + + private + + # Workers + # ------- + def check_organisation_coherence! + return true if cc_set.organisation_id == referential.organisation_id + raise ArgumentError, "Incoherent organisation of referential" + end + + # Copy Set: + def copy_set + # Force lazy creation of cck_set, just in case cc_set is _empty_. + cck_set + # Copy all ccs -> ccks + make_ccks_from_ccs + # Copy all cc_blocks -> cck_blocks + make_cck_blocks + end + + # Copy Blocks: + def make_cck_block cc_block + cck_set.compliance_check_blocks.create( + name: name_with_refid(cc_block.name), + condition_attributes: cc_block.condition_attributes).tap do | cck_block | + relink_checks_to_block cc_block, cck_block + end + end + def make_cck_blocks + cc_set.compliance_control_blocks.each(&method(:make_cck_block)) + end + def relink_checks_to_block cc_block, cck_block + cc_block + .compliance_controls + .each do | compliance_control | + control_id_to_check[compliance_control.id] + .update(compliance_check_block_id: cck_block.id) + end + end + + # Copy Checks: + def make_ccks_from_ccs + cc_set.compliance_controls.each(&method(:make_compliance_check)) + end + def make_compliance_check(compliance_control) + cck_set.compliance_checks.create( + control_attributes: compliance_control.control_attributes, + criticity: compliance_control.criticity, + name: name_with_refid(compliance_control.name), + comment: compliance_control.comment, + code: compliance_control.code, + origin_code: compliance_control.origin_code + ).tap do | compliance_check | + control_id_to_check.update compliance_control.id => compliance_check + end + end + + def name_with_refid name + [name, referential.name].join('-') + end + + # Lazy Values + # ----------- + def cc_set + @__cc_set__ ||= ComplianceControlSet.find(cc_set_id) + end + def cck_set + @__cck_set__ ||= ComplianceCheckSet.create!( + compliance_control_set_id: cc_set_id, + referential_id: referential_id, + workbench_id: referential.workbench_id, + name: name_with_refid(cc_set.name), + status: 'new' + ) + end + def control_id_to_check + # Map: compliance_control_id -> compliance_check + @__control_id_to_check__ ||= Hash.new + end + def referential + @__referential__ ||= Referential.find(referential_id) + end +end diff --git a/lib/tasks/ci.rake b/lib/tasks/ci.rake index 7fe289ed6..ace042546 100644 --- a/lib/tasks/ci.rake +++ b/lib/tasks/ci.rake @@ -3,7 +3,7 @@ namespace :ci do task :setup do cp "config/database/jenkins.yml", "config/database.yml" sh "RAILS_ENV=test rake db:drop db:create db:migrate" - sh "npm --production --no-progress install" + sh "yarn --production --no-progress install" end def git_branch @@ -32,11 +32,7 @@ namespace :ci do end task :spec do - sh "bundle exec rspec --profile" - end - - task :teaspoon do - sh "RAILS_ENV=test bundle exec rake teaspoon" + sh "bundle exec rake spec" end desc "Deploy after CI" @@ -55,4 +51,4 @@ namespace :ci do end desc "Run continuous integration tasks (spec, ...)" -task :ci => ["ci:setup", "ci:spec", "ci:teaspoon", "cucumber", "ci:check_security", "ci:deploy", "ci:clean"] +task :ci => ["ci:setup", "ci:spec", "cucumber", "ci:check_security", "ci:deploy", "ci:clean"] |
