diff options
| -rw-r--r-- | app/controllers/compliance_controls_controller.rb | 6 | ||||
| -rw-r--r-- | app/decorators/compliance_control_decorator.rb | 14 | ||||
| -rw-r--r-- | lib/af83/decorator.rb | 6 |
3 files changed, 26 insertions, 0 deletions
diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb index dfbecaa71..73dc18f59 100644 --- a/app/controllers/compliance_controls_controller.rb +++ b/app/controllers/compliance_controls_controller.rb @@ -8,6 +8,12 @@ class ComplianceControlsController < ChouetteController @sti_subclasses = ComplianceControl.subclasses end + def show + show! do + @compliance_control = @compliance_control.decorate + end + end + def new if params[:sti_class].blank? flash[:notice] = I18n.t("compliance_controls.errors.mandatory_control_type") diff --git a/app/decorators/compliance_control_decorator.rb b/app/decorators/compliance_control_decorator.rb index a0445faa2..c57a7ccc7 100644 --- a/app/decorators/compliance_control_decorator.rb +++ b/app/decorators/compliance_control_decorator.rb @@ -1,4 +1,6 @@ class ComplianceControlDecorator < AF83::Decorator + decorates ComplianceControl + with_instance_decorator do |instance_decorator| instance_decorator.show_action_link do |l| l.content h.t('compliance_control_sets.actions.show') @@ -30,4 +32,16 @@ class ComplianceControlDecorator < AF83::Decorator l.data confirm: h.t('compliance_controls.actions.destroy_confirm') end end + + define_instance_class_method :predicate do + object_class.predicate + end + + define_instance_class_method :prerequisite do + object_class.prerequisite + end + + define_instance_class_method :dynamic_attributes do + object_class.dynamic_attributes + end end diff --git a/lib/af83/decorator.rb b/lib/af83/decorator.rb index 1b9574053..f990555fe 100644 --- a/lib/af83/decorator.rb +++ b/lib/af83/decorator.rb @@ -32,6 +32,12 @@ class AF83::Decorator < ModelDecorator instance_decorator.send(:define_method, method_name, &block) end + # Defines a class method on the decorated object's class. These + # can be called like `object.class.my_method`. + def self.define_instance_class_method method_name, &block + instance_decorator.send(:define_singleton_method, method_name, &block) + end + class ActionLinks attr_reader :options |
