foobara 0.0.29 → 0.0.31

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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -1
  3. data/projects/command_connectors/src/serializers/entities_to_primary_keys_serializer.rb +2 -0
  4. data/projects/detached_entity/lib/foobara/detached_entity.rb +19 -0
  5. data/projects/{entity → detached_entity}/src/concerns/associations.rb +4 -59
  6. data/projects/detached_entity/src/concerns/equality.rb +24 -0
  7. data/projects/{entity → detached_entity}/src/concerns/primary_key.rb +2 -2
  8. data/projects/{entity → detached_entity}/src/concerns/reflection.rb +15 -1
  9. data/projects/detached_entity/src/concerns/types.rb +41 -0
  10. data/projects/detached_entity/src/detached_entity.rb +15 -0
  11. data/projects/detached_entity/src/extensions/builtin_types/detached_entity/casters/hash.rb +39 -0
  12. data/projects/detached_entity/src/extensions/builtin_types/detached_entity/validators/attributes_declaration.rb +36 -0
  13. data/projects/detached_entity/src/extensions/builtin_types/detached_entity.rb +6 -0
  14. data/projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/attributes_handler_desugarizer.rb +13 -0
  15. data/projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/hash_desugarizer.rb +43 -0
  16. data/projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/model_class_desugarizer.rb +21 -0
  17. data/projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/primary_key_desugarizer.rb +19 -0
  18. data/projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/to_type_transformer.rb +26 -0
  19. data/projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/validate_primary_key_is_symbol.rb +35 -0
  20. data/projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/validate_primary_key_present.rb +27 -0
  21. data/projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/validate_primary_key_references_attribute.rb +36 -0
  22. data/projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration.rb +15 -0
  23. data/projects/entity/lib/foobara/entity.rb +3 -7
  24. data/projects/entity/src/concerns/attribute_helpers.rb +1 -58
  25. data/projects/entity/src/concerns/attributes.rb +1 -1
  26. data/projects/entity/src/concerns/callbacks.rb +1 -1
  27. data/projects/entity/src/concerns/initialization.rb +1 -1
  28. data/projects/entity/src/concerns/mutations.rb +68 -0
  29. data/projects/entity/src/concerns/persistence.rb +1 -1
  30. data/projects/entity/src/concerns/queries.rb +56 -1
  31. data/projects/entity/src/concerns/transactions.rb +1 -1
  32. data/projects/entity/src/concerns/types.rb +2 -18
  33. data/projects/entity/src/entity.rb +3 -48
  34. data/projects/entity/src/extensions/builtin_types/entity/casters/hash.rb +8 -20
  35. data/projects/entity/src/extensions/builtin_types/entity/validators/attributes_declaration.rb +3 -18
  36. data/projects/entity/src/extensions/type_declarations/handlers/extend_entity_type_declaration/attributes_handler_desugarizer.rb +2 -3
  37. data/projects/entity/src/extensions/type_declarations/handlers/extend_entity_type_declaration/hash_desugarizer.rb +2 -32
  38. data/projects/entity/src/extensions/type_declarations/handlers/extend_entity_type_declaration/model_class_desugarizer.rb +2 -6
  39. data/projects/entity/src/extensions/type_declarations/handlers/extend_entity_type_declaration/primary_key_desugarizer.rb +2 -11
  40. data/projects/entity/src/extensions/type_declarations/handlers/extend_entity_type_declaration/to_type_transformer.rb +2 -11
  41. data/projects/entity/src/extensions/type_declarations/handlers/extend_entity_type_declaration/validate_primary_key_is_symbol.rb +2 -27
  42. data/projects/entity/src/extensions/type_declarations/handlers/extend_entity_type_declaration/validate_primary_key_present.rb +2 -19
  43. data/projects/entity/src/extensions/type_declarations/handlers/extend_entity_type_declaration/validate_primary_key_references_attribute.rb +3 -28
  44. data/projects/entity/src/extensions/type_declarations/handlers/extend_entity_type_declaration.rb +5 -1
  45. data/projects/entity/src/new_prepend.rb +1 -1
  46. data/projects/entity/src/not_found_error.rb +1 -1
  47. data/projects/foobara/lib/foobara/all.rb +1 -0
  48. data/projects/manifest/src/foobara/manifest/detached_entity.rb +30 -0
  49. data/projects/manifest/src/foobara/manifest/domain.rb +4 -0
  50. data/projects/manifest/src/foobara/manifest/entity.rb +3 -15
  51. data/projects/manifest/src/foobara/manifest/root_manifest.rb +8 -0
  52. data/projects/manifest/src/foobara/manifest/type.rb +17 -1
  53. data/projects/manifest/src/foobara/manifest/type_declaration.rb +17 -0
  54. data/projects/model/src/model.rb +3 -1
  55. data/projects/namespace/src/is_namespace.rb +6 -2
  56. data/projects/types/src/type.rb +0 -6
  57. metadata +24 -5
