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.2.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.
260 261 262 |
# File 'lib/types_from_serializers/generator.rb', line 260 def force_generation @force_generation end |
Class Method Details
.config ⇒ Object
Public: Configuration of the code generator.
263 264 265 266 267 |
# File 'lib/types_from_serializers/generator.rb', line 263 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.
270 271 272 273 274 275 276 277 278 279 280 281 282 283 |
# File 'lib/types_from_serializers/generator.rb', line 270 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
285 286 287 288 289 290 291 292 |
# File 'lib/types_from_serializers/generator.rb', line 285 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.
304 305 306 307 308 309 310 |
# File 'lib/types_from_serializers/generator.rb', line 304 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.
295 296 297 298 299 300 301 |
# File 'lib/types_from_serializers/generator.rb', line 295 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.
313 314 315 316 317 318 |
# File 'lib/types_from_serializers/generator.rb', line 313 def skip_serializer?(serializer) serializer.name.in?(config.base_serializers) || config.skip_serializer_if.call(serializer) || # NOTE: Ignore inline serializers. serializer.ts_name.include?("Serializer") end |
.track_changes ⇒ Object
Internal: Returns an object compatible with FileUpdateChecker.
321 322 323 |
# File 'lib/types_from_serializers/generator.rb', line 321 def track_changes changes end |