Module: GrapeOAS::Introspectors::DryIntrospectorSupport::ArgumentExtractor
- Defined in:
- lib/grape_oas/introspectors/dry_introspector_support/argument_extractor.rb
Overview
Extracts typed values from Dry::Schema AST argument nodes.
Constant Summary collapse
- LIST_TAGS =
AST node tags for collection predicates (included_in?, excluded_from?)
%i[list set].freeze
- LITERAL_TAGS =
AST node tags for literal value wrappers
%i[value val literal class left right].freeze
- PATTERN_TAGS =
AST node tags for regex patterns
%i[regexp regex].freeze
Class Method Summary collapse
- .extract_list(arg) ⇒ Object
- .extract_literal(arg) ⇒ Object
- .extract_numeric(arg) ⇒ Object
- .extract_pattern(arg) ⇒ Object
- .extract_range(arg) ⇒ Object
-
.list_node?(arg) ⇒ Boolean
Helper to check if arg is a list/set AST node.
Class Method Details
.extract_list(arg) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/grape_oas/introspectors/dry_introspector_support/argument_extractor.rb', line 34 def extract_list(arg) if list_node?(arg) inner = arg[1] return RangeUtils.(inner) if inner.is_a?(Range) return inner end return arg if arg.is_a?(Array) return RangeUtils.(arg) if arg.is_a?(Range) nil end |
.extract_literal(arg) ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/grape_oas/introspectors/dry_introspector_support/argument_extractor.rb', line 47 def extract_literal(arg) return arg unless arg.is_a?(Array) return arg[1] if arg.length == 2 && LITERAL_TAGS.include?(arg.first) return extract_literal(arg.first) if arg.first.is_a?(Array) arg end |
.extract_numeric(arg) ⇒ Object
17 18 19 20 21 22 |
# File 'lib/grape_oas/introspectors/dry_introspector_support/argument_extractor.rb', line 17 def extract_numeric(arg) return arg if arg.is_a?(Numeric) return arg[1] if arg.is_a?(Array) && arg.size == 2 && arg.first == :num nil end |
.extract_pattern(arg) ⇒ Object
55 56 57 58 59 60 61 62 63 64 |
# File 'lib/grape_oas/introspectors/dry_introspector_support/argument_extractor.rb', line 55 def extract_pattern(arg) return arg.source if arg.is_a?(Regexp) if arg.is_a?(Array) && PATTERN_TAGS.include?(arg.first) return arg[1].source if arg[1].is_a?(Regexp) return arg[1] if arg[1].is_a?(String) end nil end |
.extract_range(arg) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/grape_oas/introspectors/dry_introspector_support/argument_extractor.rb', line 24 def extract_range(arg) return arg if arg.is_a?(Range) return arg[1] if arg.is_a?(Array) && arg.first == :range return arg[1] if arg.is_a?(Array) && arg.first == :size && arg[1].is_a?(Range) # Handle [:list, range] from included_in? predicates return arg[1] if list_node?(arg) && arg[1].is_a?(Range) nil end |
.list_node?(arg) ⇒ Boolean
Helper to check if arg is a list/set AST node
67 68 69 |
# File 'lib/grape_oas/introspectors/dry_introspector_support/argument_extractor.rb', line 67 def list_node?(arg) arg.is_a?(Array) && LIST_TAGS.include?(arg.first) end |