module Trailblazer::Macro::Policy

Public Class Methods

Guard(proc, name: :default, &block) click to toggle source
# File lib/trailblazer/macro/guard.rb, line 3
def self.Guard(proc, name: :default, &block)
  Policy.step(Guard.build(proc), name: name)
end
Pundit(policy_class, action, name: :default) click to toggle source
# File lib/trailblazer/macro/pundit.rb, line 3
def self.Pundit(policy_class, action, name: :default)
  Policy.step(Pundit.build(policy_class, action), name: name)
end
step(condition, options, &block) click to toggle source

Adds the `yield` result to the pipe and treats it like a policy-compatible object at runtime.

# File lib/trailblazer/macro/policy.rb, line 29
def self.step(condition, options, &block)
  name = options[:name]
  path = :"policy.#{name}.eval"

  task = Eval.new(name: name, path: path)

  injection = Trailblazer::Activity::TaskWrap::Inject::Defaults::Extension(
    path => condition
  )

  {task: task, id: path, extensions: [injection]}
end