Sha256: b26af7509e59fdc43741f6473e8a40ede249020c99b94918d075a32357d7918a

Contents?: true

Size: 784 Bytes

Versions: 4

Compression:

Stored size: 784 Bytes

Contents

require "trailblazer/operation/policy"
require "uber/option"

class Trailblazer::Operation
  module Policy
    module Guard
      def self.import!(operation, import, user_proc, options={}, insert_options={})
        Policy.add!(operation, import, options, insert_options) { Guard.build(user_proc) }
      end

      def self.build(callable)
        value = Uber::Option[callable]

        # call'ing the Uber::Option will run either proc or block.
        # this gets wrapped in a Operation::Result object.
        ->(options) { Result.new( !!value.(options), {} ) }
      end
    end # Guard

    def self.Guard(proc, name: :default, &block)
      options = {
        name:  name,
        path: "policy.#{name}.eval",
      }

      [Guard, [proc, options], block]
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
trailblazer-2.0.0 lib/trailblazer/operation/guard.rb
trailblazer-2.0.0.rc1 lib/trailblazer/operation/guard.rb
trailblazer-2.0.0.beta3 lib/trailblazer/operation/guard.rb
trailblazer-2.0.0.beta2 lib/trailblazer/operation/guard.rb