Module: T::Private::RuntimeLevels

Defined in:
lib/types/private/runtime_levels.rb

Overview

Used in ‘sig.checked(level)` to determine when runtime type checking is enabled on a method.

Constant Summary collapse

LEVELS =
[
  # Validate every call in every environment
  :always,
  # Validate in tests, but not in production
  :tests,
  # Don't even validate in tests, b/c too expensive,
  # or b/c we fully trust the static typing
  :never,
].freeze

Class Method Summary collapse

Class Method Details

._toggle_checking_tests(checked) ⇒ Object



53
54
55
# File 'lib/types/private/runtime_levels.rb', line 53

def self._toggle_checking_tests(checked)
  @check_tests = checked
end

.check_tests?Boolean

Returns:



23
24
25
26
27
28
29
30
# File 'lib/types/private/runtime_levels.rb', line 23

def self.check_tests?
  # Assume that this code path means that some `sig.checked(:tests)`
  # has been wrapped (or not wrapped) already, which is a trapdoor
  # for toggling `@check_tests`.
  @wrapped_tests_with_validation = true

  @check_tests
end

.default_checked_levelObject



41
42
43
44
# File 'lib/types/private/runtime_levels.rb', line 41

def self.default_checked_level
  @has_read_default_checked_level = true
  @default_checked_level
end

.default_checked_level=(default_checked_level) ⇒ Object



46
47
48
49
50
51
# File 'lib/types/private/runtime_levels.rb', line 46

def self.default_checked_level=(default_checked_level)
  if @has_read_default_checked_level
    raise "Set the default checked level earlier. There are already some methods whose sig blocks have evaluated which would not be affected by the new default."
  end
  @default_checked_level = default_checked_level
end

.enable_checking_in_testsObject



32
33
34
35
36
37
38
39
# File 'lib/types/private/runtime_levels.rb', line 32

def self.enable_checking_in_tests
  if !@check_tests && @wrapped_tests_with_validation
    raise "Toggle `:tests`-level runtime type checking earlier. " \
      "There are already some methods wrapped with `sig.checked(:tests)`." \
  end

  _toggle_checking_tests(true)
end