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