Module: Pragma::Macro::Contract

Defined in:
lib/pragma/macro/contract/build.rb,
lib/pragma/macro/contract/persist.rb,
lib/pragma/macro/contract/validate.rb

Class Method Summary collapse

Class Method Details

.Build(name: 'default', constant: nil, builder: nil) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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') ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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