aboutsummaryrefslogtreecommitdiffstats
path: root/app/controllers/compliance_controls_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/compliance_controls_controller.rb')
-rw-r--r--app/controllers/compliance_controls_controller.rb49
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