types_from_serializers 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f744ef983288aecc073f9e0ca84d97b589f98d5046837736eedd2536c1b48eac
4
- data.tar.gz: 4dd172b90a9d8a50774ecd8354bce1e6efaaf9deae3e2b00edf2ccff240f75d3
3
+ metadata.gz: 5ba3078a6ac5b9c49a435628333f17bcd3136ad469acd9aa074ab5d92f359c75
4
+ data.tar.gz: 8f19bc101b8634b1afbc1d64ef66372a87f448bcaa5a802ad6c6ca39c607749b
5
5
  SHA512:
6
- metadata.gz: 01642c033028c7b302f8b1c3110333ea37c3de5c72eec6037c828ac07186ca5e6dd652410e8d35ca2f91154a76392786f40c21b00c2afade446c3a14b456ebb3
7
- data.tar.gz: 850a45ce10ef7313ab41cc6c1662590e8a7175e58cdadfcbddc4b6bf1bc49a8b38f506c25c55c0142a4865e585c23790c10e8da90589b213e13b2042879323ef
6
+ metadata.gz: e1b5481824e42a2d7721946e9a3d39dd533074d3ef4f7f5d6fd89dbd7a754e8ccb689d30af3ec211f49602ce81c11ac34e79079e6408a1e2a294687757431312
7
+ data.tar.gz: 4d8d66623371ec2fe42effadde394103b6164fec7400af77addcb7abea266ca8bbc1d8587cffa3f0d9f107694328f585aef469161e40428e0169f2972b09037f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ # [2.6.0](https://github.com/ElMassimo/types_from_serializers/compare/types_from_serializers@2.5.0...types_from_serializers@2.6.0) (2026-05-06)
2
+
3
+
4
+ ### Features
5
+
6
+ * relax oj_serializers dependency by removing the upper constraint ([#34](https://github.com/ElMassimo/types_from_serializers/issues/34)) ([3018e89](https://github.com/ElMassimo/types_from_serializers/commit/3018e8937a6808123bf0dd482e730bc666d20137))
7
+ * support multiple generator instances for Rails monolith sub-apps ([#32](https://github.com/ElMassimo/types_from_serializers/issues/32)) ([33ce3c1](https://github.com/ElMassimo/types_from_serializers/commit/33ce3c1cfa78c6c899ef9fdd05a034ccde50431f))
8
+
9
+
10
+
1
11
  # [2.5.0](https://github.com/ElMassimo/types_from_serializers/compare/types_from_serializers@2.4.0...types_from_serializers@2.5.0) (2026-01-02)
2
12
 
3
13
 
@@ -265,11 +265,21 @@ module TypesFromSerializers
265
265
 
266
266
  attr_reader :force_generation
267
267
 
268
+ # Public: Registry of named configurations for multi-app setups.
269
+ def configs
270
+ @configs ||= {}
271
+ end
272
+
268
273
  # Public: Configuration of the code generator.
269
- def config
270
- (@config ||= default_config(root)).tap do |config|
271
- yield(config) if block_given?
274
+ # Without a name: returns/modifies the default config (backward compatible).
275
+ # With a name: returns/creates a named config for a specific sub-app.
276
+ def config(name = :default, &block)
277
+ cfg = if name == :default
278
+ @config ||= default_config(root)
279
+ else
280
+ configs[name] ||= default_config(root)
272
281
  end
282
+ cfg.tap { |c| yield(c) if block }
273
283
  end
274
284
 
275
285
  # Public: Generates code for all serializers in the app.
@@ -288,12 +298,36 @@ module TypesFromSerializers
288
298
  end
289
299
  end
290
300
 
301
+ # Public: Generates types for all registered configurations (default + named).
302
+ # Use this in monolith setups with multiple sub-apps.
303
+ def generate_all(force: ENV["SERIALIZER_TYPES_FORCE"])
304
+ all_configs_list.each do |cfg|
305
+ with_active_config(cfg) { generate(force: force) }
306
+ end
307
+ end
308
+
291
309
  def generate_changed
292
- if changes.updated?
293
- config.output_dir.rmtree if changes.any_removed?
294
- load_serializers(changes.modified_files)
310
+ chg = changes_for(config)
311
+ if chg.updated?
312
+ config.output_dir.rmtree if chg.any_removed?
313
+ load_serializers(chg.modified_files)
295
314
  generate
296
- changes.clear
315
+ chg.clear
316
+ end
317
+ end
318
+
319
+ # Public: Like generate_changed but for all registered configurations.
320
+ def generate_all_changed
321
+ all_configs_list.each do |cfg|
322
+ chg = changes_for(cfg)
323
+ if chg.updated?
324
+ with_active_config(cfg) do
325
+ config.output_dir.rmtree if chg.any_removed?
326
+ load_serializers(chg.modified_files)
327
+ generate
328
+ chg.clear
329
+ end
330
+ end
297
331
  end
298
332
  end
299
333
 
@@ -321,9 +355,14 @@ module TypesFromSerializers
321
355
  config.skip_serializer_if.call(serializer)
322
356
  end
323
357
 
324
- # Internal: Returns an object compatible with FileUpdateChecker.
358
+ # Internal: Returns the Changes tracker for the default config (backward compatible).
325
359
  def track_changes
326
- changes
360
+ changes_for(config)
361
+ end
362
+
363
+ # Public: Returns Changes trackers for all registered configurations.
364
+ def all_changes
365
+ all_configs_list.map { |cfg| changes_for(cfg) }
327
366
  end
328
367
 
329
368
  private
@@ -332,8 +371,23 @@ module TypesFromSerializers
332
371
  defined?(Rails) ? Rails.root : Pathname.new(Dir.pwd)
333
372
  end
334
373
 
335
- def changes
336
- @changes ||= Changes.new(config.serializers_dirs)
374
+ def changes_for(cfg)
375
+ @changes_registry ||= {}
376
+ @changes_registry[cfg.object_id] ||= Changes.new(cfg.serializers_dirs)
377
+ end
378
+
379
+ # Internal: Returns the default config followed by all named configs.
380
+ def all_configs_list
381
+ [(@config || default_config(root))] + configs.values
382
+ end
383
+
384
+ # Internal: Temporarily sets the active config for the duration of a block,
385
+ # so all internal methods and refinements pick up the correct config.
386
+ def with_active_config(cfg)
387
+ saved, @config = @config, cfg
388
+ yield
389
+ ensure
390
+ @config = saved
337
391
  end
338
392
 
339
393
  def all_serializer_files
@@ -14,15 +14,17 @@ class TypesFromSerializers::Railtie < Rails::Railtie
14
14
  require "listen"
15
15
 
16
16
  app.config.after_initialize do
17
- app.reloaders << TypesFromSerializers.track_changes
17
+ TypesFromSerializers.all_changes.each do |changes|
18
+ app.reloaders << changes
19
+ end
18
20
  end
19
21
 
20
22
  app.config.to_prepare do
21
- TypesFromSerializers.generate_changed
23
+ TypesFromSerializers.generate_all_changed
22
24
  end
23
25
  else
24
26
  app.config.to_prepare do
25
- TypesFromSerializers.generate
27
+ TypesFromSerializers.generate_all
26
28
  end
27
29
 
28
30
  Rails.logger.warn "Add 'listen' to your Gemfile to automatically generate code on serializer changes."
@@ -38,10 +40,8 @@ class TypesFromSerializers::Railtie < Rails::Railtie
38
40
  require_relative "generator"
39
41
  start_time = Time.zone.now
40
42
  print "Generating TypeScript interfaces..."
41
- serializers = TypesFromSerializers.generate(force: true)
42
- puts "completed in #{(Time.zone.now - start_time).round(2)} seconds.\n"
43
- puts "Found #{serializers.size} serializers:"
44
- puts serializers.map { |s| "\t#{s.name}" }.join("\n")
43
+ TypesFromSerializers.generate_all(force: true)
44
+ puts "completed in #{(Time.zone.now - start_time).round(2)} seconds."
45
45
  end
46
46
  end
47
47
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module TypesFromSerializers
4
4
  # Public: This library adheres to semantic versioning.
5
- VERSION = "2.5.0"
5
+ VERSION = "2.6.0"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: types_from_serializers
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Máximo Mussini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-01-02 00:00:00.000000000 Z
11
+ date: 2026-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -31,9 +31,6 @@ dependencies:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 2.0.2
34
- - - "~>"
35
- - !ruby/object:Gem::Version
36
- version: '2.0'
37
34
  type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
@@ -41,9 +38,6 @@ dependencies:
41
38
  - - ">="
42
39
  - !ruby/object:Gem::Version
43
40
  version: 2.0.2
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '2.0'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: listen
49
43
  requirement: !ruby/object:Gem::Requirement