diff options
Diffstat (limited to 'app/controllers/compliance_controls_controller.rb')
| -rw-r--r-- | app/controllers/compliance_controls_controller.rb | 49 |
1 files changed, 30 insertions, 19 deletions
diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb index dad9b935a..e51d1eb74 100644 --- a/app/controllers/compliance_controls_controller.rb +++ b/app/controllers/compliance_controls_controller.rb @@ -1,38 +1,49 @@ class ComplianceControlsController < BreadcrumbController - include PolicyChecker defaults resource_class: ComplianceControl belongs_to :compliance_control_set - def index - index! do |format| - format.html { - @compliance_controls = decorate_compliance_controls(@compliance_controls) - } + def select_type + @sti_subclasses = ComplianceControl.subclasses + end + + def new + if params[:sti_class].blank? + flash[:notice] = I18n.t("compliance_controls.errors.mandatory_control_type") + redirect_to(action: :select_type) end + new! end def create - create!(notice: t('notice.compliance_control.created')) + puts build_resource.inspect + create! do |success, failure| + success.html { redirect_to compliance_control_set_path(parent) } + failure.html { render( :action => 'new' ) } + end end - def update - path = compliance_control_set_compliance_control_path(parent, resource) - update!(notice: t('notice.compliance_control.updated')) { path } - end + protected - def destroy - destroy!(notice: t('notice.compliance_control.destroyed')) + alias_method :compliance_control_set, :parent + alias_method :compliance_control, :resource + + def build_resource + get_resource_ivar || set_resource_ivar(compliance_control_class.send(:new, *resource_params)) end private - def decorate_compliance_controls(compliance_controls) - ModelDecorator.decorate( - compliance_controls, - with: ComplianceControlDecorator, - ) + + def compliance_control_class + (params[:sti_class] || params[:compliance_control][:type]).constantize + end + + def dynamic_attributes_params + compliance_control_class.dynamic_attributes end def compliance_control_params - params.require(:compliance_control).permit(:name, :code, :criticity, :comment, :control_attributes) + base = [:name, :code, :origin_code, :criticity, :comment, :control_attributes, :type, :compliance_control_block_id, :compliance_control_set_id] + permitted = base + dynamic_attributes_params + params.require(:compliance_control).permit(permitted) end end |
