Sha256: ada63a7c8c0752d5c04457f392f269b820371b77913a95d382640746b82bb929

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

# encoding: utf-8

module Policy

  module Base

    # The base class for composite policies
    #
    # @api private
    class Node
      include Policy::Base

      # @!scope class
      # @!method new(*policies)
      # Creates the node (composite policy) from its parts
      #
      # @param [<Policy::Base>, Array<Policy::Base>] policies
      #
      # @return [Policy::Base::Node]
      def initialize(*policies)
        @policies = policies
      end

      # @!attribute [r] policies
      # The parts of the composite policy
      #
      # @return [Array<Policy::Base>]
      attr_reader :policies

      # @abstract
      # Validates a composed policy and picks errors from its parts
      #
      # @return [false]
      def valid?
        errors.clear
        yield # returns true if a composition valid
        policies.each(&method(:pick_errors_from))
        false
      end

      private

      def any_valid?
        policies.detect(&:valid?)
      end

      def any_invalid?
        policies.detect(&:invalid?)
      end

      def pick_errors_from(item)
        item.errors.full_messages.each { |text| errors.add :base, text }
      end

    end # class Node

  end # module Base

end # module Policy

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
policy-2.0.0 lib/policy/base/node.rb