foobara 0.7.2 → 0.7.3

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: 17ca255f468f8568e14b741e8459e61383ce4585c45d4758d03ef511877bd2a7
4
- data.tar.gz: 32d549de52cad428018c84ff393615ff6e1411159253c0dfbe5b6b6eade9680d
3
+ metadata.gz: b47232296ad209190a7a4779c9f09c98471259c1382c3df4d6000c746b574ded
4
+ data.tar.gz: a8fecebb652f59b571c2e4192e7c8162d92378425a879cbe1b52af9a4f147978
5
5
  SHA512:
6
- metadata.gz: 868f5b42ebddfd7841747bcb306293045d2139aa2971f33c39004d093c6be2609fcc3e774a23e7c747b3af89d77001767c4b895949b5f5fb7fe5b0017b765de8
7
- data.tar.gz: 3560e3610996c67ec36fc657699e8a009db478a825dc409098b905d0659b04bcdc2d5bd58f2410a9fd2b95d3471f80740c3937872f6a3f8bdb52f6c3bdc956a8
6
+ metadata.gz: 6e0cebe29b65d89204e8f7a28ce18131d0b8c5d57f7c49c4e455d377da92c56ff2d18830f5ce560f2e8e63ca1f6ca384e601890b9a6b0eb042b5a252dedaf2b2
7
+ data.tar.gz: f742b953f4a6aa14224a2615370009b8e6fb10cb927e8beabad882a8060a70701c18e52dae30311c694ff713e950219c90d2edcf26fe1476cf1fa3b914712a03
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # [0.7.3] - 2026-10-10
2
+
3
+ - More aggressively hunt down and fix types with unregistered base types
4
+ - Add a Project#reset_completed to take action after a .reset_alls in test suites
5
+
1
6
  # [0.7.2] - 2026-10-10
2
7
 
3
8
  - Add `Foobara.start!` to allow post-install commands to survive reset
@@ -49,12 +49,16 @@ module Foobara
49
49
  @full_command_symbol ||= Util.underscore_sym(full_command_name)
50
50
  end
51
51
 
52
- def handle_reregistered_types!
52
+ def handle_reregistered_types!(seen)
53
+ seen << self
54
+
53
55
  if inputs_type
56
+ inputs_type.handle_reregistered_types!(seen) unless seen.include?(inputs_type)
54
57
  inputs inputs_type.reference_or_declaration_data
55
58
  end
56
59
 
57
60
  if result_type
61
+ result_type.handle_reregistered_types!(seen) unless seen.include?(result_type)
58
62
  result result_type.reference_or_declaration_data
59
63
  end
60
64
 
@@ -3,11 +3,17 @@ module Foobara
3
3
  class << self
4
4
  def install!
5
5
  Model.on_reregister do
6
- GlobalDomain.foobara_each_command(&:handle_reregistered_types!)
6
+ seen = Set.new
7
+
8
+ Namespace.global.foobara_each do |scoped|
9
+ if scoped.respond_to?(:handle_reregistered_types!)
10
+ scoped.handle_reregistered_types!(seen)
11
+ end
12
+ end
7
13
  end
8
14
 
9
- CommandPatternImplementation.include Foobara::CommandPatternImplementation::Concerns::ModelInputsType
10
- Foobara::DomainMapper.singleton_class.prepend(Foobara::ModelPlumbing::DomainMapperExtension)
15
+ CommandPatternImplementation.include CommandPatternImplementation::Concerns::ModelInputsType
16
+ DomainMapper.singleton_class.prepend(ModelPlumbing::DomainMapperExtension)
11
17
  end
12
18
  end
13
19
  end
@@ -62,11 +62,6 @@ module Foobara
62
62
  associative_array = build_and_register!(:associative_array, duckture, ::Hash)
63
63
  # TODO: uh oh... we do some translations in the casting here...
64
64
  build_and_register!(:attributes, associative_array, nil)
65
-
66
- if needs_to_handle_reregistered_types
67
- GlobalDomain.foobara_each_command(&:handle_reregistered_types!)
68
- self.needs_to_handle_reregistered_types = false
69
- end
70
65
  end
71
66
 
72
67
  def reset_all
@@ -84,6 +79,21 @@ module Foobara
84
79
 
85
80
  install!
86
81
  end
82
+
83
+ def reset_completed
84
+ if needs_to_handle_reregistered_types
85
+ seen = Set.new
86
+
87
+ Namespace.global.foobara_each do |scoped|
88
+ if scoped.respond_to?(:handle_reregistered_types!)
89
+ scoped.handle_reregistered_types!(seen)
90
+ end
91
+ end
92
+
93
+ self.needs_to_handle_reregistered_types = false
94
+ Namespace.clear_lru_cache!
95
+ end
96
+ end
87
97
  end
88
98
  end
89
99
  end
@@ -163,6 +163,14 @@ module Foobara
163
163
  end
164
164
  end
165
165
 
166
+ def handle_reregistered_types!(seen)
167
+ seen << self
168
+
169
+ if instance_variable_defined?(:@attributes_type)
170
+ remove_instance_variable(:@attributes_type)
171
+ end
172
+ end
173
+
166
174
  # Why aren't we using the callbacks project for this?
167
175
  def on_reregister(&block)
168
176
  @on_reregister ||= []
@@ -65,6 +65,7 @@ module Foobara
65
65
  def reset_alls
66
66
  raise_if_production!
67
67
  all_projects.each_value(&:reset_all)
68
+ all_projects.each_value(&:reset_completed)
68
69
  end
69
70
 
70
71
  def raise_if_production!(method_name = nil)
@@ -43,6 +43,11 @@ module Foobara
43
43
  mod.start! if mod.respond_to?(:start!)
44
44
  end
45
45
 
46
+ def reset_completed
47
+ mod = self.module
48
+ mod.reset_completed if mod.respond_to?(:reset_completed)
49
+ end
50
+
46
51
  def reset_all
47
52
  Foobara.raise_if_production!
48
53
 
@@ -549,6 +549,39 @@ module Foobara
549
549
  !!type_symbol
550
550
  end
551
551
 
552
+ def handle_reregistered_types!(seen)
553
+ seen << self
554
+
555
+ if base_type&.scoped_unregistered?
556
+ self.base_type = base_type.created_in_namespace.foobara_lookup_type!(
557
+ base_type.type_symbol
558
+ )
559
+ end
560
+
561
+ if target_classes.size == 1 && target_class.respond_to?(:handle_reregistered_types!)
562
+ unless seen.include?(target_class)
563
+ target_class.handle_reregistered_types!(seen)
564
+ end
565
+ end
566
+
567
+ case element_types
568
+ when Hash
569
+ element_types.each_value do |child|
570
+ child.handle_reregistered_types!(seen) unless seen.include?(child)
571
+ end
572
+ when Array
573
+ element_types.each do |child|
574
+ child.handle_reregistered_types!(seen) unless seen.include?(child)
575
+ end
576
+ when Type
577
+ element_types.handle_reregistered_types!(seen) unless seen.include?(element_types)
578
+ end
579
+
580
+ if element_type
581
+ element_type.handle_reregistered_types!(seen) unless seen.include?(element_type)
582
+ end
583
+ end
584
+
552
585
  private
553
586
 
554
587
  def apply_all_processors_needing_type!
data/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Foobara
2
2
  module Version
3
- VERSION = "0.7.2".freeze
3
+ VERSION = "0.7.3".freeze
4
4
  MINIMUM_RUBY_VERSION = [">= 3.4.0", "< 4.1"].freeze
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foobara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miles Georgi