foobara 0.0.29 → 0.0.31

Sign up to get free protection for your applications and to get access to all the features.
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"