module Ni::Params

Public Instance Methods

allow_to_read?(action, name) click to toggle source
# File lib/ni/params.rb, line 25
def allow_to_read?(action, name)
  receive_contracts = select_contracts_for_action(self.class.receive_contracts, action)
  mutate_contracts  = select_contracts_for_action(self.class.mutate_contracts, action)
  provide_contracts = select_contracts_for_action(self.class.provide_contracts, action)

  return true if receive_contracts.blank? && mutate_contracts.blank? && provide_contracts.blank?

  receive_contracts.keys.include?(name) ||
  mutate_contracts.keys.include?(name)
end
allow_to_write?(action, name) click to toggle source
# File lib/ni/params.rb, line 36
def allow_to_write?(action, name)
  receive_contracts = select_contracts_for_action(self.class.receive_contracts, action)
  mutate_contracts  = select_contracts_for_action(self.class.mutate_contracts, action)
  provide_contracts = select_contracts_for_action(self.class.provide_contracts, action)

  return true if receive_contracts.blank? && mutate_contracts.blank? && provide_contracts.blank?

  provide_contracts.keys.include?(name) ||
  mutate_contracts.keys.include?(name)
end
ensure_contracts(contracts, action) click to toggle source
# File lib/ni/params.rb, line 58
def ensure_contracts(contracts, action)
  select_contracts_for_action(contracts, action).each do |param, contract|
    value = context.raw_get(param)

    if contract[:contract].present?
      unless contract[:contract].call(value)
        fail "Value of `#{param}` doesn't match to contract"
      end
    end

    if contract[:method_contract].present?
      unless value.respond_to?(contract[:method_contract], true)
        fail "Value of `#{param}` doesn't respond to contract method :#{contract[:method_contract]}"
      end

      unless value.send(contract[:method_contract])
        fail "Value of `#{param}` doesn't match to contract :#{contract[:method_contract]}"
      end
    end
  end
end
ensure_provided_params(action=DEFAULT_ACTION) click to toggle source
# File lib/ni/params.rb, line 54
def ensure_provided_params(action=DEFAULT_ACTION)
  ensure_contracts self.class.provide_contracts, action
end
ensure_received_params(action=DEFAULT_ACTION) click to toggle source
# File lib/ni/params.rb, line 49
def ensure_received_params(action=DEFAULT_ACTION)
  ensure_contracts self.class.receive_contracts, action
  ensure_contracts self.class.mutate_contracts, action
end
select_contracts_for_action(contracts, action) click to toggle source
# File lib/ni/params.rb, line 80
def select_contracts_for_action(contracts, action)
  (contracts || {}).select do |_, contract|
    contract.dig(:options, :for).blank? || contract.dig(:options, :for) == action
  end
end