exports.Actor = class extends require('../actor').Actor

  @build: (freakset, scope, opts, fn) ->
    [freakset, scope, opts, fn] = @::ensureArgs(arguments...)

    if typeof opts == "function"
      fn = opts
      opts = undefined

    freakset.modifyStack freakset, { type: "guard", scope: scope, fn: fn }, opts

  @run: (freakset, actor) ->
    # Run the actor in the context of this
    success = actor.fn(freakset)
    if success is yes
      freakset.commit()
    else
      freakset.finish()
