foobara 0.7.0 → 0.7.1
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/projects/command/src/command_pattern_implementation/concerns/namespace.rb +2 -0
- data/projects/typesystem/projects/builtin_types/lib/foobara/builtin_types.rb +5 -0
- data/projects/typesystem/projects/builtin_types/src/builtin_types.rb +13 -1
- data/projects/typesystem/projects/namespace/src/scoped.rb +0 -1
- data/projects/typesystem/projects/type_declarations/lib/foobara/type_declarations.rb +63 -20
- data/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 64b471d0d0bf93acf6326e484b67d1be35f7c0c883bc315738f680e4c8119613
|
|
4
|
+
data.tar.gz: 9477f64763952ea8d819576545d6f9d06d7bb1ad562ea6dca83532297331859a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 941279f67447a52f9632f620637f011f21bae87766b4a8040846744751e17ba779a21db495cd0ef010152f908af015f8aad87246ab0215a9cd684673bb2c8793
|
|
7
|
+
data.tar.gz: de42b7abaff5512bdc00eba73d862778866034dd1a5d9b354649648a27b2ba2208062550e99ae4c91df8f51456f96bad4f7b4b89d2e263e13cc87c6d1daed231
|
data/CHANGELOG.md
CHANGED
|
@@ -62,6 +62,11 @@ 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
|
|
65
70
|
end
|
|
66
71
|
|
|
67
72
|
def reset_all
|
|
@@ -5,6 +5,8 @@ module Foobara
|
|
|
5
5
|
|
|
6
6
|
module BuiltinTypes
|
|
7
7
|
class << self
|
|
8
|
+
attr_accessor :needs_to_handle_reregistered_types
|
|
9
|
+
|
|
8
10
|
# TODO: break this up
|
|
9
11
|
# TODO: much of this behavior is helpful to non-builtin types as well.
|
|
10
12
|
def build_and_register!(
|
|
@@ -86,7 +88,17 @@ module Foobara
|
|
|
86
88
|
|
|
87
89
|
# TODO: really need to encapsulate this somehow...
|
|
88
90
|
type.type_symbol = type_symbol
|
|
89
|
-
|
|
91
|
+
|
|
92
|
+
domain = type.foobara_parent_namespace || GlobalDomain
|
|
93
|
+
mode = Namespace::LookupMode::DIRECT
|
|
94
|
+
|
|
95
|
+
exists = domain.foobara_registered?(type_symbol, mode:)
|
|
96
|
+
if exists
|
|
97
|
+
domain.foobara_unregister(domain.foobara_lookup_type(type_symbol, mode:))
|
|
98
|
+
self.needs_to_handle_reregistered_types = true
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
domain.foobara_register(type)
|
|
90
102
|
|
|
91
103
|
supported_casters_module = Util.constant_value(builtin_type_module, :SupportedCasters)
|
|
92
104
|
supported_caster_classes = if supported_casters_module
|
|
@@ -17,35 +17,56 @@ module Foobara
|
|
|
17
17
|
[
|
|
18
18
|
:@foobara_children,
|
|
19
19
|
:@foobara_registry,
|
|
20
|
-
:@foobara_type_builder
|
|
20
|
+
:@foobara_type_builder,
|
|
21
|
+
:@lru_cache
|
|
21
22
|
].each do |var_name|
|
|
22
|
-
|
|
23
|
-
[
|
|
24
|
-
Namespace.global,
|
|
25
|
-
Foobara::GlobalOrganization,
|
|
26
|
-
Foobara::GlobalDomain,
|
|
27
|
-
Domain,
|
|
28
|
-
Types::Type,
|
|
29
|
-
Value::Processor,
|
|
30
|
-
Error
|
|
31
|
-
].each do |klass|
|
|
23
|
+
namespaces_to_reset.each do |klass|
|
|
32
24
|
if klass.instance_variable_defined?(var_name)
|
|
33
25
|
klass.remove_instance_variable(var_name)
|
|
34
26
|
end
|
|
35
27
|
end
|
|
36
28
|
end
|
|
37
29
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
30
|
+
Namespace.clear_lru_cache!
|
|
31
|
+
|
|
32
|
+
@original_scoped.each_key do |namespace|
|
|
33
|
+
scoped = @original_scoped[namespace]
|
|
34
|
+
to_remove = []
|
|
35
|
+
|
|
36
|
+
scoped.each do |child|
|
|
37
|
+
if child.scoped_unregistered?
|
|
38
|
+
to_remove << child
|
|
39
|
+
next
|
|
40
|
+
end
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
unless namespace.foobara_registered?(child, mode: Namespace::LookupMode::DIRECT)
|
|
43
|
+
namespace.foobara_register(child)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
children = namespace.foobara_children
|
|
48
|
+
|
|
49
|
+
to_remove.each do |child|
|
|
50
|
+
children.delete(child)
|
|
51
|
+
scoped.delete(child)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
to_remove.clear
|
|
55
|
+
|
|
56
|
+
@original_children[namespace].each do |child|
|
|
57
|
+
if child.scoped_unregistered?
|
|
58
|
+
to_remove << child
|
|
59
|
+
next
|
|
60
|
+
end
|
|
61
|
+
children << child unless children.include?(child)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
to_remove.each do |child|
|
|
65
|
+
@original_children[namespace].delete(child)
|
|
66
|
+
end
|
|
46
67
|
end
|
|
47
68
|
|
|
48
|
-
|
|
69
|
+
Namespace.clear_lru_cache!
|
|
49
70
|
|
|
50
71
|
register_type_declaration(Handlers::RegisteredTypeDeclaration.new)
|
|
51
72
|
register_type_declaration(Handlers::ExtendRegisteredTypeDeclaration.new)
|
|
@@ -117,11 +138,33 @@ module Foobara
|
|
|
117
138
|
capture_current_namespaces
|
|
118
139
|
end
|
|
119
140
|
|
|
141
|
+
private
|
|
142
|
+
|
|
120
143
|
def capture_current_namespaces
|
|
121
144
|
# TODO: this feels like the wrong place to do this but doing it here for now to make sure it's done when
|
|
122
145
|
# most important
|
|
123
|
-
@original_scoped =
|
|
124
|
-
@original_children =
|
|
146
|
+
@original_scoped = {}
|
|
147
|
+
@original_children = {}
|
|
148
|
+
|
|
149
|
+
namespaces_to_reset.each do |namespace|
|
|
150
|
+
next unless namespace.is_a?(Namespace::IsNamespace)
|
|
151
|
+
|
|
152
|
+
@original_scoped[namespace] = namespace.foobara_registry.all_scoped.dup
|
|
153
|
+
@original_children[namespace] = namespace.foobara_children.dup
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def namespaces_to_reset
|
|
158
|
+
[
|
|
159
|
+
Foobara::GlobalDomain,
|
|
160
|
+
Foobara::GlobalOrganization,
|
|
161
|
+
Value::Processor,
|
|
162
|
+
Types::Type,
|
|
163
|
+
Domain,
|
|
164
|
+
Error,
|
|
165
|
+
Foobara,
|
|
166
|
+
Namespace.global
|
|
167
|
+
]
|
|
125
168
|
end
|
|
126
169
|
end
|
|
127
170
|
end
|
data/version.rb
CHANGED