Class: Low::TypeExpression
- Defined in:
- lib/expressions/type_expression.rb
Overview
Represent types and default values as a series of chainable expressions.
Instance Attribute Summary collapse
-
#default_value ⇒ Object
readonly
Returns the value of attribute default_value.
-
#types ⇒ Object
readonly
Returns the value of attribute types.
Instance Method Summary collapse
-
#initialize(type: nil, default_value: :LOW_TYPE_UNDEFINED) ⇒ TypeExpression
constructor
A new instance of TypeExpression.
- #required? ⇒ Boolean
- #valid_types ⇒ Object
-
#validate!(value:, proxy:) ⇒ Object
rubocop:disable Metrics.
Constructor Details
#initialize(type: nil, default_value: :LOW_TYPE_UNDEFINED) ⇒ TypeExpression
Returns a new instance of TypeExpression.
21 22 23 24 25 26 27 |
# File 'lib/expressions/type_expression.rb', line 21 def initialize(type: nil, default_value: :LOW_TYPE_UNDEFINED) @types = [] @types << type unless type.nil? @default_value = default_value # TODO: Override per type expression with a config expression. @deep_type_check = nil end |
Instance Attribute Details
#default_value ⇒ Object (readonly)
Returns the value of attribute default_value.
18 19 20 |
# File 'lib/expressions/type_expression.rb', line 18 def default_value @default_value end |
#types ⇒ Object (readonly)
Returns the value of attribute types.
18 19 20 |
# File 'lib/expressions/type_expression.rb', line 18 def types @types end |
Instance Method Details
#required? ⇒ Boolean
29 30 31 |
# File 'lib/expressions/type_expression.rb', line 29 def required? @default_value == :LOW_TYPE_UNDEFINED end |
#valid_types ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/expressions/type_expression.rb', line 50 def valid_types types = @types.map do |type| if type.is_a?(Array) "[#{type.map { |subtype| valid_subtype(subtype:) }.join(', ')}]" else type.inspect.to_s.delete_prefix('Low::Types::') end end types << 'nil' if @default_value.nil? types.join(' | ') end |
#validate!(value:, proxy:) ⇒ Object
rubocop:disable Metrics
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/expressions/type_expression.rb', line 33 def validate!(value:, proxy:) # rubocop:disable Metrics if value.nil? return true if @default_value.nil? raise proxy.error_type, proxy.(value:) if required? end @types.each do |type| return true if type_matches_value?(type:, value:, proxy:) return true if type.is_a?(Array) && value.is_a?(Array) && array_types_match_values?(types: type, values: value, proxy:) return true if type.is_a?(Hash) && value.is_a?(Hash) && hash_types_match_values?(types: type, values: value) end raise proxy.error_type, proxy.(value:) rescue proxy.error_type => e raise proxy.error_type, e., proxy.backtrace(backtrace: e.backtrace, hidden_paths: HIDDEN_PATHS) end |