class Trailblazer::Macro::Policy::Pundit::Condition

Pundit::Condition is invoked at runtime when iterating the pipe.

Public Class Methods

new(policy_class, action) click to toggle source
# File lib/trailblazer/macro/pundit.rb, line 14
def initialize(policy_class, action)
  @policy_class, @action = policy_class, action
end

Public Instance Methods

call((options), *) click to toggle source

Instantiate the actual policy object, and call it.

# File lib/trailblazer/macro/pundit.rb, line 19
def call((options), *)
  policy = build_policy(options) # this translates to Pundit interface.
  result!(policy.send(@action), policy)
end

Private Instance Methods

build_policy(options) click to toggle source
# File lib/trailblazer/macro/pundit.rb, line 25
def build_policy(options)
  @policy_class.new(options[:current_user], options[:model])
end
result!(success, policy) click to toggle source
# File lib/trailblazer/macro/pundit.rb, line 29
def result!(success, policy)
  data = { policy: policy }
  data[:message] = "Breach" if !success # TODO: how to allow messages here?

  Trailblazer::Operation::Result.new(success, data)
end