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