Class: Low::Redefiner
Overview
Redefine methods to have their arguments and return values type checked. ┌────────┐ ┌─────────┐ ┌─────────────┐ ┌─────────┐ ┌─────────┐│ Lowkey │ │ Proxies │ │ Expressions │ │ LowType │ │ Methods │└────┬───┘ └────┬────┘ └──────┬──────┘ └────┬────┘ └────┬────┘
│ │ │ │ │
│ Parses AST │ │ │ │
├─────────────►│ │ │ │
│ │ │ │ │
│ │ Stores │ │ │
│ ├────────────────►│ │ │
│ │ │ │ │
│ │ │ Evaluates │ │
│ │ │◄────────────────┤ │
│ │ │ │ │
│ │ │ │ Redefines <-- YOU ARE HERE.
│ │ │ ├──────────────►│
│ │ │ │ │
│ │ │ Validates │ │
│ │ │◄┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┤
│ │ │ │ │
Class Method Summary collapse
-
.redefine(method_proxies:, class_proxy:) ⇒ Object
TODO: Pass in “klass” and use it to class_eval/eval methods in the binding of the class that included LowType.
-
.untyped_args(args:, kwargs:, method_proxy:) ⇒ Object
rubocop:disable Metrics/AbcSize.
Class Method Details
.redefine(method_proxies:, class_proxy:) ⇒ Object
TODO: Pass in “klass” and use it to class_eval/eval methods in the binding of the class that included LowType.
30 31 32 33 34 35 36 |
# File 'lib/definitions/redefiner.rb', line 30 def redefine(method_proxies:, class_proxy:) if LowType.config.type_checking typed_methods(method_proxies:, class_proxy:) else untyped_methods(method_proxies:, class_proxy:) end end |
.untyped_args(args:, kwargs:, method_proxy:) ⇒ Object
rubocop:disable Metrics/AbcSize
38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/definitions/redefiner.rb', line 38 def untyped_args(args:, kwargs:, method_proxy:) # rubocop:disable Metrics/AbcSize method_proxy.params_with_expressions.each do |param_proxy| value = param_proxy.position ? args[param_proxy.position] : kwargs[param_proxy.name] next unless value.nil? raise param_proxy.error_type, param_proxy.(value:) if param_proxy.expression.required? value = param_proxy.expression.default_value # Default value can still be `nil`. value = value.value if value.is_a?(ValueExpression) param_proxy.position ? args[param_proxy.position] = value : kwargs[param_proxy.name] = value end [args, kwargs] end |