Module: Gate::Rails::ClassMethods

Defined in:
lib/gate/rails.rb

Instance Method Summary collapse

Instance Method Details

#_contractsObject



14
15
16
# File 'lib/gate/rails.rb', line 14

def _contracts
  @_contracts ||= {}
end

#contract(klass = nil, handler: :handle_invalid_params, &block) ⇒ Object



30
31
32
33
34
35
# File 'lib/gate/rails.rb', line 30

def contract(klass = nil, handler: :handle_invalid_params, &block)
  @_contract = {
    contract: klass ? klass.new : Dry::Validation.Contract(&block),
    handler: handler,
  }
end

#contract_for(contract_name) ⇒ Object



18
19
20
21
22
# File 'lib/gate/rails.rb', line 18

def contract_for(contract_name)
  _contracts.fetch(contract_name) do
    raise ContractNotDefined, "Missing `#{contract_name}` contract"
  end.fetch(:contract)
end

#handler_for(contract_name) ⇒ Object



24
25
26
27
28
# File 'lib/gate/rails.rb', line 24

def handler_for(contract_name)
  _contracts.fetch(contract_name) do
    raise ContractNotDefined, "Missing `#{contract_name}` contract"
  end.fetch(:handler)
end

#method_added(method_name) ⇒ Object



37
38
39
40
41
42
43
44
# File 'lib/gate/rails.rb', line 37

def method_added(method_name)
  if instance_variable_defined?(:@_contract)
    _contracts[method_name] = @_contract
    remove_instance_variable(:@_contract)
  end

  super
end