lib/.rbnext/3.0/action_policy/policy/reasons.rb in action_policy-0.5.7 vs lib/.rbnext/3.0/action_policy/policy/reasons.rb in action_policy-0.6.0
- old
+ new
@@ -29,10 +29,24 @@
def empty?() ; reasons.empty?; end
def present?() ; !empty?; end
+ def merge(other)
+ other.reasons.each do |policy_class, rules|
+ reasons[policy_class] ||= []
+
+ rules.each do |rule|
+ if rule.is_a?(::Hash)
+ add_detailed_reason(reasons[policy_class], rule)
+ else
+ add_non_detailed_reason(reasons[policy_class], rule)
+ end
+ end
+ end
+ end
+
private
def add_non_detailed_reason(store, rule)
index =
if store.last.is_a?(::Hash)
@@ -180,11 +194,11 @@
# Add additional details to the failure reason
def details
result.details ||= {}
end
- def allowed_to?(rule, record = :__undef__, **options)
+ def allowed_to?(rule, record = :__undef__, inline_reasons: false, **options)
res =
if (record == :__undef__ || record == self.record) && options.empty?
rule = resolve_rule(rule)
policy = self
with_clean_result { apply(rule) }
@@ -194,10 +208,12 @@
policy.apply(rule)
policy.result
end
- result&.reasons&.add(policy, rule, res.details) if res.fail?
+ if res.fail? && result&.reasons
+ inline_reasons ? result.reasons.merge(res.reasons) : result.reasons.add(policy, rule, res.details)
+ end
res.clear_details
res.success?
end