mirror of
https://github.com/ditkrg/schemable.git
synced 2026-01-22 22:26:41 +00:00
Adds RequestSchemaGenerator class
This commit is contained in:
parent
5d80d669eb
commit
ac70f1e7dd
@ -8,6 +8,7 @@ require_relative 'schemable/attribute_schema_generator'
|
|||||||
require_relative 'schemable/response_schema_generator'
|
require_relative 'schemable/response_schema_generator'
|
||||||
require_relative 'schemable/relationship_schema_generator'
|
require_relative 'schemable/relationship_schema_generator'
|
||||||
require_relative 'schemable/included_schema_generator'
|
require_relative 'schemable/included_schema_generator'
|
||||||
|
require_relative 'schemable/request_schema_generator'
|
||||||
|
|
||||||
module Schemable
|
module Schemable
|
||||||
class Error < StandardError; end
|
class Error < StandardError; end
|
||||||
|
|||||||
60
lib/schemable/request_schema_generator.rb
Normal file
60
lib/schemable/request_schema_generator.rb
Normal 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
|
||||||
10
sig/schemable/request_schema_generator.rbs
Normal file
10
sig/schemable/request_schema_generator.rbs
Normal 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
|
||||||
Loading…
Reference in New Issue
Block a user