@@ -1,10 +1,14 @@
1
1
  module Foobara
2
2
  module TypeDeclarations
3
3
  module Handlers
4
- class ExtendEntityTypeDeclaration < ExtendModelTypeDeclaration
4
+ class ExtendEntityTypeDeclaration < ExtendDetachedEntityTypeDeclaration
5
5
  def expected_type_symbol
6
6
  :entity
7
7
  end
8
+
9
+ def priority
10
+ super - 1
11
+ end
8
12
  end
9
13
  end
10
14
  end
@@ -1,5 +1,5 @@
1
1
  module Foobara
2
- class Entity < Model
2
+ class Entity < DetachedEntity
3
3
  module NewPrepend
4
4
  # rubocop:disable Lint/UselessMethodDefinition
5
5
  def new(...)
@@ -1,5 +1,5 @@
1
1
  module Foobara
2
- class Entity < Model
2
+ class Entity < DetachedEntity
3
3
  class NotFoundError < Foobara::RuntimeError
4
4
  class << self
5
5
  def not_found_error_class_name(data_path)
@@ -29,6 +29,7 @@ module Foobara
29
29
  "type_declarations",
30
30
  "builtin_types",
31
31
  "model",
32
+ "detached_entity",
32
33
  "entity",
33
34
  "command",
34
35
  "persistence",
@@ -0,0 +1,30 @@
1
+ require_relative "model"
2
+
3
+ module Foobara
4
+ module Manifest
5
+ class DetachedEntity < Model
6
+ # this isn't inherited? why not?
7
+ self.category_symbol = :type
8
+
9
+ optional_key(:associations, default: {})
10
+
11
+ alias detached_entity_manifest model_manifest
12
+
13
+ def primary_key_name
14
+ primary_key_attribute.to_s
15
+ end
16
+
17
+ def primary_key_type
18
+ @primary_key_type ||= TypeDeclaration.new(root_manifest, [*path, :primary_key_type])
19
+ end
20
+
21
+ def attribute_names
22
+ super - [primary_key_name]
23
+ end
24
+
25
+ def full_detached_entity_name
26
+ full_model_name
27
+ end
28
+ end
29
+ end
30
+ end
@@ -19,6 +19,10 @@ module Foobara
19
19
  end
20
20
  end
21
21
 
22
+ def detached_entities
23
+ @detached_entities ||= types.select(&:detached_entity?)
24
+ end
25
+
22
26
  def entities
23
27
  @entities ||= types.select(&:entity?)
24
28
  end
@@ -2,33 +2,21 @@ require_relative "model"
2
2
 
3
3
  module Foobara
4
4
  module Manifest
5
- class Entity < Model
5
+ class Entity < DetachedEntity
6
+ # this isn't inherited? why not?
6
7
  self.category_symbol = :type
7
8
 
8
- optional_key(:associations, default: {})
9
-
10
9
  alias entity_manifest model_manifest
11
10
 
12
11
  def has_associations?
13
12
  associations && !associations.empty?
14
13
  end
15
14
 
