Module: TypesFromSerializers
- Defined in:
- lib/types_from_serializers/dsl.rb,
lib/types_from_serializers/version.rb,
lib/types_from_serializers/generator.rb
Overview
Public: Automatically generates TypeScript interfaces for Ruby serializers.
Defined Under Namespace
Modules: DSL, SerializerRefinements Classes: Changes, Config, Interface, Property, Railtie
Constant Summary collapse
- VERSION =
Public: This library adheres to semantic versioning.
"2.4.0"- DEFAULT_TRANSFORM_KEYS =
->(key) { key.camelize(:lower).chomp("?") }
Class Attribute Summary collapse
-
.force_generation ⇒ Object
readonly
Returns the value of attribute force_generation.
Class Method Summary collapse
-
.config ⇒ Object
Public: Configuration of the code generator.
-
.generate(force: ) ⇒ Object
Public: Generates code for all serializers in the app.
- .generate_changed ⇒ Object
-
.generate_index_file ⇒ Object
Internal: Allows to import all serializer types from a single file.
-
.generate_interface_for(serializer) ⇒ Object
Internal: Defines a TypeScript interface for the serializer.
-
.skip_serializer?(serializer) ⇒ Boolean
Internal: Checks if it should avoid generating an interface.
-
.track_changes ⇒ Object
Internal: Returns an object compatible with FileUpdateChecker.
Class Attribute Details
.force_generation ⇒ Object (readonly)
Returns the value of attribute force_generation.
265 266 267 |
# File 'lib/types_from_serializers/generator.rb', line 265 def force_generation @force_generation end |
Class Method Details
.config ⇒ Object
Public: Configuration of the code generator.
268 269 270 271 272 |
# File 'lib/types_from_serializers/generator.rb', line 268 def config (@config ||= default_config(root)).tap do |config| yield(config) if block_given? end end |
.generate(force: ) ⇒ Object
Public: Generates code for all serializers in the app.
275 276 277 278 279 280 281 282 283 284 285 286 287 288 |
# File 'lib/types_from_serializers/generator.rb', line 275 def generate(force: ENV["SERIALIZER_TYPES_FORCE"]) @force_generation = force config.output_dir.rmtree if force && config.output_dir.exist? if config.namespace load_serializers(all_serializer_files) if force else generate_index_file end loaded_serializers.each do |serializer| generate_interface_for(serializer) end end |
.generate_changed ⇒ Object
290 291 292 293 294 295 296 297 |
# File 'lib/types_from_serializers/generator.rb', line 290 def generate_changed if changes.updated? config.output_dir.rmtree if changes.any_removed? load_serializers(changes.modified_files) generate changes.clear end end |
.generate_index_file ⇒ Object
Internal: Allows to import all serializer types from a single file.
309 310 311 312 313 314 315 |
# File 'lib/types_from_serializers/generator.rb', line 309 def generate_index_file cache_key = all_serializer_files.map { |file| file.delete_prefix(root.to_s) }.join write_if_changed(filename: "index", cache_key: cache_key) { load_serializers(all_serializer_files) serializers_index_content(loaded_serializers) } end |
.generate_interface_for(serializer) ⇒ Object
Internal: Defines a TypeScript interface for the serializer.
300 301 302 303 304 305 306 |
# File 'lib/types_from_serializers/generator.rb', line 300 def generate_interface_for(serializer) interface = serializer.ts_interface write_if_changed(filename: interface.filename, cache_key: interface.inspect, extension: config.namespace ? "d.ts" : "ts") { serializer_interface_content(interface) } end |
.skip_serializer?(serializer) ⇒ Boolean
Internal: Checks if it should avoid generating an interface.
318 319 320 321 |
# File 'lib/types_from_serializers/generator.rb', line 318 def skip_serializer?(serializer) serializer.name.in?(config.base_serializers) || config.skip_serializer_if.call(serializer) end |
.track_changes ⇒ Object
Internal: Returns an object compatible with FileUpdateChecker.
324 325 326 |
# File 'lib/types_from_serializers/generator.rb', line 324 def track_changes changes end |