simple-web-system technology

Webに関する技術をシンプルに扱うブログ

openapi-generator-cliでrubyファイルを生成したときに、再帰的にvalid?を呼び出したい

openapi-generator-clirubyファイルを生成すると、valid?メソッドが生成されてnullチェックができるようになる。

ただし、このvalid?再帰的に見てくれるわけではなく、子インスタンスvalid?は自動で呼び出されるわけではない。

以下のような再帰関数を書くと、再帰的にvalidを呼び出せる。

module Validation
  def self.valid_recursive(obj)
    valid = true
    if obj.respond_to?(:valid?)
      valid &&= obj.valid?
    end

    obj.instance_variables.each do |var|
      value = obj.instance_variable_get(var)
      if value.is_a?(Array)
        value.each do |item|
          valid &&= valid_recursive(item)
        end
      elsif value.respond_to?(:valid?)
        valid &&= valid_recursive(value)
      end
    end

    valid
  end
end