class Paradocs::Registry
Attributes
policies[R]
Public Class Methods
new()
click to toggle source
# File lib/paradocs/registry.rb, line 9 def initialize @policies = {} end
Public Instance Methods
coercions()
click to toggle source
# File lib/paradocs/registry.rb, line 13 def coercions policies end
policy(name, plcy = nil, &block)
click to toggle source
# File lib/paradocs/registry.rb, line 17 def policy(name, plcy = nil, &block) validate_policy_class(plcy) if plcy policies[name] = (plcy || BasePolicy.build(name, :instance_eval, &block)) self end
Private Instance Methods
validate_policy_class(plcy)
click to toggle source
# File lib/paradocs/registry.rb, line 26 def validate_policy_class(plcy) plcy_cls = plcy.is_a?(Class) ? plcy : plcy.class if plcy_cls < Paradocs::BasePolicy valid_overriden = plcy_cls.instance_method(:valid?).source_location != Paradocs::BasePolicy.instance_method(:valid?).source_location raise ConfigurationError.new("Overriding #valid? in #{plcy_cls} is forbidden. Override #validate instead") if valid_overriden else required_methods = [:valid?, :coerce, :eligible?, :meta_data, :policy_name] - plcy_cls.instance_methods raise ConfigurationError.new("Policy #{plcy_cls} should respond to #{required_methods}") unless required_methods.empty? return plcy unless Paradocs.config.explicit_errors return plcy if plcy_cls.respond_to?(:errors) raise ConfigurationError.new("Policy #{plcy_cls} should respond to .errors method") end end