Class: ZodRails::Mapping::EnumMapper

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

Class Method Summary collapse

Class Method Details

.call(values, nullable: false, input_schema: false, array: false, **options) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/zod_rails/mapping/enum_mapper.rb', line 6

def self.call(values, nullable: false, input_schema: false, array: false, **options)
  has_default = options.fetch(:has_default, false)
  validation_chain = options.fetch(:validation_chain, "")
  element_validation_chain = options.fetch(:element_validation_chain, "")
  names = values.is_a?(Hash) ? values.keys : values
  quoted = names.map { |name| JSON.generate(name.to_s) }
  enum = "z.enum([#{quoted.join(", ")}])"
  base = if array
           array_schema(enum, element_validation_chain, validation_chain)
         elsif validation_chain.empty?
           enum
         else
           "z.string()#{validation_chain}.pipe(#{enum})"
         end

  suffix = determine_suffix(nullable: nullable, input_schema: input_schema, has_default: has_default)
  "#{base}#{suffix}"
end