Module: TypeSpecFromSerializers::RBI

Defined in:
lib/typespec_from_serializers/rbi.rb

Overview

Public: Generates Sorbet RBI files for serializers.

This generator creates type signatures for serializer class methods (.one, .many, .one_as_hash, .many_as_hash) that can be used by Sorbet for static type checking.

Defined Under Namespace

Modules: Types

Class Method Summary collapse

Class Method Details

.generate_for_all_serializers(output_dir: nil) ⇒ Object

Public: Generate RBI files for all serializers.

output_dir - Optional output directory (defaults to sorbet/rbi/dsl)

Returns Array of file paths that were written



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/typespec_from_serializers/rbi.rb', line 61

def generate_for_all_serializers(output_dir: nil)
  output_dir ||= default_output_dir
  output_dir.mkpath unless output_dir.exist?

  formatter = ::RBI::Formatter.new(sort_nodes: true, group_nodes: true)

  TypeSpecFromSerializers.serializers.filter_map do |serializer_class|
    model_class = infer_model_class(serializer_class)
    next unless model_class

    file_name = serializer_class.name.underscore.tr("/", "_")
    file_path = output_dir.join("#{file_name}.rbi")

    file = build_rbi_file(serializer_class, model_class)
    File.write(file_path, formatter.print_file(file))
    file_path
  end
end

.generate_for_serializer(serializer_class) ⇒ Object

Public: Generate RBI content for a single serializer.

serializer_class - The serializer class to generate RBI for

Returns String with RBI content or nil



49
50
51
52
53
54
# File 'lib/typespec_from_serializers/rbi.rb', line 49

def generate_for_serializer(serializer_class)
  model_class = infer_model_class(serializer_class)
  return nil unless model_class

  build_rbi_file(serializer_class, model_class).string
end