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
-
.generate_for_all_serializers(output_dir: nil) ⇒ Object
Public: Generate RBI files for all serializers.
-
.generate_for_serializer(serializer_class) ⇒ Object
Public: Generate RBI content for a single serializer.
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 |