Module: GrapeOAS::ValuesNormalizer
- Defined in:
- lib/grape_oas/values_normalizer.rb
Overview
Normalizes values from Grape parameter or entity documentation into Array, Range, or nil for OpenAPI schema generation.
Class Method Summary collapse
Class Method Details
.normalize(values, context: "values") ⇒ Array, ...
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/grape_oas/values_normalizer.rb', line 10 def self.normalize(values, context: "values") return nil unless values return nil if values.is_a?(Hash) && !values.key?(:value) && !values.key?("value") values = values.key?(:value) ? values[:value] : values["value"] if values.is_a?(Hash) return nil unless values if values.respond_to?(:call) # Two-stage defense for callable values: # 1) Arity check filters out validators (arity > 0) and objects without arity. # This is a heuristic — optional-arg procs (proc { |v = nil| ... }) report arity 0. # 2) Post-call type check catches those false positives by verifying the return # value is a collection type. Both guards are load-bearing; do not remove either. return nil unless values.respond_to?(:arity) && values.arity.zero? begin values = values.call rescue StandardError => e GrapeOAS.logger.warn("Proc evaluation failed for #{context} (#{e.class}): #{e.}") return nil end return nil unless values.is_a?(Array) || values.is_a?(Range) || set_instance?(values) end values = values.to_a if set_instance?(values) return nil unless values.is_a?(Array) || values.is_a?(Range) return nil if values.is_a?(Array) && values.empty? values end |