Class: ZodRails::Generation::SchemaBuilder

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

Constant Summary collapse

STRING_TYPES =
%i[string text].freeze
NULLABILITY_SUFFIX_RE =
/(\.(?:nullable|nullish|optional)\(\))\z/

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(inspector, excluded_columns: []) ⇒ SchemaBuilder

Returns a new instance of SchemaBuilder.



11
12
13
14
# File 'lib/zod_rails/generation/schema_builder.rb', line 11

def initialize(inspector, excluded_columns: [])
  @inspector = inspector
  @excluded_columns = excluded_columns.map(&:to_s)
end

Instance Attribute Details

#excluded_columnsObject (readonly)

Returns the value of attribute excluded_columns.



9
10
11
# File 'lib/zod_rails/generation/schema_builder.rb', line 9

def excluded_columns
  @excluded_columns
end

#inspectorObject (readonly)

Returns the value of attribute inspector.



9
10
11
# File 'lib/zod_rails/generation/schema_builder.rb', line 9

def inspector
  @inspector
end

Instance Method Details

#build(input_schema: false) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/zod_rails/generation/schema_builder.rb', line 16

def build(input_schema: false)
  columns = input_schema ? filtered_columns : inspector.columns
  fields = columns.map do |column|
    field_definition(column, input_schema: input_schema)
  end

  "z.object({\n  #{fields.join(",\n  ")}\n})"
end

#schema_name(input_schema: false) ⇒ Object



25
26
27
28
# File 'lib/zod_rails/generation/schema_builder.rb', line 25

def schema_name(input_schema: false)
  suffix = input_schema ? "InputSchema" : "Schema"
  "#{inspector.model_name.gsub("::", "")}#{suffix}"
end