aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZog2018-01-17 09:43:37 +0100
committerZog2018-01-25 17:17:59 +0100
commitb802b16973bbf760aa8af720856c4127656c2e07 (patch)
tree7e42ad87b056fbe88b62189cc2023b200127599d
parent377ddcd306fb9e61e734aaf3762e05f448938af0 (diff)
downloadchouette-core-b802b16973bbf760aa8af720856c4127656c2e07.tar.bz2
Refs #5586; Add a `feature` option on the `action_links`
-rw-r--r--lib/af83/decorator.rb5
-rw-r--r--lib/af83/enhanced_decorator.rb7
-rw-r--r--spec/lib/af83/decorator/decorator_spec.rb32
3 files changed, 43 insertions, 1 deletions
diff --git a/lib/af83/decorator.rb b/lib/af83/decorator.rb
index 80958fa02..d2e049857 100644
--- a/lib/af83/decorator.rb
+++ b/lib/af83/decorator.rb
@@ -196,6 +196,7 @@ class AF83::Decorator < ModelDecorator
end
enabled = enabled && check_policy(@options[:_policy]) if @options[:_policy].present?
+ enabled = enabled && check_feature(@options[:_feature]) if @options[:_feature].present?
enabled
end
@@ -204,6 +205,10 @@ class AF83::Decorator < ModelDecorator
@context.check_policy policy
end
+ def check_feature(feature)
+ @context.check_feature feature
+ end
+
def errors
"Missing attributes: #{@missing_attributes.to_sentence}"
end
diff --git a/lib/af83/enhanced_decorator.rb b/lib/af83/enhanced_decorator.rb
index 91a377f8c..4ade0980b 100644
--- a/lib/af83/enhanced_decorator.rb
+++ b/lib/af83/enhanced_decorator.rb
@@ -28,7 +28,7 @@ module AF83::EnhancedDecorator
def parse_options args
options = {}
- %i(weight primary secondary footer on action actions policy if groups group).each do |k|
+ %i(weight primary secondary footer on action actions policy feature if groups group).each do |k|
options[k] = args.delete(k) if args.has_key?(k)
end
link_options = args.dup
@@ -54,6 +54,7 @@ module AF83::EnhancedDecorator
link_options[:_if] = options.delete(:if)
link_options[:_policy] = options.delete(:policy)
+ link_options[:_feature] = options.delete(:feature)
[options, link_options]
end
end
@@ -79,4 +80,8 @@ module AF83::EnhancedDecorator
method = "#{policy}?"
h.policy(_object).send(method)
end
+
+ def check_feature feature
+ h.has_feature? feature
+ end
end
diff --git a/spec/lib/af83/decorator/decorator_spec.rb b/spec/lib/af83/decorator/decorator_spec.rb
index 789813063..32c76c22f 100644
--- a/spec/lib/af83/decorator/decorator_spec.rb
+++ b/spec/lib/af83/decorator/decorator_spec.rb
@@ -308,6 +308,38 @@ RSpec.describe AF83::Decorator, type: :decorator do
end
end
+ context "with a feature" do
+ let(:decorator) do
+ klass = Class.new(AF83::Decorator)
+ klass.with_instance_decorator do |instance_decorator|
+ instance_decorator.action_link href: "foo", content: "foo", feature: :foo
+ end
+ klass
+ end
+
+ context "when the feature is not present" do
+ before(:each) do
+ Draper::HelperProxy.any_instance.stub(:has_feature?){false}
+ end
+
+ it "should not return the link" do
+ links = decorated.action_links(:show)
+ expect(links.size).to eq 0
+ end
+ end
+
+ context "when the feature is present" do
+ before(:each) do
+ Draper::HelperProxy.any_instance.stub(:has_feature?){true}
+ end
+
+ it "should not return the link" do
+ links = decorated.action_links(:show)
+ expect(links.size).to eq 1
+ end
+ end
+ end
+
context "with a condition" do
context "set with 'with_condition'" do
context "as a value" do