Module: Skit::JsonSchema

Extended by:
T::Sig
Defined in:
lib/skit/json_schema.rb,
lib/skit/json_schema/cli.rb,
lib/skit/json_schema/config.rb,
lib/skit/json_schema/types/const.rb,
lib/skit/json_schema/naming_utils.rb,
lib/skit/json_schema/code_generator.rb,
lib/skit/json_schema/class_name_path.rb,
lib/skit/json_schema/schema_analyzer.rb,
lib/skit/json_schema/definitions/module.rb,
lib/skit/json_schema/definitions/struct.rb,
lib/skit/json_schema/definitions/enum_type.rb,
lib/skit/json_schema/definitions/const_type.rb,
lib/skit/json_schema/definitions/property_type.rb,
lib/skit/json_schema/definitions/property_types.rb,
lib/skit/json_schema/definitions/struct_property.rb,
lib/skit/json_schema/definitions/hash_property_type.rb,
lib/skit/json_schema/definitions/array_property_type.rb,
lib/skit/json_schema/definitions/tuple_property_type.rb,
lib/skit/json_schema/definitions/union_property_type.rb

Defined Under Namespace

Modules: Definitions, NamingUtils, Types Classes: CLI, ClassNamePath, CodeGenerator, Config, SchemaAnalyzer

Class Method Summary collapse

Class Method Details

.generate(schema, options = {}) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/skit/json_schema.rb', line 55

def self.generate(schema, options = {})
  # Extract and validate options (support both symbol and string keys)
  class_name = T.cast(options[:class_name] || options["class_name"], T.nilable(String))
  module_name = T.cast(options[:module_name] || options["module_name"], T.nilable(String))
  typed_strictness = T.cast(options[:typed_strictness] || options["typed_strictness"],
                            T.nilable(String)) || "strict"

  # Create config with smart defaults
  config = Config.new(
    class_name: class_name,
    module_name: module_name,
    typed_strictness: typed_strictness
  )

  # Analyze schema
  analyzer = SchemaAnalyzer.new(schema, config)
  module_definition = analyzer.analyze

  # Generate code
  generator = CodeGenerator.new(module_definition, config)
  generator.generate
end