Class: ZodRails::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/zod_rails/generator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(output_dir:) ⇒ Generator

Returns a new instance of Generator.



7
8
9
10
11
# File 'lib/zod_rails/generator.rb', line 7

def initialize(output_dir:)
  @output_dir = output_dir
  @file_writer = Generation::FileWriter.new(output_dir: output_dir)
  @emitter = Generation::TypescriptEmitter.new
end

Instance Attribute Details

#emitterObject (readonly)

Returns the value of attribute emitter.



5
6
7
# File 'lib/zod_rails/generator.rb', line 5

def emitter
  @emitter
end

#file_writerObject (readonly)

Returns the value of attribute file_writer.



5
6
7
# File 'lib/zod_rails/generator.rb', line 5

def file_writer
  @file_writer
end

#output_dirObject (readonly)

Returns the value of attribute output_dir.



5
6
7
# File 'lib/zod_rails/generator.rb', line 5

def output_dir
  @output_dir
end

Instance Method Details

#generate(model_class) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/zod_rails/generator.rb', line 13

def generate(model_class)
  inspector = Introspection::ModelInspector.new(model_class)
  excluded = ZodRails.configuration.excluded_columns
  builder = Generation::SchemaBuilder.new(inspector, excluded_columns: excluded)

  response_schema = {
    name: builder.schema_name,
    body: builder.build
  }

  input_schema = {
    name: builder.schema_name(input_schema: true),
    body: builder.build(input_schema: true)
  }

  content = emitter.emit_combined(response: response_schema, input: input_schema)
  filename = file_writer.output_path_for(inspector.model_name)

  file_writer.write(filename: filename, content: content)
  filename
end

#generate_all(model_classes) ⇒ Object



35
36
37
# File 'lib/zod_rails/generator.rb', line 35

def generate_all(model_classes)
  model_classes.map { |klass| generate(klass) }
end