as_json_schema
をoverrideして無理矢理作れる。
module Api
module Resources
class User
include JsonWorld::DSL
property(
:id,
type: Integer,
)
property(
:screen_name,
type: String,
)
end
class Users
include JsonWorld::DSL
property(
:users,
type: Array,
items: {
type: Api::Resources::User
}
)
attr_reader :users
# @param [Api::Resources::User] users
def initialize(users)
@users = users
end
def self.as_json_schema
super[:properties][:users]
end
def as_json(options = {})
super(options)["users"]
end
end
end
end
puts Api::Resources::User.to_json_schema
# =>
#{
# "properties": {
# "id": {
# "type": "integer"
# },
# "screen_name": {
# "type": "string"
# }
# },
# "required": [
# "id",
# "screen_name"
# ]
#}
puts Api::Resources::Users.to_json_schema
# =>
#{
# "items": {
# "properties": {
# "id": {
# "type": "integer"
# },
# "screen_name": {
# "type": "string"
# }
# },
# "required": [
# "id",
# "screen_name"
# ]
# },
# "type": "array"
#}
参考
JsonWorldでモデルからJSON Schemaを生成する - Qiita
json_worldの全体的な使い方はこれを見る