foobara 0.0.136 → 0.0.138
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 +13 -0
- data/projects/builtin_types/lib/foobara/builtin_types.rb +1 -0
- data/projects/command/lib/foobara/command.rb +1 -0
- data/projects/command/src/command_pattern_implementation/concerns/reflection.rb +1 -0
- data/projects/command_connectors/lib/foobara/command_connectors.rb +1 -0
- data/projects/command_connectors/src/serializers/errors_serializer.rb +1 -2
- data/projects/command_connectors/src/transformers/entity_to_primary_key_inputs_transformer.rb +7 -1
- data/projects/common/src/error_collection.rb +24 -22
- data/projects/common/src/outcome.rb +13 -7
- data/projects/detached_entity/lib/foobara/detached_entity.rb +1 -0
- data/projects/domain/src/domain_module_extension.rb +2 -0
- data/projects/entity/lib/foobara/entity.rb +1 -0
- data/projects/entity/src/association_depth.rb +1 -1
- data/projects/entity/src/concerns/callbacks.rb +1 -0
- data/projects/foobara/src/project.rb +1 -0
- data/projects/model/lib/foobara/model.rb +1 -0
- data/projects/model/src/model.rb +1 -1
- data/projects/namespace/src/is_namespace.rb +16 -0
- data/projects/namespace/src/namespace_helpers.rb +4 -13
- data/projects/persistence/lib/foobara/persistence.rb +1 -0
- data/projects/persistence/src/entity_base/transaction/concerns/entity_callback_handling.rb +1 -0
- data/projects/persistence/src/entity_base/transaction/concerns/transaction_tracking.rb +1 -0
- data/projects/type_declarations/lib/foobara/type_declarations.rb +1 -0
- data/projects/type_declarations/src/attributes_transformers/from_yaml.rb +6 -0
- data/projects/type_declarations/src/attributes_transformers/only.rb +9 -1
- data/projects/type_declarations/src/attributes_transformers/reject.rb +11 -0
- data/projects/value/src/processor.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: 6b67d70479dbaf49e1fb2c7fc255e96fefb41b1952c245baf75c3e677a451604
|
4
|
+
data.tar.gz: 618030d55da35eb987e63473a4cf50effa7aac62fed0d617a70758099dd40f50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9645d95fdcf186a9a1575af9d7d637e0703db3fc80cab9e58a293cc97a2bb37d21f655120057dba2dc533841d5a4836cec904da8f488a22ec182266ad8cc3137
|
7
|
+
data.tar.gz: d72777452ea575fcb2420e8edc41240eed16e46b603d3896be84c0a9568774a12aba385bef69a15f552f9540e1c3e54be5f37d98e3791cb6f990f85711b71a16
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
# [0.0.138] - 2025-07-23
|
2
|
+
|
3
|
+
- Allow #foobara_unregister by symbol, string, or array path
|
4
|
+
|
5
|
+
# [0.0.137] - 2025-07-22
|
6
|
+
|
7
|
+
- Fix bug where update_children_with_new_parent processes a scoped with itself
|
8
|
+
- Don't double-create Reject inputs transformers
|
9
|
+
- Fix description bug when transforming an entity to its primary key type
|
10
|
+
- Add .raise_if_production method to all uses of reset_all(s)
|
11
|
+
- Move the start_with? method another repository
|
12
|
+
- Prevent attributes transformers without attributes
|
13
|
+
|
1
14
|
# [0.0.136] - 2025-07-06
|
2
15
|
|
3
16
|
- Do not allow calling Foobara.reset_alls in production
|
data/projects/command_connectors/src/transformers/entity_to_primary_key_inputs_transformer.rb
CHANGED
@@ -52,13 +52,19 @@ module Foobara
|
|
52
52
|
|
53
53
|
unless to_type.extends_directly?(Foobara::BuiltinTypes[:detached_entity]) ||
|
54
54
|
to_type.extends_directly?(Foobara::BuiltinTypes[:entity])
|
55
|
+
|
55
56
|
description = [
|
56
57
|
description,
|
57
|
-
to_type.description
|
58
|
+
*to_type.description
|
58
59
|
].join(" : ")
|
59
60
|
end
|
61
|
+
|
60
62
|
declaration[:description] = description
|
61
63
|
|
64
|
+
if to_type.declaration_data.key?(:allow_nil)
|
65
|
+
declaration[:allow_nil] = to_type.declaration_data[:allow_nil]
|
66
|
+
end
|
67
|
+
|
62
68
|
declaration
|
63
69
|
elsif to_type.extends?(Foobara::BuiltinTypes[:model])
|
64
70
|
attributes_type = to_type.target_class.attributes_type
|
@@ -1,22 +1,15 @@
|
|
1
1
|
module Foobara
|
2
|
-
|
3
|
-
class ErrorCollection
|
2
|
+
class ErrorCollection < Array
|
4
3
|
class ErrorAlreadySetError < StandardError; end
|
5
4
|
|
6
5
|
class << self
|
7
6
|
def to_h(errors)
|
8
7
|
new.tap do |collection|
|
9
8
|
collection.add_errors(errors)
|
10
|
-
end.
|
9
|
+
end.errors_hash
|
11
10
|
end
|
12
11
|
end
|
13
12
|
|
14
|
-
attr_reader :error_array
|
15
|
-
|
16
|
-
def initialize
|
17
|
-
@error_array = []
|
18
|
-
end
|
19
|
-
|
20
13
|
def success?
|
21
14
|
empty?
|
22
15
|
end
|
@@ -25,14 +18,18 @@ module Foobara
|
|
25
18
|
!empty?
|
26
19
|
end
|
27
20
|
|
28
|
-
foobara_delegate :empty?, :partition, :size, :clear, to: :error_array
|
29
|
-
|
30
21
|
def errors
|
31
|
-
|
22
|
+
# :nocov:
|
23
|
+
warn "DEPRECATED: Do not call ErrorCollection#errors instead just use the collection directly."
|
24
|
+
self
|
25
|
+
# :nocov:
|
32
26
|
end
|
33
27
|
|
34
28
|
def each_error(&)
|
35
|
-
|
29
|
+
# :nocov:
|
30
|
+
warn "DEPRECATED: This method will be deprecated in the coming version"
|
31
|
+
each(&)
|
32
|
+
# :nocov:
|
36
33
|
end
|
37
34
|
|
38
35
|
def has_error?(error)
|
@@ -42,15 +39,13 @@ module Foobara
|
|
42
39
|
# :nocov:
|
43
40
|
end
|
44
41
|
|
45
|
-
|
42
|
+
include?(error)
|
46
43
|
end
|
47
44
|
|
48
45
|
def add_error(error_or_collection_or_error_hash)
|
49
46
|
error = case error_or_collection_or_error_hash
|
50
47
|
when Error
|
51
48
|
error_or_collection_or_error_hash
|
52
|
-
when ErrorCollection
|
53
|
-
return add_errors(error_or_collection_or_error_hash.errors)
|
54
49
|
when Hash
|
55
50
|
if error_or_collection_or_error_hash.key?(:symbol) &&
|
56
51
|
error_or_collection_or_error_hash.key?(:message)
|
@@ -73,25 +68,32 @@ module Foobara
|
|
73
68
|
raise ErrorAlreadySetError, "cannot set #{error} more than once"
|
74
69
|
end
|
75
70
|
|
76
|
-
|
71
|
+
self << error
|
77
72
|
end
|
78
73
|
|
79
74
|
def add_errors(errors)
|
80
75
|
Util.array(errors).each { |error| add_error(error) }
|
81
76
|
end
|
82
77
|
|
83
|
-
def
|
84
|
-
|
85
|
-
[error.key
|
78
|
+
def errors_hash
|
79
|
+
each_with_object({}) do |error, hash|
|
80
|
+
hash[error.key] = error.to_h
|
86
81
|
end
|
87
82
|
end
|
88
83
|
|
89
84
|
def to_sentence
|
90
|
-
Util.to_sentence(
|
85
|
+
Util.to_sentence(map(&:message))
|
91
86
|
end
|
92
87
|
|
93
88
|
def keys
|
94
|
-
|
89
|
+
map(&:key)
|
90
|
+
end
|
91
|
+
|
92
|
+
def to_h
|
93
|
+
# :nocov:
|
94
|
+
warn "DEPRECATED: Use #errors_hash instead"
|
95
|
+
errors_hash
|
96
|
+
# :nocov:
|
95
97
|
end
|
96
98
|
end
|
97
99
|
end
|
@@ -56,29 +56,35 @@ module Foobara
|
|
56
56
|
end
|
57
57
|
|
58
58
|
foobara_delegate :has_errors?,
|
59
|
-
:errors,
|
60
|
-
:each_error,
|
61
59
|
:has_error?,
|
62
60
|
:add_error,
|
63
61
|
:add_errors,
|
64
62
|
to: :error_collection
|
65
63
|
|
64
|
+
def errors
|
65
|
+
error_collection
|
66
|
+
end
|
67
|
+
|
68
|
+
def each_error(&)
|
69
|
+
error_collection.each(&)
|
70
|
+
end
|
71
|
+
|
66
72
|
def success?
|
67
73
|
!has_errors?
|
68
74
|
end
|
69
75
|
|
70
76
|
def fatal?
|
71
|
-
|
77
|
+
error_collection.any?(&:fatal?)
|
72
78
|
end
|
73
79
|
|
74
80
|
def raise!
|
75
81
|
return if success?
|
76
82
|
|
77
|
-
error =
|
83
|
+
error = error_collection.first
|
78
84
|
original_backtrace = error.backtrace_when_initialized
|
79
85
|
|
80
|
-
if
|
81
|
-
error = UnsuccessfulOutcomeError.new(
|
86
|
+
if error_collection.size > 1
|
87
|
+
error = UnsuccessfulOutcomeError.new(error_collection)
|
82
88
|
end
|
83
89
|
|
84
90
|
error.set_backtrace(original_backtrace)
|
@@ -93,7 +99,7 @@ module Foobara
|
|
93
99
|
end
|
94
100
|
|
95
101
|
def errors_hash
|
96
|
-
error_collection.
|
102
|
+
error_collection.errors_hash
|
97
103
|
end
|
98
104
|
|
99
105
|
def errors_sentence
|
data/projects/model/src/model.rb
CHANGED
@@ -74,6 +74,20 @@ module Foobara
|
|
74
74
|
foobara_parent_namespace.nil?
|
75
75
|
end
|
76
76
|
|
77
|
+
def to_scoped(scopedish)
|
78
|
+
if scopedish.is_a?(::String) || scopedish.is_a?(::Symbol) || scopedish.is_a?(::Array)
|
79
|
+
scopedish = foobara_lookup(scopedish)
|
80
|
+
|
81
|
+
unless scopedish
|
82
|
+
# :nocov:
|
83
|
+
raise ArgumentError, "Cannot unregister non-existent #{scopedish}"
|
84
|
+
# :nocov:
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
scopedish
|
89
|
+
end
|
90
|
+
|
77
91
|
def foobara_register(scoped)
|
78
92
|
foobara_registry.register(scoped)
|
79
93
|
# awkward??
|
@@ -89,6 +103,8 @@ module Foobara
|
|
89
103
|
end
|
90
104
|
|
91
105
|
def foobara_unregister(scoped)
|
106
|
+
scoped = to_scoped(scoped)
|
107
|
+
|
92
108
|
foobara_registry.unregister(scoped)
|
93
109
|
foobara_children.delete(scoped)
|
94
110
|
scoped.scoped_namespace = nil
|
@@ -248,10 +248,12 @@ module Foobara
|
|
248
248
|
next if parent == mod
|
249
249
|
|
250
250
|
if parent && !parent.scoped_full_path.empty?
|
251
|
-
next if
|
251
|
+
next if Foobara::Util.start_with?(parent.scoped_full_path, mod.scoped_full_path)
|
252
252
|
end
|
253
253
|
|
254
|
-
if
|
254
|
+
next if scoped.scoped_full_path == mod.scoped_full_path
|
255
|
+
|
256
|
+
if Foobara::Util.start_with?(scoped.scoped_full_path, mod.scoped_full_path)
|
255
257
|
scoped.scoped_path = scoped.scoped_full_path[mod.scoped_full_path.size..]
|
256
258
|
|
257
259
|
if parent
|
@@ -268,17 +270,6 @@ module Foobara
|
|
268
270
|
end
|
269
271
|
end
|
270
272
|
end
|
271
|
-
|
272
|
-
# TODO: move to util
|
273
|
-
def _start_with?(large_array, small_array)
|
274
|
-
return false unless large_array.size > small_array.size
|
275
|
-
|
276
|
-
small_array.each.with_index do |item, index|
|
277
|
-
return false unless large_array[index] == item
|
278
|
-
end
|
279
|
-
|
280
|
-
true
|
281
|
-
end
|
282
273
|
end
|
283
274
|
|
284
275
|
def foobara_namespace!(scoped_path: nil, ignore_modules: nil)
|
@@ -2,6 +2,7 @@ module Foobara
|
|
2
2
|
module Persistence
|
3
3
|
class << self
|
4
4
|
def reset_all
|
5
|
+
Foobara.raise_if_production!("reset_all")
|
5
6
|
@tables_for_entity_class_name = @bases = @default_crud_driver = @default_base = nil
|
6
7
|
EntityBase::Transaction::Concerns::EntityCallbackHandling.reset_all
|
7
8
|
EntityBase::Transaction.reset_all
|
@@ -2,6 +2,7 @@ module Foobara
|
|
2
2
|
module TypeDeclarations
|
3
3
|
class << self
|
4
4
|
def reset_all
|
5
|
+
Foobara.raise_if_production!("reset_all")
|
5
6
|
# TODO: this doesn't really belong here. I think we need to maybe call reset in reverse order?
|
6
7
|
Foobara::Domain::DomainModuleExtension.all.each do |domain|
|
7
8
|
var = "@foobara_type_builder"
|
@@ -3,6 +3,12 @@ module Foobara
|
|
3
3
|
class << self
|
4
4
|
# TODO: dry this up with a .subclass method in AttributesTransformers?
|
5
5
|
def from_yaml(*attribute_names)
|
6
|
+
if attribute_names.empty?
|
7
|
+
# :nocov:
|
8
|
+
raise ArgumentError, "You must specify at least one attribute name"
|
9
|
+
# :nocov:
|
10
|
+
end
|
11
|
+
|
6
12
|
symbol = symbol_for_attribute_names(attribute_names)
|
7
13
|
existing = FromYaml.foobara_lookup(symbol, mode: Namespace::LookupMode::DIRECT)
|
8
14
|
|
@@ -2,10 +2,18 @@ module Foobara
|
|
2
2
|
class AttributesTransformers < TypeDeclarations::TypedTransformer
|
3
3
|
class << self
|
4
4
|
def only(*attribute_names)
|
5
|
+
if attribute_names.empty?
|
6
|
+
# :nocov:
|
7
|
+
raise ArgumentError, "You must specify at least one attribute name"
|
8
|
+
# :nocov:
|
9
|
+
end
|
10
|
+
|
5
11
|
symbol = symbol_for_attribute_names(attribute_names)
|
6
12
|
existing = Only.foobara_lookup(symbol, mode: Namespace::LookupMode::DIRECT)
|
7
13
|
|
8
|
-
|
14
|
+
if existing
|
15
|
+
return existing
|
16
|
+
end
|
9
17
|
|
10
18
|
transformer_class = Class.new(Only)
|
11
19
|
transformer_class.only_attributes = attribute_names
|
@@ -2,6 +2,17 @@ module Foobara
|
|
2
2
|
class AttributesTransformers < TypeDeclarations::TypedTransformer
|
3
3
|
class << self
|
4
4
|
def reject(*attribute_names)
|
5
|
+
if attribute_names.empty?
|
6
|
+
# :nocov:
|
7
|
+
raise ArgumentError, "You must specify at least one attribute name"
|
8
|
+
# :nocov:
|
9
|
+
end
|
10
|
+
|
11
|
+
symbol = symbol_for_attribute_names(attribute_names)
|
12
|
+
existing = Reject.foobara_lookup(symbol, mode: Namespace::LookupMode::DIRECT)
|
13
|
+
|
14
|
+
return existing if existing
|
15
|
+
|
5
16
|
transformer_class = Class.new(Reject)
|
6
17
|
transformer_class.reject_attributes = attribute_names
|
7
18
|
|