class RailsOpenapiGen::Parsers::Jbuilder::CallDetectors::ArrayCallDetector
Handles array generation in Jbuilder templates
Detects array calls (json.array!)
def array_call?(receiver, method_name)
-
(Boolean)
- True if this is an array call
Parameters:
-
method_name
(Symbol
) -- Method name -
receiver
(Parser::AST::Node, nil
) -- Method receiver
def array_call?(receiver, method_name) method_name == :array! && json_receiver?(receiver) end
def category
-
(Symbol)
- Detector category
def category :array end
def description
-
(String)
- Description
def description "Array calls (json.array!)" end
def extract_collection(args)
-
(Parser::AST::Node, nil)
- Collection node
Parameters:
-
args
(Array
) -- Method arguments
def extract_collection(args) args.find { |arg| arg.type != :hash } end
def extract_options(args)
-
(Parser::AST::Node, nil)
- Options hash node
Parameters:
-
args
(Array
) -- Method arguments
def extract_options(args) args.find { |arg| arg.type == :hash } end
def handles?(receiver, method_name, _args = [])
-
(Boolean)
- True if this is an array call
Parameters:
-
args
(Array
) -- Method arguments -
method_name
(Symbol
) -- Method name -
receiver
(Parser::AST::Node, nil
) -- Method receiver node
def handles?(receiver, method_name, _args = []) result = array_call?(receiver, method_name) if ENV['RAILS_OPENAPI_DEBUG'] puts "🔍 DEBUG: ArrayCallDetector.handles? for #{method_name}" puts " receiver: #{receiver.inspect}" puts " method_name: #{method_name.inspect}" puts " method_name == :array!: #{method_name == :array!}" puts " json_receiver?: #{json_receiver?(receiver)}" puts " result: #{result}" end result end
def has_collection?(args)
-
(Boolean)
- True if array has collection
Parameters:
-
args
(Array
) -- Method arguments
def has_collection?(args) args.any? && !args.first.type == :hash end
def has_options?(args)
-
(Boolean)
- True if array has options
Parameters:
-
args
(Array
) -- Method arguments
def has_options?(args) args.any? { |arg| arg.type == :hash } end
def has_partial_key?(hash_node)
-
(Boolean)
- True if hash contains partial key
Parameters:
-
hash_node
(Parser::AST::Node
) -- Hash node to check
def has_partial_key?(hash_node) return false unless hash_node.type == :hash hash_node.children.any? do |pair| next false unless pair.type == :pair key, _value = pair.children key.type == :sym && key.children.first == :partial end end
def priority
-
(Integer)
- Priority value
def priority 20 end
def uses_partial?(args)
-
(Boolean)
- True if array uses partial
Parameters:
-
args
(Array
) -- Method arguments
def uses_partial?(args) options = extract_options(args) options && has_partial_key?(options) end