16
- def primary_key_name
17
- primary_key_attribute.to_s
18
- end
19
-
20
- def primary_key_type
21
- @primary_key_type ||= TypeDeclaration.new(root_manifest, [*path, :primary_key_type])
22
- end
23
-
24
- def attribute_names
25
- super - [primary_key_name]
26
- end
27
-
28
15
  def full_entity_name
29
16
  full_model_name
30
17
  end
31
18
 
19
+ # TODO: should this instead be on DetachedEntity??
32
20
  def associations
33
21
  @associations ||= self[:associations].to_h do |path_key, type_name|
34
22
  [path_key.to_sym, Type.new(root_manifest, [:type, type_name])]
@@ -45,6 +45,14 @@ module Foobara
45
45
  end
46
46
  end
47
47
 
48
+ def detached_entity_by_name(name)
49
+ type = type_by_name(name)
50
+
51
+ raise "#{name} is not a detached entity" unless type.detached_entity?
52
+
53
+ type
54
+ end
55
+
48
56
  def entity_by_name(name)
49
57
  type = type_by_name(name)
50
58
 
@@ -11,6 +11,8 @@ module Foobara
11
11
  if self == Type
12
12
  if type.entity?
13
13
  type = Entity.new(type.root_manifest, type.path)
14
+ elsif type.detached_entity?
15
+ type = DetachedEntity.new(type.root_manifest, type.path)
14
16
  elsif type.model?
15
17
  type = Model.new(type.root_manifest, type.path)
16
18
  end
@@ -36,11 +38,25 @@ module Foobara
36
38
  false
37
39
  end
38
40
 
39
- def model?
41
+ def detached_entity?
40
42
  return false if reference == "entity"
41
43
 
42
44
  type = base_type
43
45
 
46
+ while type
47
+ return true if type.reference.to_sym == :detached_entity
48
+
49
+ type = type.base_type
50
+ end
51
+
52
+ false
53
+ end
54
+
55
+ def model?
56
+ return false if reference == "entity" || reference == "detached_entity"
57
+
58
+ type = base_type
59
+
44
60
  while type
45
61
  return true if type.reference.to_sym == :model
46
62
 
@@ -91,6 +91,23 @@ module Foobara
91
91
  type
92
92
  end
93
93
 
94
+ def detached_entity?
95
+ return @detached_entity if defined?(@detached_entity)
96
+
97
+ @detached_entity = to_type.detached_entity?
98
+ end
99
+
100
+ def to_detached_entity
101
+ raise "not an detached_entity" unless detached_entity?
102
+ raise "detached_entity extension instead of an detached_entity" unless relevant_manifest.size == 1
103
+
104
+ type = to_type
105
+
106
+ raise "not an detached_entity" unless type.detached_entity?
107
+
108
+ type
109
+ end
110
+
94
111
  def entity?
95
112
  return @entity if defined?(@entity)
96
113
 
@@ -180,6 +180,8 @@ module Foobara
180
180
  end
181
181
  end
182
182
 
183
+ abstract
184
+
183
185
  attr_accessor :mutable
184
186
 
185
187
  def initialize(attributes = nil, options = {})
@@ -262,7 +264,7 @@ module Foobara
262
264
  end
263
265
 
264
266
  def read_attribute(attribute_name)
265
- attributes[attribute_name.to_sym]
267
+ attributes[attribute_name&.to_sym]
266
268
  end
267
269
 
268
270
  def read_attribute!(attribute_name)
@@ -231,8 +231,12 @@ module Foobara
231
231
  all
232
232
  end
233
233
 
234
- def foobara_registered?(...)
235
- !foobara_lookup(...).nil?
234
+ def foobara_registered?(path, ...)
235
+ if path.is_a?(Types::Type)
236
+ return false unless path.scoped_path_set?
237
+ end
238
+
239
+ !foobara_lookup(path, ...).nil?
236
240
  end
237
241
 
238
242
  def method_missing(method_name, *, **, &)
@@ -14,12 +14,6 @@ module Foobara
14
14
  end
15
15
  end
16
16
 
