Adds RequestSchemaGenerator class

This commit is contained in:
Muhammad Nawzad 2023-11-12 11:45:13 +03:00
parent 5d80d669eb
commit ac70f1e7dd
No known key found for this signature in database
GPG Key ID: B954B6AAE33940B2
3 changed files with 71 additions and 0 deletions

View File

@ -8,6 +8,7 @@ require_relative 'schemable/attribute_schema_generator'
require_relative 'schemable/response_schema_generator'
require_relative 'schemable/relationship_schema_generator'
require_relative 'schemable/included_schema_generator'
require_relative 'schemable/request_schema_generator'
module Schemable
class Error < StandardError; end

View File

@ -0,0 +1,60 @@
module Schemable
class RequestSchemaGenerator
attr_accessor :model_definition, :schema_modifier
def initialize(model_definition)
@model_definition = model_definition
@schema_modifier = SchemaModifier.new
end
def generate_for_create
schema = {
type: :object,
properties: {
data: AttributeSchemaGenerator.new(@model_definition).generate
}
}
@schema_modifier.add_properties(schema, @model_definition.additional_create_request_attributes, 'properties.data.properties')
@model_definition.excluded_create_request_attributes.each do |key|
@schema_modifier.delete_properties(schema, "properties.data.properties.#{key}")
end
required_attributes = {
required: (
schema.as_json['properties']['data']['properties'].keys -
@model_definition.optional_create_request_attributes.map(&:to_s) -
@model_definition.nullable_attributes.map(&:to_s)
).map { |key| key.to_s.camelize(:lower).to_sym }
}
@schema_modifier.add_properties(schema, required_attributes, 'properties.data')
end
def generate_for_update
schema = {
type: :object,
properties: {
data: AttributeSchemaGenerator.new(@model_definition).generate
}
}
@schema_modifier.add_properties(schema, @model_definition.additional_update_request_attributes, 'properties.data.properties')
@model_definition.excluded_update_request_attributes.each do |key|
@schema_modifier.delete_properties(schema, "properties.data.properties.#{key}")
end
required_attributes = {
required: (
schema.as_json['properties']['data']['properties'].keys -
@model_definition.optional_update_request_attributes.map(&:to_s) -
@model_definition.nullable_attributes.map(&:to_s)
).map { |key| key.to_s.camelize(:lower).to_sym }
}
@schema_modifier.add_properties(schema, required_attributes, 'properties.data')
end
end
end

View File

@ -0,0 +1,10 @@
module Schemable
class RequestSchemaGenerator
attr_accessor model_definition: Definition
attr_accessor schema_modifier: SchemaModifier
def initialize: (Definition) -> void
def generate_for_create: () -> (Hash[Symbol, any] | Array[Hash[Symbol, any]])
def generate_for_update: () -> (Hash[Symbol, any] | Array[Hash[Symbol, any]])
end
end