Skip to content

Commit

Permalink
Allow adding description to objects
Browse files Browse the repository at this point in the history
  • Loading branch information
mooktakim committed Feb 3, 2025
1 parent f11b70b commit da01f6b
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
14 changes: 8 additions & 6 deletions lib/simple_json_schema_builder/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

module SimpleJsonSchemaBuilder
class Base
def self.object(&block)
@schema ||= Base.new
def self.object(description: nil, &block)
@schema ||= Base.new(description: description)
@schema.instance_eval(&block)
end

Expand All @@ -17,9 +17,10 @@ def self.to_json
MultiJson.dump(schema)
end

def initialize
def initialize(description: nil)
@properties = {}
@required_key_names = []
@description = description
end

def string(key_name, required: false, title: nil, description: nil, array: false, examples: [], enum: nil)
Expand All @@ -46,13 +47,13 @@ def boolean(key_name, required: false, title: nil, description: nil, array: fals
add_array(key_name, array)
end

def object(key_name = nil, required: false, array: false, schema: nil, &block)
def object(key_name = nil, required: false, description: nil, array: false, schema: nil, &block)
add_required(key_name, required)

if schema
nested_object = schema
else
nested_object = Base.new
nested_object = Base.new(description: description)
nested_object.instance_eval(&block)
end

Expand All @@ -67,14 +68,15 @@ def object(key_name = nil, required: false, array: false, schema: nil, &block)
def schema
{
type: "object",
description: description,
required: (required_key_names unless required_key_names.empty?),
properties: properties,
}.compact
end

private

attr_reader :properties, :required_key_names
attr_reader :properties, :required_key_names, :description

def add_required(key_name, required)
return unless required
Expand Down
6 changes: 4 additions & 2 deletions spec/simple_json_schema_builder/base_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

class TestSchema < SimpleJsonSchemaBuilder::Base
class TestSubSchema < SimpleJsonSchemaBuilder::Base
object do
object description: "sub object desc" do
string :test1
integer :test2, required: true
end
end

object do
object description: "object desc" do
string :string1,
required: true,
title: "String1 Title",
Expand Down Expand Up @@ -98,6 +98,7 @@ class TestSubSchema < SimpleJsonSchemaBuilder::Base
describe ".schema" do
it "correctly formats schema" do
expect(subject[:type]).to eq("object")
expect(subject[:description]).to eq("object desc")
expect(subject[:required]).to eq(%i[string1 string3 integer1 integer3 number1 number3 boolean1 object1 object3])

# String
Expand Down Expand Up @@ -170,6 +171,7 @@ class TestSubSchema < SimpleJsonSchemaBuilder::Base
expect(properties[:object2][:items][:required]).to eq([:obj_test2])

expect(properties[:object3][:type]).to eq("object")
expect(properties[:object3][:description]).to eq("sub object desc")
expect(properties[:object3][:properties][:test1][:type]).to eq("string")
expect(properties[:object3][:properties][:test2][:type]).to eq("integer")
expect(properties[:object3][:required]).to eq([:test2])
Expand Down

0 comments on commit da01f6b

Please sign in to comment.