17
- # TODO: needed/useful transformers/validators to implement:
18
- #
19
- # allow_empty (validation at attribute level)
20
- # allow_nil (validation at attribute level)
21
- # one_of (validation at attribute level)
22
-
23
17
  attr_accessor :base_type,
24
18
  :casters,
25
19
  :transformers,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foobara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.29
4
+ version: 0.0.31
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miles Georgi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-12-07 00:00:00.000000000 Z
11
+ date: 2024-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: foobara-util
@@ -172,6 +172,25 @@ files:
172
172
  - projects/concerns/src/concern.rb
173
173
  - projects/delegate/lib/foobara/delegate.rb
174
174
  - projects/delegate/src/extensions/module.rb
175
+ - projects/detached_entity/lib/foobara/detached_entity.rb
176
+ - projects/detached_entity/src/concerns/associations.rb
177
+ - projects/detached_entity/src/concerns/equality.rb
178
+ - projects/detached_entity/src/concerns/primary_key.rb
179
+ - projects/detached_entity/src/concerns/reflection.rb
180
+ - projects/detached_entity/src/concerns/types.rb
181
+ - projects/detached_entity/src/detached_entity.rb
182
+ - projects/detached_entity/src/extensions/builtin_types/detached_entity.rb
183
+ - projects/detached_entity/src/extensions/builtin_types/detached_entity/casters/hash.rb
184
+ - projects/detached_entity/src/extensions/builtin_types/detached_entity/validators/attributes_declaration.rb
185
+ - projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration.rb
186
+ - projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/attributes_handler_desugarizer.rb
187
+ - projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/hash_desugarizer.rb
188
+ - projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/model_class_desugarizer.rb
189
+ - projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/primary_key_desugarizer.rb
190
+ - projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/to_type_transformer.rb
191
+ - projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/validate_primary_key_is_symbol.rb
192
+ - projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/validate_primary_key_present.rb
193
+ - projects/detached_entity/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/validate_primary_key_references_attribute.rb
175
194
  - projects/domain/lib/foobara/domain.rb
176
195
  - projects/domain/src/domain.rb
177
196
  - projects/domain/src/domain_mapper.rb
@@ -186,15 +205,13 @@ files:
186
205
  - projects/domain/src/organization.rb
187
206
  - projects/domain/src/organization_module_extension.rb
188
207
  - projects/entity/lib/foobara/entity.rb
189
- - projects/entity/src/concerns/associations.rb
190
208
  - projects/entity/src/concerns/attribute_helpers.rb
191
209
  - projects/entity/src/concerns/attributes.rb
192
210
  - projects/entity/src/concerns/callbacks.rb
193
211
  - projects/entity/src/concerns/initialization.rb
212
+ - projects/entity/src/concerns/mutations.rb
194
213
  - projects/entity/src/concerns/persistence.rb
195
- - projects/entity/src/concerns/primary_key.rb
196
214
  - projects/entity/src/concerns/queries.rb
197
- - projects/entity/src/concerns/reflection.rb
198
215
  - projects/entity/src/concerns/transactions.rb
199
216
  - projects/entity/src/concerns/types.rb
200
217
  - projects/entity/src/entity.rb
@@ -226,6 +243,7 @@ files:
226
243
  - projects/manifest/src/foobara/manifest/attributes.rb
227
244
  - projects/manifest/src/foobara/manifest/base_manifest.rb
228
245
  - projects/manifest/src/foobara/manifest/command.rb
246
+ - projects/manifest/src/foobara/manifest/detached_entity.rb
229
247
  - projects/manifest/src/foobara/manifest/domain.rb
230
248
  - projects/manifest/src/foobara/manifest/entity.rb
231
249
  - projects/manifest/src/foobara/manifest/error.rb
@@ -373,6 +391,7 @@ require_paths:
373
391
  - "./projects/common/lib"
374
392
  - "./projects/concerns/lib"
375
393
  - "./projects/delegate/lib"
394
+ - "./projects/detached_entity/lib"
376
395
  - "./projects/domain/lib"
377
396
  - "./projects/entity/lib"
378
397
  - "./projects/enumerated/lib"