lib/policy.rb in policy-1.2.0 vs lib/policy.rb in policy-2.0.0

- old
+ new

@@ -1,40 +1,59 @@ # encoding: utf-8 -require "adamantium" +require "active_model" -# Policy Object builder -# -# @!parse include Policy::Interface -module Policy +require_relative "policy/version" - require_relative "policy/version" - require_relative "policy/validations" - require_relative "policy/violation_error" - require_relative "policy/interface" - require_relative "policy/follower" +require_relative "policy/base" +require_relative "policy/base/node" +require_relative "policy/base/and" +require_relative "policy/base/or" +require_relative "policy/base/xor" +require_relative "policy/base/not" +require_relative "policy/base/negator" - class << self +require_relative "policy/follower" +require_relative "policy/follower/name_error" +require_relative "policy/follower/policies" +require_relative "policy/follower/violation_error" - # Builds a base class for the policy object with some attributes - # - # @example - # class TransactionPolicy < Policy.new(:debet, :credit) - # end - # - # @param [Array<Symbol>] attributes - # names for the policy object attributes - # - # @return [Struct] - def new(*attributes) - Struct.new(*attributes) do - include Interface +# The namespace for the code of the 'policy' gem +module Policy - def self.name - "Policy" - end - end - end + # Builds a composite policy by applying method AND to policies + # + # @param [Policy::Base, Array<Policy::Base>] policies + # + # @return [Policy::Base] + def self.and(*policies) + Base::And.new(*policies) + end - end # Policy singleton class + # Builds a composite policy by applying method OR to policies + # + # @param [Policy::Base, Array<Policy::Base>] policies + # + # @return [Policy::Base] + def self.or(*policies) + Base::Or.new(*policies) + end + + # Builds a composite policy by applying method XOR to policies + # + # @param [Policy::Base, Array<Policy::Base>] policies + # + # @return [Policy::Base] + def self.xor(*policies) + Base::Xor.new(*policies) + end + + # Builds the negation of policy + # + # @param [Policy::Base] policy + # + # @return [Policy::Base] + def self.not(policy) + Base::Not.new(policy) + end end # module Policy