Module: Trailblazer::Macro::Contract::Build

Defined in:
lib/trailblazer/macro/contract/build.rb

Class Method Summary collapse

Class Method Details

.call(options, circuit_options, name: "default", constant: nil, builder: nil) ⇒ Object

Build contract at runtime.



19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/trailblazer/macro/contract/build.rb', line 19

def self.call(options, circuit_options, name: "default", constant: nil, builder: nil)
  # TODO: we could probably clean this up a bit at some point.
  contract_class = constant || options[:"contract.#{name}.class"] # DISCUSS: Injection possible here?
  model          = options[:model]
  name           = :"contract.#{name}"

  options[name] = if builder
                    call_builder(options, circuit_options, builder: builder, constant: contract_class, name: name)
                  else
                    contract_class.new(model)
                  end
end

.call_builder(ctx, circuit_options, builder: raise, constant: raise, name: raise) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/trailblazer/macro/contract/build.rb', line 32

def self.call_builder(ctx, circuit_options, builder: raise, constant: raise, name: raise)
  tmp_options = ctx.to_hash.merge(
    constant: constant,
    name:     name
  )

  Trailblazer::Option(builder).(ctx, keyword_arguments: tmp_options, **circuit_options) # TODO: why can't we build the {builder} at compile time?
end