From 00d1aff0f61be908ad9dfedff47f33f5ef1f274a Mon Sep 17 00:00:00 2001 From: Xinhui Date: Wed, 20 Sep 2017 14:28:22 +0200 Subject: Add type to permited params & remove policy check --- app/controllers/compliance_controls_controller.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb index dad9b935a..75c2dbc72 100644 --- a/app/controllers/compliance_controls_controller.rb +++ b/app/controllers/compliance_controls_controller.rb @@ -1,5 +1,4 @@ class ComplianceControlsController < BreadcrumbController - include PolicyChecker defaults resource_class: ComplianceControl belongs_to :compliance_control_set @@ -33,6 +32,6 @@ class ComplianceControlsController < BreadcrumbController end def compliance_control_params - params.require(:compliance_control).permit(:name, :code, :criticity, :comment, :control_attributes) + params.require(:compliance_control).permit(:name, :code, :criticity, :comment, :control_attributes, :type) end end -- cgit v1.2.3 From 8052230ad2966e794fe85ac48244012b4a74d6d3 Mon Sep 17 00:00:00 2001 From: Xinhui Date: Thu, 21 Sep 2017 11:47:18 +0200 Subject: Move ComplianceControl#index into ComplianceControlSet#show Refs #4579 --- .../compliance_control_sets_controller.rb | 14 +++++++-- app/controllers/compliance_controls_controller.rb | 15 --------- app/decorators/compliance_control_decorator.rb | 10 +++--- app/views/compliance_control_sets/show.html.slim | 36 +++++++++++++++++++++- app/views/compliance_controls/show.html.slim | 1 + config/routes.rb | 2 +- .../compliance_controls_controller_spec.rb | 7 ----- 7 files changed, 54 insertions(+), 31 deletions(-) diff --git a/app/controllers/compliance_control_sets_controller.rb b/app/controllers/compliance_control_sets_controller.rb index 20ddcbe97..306b2eac7 100644 --- a/app/controllers/compliance_control_sets_controller.rb +++ b/app/controllers/compliance_control_sets_controller.rb @@ -14,11 +14,15 @@ class ComplianceControlSetsController < BreadcrumbController end def show - show! do - @compliance_control_set = @compliance_control_set.decorate + show! do |format| + format.html { + @compliance_control_set = @compliance_control_set.decorate + @compliance_controls = decorate_compliance_controls(@compliance_control_set.compliance_controls) + } end end + private def decorate_compliance_control_sets(compliance_control_sets) ModelDecorator.decorate( compliance_control_sets, @@ -33,6 +37,12 @@ class ComplianceControlSetsController < BreadcrumbController # end private + def decorate_compliance_controls(compliance_controls) + ModelDecorator.decorate( + compliance_controls, + with: ComplianceControlDecorator, + ) + end def ransack_updated_at_params start_date = [] diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb index 75c2dbc72..87dfcf15b 100644 --- a/app/controllers/compliance_controls_controller.rb +++ b/app/controllers/compliance_controls_controller.rb @@ -2,14 +2,6 @@ class ComplianceControlsController < BreadcrumbController defaults resource_class: ComplianceControl belongs_to :compliance_control_set - def index - index! do |format| - format.html { - @compliance_controls = decorate_compliance_controls(@compliance_controls) - } - end - end - def create create!(notice: t('notice.compliance_control.created')) end @@ -24,13 +16,6 @@ class ComplianceControlsController < BreadcrumbController end private - def decorate_compliance_controls(compliance_controls) - ModelDecorator.decorate( - compliance_controls, - with: ComplianceControlDecorator, - ) - end - def compliance_control_params params.require(:compliance_control).permit(:name, :code, :criticity, :comment, :control_attributes, :type) end diff --git a/app/decorators/compliance_control_decorator.rb b/app/decorators/compliance_control_decorator.rb index 38b968ad1..3a05a5c59 100644 --- a/app/decorators/compliance_control_decorator.rb +++ b/app/decorators/compliance_control_decorator.rb @@ -4,21 +4,21 @@ class ComplianceControlDecorator < Draper::Decorator def action_links links = [] - if h.policy(object).destroy? + # if h.policy(object).destroy? links << Link.new( content: h.destroy_link_content, href: h.compliance_control_set_compliance_control_path(object.compliance_control_set.id, object.id), method: :delete, data: { confirm: h.t('compliance_controls.actions.destroy_confirm') } ) - end + # end - if h.policy(object).edit? + # if h.policy(object).edit? links << Link.new( content: h.t('compliance_controls.actions.edit'), - href: h.edit_compliance_control_set_path(object.compliance_control_set.id, object.id) + href: h.edit_compliance_control_set_compliance_control_path(object.compliance_control_set.id, object.id) ) - end + # end links end diff --git a/app/views/compliance_control_sets/show.html.slim b/app/views/compliance_control_sets/show.html.slim index b4a5b2260..d7d4678ba 100644 --- a/app/views/compliance_control_sets/show.html.slim +++ b/app/views/compliance_control_sets/show.html.slim @@ -22,4 +22,38 @@ .row .col-lg-6.col-md-6.col-sm-12.col-xs-12 = definition_list t('metadatas'), - ComplianceControlSet.human_attribute_name(:name) => @compliance_control_set.name \ No newline at end of file + ComplianceControlSet.human_attribute_name(:name) => @compliance_control_set.name + + .container-fluid + .row + .col-lg-12 + /= render 'filters' + .row + .col-lg-12 + .select_table + = table_builder_2 @compliance_controls, + [ \ + TableBuilderHelper::Column.new( \ + key: :code, \ + attribute: 'code' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :name, \ + attribute: 'name', \ + link_to: lambda do |compliance_control| \ + compliance_control_set_compliance_control_path(@compliance_control_set, compliance_control) \ + end \ + ), \ + TableBuilderHelper::Column.new( \ + key: :criticity, \ + attribute: 'criticity' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :comment, \ + attribute: 'comment' \ + ), \ + ], + sortable: true, + cls: 'table has-filter has-search' + + diff --git a/app/views/compliance_controls/show.html.slim b/app/views/compliance_controls/show.html.slim index e69de29bb..9e197695d 100644 --- a/app/views/compliance_controls/show.html.slim +++ b/app/views/compliance_controls/show.html.slim @@ -0,0 +1 @@ += @compliance_control.inspect diff --git a/config/routes.rb b/config/routes.rb index ef625db1f..1d34a4854 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -70,7 +70,7 @@ ChouetteIhm::Application.routes.draw do resources :api_keys, :only => [:edit, :update, :new, :create, :destroy] resources :compliance_control_sets do - resources :compliance_controls + resources :compliance_controls, except: :index end resources :stop_area_referentials, :only => [:show] do diff --git a/spec/controllers/compliance_controls_controller_spec.rb b/spec/controllers/compliance_controls_controller_spec.rb index 165c00329..749bbaac3 100644 --- a/spec/controllers/compliance_controls_controller_spec.rb +++ b/spec/controllers/compliance_controls_controller_spec.rb @@ -13,13 +13,6 @@ RSpec.describe ComplianceControlsController, type: :controller do end end - describe "GET index" do - it 'should be successful' do - get :index, compliance_control_set_id: compliance_control_set.id - expect(response).to be_success - end - end - describe 'GET #edit' do it 'should be successful' do get :edit, compliance_control_set_id: compliance_control_set.id, id: compliance_control.id -- cgit v1.2.3 From bc084cd98fd01d2cebb57fd1e791b61f02f1e194 Mon Sep 17 00:00:00 2001 From: Xinhui Date: Thu, 21 Sep 2017 12:07:41 +0200 Subject: ComplianceControlSet#show add compliance_control create link Refs #4563 --- app/decorators/compliance_control_set_decorator.rb | 7 ++++ config/locales/compliance_control_sets.en.yml | 39 +++++++++++----------- config/locales/compliance_control_sets.fr.yml | 31 ++++++++--------- 3 files changed, 43 insertions(+), 34 deletions(-) diff --git a/app/decorators/compliance_control_set_decorator.rb b/app/decorators/compliance_control_set_decorator.rb index 876a54d09..f9e4de836 100644 --- a/app/decorators/compliance_control_set_decorator.rb +++ b/app/decorators/compliance_control_set_decorator.rb @@ -19,6 +19,13 @@ class ComplianceControlSetDecorator < Draper::Decorator href: h.edit_compliance_control_set_path(object.id) ) # end + + # if h.policy(ComplianceControl).create? + links << Link.new( + content: h.t('compliance_control_sets.actions.add_compliance_control'), + href: h.new_compliance_control_set_compliance_control_path(object.id) + ) + # end links end diff --git a/config/locales/compliance_control_sets.en.yml b/config/locales/compliance_control_sets.en.yml index 497ca50c3..b7133aea5 100644 --- a/config/locales/compliance_control_sets.en.yml +++ b/config/locales/compliance_control_sets.en.yml @@ -1,24 +1,25 @@ -fr: +en: compliance_control_sets: index: - title: Control games - new: Creating a control set - edit: Editing a Control Game + title: Compliance control set + new: New compliance control set + edit: Edit compliance control set actions: - new: Add - edit: Edit - destroy: Delete - destroy_confirm: Are you sure to remove the control games ? + new: Add + edit: Edit + destroy: Destroy + add_compliance_control: Add a compliance control + destroy_confirm: Are you sur ? filters: - name: Specify a control game name... - search_no_results: No control game matches your search + name: 'Enter name ...' + search_no_results: 'No compliance control set found' activerecord: - models: - compliance_control_set: Calendar - attributes: - compliance_control_set: - name: Name - assignment: Affectation - owner_jdc: Owner of the control game - control_numbers: Nb contrôle - updated_at: Update \ No newline at end of file + models: + compliance_control_set: Calendar + attributes: + compliance_control_set: + name: Name + assignment: Assignment + owner_jdc: Owner + control_numbers: Control number + updated_at: Updated at diff --git a/config/locales/compliance_control_sets.fr.yml b/config/locales/compliance_control_sets.fr.yml index f5bb7c67b..8310aa0db 100644 --- a/config/locales/compliance_control_sets.fr.yml +++ b/config/locales/compliance_control_sets.fr.yml @@ -5,20 +5,21 @@ fr: new: Création d'un jeux de contrôle edit: Édition d'un jeux de contrôle actions: - new: Ajouter - edit: Editer - destroy: Supprimer - destroy_confirm: Etes vous sûr de supprimer ce jeux de contrôle ? + new: Ajouter + edit: Editer + destroy: Supprimer + add_compliance_control: Ajouter un JDC + destroy_confirm: Etes vous sûr de supprimer ce jeux de contrôle ? filters: - name: Indiquez un nom de jeux de contrôle... - search_no_results: Aucun jeu de contrôle ne correspond à votre recherche + name: 'Indiquez un nom de jeux de contrôle...' + search_no_results: 'Aucun jeu de contrôle ne correspond à votre recherche' activerecord: - models: - compliance_control_set: Calendrier - attributes: - compliance_control_set: - name: Nom - assignment: Affectation - owner_jdc: Propriétaire du jeu de contrôle - control_numbers: Nb contrôle - updated_at: Mis a jour \ No newline at end of file + models: + compliance_control_set: Calendrier + attributes: + compliance_control_set: + name: Nom + assignment: Affectation + owner_jdc: Propriétaire du jeu de contrôle + control_numbers: Nb contrôle + updated_at: Mis a jour -- cgit v1.2.3 From d5e8f6ff7bcf443bcfd3d525e888da883d8ae32c Mon Sep 17 00:00:00 2001 From: Xinhui Date: Thu, 21 Sep 2017 14:30:13 +0200 Subject: Manually specifying policy classes for ComplianceControl & children Refs #4581 --- app/controllers/compliance_controls_controller.rb | 1 + app/models/compliance_control.rb | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb index 87dfcf15b..c5c76fd58 100644 --- a/app/controllers/compliance_controls_controller.rb +++ b/app/controllers/compliance_controls_controller.rb @@ -1,4 +1,5 @@ class ComplianceControlsController < BreadcrumbController + include PolicyChecker defaults resource_class: ComplianceControl belongs_to :compliance_control_set diff --git a/app/models/compliance_control.rb b/app/models/compliance_control.rb index 12ff4737a..46902f9b1 100644 --- a/app/models/compliance_control.rb +++ b/app/models/compliance_control.rb @@ -9,4 +9,8 @@ class ComplianceControl < ActiveRecord::Base validates :name, presence: true validates :code, presence: true validates :compliance_control_set, presence: true + + def self.policy_class + ComplianceControlPolicy + end end -- cgit v1.2.3 From 8d2db4fd3553596fff8eecf357bdd9e75f158c3a Mon Sep 17 00:00:00 2001 From: Xinhui Date: Thu, 21 Sep 2017 15:34:37 +0200 Subject: Fix STI subclasses not loaded on development env Refs #4580 --- app/models/compliance_control.rb | 4 ++++ app/views/compliance_controls/_form.html.slim | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/compliance_control.rb b/app/models/compliance_control.rb index 46902f9b1..7a09a176c 100644 --- a/app/models/compliance_control.rb +++ b/app/models/compliance_control.rb @@ -14,3 +14,7 @@ class ComplianceControl < ActiveRecord::Base ComplianceControlPolicy end end + +# Ensure STI subclasses are loaded +# http://guides.rubyonrails.org/autoloading_and_reloading_constants.html#autoloading-and-sti +require_dependency 'generic_attribute_min_max' diff --git a/app/views/compliance_controls/_form.html.slim b/app/views/compliance_controls/_form.html.slim index 1377ed12b..b4298c5fd 100644 --- a/app/views/compliance_controls/_form.html.slim +++ b/app/views/compliance_controls/_form.html.slim @@ -2,7 +2,7 @@ .row .col-lg-12 = f.input :name - = f.input :type + = f.input :type, as: :select, collection: ComplianceControl.subclasses = f.input :code = f.input :criticity = f.input :comment -- cgit v1.2.3 From 15e75e3505194171df43d69096e94f65f032f9e5 Mon Sep 17 00:00:00 2001 From: Xinhui Date: Fri, 22 Sep 2017 14:36:13 +0200 Subject: Nested compliance control block Refs #4585 --- app/controllers/compliance_controls_controller.rb | 2 +- app/models/compliance_control.rb | 6 ++++-- app/models/compliance_control_block.rb | 7 +++++++ app/views/compliance_controls/_form.html.slim | 3 +++ ...21609_add_compliance_control_id_to_compliance_control_blocks.rb | 5 +++++ db/schema.rb | 3 +++ 6 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20170922121609_add_compliance_control_id_to_compliance_control_blocks.rb diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb index c5c76fd58..bfa7cbefa 100644 --- a/app/controllers/compliance_controls_controller.rb +++ b/app/controllers/compliance_controls_controller.rb @@ -18,6 +18,6 @@ class ComplianceControlsController < BreadcrumbController private def compliance_control_params - params.require(:compliance_control).permit(:name, :code, :criticity, :comment, :control_attributes, :type) + params.require(:compliance_control).permit(:name, :code, :criticity, :comment, :control_attributes, :type, compliance_control_block_attributes: [:name]) end end diff --git a/app/models/compliance_control.rb b/app/models/compliance_control.rb index 7a09a176c..73b6be8e5 100644 --- a/app/models/compliance_control.rb +++ b/app/models/compliance_control.rb @@ -1,8 +1,10 @@ class ComplianceControl < ActiveRecord::Base + extend Enumerize belongs_to :compliance_control_set - belongs_to :compliance_control_block - extend Enumerize + has_one :compliance_control_block, dependent: :destroy + accepts_nested_attributes_for :compliance_control_block + enumerize :criticity, in: %i(info warning error), scope: true, default: :info validates :criticity, presence: true diff --git a/app/models/compliance_control_block.rb b/app/models/compliance_control_block.rb index cf5a9d72b..7fda998eb 100644 --- a/app/models/compliance_control_block.rb +++ b/app/models/compliance_control_block.rb @@ -1,3 +1,10 @@ class ComplianceControlBlock < ActiveRecord::Base belongs_to :compliance_control_set + belongs_to :compliance_control + + before_save :set_compliance_control_set + + def set_compliance_control_set + self.compliance_control_set = self.compliance_control.compliance_control_set + end end diff --git a/app/views/compliance_controls/_form.html.slim b/app/views/compliance_controls/_form.html.slim index b4298c5fd..cc0310620 100644 --- a/app/views/compliance_controls/_form.html.slim +++ b/app/views/compliance_controls/_form.html.slim @@ -7,6 +7,9 @@ = f.input :criticity = f.input :comment + = f.fields_for :compliance_control_block, ComplianceControlBlock.new do |c| + = c.input :name + end .separator = f.button :submit, t('actions.submit'), class: 'btn btn-default formSubmitr', form: 'compliance_control_form' diff --git a/db/migrate/20170922121609_add_compliance_control_id_to_compliance_control_blocks.rb b/db/migrate/20170922121609_add_compliance_control_id_to_compliance_control_blocks.rb new file mode 100644 index 000000000..18a6b12cf --- /dev/null +++ b/db/migrate/20170922121609_add_compliance_control_id_to_compliance_control_blocks.rb @@ -0,0 +1,5 @@ +class AddComplianceControlIdToComplianceControlBlocks < ActiveRecord::Migration + def change + add_reference :compliance_control_blocks, :compliance_control, index: true, foreign_key: true + end +end diff --git a/db/schema.rb b/db/schema.rb index c95280051..45bc74d07 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -217,8 +217,10 @@ ActiveRecord::Schema.define(version: 20170925154017) do t.integer "compliance_control_set_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.integer "compliance_control_id" end + add_index "compliance_control_blocks", ["compliance_control_id"], name: "index_compliance_control_blocks_on_compliance_control_id", using: :btree add_index "compliance_control_blocks", ["compliance_control_set_id"], name: "index_compliance_control_blocks_on_compliance_control_set_id", using: :btree create_table "compliance_control_sets", id: :bigserial, force: :cascade do |t| @@ -987,6 +989,7 @@ ActiveRecord::Schema.define(version: 20170925154017) do add_foreign_key "compliance_checks", "compliance_check_blocks" add_foreign_key "compliance_checks", "compliance_check_sets" add_foreign_key "compliance_control_blocks", "compliance_control_sets" + add_foreign_key "compliance_control_blocks", "compliance_controls" add_foreign_key "compliance_control_sets", "organisations" add_foreign_key "compliance_controls", "compliance_control_blocks" add_foreign_key "compliance_controls", "compliance_control_sets" -- cgit v1.2.3 From a11baf3f9b77d8290aef519310912abdc19ec5bf Mon Sep 17 00:00:00 2001 From: Xinhui Date: Fri, 22 Sep 2017 16:07:03 +0200 Subject: Remove compliance control block id column from compliance_controls table Refs #4585 --- ..._remove_compliance_control_block_id_from_compliance_controls.rb | 5 +++++ db/schema.rb | 7 ++----- spec/factories/compliance_control_blocks.rb | 1 + spec/factories/compliance_controls.rb | 1 - spec/models/compliance_control_block_spec.rb | 3 +++ spec/models/compliance_control_spec.rb | 1 - 6 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 db/migrate/20170922123838_remove_compliance_control_block_id_from_compliance_controls.rb diff --git a/db/migrate/20170922123838_remove_compliance_control_block_id_from_compliance_controls.rb b/db/migrate/20170922123838_remove_compliance_control_block_id_from_compliance_controls.rb new file mode 100644 index 000000000..e3a6dfcb4 --- /dev/null +++ b/db/migrate/20170922123838_remove_compliance_control_block_id_from_compliance_controls.rb @@ -0,0 +1,5 @@ +class RemoveComplianceControlBlockIdFromComplianceControls < ActiveRecord::Migration + def change + remove_reference :compliance_controls, :compliance_control_block, index: true, foreign_key: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 45bc74d07..a8c90b111 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -234,18 +234,16 @@ ActiveRecord::Schema.define(version: 20170925154017) do create_table "compliance_controls", id: :bigserial, force: :cascade do |t| t.integer "compliance_control_set_id" - t.integer "compliance_control_block_id" t.string "type" t.json "control_attributes" t.string "name" t.string "code" t.string "criticity" t.text "comment" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end - add_index "compliance_controls", ["compliance_control_block_id"], name: "index_compliance_controls_on_compliance_control_block_id", using: :btree add_index "compliance_controls", ["compliance_control_set_id"], name: "index_compliance_controls_on_compliance_control_set_id", using: :btree create_table "connection_links", id: :bigserial, force: :cascade do |t| @@ -991,7 +989,6 @@ ActiveRecord::Schema.define(version: 20170925154017) do add_foreign_key "compliance_control_blocks", "compliance_control_sets" add_foreign_key "compliance_control_blocks", "compliance_controls" add_foreign_key "compliance_control_sets", "organisations" - add_foreign_key "compliance_controls", "compliance_control_blocks" add_foreign_key "compliance_controls", "compliance_control_sets" add_foreign_key "group_of_lines_lines", "group_of_lines", name: "groupofline_group_fkey", on_delete: :cascade add_foreign_key "journey_frequencies", "timebands", on_delete: :nullify diff --git a/spec/factories/compliance_control_blocks.rb b/spec/factories/compliance_control_blocks.rb index 5bc45cc75..1b043324e 100644 --- a/spec/factories/compliance_control_blocks.rb +++ b/spec/factories/compliance_control_blocks.rb @@ -2,5 +2,6 @@ FactoryGirl.define do factory :compliance_control_block do sequence(:name) { |n| "Compliance control block #{n}" } association :compliance_control_set + association :compliance_control end end diff --git a/spec/factories/compliance_controls.rb b/spec/factories/compliance_controls.rb index 8aa16b674..cc9f7a822 100644 --- a/spec/factories/compliance_controls.rb +++ b/spec/factories/compliance_controls.rb @@ -6,6 +6,5 @@ FactoryGirl.define do code "code" comment "Text" association :compliance_control_set - association :compliance_control_block end end diff --git a/spec/models/compliance_control_block_spec.rb b/spec/models/compliance_control_block_spec.rb index 248049b0c..f45ec3d42 100644 --- a/spec/models/compliance_control_block_spec.rb +++ b/spec/models/compliance_control_block_spec.rb @@ -1,9 +1,12 @@ require 'rails_helper' RSpec.describe ComplianceControlBlock, type: :model do + subject { create(:compliance_control_block) } + it 'should have a valid factory' do expect(FactoryGirl.build(:compliance_control_block)).to be_valid end it { should belong_to :compliance_control_set } + it { should belong_to :compliance_control } end diff --git a/spec/models/compliance_control_spec.rb b/spec/models/compliance_control_spec.rb index b00ff4c5a..c8797b938 100644 --- a/spec/models/compliance_control_spec.rb +++ b/spec/models/compliance_control_spec.rb @@ -6,7 +6,6 @@ RSpec.describe ComplianceControl, type: :model do end it { should belong_to :compliance_control_set } - it { should belong_to :compliance_control_block } it { should validate_presence_of :criticity } it { should validate_presence_of :name } -- cgit v1.2.3 From 6af42621e3ba89a81d9ef9491f04f8595483de60 Mon Sep 17 00:00:00 2001 From: Xinhui Date: Fri, 22 Sep 2017 16:07:51 +0200 Subject: Remove comments --- app/models/generic_attribute_min_max.rb | 36 +++++++++++++++------------------ 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/app/models/generic_attribute_min_max.rb b/app/models/generic_attribute_min_max.rb index e9a127c56..8e85834a8 100644 --- a/app/models/generic_attribute_min_max.rb +++ b/app/models/generic_attribute_min_max.rb @@ -1,27 +1,23 @@ -#module ComplianceControls +class GenericAttributeMinMax < ComplianceControl - class GenericAttributeMinMax < ComplianceControl + hstore_accessor :control_attributes, minimum: :integer, maximum: :integer + #attribute :minimum, type: :integer, optionnal: true + #attribute :maximum, type: :integer, optionnal: true + #attribute :target, type: ModelAttribute - hstore_accessor :control_attributes, minimum: :integer, maximum: :integer - #attribute :minimum, type: :integer, optionnal: true - #attribute :maximum, type: :integer, optionnal: true - # #attribute :target, type: ModelAttribute + @@default_criticity = :warning + @@default_code = "3-Generic-2" - @@default_criticity = :warning - @@default_code = "3-Generic-2" - - validate :min_max_values - def min_max_values - true - end - - after_initialize do - self.name = 'GenericAttributeMinMax' - self.code = @@default_code - self.criticity = @@default_criticity - end + validate :min_max_values + def min_max_values + true + end + after_initialize do + self.name = 'GenericAttributeMinMax' + self.code = @@default_code + self.criticity = @@default_criticity end -#end +end -- cgit v1.2.3 From 5724f7c02a5238ef727e0c1674f2c69424563527 Mon Sep 17 00:00:00 2001 From: Xinhui Date: Tue, 26 Sep 2017 11:42:47 +0200 Subject: Nested form for compliance control block Refs #4585 --- app/controllers/compliance_controls_controller.rb | 8 +++++++- app/models/compliance_control.rb | 10 +++++++++- app/models/compliance_control_block.rb | 2 ++ app/views/compliance_controls/_form.html.slim | 3 ++- app/views/compliance_controls/edit.html.slim | 9 +++++++++ app/views/compliance_controls/show.html.slim | 2 ++ 6 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb index bfa7cbefa..0f4ca3481 100644 --- a/app/controllers/compliance_controls_controller.rb +++ b/app/controllers/compliance_controls_controller.rb @@ -3,6 +3,12 @@ class ComplianceControlsController < BreadcrumbController defaults resource_class: ComplianceControl belongs_to :compliance_control_set + def new + @compliance_control_set = parent + @compliance_control = ComplianceControl.new + @compliance_control.build_compliance_control_block + end + def create create!(notice: t('notice.compliance_control.created')) end @@ -18,6 +24,6 @@ class ComplianceControlsController < BreadcrumbController private def compliance_control_params - params.require(:compliance_control).permit(:name, :code, :criticity, :comment, :control_attributes, :type, compliance_control_block_attributes: [:name]) + params.require(:compliance_control).permit(:name, :code, :criticity, :comment, :control_attributes, :type, compliance_control_block_attributes: [:name, :transport_mode]) end end diff --git a/app/models/compliance_control.rb b/app/models/compliance_control.rb index 73b6be8e5..763a42029 100644 --- a/app/models/compliance_control.rb +++ b/app/models/compliance_control.rb @@ -1,7 +1,6 @@ class ComplianceControl < ActiveRecord::Base extend Enumerize belongs_to :compliance_control_set - has_one :compliance_control_block, dependent: :destroy accepts_nested_attributes_for :compliance_control_block @@ -15,6 +14,15 @@ class ComplianceControl < ActiveRecord::Base def self.policy_class ComplianceControlPolicy end + + def self.inherited(child) + child.instance_eval do + def model_name + ComplianceControl.model_name + end + end + super + end end # Ensure STI subclasses are loaded diff --git a/app/models/compliance_control_block.rb b/app/models/compliance_control_block.rb index 7fda998eb..12b10ab2a 100644 --- a/app/models/compliance_control_block.rb +++ b/app/models/compliance_control_block.rb @@ -4,6 +4,8 @@ class ComplianceControlBlock < ActiveRecord::Base before_save :set_compliance_control_set + hstore_accessor :condition_attributes, transport_mode: :string + def set_compliance_control_set self.compliance_control_set = self.compliance_control.compliance_control_set end diff --git a/app/views/compliance_controls/_form.html.slim b/app/views/compliance_controls/_form.html.slim index cc0310620..9ee2dec69 100644 --- a/app/views/compliance_controls/_form.html.slim +++ b/app/views/compliance_controls/_form.html.slim @@ -7,8 +7,9 @@ = f.input :criticity = f.input :comment - = f.fields_for :compliance_control_block, ComplianceControlBlock.new do |c| + = f.simple_fields_for :compliance_control_block do |c| = c.input :name + = c.input :transport_mode, as: :select, collection:StifTransportModeEnumerations.transport_mode.options end .separator diff --git a/app/views/compliance_controls/edit.html.slim b/app/views/compliance_controls/edit.html.slim index e69de29bb..6824c7e40 100644 --- a/app/views/compliance_controls/edit.html.slim +++ b/app/views/compliance_controls/edit.html.slim @@ -0,0 +1,9 @@ += pageheader 'compliance-control', + t('compliance_control.index.edit') + + +.page_content + .container-fluid + .row + .col-lg-8.col-lg-offset-2.col-md-8.col-md-offset-2.col-sm-10.col-sm-offset-1 + = render 'form' diff --git a/app/views/compliance_controls/show.html.slim b/app/views/compliance_controls/show.html.slim index 9e197695d..a665f1ab1 100644 --- a/app/views/compliance_controls/show.html.slim +++ b/app/views/compliance_controls/show.html.slim @@ -1 +1,3 @@ = @compliance_control.inspect +br += @compliance_control.compliance_control_block.inspect -- cgit v1.2.3 From b8402fc9803db04b029a22c5bd9d33ee756ff4ec Mon Sep 17 00:00:00 2001 From: Xinhui Date: Tue, 26 Sep 2017 11:58:17 +0200 Subject: Add dependent destroy on associations --- app/models/compliance_control_set.rb | 4 +--- spec/models/compliance_control_set_spec.rb | 2 +- spec/models/compliance_control_spec.rb | 1 + 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/models/compliance_control_set.rb b/app/models/compliance_control_set.rb index 4dafd48c7..f8f491cba 100644 --- a/app/models/compliance_control_set.rb +++ b/app/models/compliance_control_set.rb @@ -1,11 +1,9 @@ class ComplianceControlSet < ActiveRecord::Base belongs_to :organisation - has_many :compliance_controls + has_many :compliance_controls, dependent: :destroy validates :name, presence: true - scope :where_updated_at_between, ->(start_date, end_date) do where('updated_at BETWEEN ? AND ?', start_date, end_date) end - end diff --git a/spec/models/compliance_control_set_spec.rb b/spec/models/compliance_control_set_spec.rb index ededec5e0..edc684bbc 100644 --- a/spec/models/compliance_control_set_spec.rb +++ b/spec/models/compliance_control_set_spec.rb @@ -6,7 +6,7 @@ RSpec.describe ComplianceControlSet, type: :model do end it { should belong_to :organisation } - it { should have_many :compliance_controls } + it { should have_many(:compliance_controls).dependent(:destroy) } it { should validate_presence_of :name } end diff --git a/spec/models/compliance_control_spec.rb b/spec/models/compliance_control_spec.rb index c8797b938..d65e654cc 100644 --- a/spec/models/compliance_control_spec.rb +++ b/spec/models/compliance_control_spec.rb @@ -6,6 +6,7 @@ RSpec.describe ComplianceControl, type: :model do end it { should belong_to :compliance_control_set } + it { should has_one(:compliance_control_block).dependent(:destroy) } } it { should validate_presence_of :criticity } it { should validate_presence_of :name } -- cgit v1.2.3 From 47aa20b9490166a9e0edd7e2095fc8612ff8f892 Mon Sep 17 00:00:00 2001 From: Xinhui Date: Tue, 26 Sep 2017 12:35:38 +0200 Subject: Remove action override, notice is now handle by gem responder --- app/controllers/compliance_controls_controller.rb | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb index 0f4ca3481..20f4b15af 100644 --- a/app/controllers/compliance_controls_controller.rb +++ b/app/controllers/compliance_controls_controller.rb @@ -9,19 +9,11 @@ class ComplianceControlsController < BreadcrumbController @compliance_control.build_compliance_control_block end - def create - create!(notice: t('notice.compliance_control.created')) - end - def update path = compliance_control_set_compliance_control_path(parent, resource) update!(notice: t('notice.compliance_control.updated')) { path } end - def destroy - destroy!(notice: t('notice.compliance_control.destroyed')) - end - private def compliance_control_params params.require(:compliance_control).permit(:name, :code, :criticity, :comment, :control_attributes, :type, compliance_control_block_attributes: [:name, :transport_mode]) -- cgit v1.2.3 From b64a51db2cff7aed22ef9eabb8210905cbe9d626 Mon Sep 17 00:00:00 2001 From: Xinhui Date: Wed, 27 Sep 2017 11:56:29 +0200 Subject: Update gem enumerize to lastest version - 2.1.2 Fix https://github.com/brainspec/enumerize/issues/224 --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 5965602c4..1d4df7a73 100644 --- a/Gemfile +++ b/Gemfile @@ -114,7 +114,7 @@ gem 'sequel' gem 'draper' -gem 'enumerize', '~> 0.10.0' +gem 'enumerize', '~> 2.1.2' gem 'deep_cloneable', '~> 2.0.0' gem 'acts-as-taggable-on', '~> 4.0.0' diff --git a/Gemfile.lock b/Gemfile.lock index 1d05e0540..2c04def92 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -209,7 +209,7 @@ GEM email_spec (1.6.0) launchy (~> 2.1) mail (~> 2.2) - enumerize (0.10.1) + enumerize (2.1.2) activesupport (>= 3.2) erubis (2.7.0) execjs (2.7.0) @@ -590,7 +590,7 @@ DEPENDENCIES devise_invitable draper email_spec - enumerize (~> 0.10.0) + enumerize (~> 2.1.2) fabrication (~> 2.14.1) factory_girl_rails (~> 4.0) faker -- cgit v1.2.3 From c3f80c537e28dfe316ee0dcbee2bde2b5307fd79 Mon Sep 17 00:00:00 2001 From: Xinhui Date: Wed, 27 Sep 2017 11:59:44 +0200 Subject: Support of dynamic_attributes in form Refs #4467 --- app/controllers/compliance_controls_controller.rb | 10 ++++++++-- app/models/generic_attribute_min_max.rb | 18 +++++++++--------- app/views/compliance_controls/_form.html.slim | 4 ++++ 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb index 20f4b15af..71d702945 100644 --- a/app/controllers/compliance_controls_controller.rb +++ b/app/controllers/compliance_controls_controller.rb @@ -5,7 +5,7 @@ class ComplianceControlsController < BreadcrumbController def new @compliance_control_set = parent - @compliance_control = ComplianceControl.new + @compliance_control = GenericAttributeMinMax.new @compliance_control.build_compliance_control_block end @@ -15,7 +15,13 @@ class ComplianceControlsController < BreadcrumbController end private + def dynamic_attributes_params + params.require(:compliance_control).permit(:type).values[0].constantize.dynamic_attributes + end + def compliance_control_params - params.require(:compliance_control).permit(:name, :code, :criticity, :comment, :control_attributes, :type, compliance_control_block_attributes: [:name, :transport_mode]) + base = [:name, :code, :criticity, :comment, :control_attributes, :type, compliance_control_block_attributes: [:name, :transport_mode]] + permited = base + dynamic_attributes_params + params.require(:compliance_control).permit(permited) end end diff --git a/app/models/generic_attribute_min_max.rb b/app/models/generic_attribute_min_max.rb index 8e85834a8..91bf285f0 100644 --- a/app/models/generic_attribute_min_max.rb +++ b/app/models/generic_attribute_min_max.rb @@ -1,23 +1,23 @@ class GenericAttributeMinMax < ComplianceControl - - hstore_accessor :control_attributes, minimum: :integer, maximum: :integer - #attribute :minimum, type: :integer, optionnal: true - #attribute :maximum, type: :integer, optionnal: true - #attribute :target, type: ModelAttribute @@default_criticity = :warning @@default_code = "3-Generic-2" validate :min_max_values + def min_max_values true end - after_initialize do - self.name = 'GenericAttributeMinMax' - self.code = @@default_code - self.criticity = @@default_criticity + def self.dynamic_attributes + self.hstore_metadata_for_control_attributes.keys end + # after_initialize do + # self.name = 'GenericAttributeMinMax' + # self.code = @@default_code + # self.criticity = @@default_criticity + # end + end diff --git a/app/views/compliance_controls/_form.html.slim b/app/views/compliance_controls/_form.html.slim index 9ee2dec69..c9e1c0fcc 100644 --- a/app/views/compliance_controls/_form.html.slim +++ b/app/views/compliance_controls/_form.html.slim @@ -7,6 +7,10 @@ = f.input :criticity = f.input :comment + - f.object.class.dynamic_attributes.each do |attribute| + = f.input attribute.to_sym + end + = f.simple_fields_for :compliance_control_block do |c| = c.input :name = c.input :transport_mode, as: :select, collection:StifTransportModeEnumerations.transport_mode.options -- cgit v1.2.3 From b4160ff81b0e2636e213c0a2ec3352a33c0669c9 Mon Sep 17 00:00:00 2001 From: Xinhui Date: Wed, 27 Sep 2017 12:01:47 +0200 Subject: Disable policy for testing --- app/policies/compliance_control_policy.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/policies/compliance_control_policy.rb b/app/policies/compliance_control_policy.rb index fbea366f5..09250f013 100644 --- a/app/policies/compliance_control_policy.rb +++ b/app/policies/compliance_control_policy.rb @@ -6,14 +6,17 @@ class ComplianceControlPolicy < ApplicationPolicy end def destroy? - user.has_permission?('compliance_controls.destroy') + # user.has_permission?('compliance_controls.destroy') + true end def create? - user.has_permission?('compliance_controls.create') + # user.has_permission?('compliance_controls.create') + true end def update? - user.has_permission?('compliance_controls.update') + # user.has_permission?('compliance_controls.update') + true end end -- cgit v1.2.3 From 750815f4513dfa8c57238fdfaaee07af02b0e8cd Mon Sep 17 00:00:00 2001 From: Xinhui Date: Wed, 20 Sep 2017 14:28:22 +0200 Subject: Add type to permited params & remove policy check --- app/controllers/compliance_controls_controller.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb index 71d702945..7deeab01d 100644 --- a/app/controllers/compliance_controls_controller.rb +++ b/app/controllers/compliance_controls_controller.rb @@ -1,5 +1,4 @@ class ComplianceControlsController < BreadcrumbController - include PolicyChecker defaults resource_class: ComplianceControl belongs_to :compliance_control_set -- cgit v1.2.3 From 364de5d902775b480b33a6d0454d1caab316e913 Mon Sep 17 00:00:00 2001 From: Xinhui Date: Wed, 27 Sep 2017 15:34:26 +0200 Subject: Add GenericAttributeMinMax to apartment excluded_models --- config/initializers/apartment.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/config/initializers/apartment.rb b/config/initializers/apartment.rb index b8f86a751..758eed588 100644 --- a/config/initializers/apartment.rb +++ b/config/initializers/apartment.rb @@ -48,6 +48,7 @@ Apartment.configure do |config| 'ImportMessage', 'ImportResource', 'ComplianceControl', + 'GenericAttributeMinMax', 'ComplianceControlSet', 'ComplianceControlBlock', 'ComplianceCheck', -- cgit v1.2.3 From 00ef063d81323cf6d80b383bda949abfeeaa520b Mon Sep 17 00:00:00 2001 From: Xinhui Date: Wed, 27 Sep 2017 15:35:55 +0200 Subject: Refactoring controller spec - add compliance controle type support --- .../controllers/compliance_controls_controller_spec.rb | 18 ++++++++++-------- spec/factories/compliance_controls.rb | 2 +- spec/models/compliance_control_spec.rb | 2 +- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/spec/controllers/compliance_controls_controller_spec.rb b/spec/controllers/compliance_controls_controller_spec.rb index 749bbaac3..511b61b38 100644 --- a/spec/controllers/compliance_controls_controller_spec.rb +++ b/spec/controllers/compliance_controls_controller_spec.rb @@ -3,8 +3,10 @@ require 'rails_helper' RSpec.describe ComplianceControlsController, type: :controller do login_user - let(:compliance_control) { create :compliance_control } - let(:compliance_control_set) { compliance_control.compliance_control_set } + + let(:compliance_control) { create(:compliance_control) } + let!(:compliance_control_set) { compliance_control.compliance_control_set } + let(:compliance_control_params) { compliance_control.as_json.merge(type: 'GenericAttributeMinMax') } describe "GET show" do it 'should be successful' do @@ -29,24 +31,24 @@ RSpec.describe ComplianceControlsController, type: :controller do describe 'POST #create' do it 'should be successful' do - post :create, compliance_control_set_id: compliance_control_set.id, compliance_control: build(:compliance_control).as_json + post :create, compliance_control_set_id: compliance_control_set.id, compliance_control: compliance_control_params expect(response).to have_http_status(302) - expect(flash[:notice]).to eq(I18n.t('notice.compliance_control.created')) end end describe 'POST #update' do it 'should be successful' do - post :update, compliance_control_set_id: compliance_control_set.id, id: compliance_control.id, compliance_control: compliance_control.as_json + post :update, compliance_control_set_id: compliance_control_set.id, id: compliance_control.id, compliance_control: compliance_control_params expect(response).to redirect_to compliance_control_set_compliance_control_path(compliance_control_set, compliance_control) - expect(flash[:notice]).to eq(I18n.t('notice.compliance_control.updated')) end end describe 'DELETE #destroy' do it 'should be successful' do - delete :destroy, compliance_control_set_id: compliance_control_set.id, id: compliance_control.id - expect(flash[:notice]).to eq I18n.t('notice.compliance_control.destroyed') + expect { + delete :destroy, compliance_control_set_id: compliance_control_set.id, id: compliance_control.id + }.to change(GenericAttributeMinMax, :count).by(-1) + expect(response).to have_http_status(302) end end end diff --git a/spec/factories/compliance_controls.rb b/spec/factories/compliance_controls.rb index cc9f7a822..01cdeb6d3 100644 --- a/spec/factories/compliance_controls.rb +++ b/spec/factories/compliance_controls.rb @@ -1,7 +1,7 @@ FactoryGirl.define do factory :compliance_control do sequence(:name) { |n| "Compliance control #{n}" } - type "ComplianceControl" + type "GenericAttributeMinMax" criticity :warning code "code" comment "Text" diff --git a/spec/models/compliance_control_spec.rb b/spec/models/compliance_control_spec.rb index d65e654cc..e11873144 100644 --- a/spec/models/compliance_control_spec.rb +++ b/spec/models/compliance_control_spec.rb @@ -6,7 +6,7 @@ RSpec.describe ComplianceControl, type: :model do end it { should belong_to :compliance_control_set } - it { should has_one(:compliance_control_block).dependent(:destroy) } } + it { should have_one(:compliance_control_block).dependent(:destroy) } it { should validate_presence_of :criticity } it { should validate_presence_of :name } -- cgit v1.2.3 From 86abe568ce4c04d14df882ece44576ff069c4a3c Mon Sep 17 00:00:00 2001 From: Xinhui Date: Wed, 27 Sep 2017 16:05:29 +0200 Subject: Add 'all' option to transport_modes Refs #4518 --- app/models/compliance_control_block.rb | 4 ++++ app/views/compliance_controls/_form.html.slim | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/compliance_control_block.rb b/app/models/compliance_control_block.rb index 12b10ab2a..a08e271f6 100644 --- a/app/models/compliance_control_block.rb +++ b/app/models/compliance_control_block.rb @@ -9,4 +9,8 @@ class ComplianceControlBlock < ActiveRecord::Base def set_compliance_control_set self.compliance_control_set = self.compliance_control.compliance_control_set end + + def self.transport_modes + ["all"] + StifTransportModeEnumerations.transport_mode.values + end end diff --git a/app/views/compliance_controls/_form.html.slim b/app/views/compliance_controls/_form.html.slim index c9e1c0fcc..bb8f68464 100644 --- a/app/views/compliance_controls/_form.html.slim +++ b/app/views/compliance_controls/_form.html.slim @@ -13,7 +13,7 @@ = f.simple_fields_for :compliance_control_block do |c| = c.input :name - = c.input :transport_mode, as: :select, collection:StifTransportModeEnumerations.transport_mode.options + = c.input :transport_mode, as: :select, collection:ComplianceControlBlock.transport_modes end .separator -- cgit v1.2.3 From ea0cf8c5e11ddbd61eed8cd825ac923ad947cdf4 Mon Sep 17 00:00:00 2001 From: cedricnjanga Date: Wed, 27 Sep 2017 12:28:23 +0200 Subject: Refs #4616 put generic_attribute compliance control inside a folder --- app/models/generic_attribute_control/min_max.rb | 17 ++++++++++++++++ app/models/generic_attribute_control/pattern.rb | 13 ++++++++++++ app/models/generic_attribute_control/uniqueness.rb | 13 ++++++++++++ app/models/generic_attribute_min_max.rb | 23 ---------------------- app/models/generic_attribute_pattern.rb | 23 ---------------------- app/models/generic_attribute_uniqueness.rb | 23 ---------------------- 6 files changed, 43 insertions(+), 69 deletions(-) create mode 100644 app/models/generic_attribute_control/min_max.rb create mode 100644 app/models/generic_attribute_control/pattern.rb create mode 100644 app/models/generic_attribute_control/uniqueness.rb delete mode 100644 app/models/generic_attribute_min_max.rb delete mode 100644 app/models/generic_attribute_pattern.rb delete mode 100644 app/models/generic_attribute_uniqueness.rb diff --git a/app/models/generic_attribute_control/min_max.rb b/app/models/generic_attribute_control/min_max.rb new file mode 100644 index 000000000..6a2e1f284 --- /dev/null +++ b/app/models/generic_attribute_control/min_max.rb @@ -0,0 +1,17 @@ +module GenericAttributeControl + class MinMax < ComplianceControl + hstore_accessor :control_attributes, minimum: :integer, maximum: :integer + + @@default_criticity = :warning + @@default_code = "3-Generic-2" + + validate :min_max_values + def min_max_values + true + end + + def self.dynamic_attributes + self.hstore_metadata_for_control_attributes.keys + end + end +end diff --git a/app/models/generic_attribute_control/pattern.rb b/app/models/generic_attribute_control/pattern.rb new file mode 100644 index 000000000..5b27da54e --- /dev/null +++ b/app/models/generic_attribute_control/pattern.rb @@ -0,0 +1,13 @@ +module GenericAttributeControl + class Pattern < ComplianceControl + hstore_accessor :control_attributes, value: :string, pattern: :string + + @@default_criticity = :warning + @@default_code = "3-Generic-3" + + validate :pattern_match + def pattern_match + true + end + end +end \ No newline at end of file diff --git a/app/models/generic_attribute_control/uniqueness.rb b/app/models/generic_attribute_control/uniqueness.rb new file mode 100644 index 000000000..4f1a82083 --- /dev/null +++ b/app/models/generic_attribute_control/uniqueness.rb @@ -0,0 +1,13 @@ +module GenericAttributeControl + class Uniqueness < ComplianceControl + hstore_accessor :control_attributes, name: :string + + @@default_criticity = :warning + @@default_code = "3-Generic-3" + + validate :unique_values + def unique_values + true + end + end +end \ No newline at end of file diff --git a/app/models/generic_attribute_min_max.rb b/app/models/generic_attribute_min_max.rb deleted file mode 100644 index 91bf285f0..000000000 --- a/app/models/generic_attribute_min_max.rb +++ /dev/null @@ -1,23 +0,0 @@ -class GenericAttributeMinMax < ComplianceControl - hstore_accessor :control_attributes, minimum: :integer, maximum: :integer - - @@default_criticity = :warning - @@default_code = "3-Generic-2" - - validate :min_max_values - - def min_max_values - true - end - - def self.dynamic_attributes - self.hstore_metadata_for_control_attributes.keys - end - - # after_initialize do - # self.name = 'GenericAttributeMinMax' - # self.code = @@default_code - # self.criticity = @@default_criticity - # end - -end diff --git a/app/models/generic_attribute_pattern.rb b/app/models/generic_attribute_pattern.rb deleted file mode 100644 index 0043f1563..000000000 --- a/app/models/generic_attribute_pattern.rb +++ /dev/null @@ -1,23 +0,0 @@ -#module ComplianceControls - - class GenericAttributePattern < ComplianceControl - - hstore_accessor :control_attributes, value: :string, pattern: :string - - @@default_criticity = :warning - @@default_code = "3-Generic-3" - - validate :pattern_match - def pattern_match - true - end - - after_initialize do - self.name = 'GenericAttributeMinMax' - self.code = @@default_code - self.criticity = @@default_criticity - end - - end - -#end \ No newline at end of file diff --git a/app/models/generic_attribute_uniqueness.rb b/app/models/generic_attribute_uniqueness.rb deleted file mode 100644 index dcf4a16c2..000000000 --- a/app/models/generic_attribute_uniqueness.rb +++ /dev/null @@ -1,23 +0,0 @@ -#module ComplianceControls - - class GenericAttributeUniqueness < ComplianceControl - - hstore_accessor :control_attributes, name: :string - - @@default_criticity = :warning - @@default_code = "3-Generic-3" - - validate :unique_values - def unique_values - true - end - - after_initialize do - self.name = 'GenericAttributeMinMax' - self.code = @@default_code - self.criticity = @@default_criticity - end - - end - -#end \ No newline at end of file -- cgit v1.2.3 From eb761e221efc3ce0b09bfea96415907afac33d4a Mon Sep 17 00:00:00 2001 From: cedricnjanga Date: Wed, 27 Sep 2017 12:31:02 +0200 Subject: Refs #4615 Refacto compliance control models and add origin_code to ComplianceControl model --- app/models/compliance_control.rb | 14 +++++++++++++- app/models/journey_pattern_control/duplicates.rb | 6 ------ app/models/journey_pattern_control/vehicle_journey.rb | 6 ------ app/models/line_control/route.rb | 6 ------ app/models/route_control/duplicates.rb | 6 ------ app/models/route_control/journey_pattern.rb | 6 ------ app/models/route_control/minimum_length.rb | 6 ------ app/models/route_control/omnibus_journey_pattern.rb | 6 ------ app/models/route_control/opposite_route.rb | 7 ------- app/models/route_control/opposite_route_terminus.rb | 6 ------ app/models/route_control/speed.rb | 6 ------ app/models/route_control/stop_points_in_journey_pattern.rb | 6 ------ app/models/route_control/time_table.rb | 6 ------ app/models/route_control/unactivated_stop_points.rb | 6 ------ app/models/route_control/vehicle_journey_at_stops.rb | 6 ------ app/models/route_control/zdl_stop_area.rb | 6 ------ .../routing_constaint_zone_control/maximum_length.rb | 6 ------ .../routing_constaint_zone_control/minimum_length.rb | 6 ------ .../unactivated_stop_point.rb | 6 ------ app/models/vechicle_journey_control/delta.rb | 6 ------ app/models/vechicle_journey_control/waiting_time.rb | 6 ------ ...0170927095022_add_origin_code_to_compliance_controls.rb | 5 +++++ 22 files changed, 18 insertions(+), 122 deletions(-) create mode 100644 db/migrate/20170927095022_add_origin_code_to_compliance_controls.rb diff --git a/app/models/compliance_control.rb b/app/models/compliance_control.rb index 763a42029..9c3083695 100644 --- a/app/models/compliance_control.rb +++ b/app/models/compliance_control.rb @@ -4,11 +4,15 @@ class ComplianceControl < ActiveRecord::Base has_one :compliance_control_block, dependent: :destroy accepts_nested_attributes_for :compliance_control_block + @@default_criticity = :warning + @@default_code = "" + enumerize :criticity, in: %i(info warning error), scope: true, default: :info validates :criticity, presence: true validates :name, presence: true validates :code, presence: true + validates :origin_code, presence: true validates :compliance_control_set, presence: true def self.policy_class @@ -23,8 +27,16 @@ class ComplianceControl < ActiveRecord::Base end super end + + before_validation(on: :create) do + self.name = self.class.name + self.code = @@default_code + self.origin_code = @@default_code + self.criticity = @@default_criticity + end + end # Ensure STI subclasses are loaded # http://guides.rubyonrails.org/autoloading_and_reloading_constants.html#autoloading-and-sti -require_dependency 'generic_attribute_min_max' +require_dependency 'generic_attribute_control/min_max' diff --git a/app/models/journey_pattern_control/duplicates.rb b/app/models/journey_pattern_control/duplicates.rb index 78ca07e90..d3908cfc0 100644 --- a/app/models/journey_pattern_control/duplicates.rb +++ b/app/models/journey_pattern_control/duplicates.rb @@ -3,11 +3,5 @@ module JourneyPatternControl @@default_criticity = :warning @@default_code = "3-JourneyPattern-1" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/app/models/journey_pattern_control/vehicle_journey.rb b/app/models/journey_pattern_control/vehicle_journey.rb index a90c16138..d7151f147 100644 --- a/app/models/journey_pattern_control/vehicle_journey.rb +++ b/app/models/journey_pattern_control/vehicle_journey.rb @@ -3,11 +3,5 @@ module JourneyPatternControl @@default_criticity = :warning @@default_code = "3-JourneyPattern-2" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end \ No newline at end of file diff --git a/app/models/line_control/route.rb b/app/models/line_control/route.rb index 8ac13a080..21c5eca06 100644 --- a/app/models/line_control/route.rb +++ b/app/models/line_control/route.rb @@ -3,11 +3,5 @@ module LineControl @@default_criticity = :warning @@default_code = "3-Line-1" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end \ No newline at end of file diff --git a/app/models/route_control/duplicates.rb b/app/models/route_control/duplicates.rb index 379d7cf98..fb9c34e0a 100644 --- a/app/models/route_control/duplicates.rb +++ b/app/models/route_control/duplicates.rb @@ -3,11 +3,5 @@ module RouteControl @@default_criticity = :warning @@default_code = "3-Route-4" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/app/models/route_control/journey_pattern.rb b/app/models/route_control/journey_pattern.rb index 0559fac42..08f603d8f 100644 --- a/app/models/route_control/journey_pattern.rb +++ b/app/models/route_control/journey_pattern.rb @@ -3,11 +3,5 @@ module RouteControl @@default_criticity = :warning @@default_code = "3-Route-3" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end \ No newline at end of file diff --git a/app/models/route_control/minimum_length.rb b/app/models/route_control/minimum_length.rb index 14bc7064f..f42b88748 100644 --- a/app/models/route_control/minimum_length.rb +++ b/app/models/route_control/minimum_length.rb @@ -3,11 +3,5 @@ module RouteControl @@default_criticity = :error @@default_code = "3-Route-6" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/app/models/route_control/omnibus_journey_pattern.rb b/app/models/route_control/omnibus_journey_pattern.rb index 2f09ff735..3b9f6d06f 100644 --- a/app/models/route_control/omnibus_journey_pattern.rb +++ b/app/models/route_control/omnibus_journey_pattern.rb @@ -3,11 +3,5 @@ module RouteControl @@default_criticity = :warning @@default_code = "3-Route-9" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/app/models/route_control/opposite_route.rb b/app/models/route_control/opposite_route.rb index d5f2bc59e..e91b081e2 100644 --- a/app/models/route_control/opposite_route.rb +++ b/app/models/route_control/opposite_route.rb @@ -3,12 +3,5 @@ module RouteControl @@default_criticity = :error @@default_code = "3-Route-2" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end - end end diff --git a/app/models/route_control/opposite_route_terminus.rb b/app/models/route_control/opposite_route_terminus.rb index e72229ca3..fd62b7684 100644 --- a/app/models/route_control/opposite_route_terminus.rb +++ b/app/models/route_control/opposite_route_terminus.rb @@ -3,11 +3,5 @@ module RouteControl @@default_criticity = :warning @@default_code = "3-Route-5" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end \ No newline at end of file diff --git a/app/models/route_control/speed.rb b/app/models/route_control/speed.rb index fb07b5c87..0a2b6ac76 100644 --- a/app/models/route_control/speed.rb +++ b/app/models/route_control/speed.rb @@ -5,11 +5,5 @@ module VehicleJourneyControl @@default_criticity = :warning @@default_code = "3-VehicleJourney-2" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/app/models/route_control/stop_points_in_journey_pattern.rb b/app/models/route_control/stop_points_in_journey_pattern.rb index 195257a4a..dced6c005 100644 --- a/app/models/route_control/stop_points_in_journey_pattern.rb +++ b/app/models/route_control/stop_points_in_journey_pattern.rb @@ -3,11 +3,5 @@ module RouteControl @@default_criticity = :error @@default_code = "3-Route-6" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/app/models/route_control/time_table.rb b/app/models/route_control/time_table.rb index 911807ba9..5d0f21b40 100644 --- a/app/models/route_control/time_table.rb +++ b/app/models/route_control/time_table.rb @@ -3,11 +3,5 @@ module VehicleJourneyControl @@default_criticity = :error @@default_code = "3-VehicleJourney-4" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/app/models/route_control/unactivated_stop_points.rb b/app/models/route_control/unactivated_stop_points.rb index 8ab680490..dee846cbb 100644 --- a/app/models/route_control/unactivated_stop_points.rb +++ b/app/models/route_control/unactivated_stop_points.rb @@ -3,11 +3,5 @@ module RouteControl @@default_criticity = :warning @@default_code = "3-Route-10" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/app/models/route_control/vehicle_journey_at_stops.rb b/app/models/route_control/vehicle_journey_at_stops.rb index 02a43fb10..149282fe6 100644 --- a/app/models/route_control/vehicle_journey_at_stops.rb +++ b/app/models/route_control/vehicle_journey_at_stops.rb @@ -3,11 +3,5 @@ module VehicleJourneyControl @@default_criticity = :error @@default_code = "3-VehicleJourney-5" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/app/models/route_control/zdl_stop_area.rb b/app/models/route_control/zdl_stop_area.rb index 4561c9b2e..088a1d2f2 100644 --- a/app/models/route_control/zdl_stop_area.rb +++ b/app/models/route_control/zdl_stop_area.rb @@ -3,11 +3,5 @@ module RouteControl @@default_criticity = :warning @@default_code = "3-Route-1" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/app/models/routing_constaint_zone_control/maximum_length.rb b/app/models/routing_constaint_zone_control/maximum_length.rb index fd63ffeda..4d289de63 100644 --- a/app/models/routing_constaint_zone_control/maximum_length.rb +++ b/app/models/routing_constaint_zone_control/maximum_length.rb @@ -3,11 +3,5 @@ module RoutingConstaintZoneControl @@default_criticity = :warning @@default_code = "3-ITL-2" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end \ No newline at end of file diff --git a/app/models/routing_constaint_zone_control/minimum_length.rb b/app/models/routing_constaint_zone_control/minimum_length.rb index c17bbc834..28f0791a7 100644 --- a/app/models/routing_constaint_zone_control/minimum_length.rb +++ b/app/models/routing_constaint_zone_control/minimum_length.rb @@ -3,11 +3,5 @@ module RoutingConstaintZoneControl @@default_criticity = :warning @@default_code = "3-ITL-3" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end \ No newline at end of file diff --git a/app/models/routing_constaint_zone_control/unactivated_stop_point.rb b/app/models/routing_constaint_zone_control/unactivated_stop_point.rb index 92a1d1a58..fe5381a34 100644 --- a/app/models/routing_constaint_zone_control/unactivated_stop_point.rb +++ b/app/models/routing_constaint_zone_control/unactivated_stop_point.rb @@ -3,11 +3,5 @@ module RoutingConstaintZoneControl @@default_criticity = :warning @@default_code = "3-ITL-1" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/app/models/vechicle_journey_control/delta.rb b/app/models/vechicle_journey_control/delta.rb index d4e1e6eca..d77eff48a 100644 --- a/app/models/vechicle_journey_control/delta.rb +++ b/app/models/vechicle_journey_control/delta.rb @@ -5,11 +5,5 @@ module VehicleJourneyControl @@default_criticity = :warning @@default_code = "3-VehicleJourney-3" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/app/models/vechicle_journey_control/waiting_time.rb b/app/models/vechicle_journey_control/waiting_time.rb index a7e90b6ac..cbffa5526 100644 --- a/app/models/vechicle_journey_control/waiting_time.rb +++ b/app/models/vechicle_journey_control/waiting_time.rb @@ -3,11 +3,5 @@ module VehicleJourneyControl @@default_criticity = :warning @@default_code = "3-VehicleJourney-1" - - after_initialize do - self.name = self.class.name - self.code = @@default_code - self.criticity = @@default_criticity - end end end diff --git a/db/migrate/20170927095022_add_origin_code_to_compliance_controls.rb b/db/migrate/20170927095022_add_origin_code_to_compliance_controls.rb new file mode 100644 index 000000000..36f109b91 --- /dev/null +++ b/db/migrate/20170927095022_add_origin_code_to_compliance_controls.rb @@ -0,0 +1,5 @@ +class AddOriginCodeToComplianceControls < ActiveRecord::Migration + def change + add_column :compliance_controls, :origin_code, :string + end +end -- cgit v1.2.3 From 5911206bbadb2c3c9609f8be0ce1affd6584015e Mon Sep 17 00:00:00 2001 From: cedricnjanga Date: Wed, 27 Sep 2017 16:08:19 +0200 Subject: Refs #4615 Change spec and controller regarding to the ComplianceControl models changes --- app/controllers/compliance_controls_controller.rb | 2 +- app/models/compliance_control.rb | 8 ++++---- spec/factories/compliance_controls.rb | 1 + spec/models/compliance_control_spec.rb | 24 ++++++++++++++++++++--- 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb index 7deeab01d..b4fb2f1de 100644 --- a/app/controllers/compliance_controls_controller.rb +++ b/app/controllers/compliance_controls_controller.rb @@ -19,7 +19,7 @@ class ComplianceControlsController < BreadcrumbController end def compliance_control_params - base = [:name, :code, :criticity, :comment, :control_attributes, :type, compliance_control_block_attributes: [:name, :transport_mode]] + base = [:name, :code, :origin_code, :criticity, :comment, :control_attributes, :type, compliance_control_block_attributes: [:name, :transport_mode]] permited = base + dynamic_attributes_params params.require(:compliance_control).permit(permited) end diff --git a/app/models/compliance_control.rb b/app/models/compliance_control.rb index 9c3083695..c5389e832 100644 --- a/app/models/compliance_control.rb +++ b/app/models/compliance_control.rb @@ -29,10 +29,10 @@ class ComplianceControl < ActiveRecord::Base end before_validation(on: :create) do - self.name = self.class.name - self.code = @@default_code - self.origin_code = @@default_code - self.criticity = @@default_criticity + self.name ||= self.class.name + self.code ||= @@default_code + self.origin_code ||= @@default_code + self.criticity ||= @@default_criticity end end diff --git a/spec/factories/compliance_controls.rb b/spec/factories/compliance_controls.rb index 01cdeb6d3..b1b6bd837 100644 --- a/spec/factories/compliance_controls.rb +++ b/spec/factories/compliance_controls.rb @@ -4,6 +4,7 @@ FactoryGirl.define do type "GenericAttributeMinMax" criticity :warning code "code" + origin_code "code" comment "Text" association :compliance_control_set end diff --git a/spec/models/compliance_control_spec.rb b/spec/models/compliance_control_spec.rb index e11873144..226e7ae74 100644 --- a/spec/models/compliance_control_spec.rb +++ b/spec/models/compliance_control_spec.rb @@ -1,14 +1,32 @@ require 'rails_helper' RSpec.describe ComplianceControl, type: :model do + + let(:compliance_control) { create :compliance_control } + it 'should have a valid factory' do - expect(FactoryGirl.build(:compliance_control)).to be_valid + expect(compliance_control).to be_valid end it { should belong_to :compliance_control_set } it { should have_one(:compliance_control_block).dependent(:destroy) } - it { should validate_presence_of :criticity } - it { should validate_presence_of :name } it { should validate_presence_of :code } + it { should validate_presence_of :origin_code } + + it 'should validate_presence_of criticity' do + compliance_control.criticity = nil + expect(compliance_control).not_to be_valid + end + + it 'should validate_presence_of name' do + compliance_control.name = nil + expect(compliance_control).not_to be_valid + end + + #TODO dont know why the 'shortcuts' below to validates presence dont work + # That's why we dont it 'manually' + # it { should validate_presence_of :criticity } + # it { should validate_presence_of :name } + end -- cgit v1.2.3 From 28a352d2c4cba71c796a3504513e0664cec92cb5 Mon Sep 17 00:00:00 2001 From: cedricnjanga Date: Wed, 27 Sep 2017 16:34:02 +0200 Subject: Refs #4615 Resolve rebase conflict --- app/controllers/compliance_controls_controller.rb | 2 +- config/initializers/apartment.rb | 2 +- spec/controllers/compliance_controls_controller_spec.rb | 4 ++-- spec/factories/compliance_controls.rb | 2 +- spec/models/compliance_control_spec.rb | 15 ++++++++++++--- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb index b4fb2f1de..eb1ba68ea 100644 --- a/app/controllers/compliance_controls_controller.rb +++ b/app/controllers/compliance_controls_controller.rb @@ -4,7 +4,7 @@ class ComplianceControlsController < BreadcrumbController def new @compliance_control_set = parent - @compliance_control = GenericAttributeMinMax.new + @compliance_control = GenericAttributeControl::MinMax.new @compliance_control.build_compliance_control_block end diff --git a/config/initializers/apartment.rb b/config/initializers/apartment.rb index 758eed588..aea06340f 100644 --- a/config/initializers/apartment.rb +++ b/config/initializers/apartment.rb @@ -48,7 +48,7 @@ Apartment.configure do |config| 'ImportMessage', 'ImportResource', 'ComplianceControl', - 'GenericAttributeMinMax', + 'GenericAttributeControl::MinMax', 'ComplianceControlSet', 'ComplianceControlBlock', 'ComplianceCheck', diff --git a/spec/controllers/compliance_controls_controller_spec.rb b/spec/controllers/compliance_controls_controller_spec.rb index 511b61b38..a39408ccb 100644 --- a/spec/controllers/compliance_controls_controller_spec.rb +++ b/spec/controllers/compliance_controls_controller_spec.rb @@ -6,7 +6,7 @@ RSpec.describe ComplianceControlsController, type: :controller do let(:compliance_control) { create(:compliance_control) } let!(:compliance_control_set) { compliance_control.compliance_control_set } - let(:compliance_control_params) { compliance_control.as_json.merge(type: 'GenericAttributeMinMax') } + let(:compliance_control_params) { compliance_control.as_json.merge(type: 'GenericAttributeControl::MinMax') } describe "GET show" do it 'should be successful' do @@ -47,7 +47,7 @@ RSpec.describe ComplianceControlsController, type: :controller do it 'should be successful' do expect { delete :destroy, compliance_control_set_id: compliance_control_set.id, id: compliance_control.id - }.to change(GenericAttributeMinMax, :count).by(-1) + }.to change(GenericAttributeControl::MinMax, :count).by(-1) expect(response).to have_http_status(302) end end diff --git a/spec/factories/compliance_controls.rb b/spec/factories/compliance_controls.rb index b1b6bd837..ced505565 100644 --- a/spec/factories/compliance_controls.rb +++ b/spec/factories/compliance_controls.rb @@ -1,7 +1,7 @@ FactoryGirl.define do factory :compliance_control do sequence(:name) { |n| "Compliance control #{n}" } - type "GenericAttributeMinMax" + type "GenericAttributeControl::MinMax" criticity :warning code "code" origin_code "code" diff --git a/spec/models/compliance_control_spec.rb b/spec/models/compliance_control_spec.rb index 226e7ae74..d7bffb0b2 100644 --- a/spec/models/compliance_control_spec.rb +++ b/spec/models/compliance_control_spec.rb @@ -11,9 +11,6 @@ RSpec.describe ComplianceControl, type: :model do it { should belong_to :compliance_control_set } it { should have_one(:compliance_control_block).dependent(:destroy) } - it { should validate_presence_of :code } - it { should validate_presence_of :origin_code } - it 'should validate_presence_of criticity' do compliance_control.criticity = nil expect(compliance_control).not_to be_valid @@ -24,9 +21,21 @@ RSpec.describe ComplianceControl, type: :model do expect(compliance_control).not_to be_valid end + it 'should validate_presence_of code' do + compliance_control.code = nil + expect(compliance_control).not_to be_valid + end + + it 'should validate_presence_of origin_code' do + compliance_control.origin_code = nil + expect(compliance_control).not_to be_valid + end + #TODO dont know why the 'shortcuts' below to validates presence dont work # That's why we dont it 'manually' # it { should validate_presence_of :criticity } # it { should validate_presence_of :name } + # it { should validate_presence_of :code } + # it { should validate_presence_of :origin_code } end -- cgit v1.2.3