flows icon indicating copy to clipboard operation
flows copied to clipboard

Input contracts

Open rkolesnev-vineti opened this issue 4 years ago • 0 comments

Works like OutputContract plugin but also checks argument structure. Transformations are applied.

Draft DSL:

class BusinessOperation
  include Flows::Result::Helpers
  include Flows::Plugin::InputContract

  input do
    arg :username, Contract
    arg :realname { either(String, Symbol) } # block works like Contract.make
    rest_args :rest_of_the_names { array(String) }

    kwarg :new_status, OtherContract
    rest_kwargs :rest_of_the_kwargs { hash(Symbol, String) }
  end

  # skip_input_contract

  def call(username, realname,  *rest_of_the_name, new_status:, **rest_of_the_kwargs)
  end
end

Challenges here: it'd be ideal to check the existing method argument structure and raise an error (at least on instance initialization) if the contract defines a different structure.

rkolesnev-vineti avatar Jun 30 '20 10:06 rkolesnev-vineti