Class: Sequel::Plugins::Privacy::AssociationPrivacyDSL
- Inherits:
-
Object
- Object
- Sequel::Plugins::Privacy::AssociationPrivacyDSL
- Extended by:
- T::Sig
- Defined in:
- lib/sequel/plugins/privacy.rb
Instance Method Summary collapse
- #can(action, *policies) ⇒ Object
- #finalize_association! ⇒ Object
-
#initialize(model_class, assoc_name, policy_resolver) ⇒ AssociationPrivacyDSL
constructor
A new instance of AssociationPrivacyDSL.
Constructor Details
#initialize(model_class, assoc_name, policy_resolver) ⇒ AssociationPrivacyDSL
Returns a new instance of AssociationPrivacyDSL.
58 59 60 61 62 63 |
# File 'lib/sequel/plugins/privacy.rb', line 58 def initialize(model_class, assoc_name, policy_resolver) @model_class = model_class @assoc_name = assoc_name @policy_resolver = policy_resolver @pending_policies = T.let({}, T::Hash[Symbol, T::Array[T.untyped]]) end |
Instance Method Details
#can(action, *policies) ⇒ Object
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/sequel/plugins/privacy.rb', line 66 def can(action, *policies) unless %i[add remove remove_all].include?(action) Kernel.raise ArgumentError, "Association action must be :add, :remove, or :remove_all, got #{action.inspect}" end resolved = @policy_resolver.(policies) @pending_policies[action] ||= [] T.must(@pending_policies[action]).concat(resolved) end |
#finalize_association! ⇒ Object
78 79 80 81 82 83 |
# File 'lib/sequel/plugins/privacy.rb', line 78 def finalize_association! @pending_policies.each do |action, policies| @model_class.register_association_policies(@assoc_name, action, policies) end @model_class.setup_association_privacy(@assoc_name) end |