module Pragma::Macro::Contract

Public Class Methods

Build(name: 'default', constant: nil, builder: nil) click to toggle source
# File lib/pragma/macro/contract/build.rb, line 8
def self.Build(name: 'default', constant: nil, builder: nil)
  step = lambda do |input, options|
    Macro.require_skill('Contract::Build', "contract.#{name}.class", options)

    Trailblazer::Operation::Contract::Build.for(
      input,
      options,
      name: name,
      constant: constant,
      builder: builder
    ).tap do |contract|
      contract.current_user = options['current_user']
    end
  end

  [step, name: "contract.#{name}.build"]
end
Persist(method: :save, name: 'default') click to toggle source
# File lib/pragma/macro/contract/persist.rb, line 8
def self.Persist(method: :save, name: 'default')
  step = lambda do |input, options|
    Macro.require_skill('Contract::Persist', "contract.#{name}.class", options)

    Trailblazer::Operation::Pipetree::Step.new(
      Trailblazer::Operation::Contract::Persist(method: method, name: name).first
    ).call(input, options).tap do |result|
      unless result
        options['result.response'] = Pragma::Operation::Response::UnprocessableEntity.new(
          errors: options["contract.#{name}"].model.errors.messages
        ).decorate_with(Pragma::Decorator::Error)
      end
    end
  end

  [step, name: "contract.#{name}.#{method}"]
end
Validate(name: 'default', **args) click to toggle source
# File lib/pragma/macro/contract/validate.rb, line 8
def self.Validate(name: 'default', **args)
  step = lambda do |input, options|
    Macro.require_skill('Contract::Validate', "contract.#{name}.class", options)

    Trailblazer::Operation::Pipetree::Step.new(
      Trailblazer::Operation::Contract::Validate(**args).first
    ).call(input, options).tap do |result|
      unless result
        options['result.response'] = Pragma::Operation::Response::UnprocessableEntity.new(
          errors: options["contract.#{name}"].errors.messages
        ).decorate_with(Pragma::Decorator::Error)
      end
    end
  end

  [step, name: "contract.#{name}.validate"]
end