Module: Trailblazer::Macro::Policy

Defined in:
lib/trailblazer/macro/guard.rb,
lib/trailblazer/macro/policy.rb,
lib/trailblazer/macro/pundit.rb

Defined Under Namespace

Modules: Guard, Pundit Classes: Eval

Class Method Summary collapse

Class Method Details

.Guard(proc, name: :default, &block) ⇒ Object



3
4
5
# 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) ⇒ Object



3
4
5
# 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, name: nil, &block) ⇒ Object

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



31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/trailblazer/macro/policy.rb', line 31

def self.step(condition, name: nil, &block)
  path = :"policy.#{name}.eval"
  task = Eval.new(name: name, path: path)

  injections = {
    Trailblazer::Activity::Railway.Inject() => {
      # :"policy.default.eval"
      path => ->(*) { condition }
    }
  }

  {task: task, id: path}.merge(injections)
end