aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2018-01-25 15:09:02 +0100
committerZog2018-01-25 17:18:03 +0100
commit9f6c7a5372d960eea49f5428975d7a92f6f91d33 (patch)
tree941ffd5005ecd2912c07b2b6897259538283e04f
parent2bf4cf2e3a9e54bc9b91bf3efcac721951df730d (diff)
downloadchouette-core-9f6c7a5372d960eea49f5428975d7a92f6f91d33.tar.bz2
ComplianceControlDecorator: Convert to new action links interface
* Decorate the `ComplianceControl` so we can show the action links from the decorator in the header. * Add a `decorates` to get `object_class` to work inside the decorator. * Define `AF83::Decorator.define_instance_class_method` in order to enable the `@compliance_control.class.METHOD` calls in the view to work. Thanks very much to Johan for figuring out a way to do that. Refs #5586
-rw-r--r--app/controllers/compliance_controls_controller.rb6
-rw-r--r--app/decorators/compliance_control_decorator.rb14
-rw-r--r--lib/af83/decorator.rb6
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