foobara 0.3.0 → 0.4.2

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 (495) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/README.md +17 -111
  4. data/lib/foobara/all.rb +22 -0
  5. data/projects/command/lib/foobara/command.rb +6 -3
  6. data/projects/command/src/command_pattern_implementation/concerns/subcommands.rb +3 -1
  7. data/projects/command/src/command_pattern_implementation/concerns/transactions.rb +3 -0
  8. data/projects/command/src/extensions/domain/domain_module_extension.rb +16 -0
  9. data/projects/command/src/extensions/domain/domain_module_extension_extension.rb +22 -0
  10. data/projects/command/src/extensions/foobara.rb +7 -0
  11. data/projects/command_connectors/Guardfile +6 -0
  12. data/projects/command_connectors/lib/foobara/command_connectors.rb +1 -1
  13. data/projects/command_connectors/spec/ambiguous_lookups_spec.rb +143 -0
  14. data/projects/command_connectors/spec/auth_mappers_spec.rb +201 -0
  15. data/projects/command_connectors/spec/command_connector_spec.rb +2443 -0
  16. data/projects/command_connectors/spec/command_registry_spec.rb +9 -0
  17. data/projects/command_connectors/spec/commands/describe_spec.rb +83 -0
  18. data/projects/command_connectors/spec/commands/ping_spec.rb +14 -0
  19. data/projects/command_connectors/spec/commands/query_git_commit_info_spec.rb +55 -0
  20. data/projects/command_connectors/spec/fixtures/command_connectors/manifest_with_errors_with_missing_command_parents.yaml +1662 -0
  21. data/projects/command_connectors/spec/not_found_error_spec.rb +17 -0
  22. data/projects/command_connectors/spec/pre_commit_transformers/load_atoms_pre_commit_transformer_spec.rb +108 -0
  23. data/projects/command_connectors/spec/request_spec.rb +95 -0
  24. data/projects/command_connectors/spec/serializer_spec.rb +9 -0
  25. data/projects/command_connectors/spec/serializers/aggregate_serializer_spec.rb +45 -0
  26. data/projects/command_connectors/spec/serializers/atomic_serializer_spec.rb +68 -0
  27. data/projects/command_connectors/spec/serializers/entities_to_primary_keys_serializer_spec.rb +36 -0
  28. data/projects/command_connectors/spec/serializers/json_serializer_spec.rb +22 -0
  29. data/projects/command_connectors/spec/serializers/noop_serializer_spec.rb +22 -0
  30. data/projects/command_connectors/spec/serializers/yaml_serializer_spec.rb +22 -0
  31. data/projects/command_connectors/spec/spec_helper.rb +56 -0
  32. data/projects/command_connectors/spec/support/rubyprof.rb +32 -0
  33. data/projects/command_connectors/spec/support/term_trap.rb +6 -0
  34. data/projects/command_connectors/spec/transformers/entity_to_primary_key_inputs_transformer_spec.rb +119 -0
  35. data/projects/command_connectors/src/authenticator.rb +27 -16
  36. data/projects/command_connectors/src/command_connector/commands/describe.rb +4 -2
  37. data/projects/command_connectors/src/command_connector/request.rb +27 -1
  38. data/projects/command_connectors/src/command_connector.rb +142 -18
  39. data/projects/command_connectors/src/transformed_command.rb +74 -16
  40. data/projects/domain_mapper/lib/foobara/domain_mapper.rb +4 -0
  41. data/projects/domain_mapper/src/domain_mapper.rb +2 -0
  42. data/projects/{detached_entity → entities/projects/detached_entity}/lib/foobara/detached_entity.rb +4 -0
  43. data/projects/{detached_entity → entities/projects/detached_entity}/src/concerns/primary_key.rb +3 -1
  44. data/projects/{detached_entity → entities/projects/detached_entity}/src/concerns/types.rb +9 -1
  45. data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/builtin_types/detached_entity/validators/model_instance_is_valid.rb +1 -1
  46. data/projects/{entity → entities/projects/entity}/lib/foobara/entity.rb +4 -0
  47. data/projects/{entity → entities/projects/entity}/src/concerns/callbacks.rb +2 -0
  48. data/projects/{entity → entities/projects/entity}/src/concerns/transactions.rb +1 -5
  49. data/projects/entities/projects/entity/src/extensions/domain/domain_module_extension.rb +111 -0
  50. data/projects/{entity → entities/projects/entity}/src/not_found_error.rb +11 -1
  51. data/projects/{in_memory_crud_driver → entities/projects/in_memory_crud_driver}/lib/foobara/in_memory_crud_driver.rb +4 -0
  52. data/projects/entities/projects/in_memory_crud_driver_minimal/lib/foobara/in_memory_crud_driver_minimal.rb +6 -0
  53. data/projects/{in_memory_crud_driver_minimal → entities/projects/in_memory_crud_driver_minimal}/src/in_memory_minimal.rb +6 -4
  54. data/projects/{model → entities/projects/model}/lib/foobara/model.rb +4 -0
  55. data/projects/{model → entities/projects/model}/src/concerns/classes.rb +1 -1
  56. data/projects/{model → entities/projects/model}/src/concerns/types.rb +4 -2
  57. data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_model_type_declaration/to_type_transformer.rb +8 -3
  58. data/projects/{model → entities/projects/model}/src/model.rb +25 -1
  59. data/projects/{model_attribute_helpers → entities/projects/model_attribute_helpers}/lib/foobara/model_attribute_helpers.rb +2 -0
  60. data/projects/{model_attribute_helpers → entities/projects/model_attribute_helpers}/src/attribute_helper_aliases.rb +1 -1
  61. data/projects/{nested_transactionable → entities/projects/nested_transactionable}/lib/foobara/nested_transactionable.rb +2 -0
  62. data/projects/{persistence → entities/projects/persistence}/lib/foobara/persistence.rb +4 -0
  63. data/projects/{persistence → entities/projects/persistence}/src/entity_base/transaction/concerns/transaction_tracking.rb +2 -0
  64. data/projects/{persistence → entities/projects/persistence}/src/entity_base/transaction/state_machine.rb +2 -0
  65. data/projects/{persistence → entities/projects/persistence}/src/entity_base/transaction_table/concerns/record_tracking.rb +2 -0
  66. data/projects/{persistence → entities/projects/persistence}/src/entity_base/transaction_table.rb +2 -2
  67. data/projects/entities/projects/weak_object_set/lib/foobara/weak_object_set.rb +6 -0
  68. data/projects/entities/spec/builtin_types/detached_entity_spec.rb +300 -0
  69. data/projects/entities/spec/builtin_types/entity_spec.rb +501 -0
  70. data/projects/entities/spec/builtin_types/model_spec.rb +420 -0
  71. data/projects/entities/spec/detached_entity/casting_spec.rb +31 -0
  72. data/projects/entities/spec/entity/concerns/associations_spec.rb +73 -0
  73. data/projects/entities/spec/entity/concerns/attribute_helpers_spec.rb +220 -0
  74. data/projects/entities/spec/entity/concerns/callbacks_spec.rb +61 -0
  75. data/projects/entities/spec/entity/concerns/initialization_spec.rb +213 -0
  76. data/projects/entities/spec/entity/concerns/mutations_spec.rb +38 -0
  77. data/projects/entities/spec/entity/concerns/queries_spec.rb +184 -0
  78. data/projects/entities/spec/entity/entity_spec.rb +240 -0
  79. data/projects/entities/spec/entity/extending_existing_spec.rb +137 -0
  80. data/projects/entities/spec/entity/extensions/domain_module_extension_spec.rb +42 -0
  81. data/projects/entities/spec/entity/from_type_declaration_spec.rb +34 -0
  82. data/projects/entities/spec/entity/that_owns_spec.rb +243 -0
  83. data/projects/entities/spec/entity/weak_object_set_spec.rb +91 -0
  84. data/projects/entities/spec/model/model_spec.rb +135 -0
  85. data/projects/entities/spec/model/types_spec.rb +393 -0
  86. data/projects/entities/spec/nested_transactionable/nested_transactionable_spec.rb +67 -0
  87. data/projects/entities/spec/persistence/entity_attributes_crud_drivers/in_memory_minimal_spec.rb +13 -0
  88. data/projects/entities/spec/persistence/entity_base/transaction_spec.rb +509 -0
  89. data/projects/entities/spec/persistence/entity_base/transaction_table_spec.rb +58 -0
  90. data/projects/entities/spec/persistence/persistence_spec.rb +148 -0
  91. data/projects/entities/spec/spec_helper.rb +54 -0
  92. data/projects/entities/spec/support/rubyprof.rb +32 -0
  93. data/projects/entities/spec/support/term_trap.rb +6 -0
  94. data/projects/entities/spec/type_declarations/sensitive_type_removers_spec.rb +90 -0
  95. data/projects/entities_plumbing/Guardfile +6 -0
  96. data/projects/entities_plumbing/lib/foobara/entities_plumbing.rb +12 -0
  97. data/projects/entities_plumbing/spec/auth_mappers_spec.rb +159 -0
  98. data/projects/entities_plumbing/spec/spec_helper.rb +54 -0
  99. data/projects/entities_plumbing/spec/support/rubyprof.rb +32 -0
  100. data/projects/entities_plumbing/spec/support/term_trap.rb +6 -0
  101. data/projects/entities_plumbing/src/command_connectors_extension.rb +17 -0
  102. data/projects/entities_plumbing/src/extensions/authenticator.rb +13 -0
  103. data/projects/manifest/lib/foobara/manifest.rb +2 -0
  104. data/projects/manifest/spec/manifest_spec.rb +378 -0
  105. data/projects/manifest/spec/model_spec.rb +74 -0
  106. data/projects/manifest/spec/spec_helper.rb +53 -0
  107. data/projects/manifest/spec/type_declaration_spec.rb +39 -0
  108. data/projects/manifest/src/{foobara/manifest/array.rb → array.rb} +1 -1
  109. data/projects/manifest/src/{foobara/manifest/attributes.rb → attributes.rb} +1 -1
  110. data/projects/manifest/src/{foobara/manifest/base_manifest.rb → base_manifest.rb} +14 -6
  111. data/projects/manifest/src/{foobara/manifest/command.rb → command.rb} +3 -3
  112. data/projects/manifest/src/{foobara/manifest/detached_entity.rb → detached_entity.rb} +1 -1
  113. data/projects/manifest/src/{foobara/manifest/model.rb → model.rb} +1 -1
  114. data/projects/manifest/src/{foobara/manifest/possible_error.rb → possible_error.rb} +2 -0
  115. data/projects/manifest/src/{foobara/manifest/type.rb → type.rb} +4 -4
  116. data/projects/manifest/src/{foobara/manifest/type_declaration.rb → type_declaration.rb} +5 -5
  117. data/projects/model_plumbing/lib/foobara/model_plumbing.rb +13 -0
  118. data/projects/{namespace/lib/foobara/namespace.rb → model_plumbing/src/model_plumbing.rb} +1 -1
  119. data/projects/{builtin_types → typesystem/projects/builtin_types}/lib/foobara/builtin_types.rb +4 -0
  120. data/projects/{builtin_types → typesystem/projects/builtin_types}/src/builtin_types.rb +7 -7
  121. data/projects/typesystem/projects/callback/lib/foobara/callback.rb +3 -0
  122. data/projects/{callback → typesystem/projects/callback}/src/block/concerns/type.rb +2 -0
  123. data/projects/{callback → typesystem/projects/callback}/src/set.rb +3 -1
  124. data/projects/{common → typesystem/projects/common}/lib/foobara/common.rb +2 -0
  125. data/projects/{common → typesystem/projects/common}/src/data_path.rb +1 -1
  126. data/projects/{common → typesystem/projects/common}/src/error.rb +33 -9
  127. data/projects/{common → typesystem/projects/common}/src/error_key.rb +1 -1
  128. data/projects/{common → typesystem/projects/common}/src/outcome.rb +9 -5
  129. data/projects/typesystem/projects/concerns/lib/foobara/concerns.rb +3 -0
  130. data/projects/typesystem/projects/delegate/lib/foobara/delegate.rb +6 -0
  131. data/projects/{delegate → typesystem/projects/delegate}/src/extensions/module.rb +4 -0
  132. data/projects/{domain → typesystem/projects/domain}/lib/foobara/domain.rb +2 -0
  133. data/projects/{domain → typesystem/projects/domain}/src/domain.rb +20 -7
  134. data/projects/typesystem/projects/domain/src/domain_module_extension.rb +255 -0
  135. data/projects/{domain → typesystem/projects/domain}/src/extensions/foobara.rb +0 -10
  136. data/projects/{domain → typesystem/projects/domain}/src/global_domain.rb +1 -0
  137. data/projects/{domain → typesystem/projects/domain}/src/global_organization.rb +1 -0
  138. data/projects/{domain → typesystem/projects/domain}/src/is_manifestable.rb +1 -0
  139. data/projects/{domain → typesystem/projects/domain}/src/manifestable.rb +1 -0
  140. data/projects/typesystem/projects/domain/src/module_extension.rb +62 -0
  141. data/projects/typesystem/projects/enumerated/lib/foobara/enumerated.rb +3 -0
  142. data/projects/{enumerated → typesystem/projects/enumerated}/src/accessors.rb +2 -0
  143. data/projects/typesystem/projects/namespace/lib/foobara/namespace.rb +6 -0
  144. data/projects/{namespace → typesystem/projects/namespace}/src/is_namespace.rb +8 -0
  145. data/projects/{namespace → typesystem/projects/namespace}/src/namespace.rb +2 -0
  146. data/projects/{namespace → typesystem/projects/namespace}/src/namespace_helpers.rb +1 -0
  147. data/projects/typesystem/projects/project/lib/foobara/project.rb +10 -0
  148. data/projects/{foobara → typesystem/projects/project}/src/foobara.rb +1 -6
  149. data/projects/{foobara → typesystem/projects/project}/src/project.rb +3 -0
  150. data/projects/typesystem/projects/state_machine/lib/foobara/state_machine.rb +3 -0
  151. data/projects/{state_machine → typesystem/projects/state_machine}/src/callbacks.rb +37 -8
  152. data/projects/{state_machine → typesystem/projects/state_machine}/src/sugar.rb +2 -0
  153. data/projects/{state_machine → typesystem/projects/state_machine}/src/transition_log.rb +2 -0
  154. data/projects/{type_declarations → typesystem/projects/type_declarations}/lib/foobara/type_declarations.rb +10 -22
  155. data/projects/{type_declarations → typesystem/projects/type_declarations}/src/dsl/attributes.rb +2 -0
  156. data/projects/{type_declarations → typesystem/projects/type_declarations}/src/error_extension.rb +9 -1
  157. data/projects/{type_declarations → typesystem/projects/type_declarations}/src/lazy_element_types/array.rb +2 -0
  158. data/projects/{type_declarations → typesystem/projects/type_declarations}/src/type_declaration.rb +15 -12
  159. data/projects/{type_declarations → typesystem/projects/type_declarations}/src/type_declaration_handler.rb +21 -5
  160. data/projects/{type_declarations → typesystem/projects/type_declarations}/src/typed_transformer.rb +13 -2
  161. data/projects/{type_declarations → typesystem/projects/type_declarations}/src/with_registries.rb +31 -8
  162. data/projects/{types → typesystem/projects/types}/lib/foobara/types.rb +2 -0
  163. data/projects/{types → typesystem/projects/types}/src/type/concerns/supported_processor_registration.rb +2 -0
  164. data/projects/{types → typesystem/projects/types}/src/type.rb +72 -68
  165. data/projects/typesystem/projects/value/lib/foobara/value.rb +12 -0
  166. data/projects/{value → typesystem/projects/value}/src/processor.rb +19 -6
  167. data/projects/typesystem/spec/builtin_types/allow_nil_spec.rb +138 -0
  168. data/projects/typesystem/spec/builtin_types/array_spec.rb +140 -0
  169. data/projects/typesystem/spec/builtin_types/associative_array_spec.rb +228 -0
  170. data/projects/typesystem/spec/builtin_types/attributes_spec.rb +453 -0
  171. data/projects/typesystem/spec/builtin_types/big_decimal_spec.rb +42 -0
  172. data/projects/typesystem/spec/builtin_types/boolean_spec.rb +43 -0
  173. data/projects/typesystem/spec/builtin_types/class_type_desugarizer_spec.rb +17 -0
  174. data/projects/typesystem/spec/builtin_types/custom_type_spec.rb +430 -0
  175. data/projects/typesystem/spec/builtin_types/date_spec.rb +37 -0
  176. data/projects/typesystem/spec/builtin_types/datetime_spec.rb +49 -0
  177. data/projects/typesystem/spec/builtin_types/email_spec.rb +44 -0
  178. data/projects/typesystem/spec/builtin_types/float_spec.rb +59 -0
  179. data/projects/typesystem/spec/builtin_types/instance_of_spec.rb +75 -0
  180. data/projects/typesystem/spec/builtin_types/one_of_spec.rb +73 -0
  181. data/projects/typesystem/spec/builtin_types/string_spec.rb +117 -0
  182. data/projects/typesystem/spec/builtin_types/symbol_spec.rb +24 -0
  183. data/projects/typesystem/spec/builtin_types/tuple_spec.rb +125 -0
  184. data/projects/typesystem/spec/callback/callback_spec.rb +155 -0
  185. data/projects/typesystem/spec/callback/registry/conditioned_spec.rb +152 -0
  186. data/projects/typesystem/spec/callback/registry/multiple_action_spec.rb +144 -0
  187. data/projects/typesystem/spec/callback/registry/single_action_spec.rb +114 -0
  188. data/projects/typesystem/spec/common/data_path_spec.rb +268 -0
  189. data/projects/typesystem/spec/common/error_collection_spec.rb +77 -0
  190. data/projects/typesystem/spec/common/error_key_spec.rb +56 -0
  191. data/projects/typesystem/spec/common/outcome_spec.rb +65 -0
  192. data/projects/typesystem/spec/common/possible_error_spec.rb +17 -0
  193. data/projects/typesystem/spec/concerns/concern_spec.rb +122 -0
  194. data/projects/typesystem/spec/enumerated/accessors_spec.rb +182 -0
  195. data/projects/typesystem/spec/enumerated/enumerated_spec.rb +32 -0
  196. data/projects/typesystem/spec/enumerated/values_spec.rb +67 -0
  197. data/projects/typesystem/spec/foobara/foobara_spec.rb +45 -0
  198. data/projects/typesystem/spec/namespace/ambiguous_registry_spec.rb +70 -0
  199. data/projects/typesystem/spec/namespace/foobara_simulation_spec.rb +254 -0
  200. data/projects/typesystem/spec/namespace/is_namespace_spec.rb +103 -0
  201. data/projects/typesystem/spec/namespace/namespace_helpers_spec.rb +67 -0
  202. data/projects/typesystem/spec/namespace/namespace_spec.rb +335 -0
  203. data/projects/typesystem/spec/namespace/prefixless_registry_spec.rb +30 -0
  204. data/projects/typesystem/spec/namespace/unambiguous_registry_spec.rb +50 -0
  205. data/projects/typesystem/spec/spec_helper.rb +52 -0
  206. data/projects/typesystem/spec/state_machine/callbacks_spec.rb +144 -0
  207. data/projects/typesystem/spec/state_machine/state_machine_spec.rb +224 -0
  208. data/projects/typesystem/spec/state_machine/target_attribute_spec.rb +46 -0
  209. data/projects/typesystem/spec/support/rubyprof.rb +32 -0
  210. data/projects/typesystem/spec/support/term_trap.rb +6 -0
  211. data/projects/typesystem/spec/type_declarations/attributes_spec.rb +14 -0
  212. data/projects/typesystem/spec/type_declarations/attributes_transformer_spec.rb +95 -0
  213. data/projects/typesystem/spec/type_declarations/dsl/attributes_spec.rb +107 -0
  214. data/projects/typesystem/spec/type_declarations/handlers/extend_registered_type_declaration_spec.rb +13 -0
  215. data/projects/typesystem/spec/type_declarations/sensitive_type_removers_spec.rb +210 -0
  216. data/projects/typesystem/spec/type_declarations/type_builder_spec.rb +47 -0
  217. data/projects/typesystem/spec/type_declarations/type_declaration_spec.rb +252 -0
  218. data/projects/typesystem/spec/type_declarations/type_declarations_spec.rb +11 -0
  219. data/projects/typesystem/spec/type_declarations/typed_transformer_spec.rb +65 -0
  220. data/projects/typesystem/spec/types/sensitive_spec.rb +36 -0
  221. data/projects/typesystem/spec/types/type_spec.rb +102 -0
  222. data/projects/typesystem/spec/value/caster_spec.rb +23 -0
  223. data/projects/typesystem/spec/value/processor/runner_spec.rb +34 -0
  224. data/projects/typesystem/spec/value/processor/selection_spec.rb +71 -0
  225. data/projects/typesystem/spec/value/processor_spec.rb +76 -0
  226. data/projects/typesystem/spec/value/transformer_spec.rb +27 -0
  227. data/version.rb +1 -1
  228. metadata +496 -365
  229. data/projects/callback/lib/foobara/callback.rb +0 -1
  230. data/projects/concerns/lib/foobara/concerns.rb +0 -1
  231. data/projects/delegate/lib/foobara/delegate.rb +0 -1
  232. data/projects/domain/src/domain_module_extension.rb +0 -558
  233. data/projects/domain/src/module_extension.rb +0 -116
  234. data/projects/entity/src/extensions/domain/domain_module_extension.rb +0 -15
  235. data/projects/enumerated/lib/foobara/enumerated.rb +0 -1
  236. data/projects/foobara/lib/foobara/all.rb +0 -48
  237. data/projects/in_memory_crud_driver_minimal/lib/foobara/in_memory_crud_driver_minimal.rb +0 -1
  238. data/projects/state_machine/lib/foobara/state_machine.rb +0 -1
  239. data/projects/value/lib/foobara/value.rb +0 -7
  240. data/projects/weak_object_set/lib/foobara/weak_object_set.rb +0 -3
  241. /data/{projects/foobara/lib → lib}/foobara.rb +0 -0
  242. /data/projects/{detached_entity → entities/projects/detached_entity}/src/concerns/aliases.rb +0 -0
  243. /data/projects/{detached_entity → entities/projects/detached_entity}/src/concerns/associations.rb +0 -0
  244. /data/projects/{detached_entity → entities/projects/detached_entity}/src/concerns/attributes.rb +0 -0
  245. /data/projects/{detached_entity → entities/projects/detached_entity}/src/concerns/equality.rb +0 -0
  246. /data/projects/{detached_entity → entities/projects/detached_entity}/src/concerns/initialization.rb +0 -0
  247. /data/projects/{detached_entity → entities/projects/detached_entity}/src/concerns/persistence.rb +0 -0
  248. /data/projects/{detached_entity → entities/projects/detached_entity}/src/concerns/reflection.rb +0 -0
  249. /data/projects/{detached_entity → entities/projects/detached_entity}/src/concerns/serialize.rb +0 -0
  250. /data/projects/{detached_entity → entities/projects/detached_entity}/src/detached_entity.rb +0 -0
  251. /data/projects/{detached_entity → entities/projects/detached_entity}/src/detached_entity_type.rb +0 -0
  252. /data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/builtin_types/detached_entity/casters/hash.rb +0 -0
  253. /data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/builtin_types/detached_entity/casters/primary_key.rb +0 -0
  254. /data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/builtin_types/detached_entity.rb +0 -0
  255. /data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/attributes_handler_desugarizer.rb +0 -0
  256. /data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/hash_desugarizer.rb +0 -0
  257. /data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/model_class_desugarizer.rb +0 -0
  258. /data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/primary_key_desugarizer.rb +0 -0
  259. /data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/to_type_transformer.rb +0 -0
  260. /data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/validate_primary_key_is_symbol.rb +0 -0
  261. /data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/validate_primary_key_present.rb +0 -0
  262. /data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration/validate_primary_key_references_attribute.rb +0 -0
  263. /data/projects/{detached_entity → entities/projects/detached_entity}/src/extensions/type_declarations/handlers/extend_detached_entity_type_declaration.rb +0 -0
  264. /data/projects/{detached_entity → entities/projects/detached_entity}/src/remove_sensitive_values_transformer_extensions.rb +0 -0
  265. /data/projects/{detached_entity → entities/projects/detached_entity}/src/sensitive_type_removers/detached_entity.rb +0 -0
  266. /data/projects/{detached_entity → entities/projects/detached_entity}/src/sensitive_value_removers/detached_entity.rb +0 -0
  267. /data/projects/{entity → entities/projects/entity}/src/association_depth.rb +0 -0
  268. /data/projects/{entity → entities/projects/entity}/src/concerns/attributes.rb +0 -0
  269. /data/projects/{entity → entities/projects/entity}/src/concerns/initialization.rb +0 -0
  270. /data/projects/{entity → entities/projects/entity}/src/concerns/mutations.rb +0 -0
  271. /data/projects/{entity → entities/projects/entity}/src/concerns/persistence.rb +0 -0
  272. /data/projects/{entity → entities/projects/entity}/src/concerns/queries.rb +0 -0
  273. /data/projects/{entity → entities/projects/entity}/src/concerns/types.rb +0 -0
  274. /data/projects/{entity → entities/projects/entity}/src/entity.rb +0 -0
  275. /data/projects/{entity → entities/projects/entity}/src/extensions/builtin_types/entity/casters/hash.rb +0 -0
  276. /data/projects/{entity → entities/projects/entity}/src/extensions/builtin_types/entity/casters/primary_key.rb +0 -0
  277. /data/projects/{entity → entities/projects/entity}/src/extensions/builtin_types/entity/casters/record_from_closed_transaction.rb +0 -0
  278. /data/projects/{entity → entities/projects/entity}/src/extensions/builtin_types/entity/casters/record_from_current_transaction.rb +0 -0
  279. /data/projects/{entity → entities/projects/entity}/src/extensions/builtin_types/entity/validators/model_instance_is_valid.rb +0 -0
  280. /data/projects/{entity → entities/projects/entity}/src/extensions/builtin_types/entity.rb +0 -0
  281. /data/projects/{entity → entities/projects/entity}/src/extensions/type_declarations/handlers/extend_entity_type_declaration/attributes_handler_desugarizer.rb +0 -0
  282. /data/projects/{entity → entities/projects/entity}/src/extensions/type_declarations/handlers/extend_entity_type_declaration/hash_desugarizer.rb +0 -0
  283. /data/projects/{entity → entities/projects/entity}/src/extensions/type_declarations/handlers/extend_entity_type_declaration/model_class_desugarizer.rb +0 -0
  284. /data/projects/{entity → entities/projects/entity}/src/extensions/type_declarations/handlers/extend_entity_type_declaration/primary_key_desugarizer.rb +0 -0
  285. /data/projects/{entity → entities/projects/entity}/src/extensions/type_declarations/handlers/extend_entity_type_declaration/to_type_transformer.rb +0 -0
  286. /data/projects/{entity → entities/projects/entity}/src/extensions/type_declarations/handlers/extend_entity_type_declaration/validate_primary_key_is_symbol.rb +0 -0
  287. /data/projects/{entity → entities/projects/entity}/src/extensions/type_declarations/handlers/extend_entity_type_declaration/validate_primary_key_present.rb +0 -0
  288. /data/projects/{entity → entities/projects/entity}/src/extensions/type_declarations/handlers/extend_entity_type_declaration/validate_primary_key_references_attribute.rb +0 -0
  289. /data/projects/{entity → entities/projects/entity}/src/extensions/type_declarations/handlers/extend_entity_type_declaration.rb +0 -0
  290. /data/projects/{entity → entities/projects/entity}/src/new_prepend.rb +0 -0
  291. /data/projects/{entity → entities/projects/entity}/src/sensitive_type_removers/entity.rb +0 -0
  292. /data/projects/{entity → entities/projects/entity}/src/sensitive_value_removers/entity.rb +0 -0
  293. /data/projects/{in_memory_crud_driver → entities/projects/in_memory_crud_driver}/src/in_memory.rb +0 -0
  294. /data/projects/{model → entities/projects/model}/src/concerns/aliases.rb +0 -0
  295. /data/projects/{model → entities/projects/model}/src/concerns/reflection.rb +0 -0
  296. /data/projects/{model → entities/projects/model}/src/extensions/builtin_types/model/casters/hash.rb +0 -0
  297. /data/projects/{model → entities/projects/model}/src/extensions/builtin_types/model/supported_transformers/mutable.rb +0 -0
  298. /data/projects/{model → entities/projects/model}/src/extensions/builtin_types/model/validators/model_instance_is_valid.rb +0 -0
  299. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_model_type_declaration/array_with_symbolic_elements.rb +0 -0
  300. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_model_type_declaration/attributes_handler_desugarizer.rb +0 -0
  301. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_model_type_declaration/delegates_desugarizer.rb +0 -0
  302. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_model_type_declaration/delegates_validator.rb +0 -0
  303. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_model_type_declaration/hash_desugarizer.rb +0 -0
  304. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_model_type_declaration/model_class_desugarizer.rb +0 -0
  305. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_model_type_declaration/move_private_from_element_types_to_root.rb +0 -0
  306. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_model_type_declaration/symbolize_private.rb +0 -0
  307. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_model_type_declaration/valid_attribute_names.rb +0 -0
  308. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_model_type_declaration.rb +0 -0
  309. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_registered_model_type_declaration/hash_desugarizer.rb +0 -0
  310. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_registered_model_type_declaration/model_class_type_desugarizer.rb +0 -0
  311. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_registered_model_type_declaration/mutable_validator.rb +0 -0
  312. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_registered_model_type_declaration/normalize_mutable_attributes_desugarizer.rb +0 -0
  313. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_registered_model_type_declaration/to_type_transformer.rb +0 -0
  314. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/extend_registered_model_type_declaration.rb +0 -0
  315. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/handlers/registered_type_declaration/model_class_desugarizer.rb +0 -0
  316. /data/projects/{model → entities/projects/model}/src/extensions/type_declarations/lazy_element_types/model.rb +0 -0
  317. /data/projects/{model → entities/projects/model}/src/sensitive_type_removers/extended_model.rb +0 -0
  318. /data/projects/{model → entities/projects/model}/src/sensitive_type_removers/model.rb +0 -0
  319. /data/projects/{model → entities/projects/model}/src/sensitive_value_removers/model.rb +0 -0
  320. /data/projects/{model_attribute_helpers → entities/projects/model_attribute_helpers}/src/attribute_helpers.rb +0 -0
  321. /data/projects/{persistence → entities/projects/persistence}/src/entity_attributes_crud_driver.rb +0 -0
  322. /data/projects/{persistence → entities/projects/persistence}/src/entity_base/table.rb +0 -0
  323. /data/projects/{persistence → entities/projects/persistence}/src/entity_base/transaction/concerns/entity_callback_handling.rb +0 -0
  324. /data/projects/{persistence → entities/projects/persistence}/src/entity_base/transaction/concerns/state_transitions.rb +0 -0
  325. /data/projects/{persistence → entities/projects/persistence}/src/entity_base/transaction.rb +0 -0
  326. /data/projects/{persistence → entities/projects/persistence}/src/entity_base/transaction_table/concerns/queries.rb +0 -0
  327. /data/projects/{persistence → entities/projects/persistence}/src/entity_base.rb +0 -0
  328. /data/projects/{persistence → entities/projects/persistence}/src/persistence.rb +0 -0
  329. /data/projects/{weak_object_set → entities/projects/weak_object_set}/src/weak_object_set.rb +0 -0
  330. /data/projects/manifest/src/{foobara/manifest/domain.rb → domain.rb} +0 -0
  331. /data/projects/manifest/src/{foobara/manifest/entity.rb → entity.rb} +0 -0
  332. /data/projects/manifest/src/{foobara/manifest/error.rb → error.rb} +0 -0
  333. /data/projects/manifest/src/{foobara/manifest/organization.rb → organization.rb} +0 -0
  334. /data/projects/manifest/src/{foobara/manifest/processor.rb → processor.rb} +0 -0
  335. /data/projects/manifest/src/{foobara/manifest/processor_class.rb → processor_class.rb} +0 -0
  336. /data/projects/manifest/src/{foobara/manifest/root_manifest.rb → root_manifest.rb} +0 -0
  337. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/README.md +0 -0
  338. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/array/casters/arrayable.rb +0 -0
  339. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/array/supported_processors/element_type_declaration.rb +0 -0
  340. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/array/supported_validators/size.rb +0 -0
  341. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/associative_array/casters/array.rb +0 -0
  342. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/associative_array/supported_processors/key_type_declaration.rb +0 -0
  343. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/associative_array/supported_processors/value_type_declaration.rb +0 -0
  344. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/atomic_duck.rb +0 -0
  345. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/casters/array.rb +0 -0
  346. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/casters/hash.rb +0 -0
  347. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/supported_processors/element_type_declarations.rb +0 -0
  348. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/supported_transformers/defaults/type_declaration_extension/extend_attributes_type_declaration/desugarizers/move_defaults_from_element_types_to_root.rb +0 -0
  349. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/supported_transformers/defaults/type_declaration_extension/extend_attributes_type_declaration/desugarizers/symbolize_defaults.rb +0 -0
  350. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/supported_transformers/defaults/type_declaration_extension/extend_attributes_type_declaration/type_declaration_validators/hash_with_symbolic_keys.rb +0 -0
  351. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/supported_transformers/defaults/type_declaration_extension/extend_attributes_type_declaration/type_declaration_validators/valid_attribute_names.rb +0 -0
  352. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/supported_transformers/defaults.rb +0 -0
  353. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/supported_validators/required/type_declaration_extension/extend_attributes_type_declaration/desugarizers/alphabetize_required.rb +0 -0
  354. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/supported_validators/required/type_declaration_extension/extend_attributes_type_declaration/desugarizers/move_required_from_element_types_to_root.rb +0 -0
  355. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/supported_validators/required/type_declaration_extension/extend_attributes_type_declaration/type_declaration_validators/array_of_symbols.rb +0 -0
  356. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/supported_validators/required/type_declaration_extension/extend_attributes_type_declaration/type_declaration_validators/array_with_valid_attribute_names.rb +0 -0
  357. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/supported_validators/required.rb +0 -0
  358. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/attributes/transformers/remove_unexpected_attributes.rb +0 -0
  359. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/big_decimal/casters/integer.rb +0 -0
  360. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/big_decimal/casters/string.rb +0 -0
  361. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/boolean/casters/numeric.rb +0 -0
  362. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/boolean/casters/string_or_symbol.rb +0 -0
  363. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/date/casters/hash.rb +0 -0
  364. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/date/casters/string.rb +0 -0
  365. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/datetime/casters/date.rb +0 -0
  366. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/datetime/casters/hash.rb +0 -0
  367. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/datetime/casters/seconds_since_epoch.rb +0 -0
  368. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/datetime/casters/string.rb +0 -0
  369. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/duck/supported_casters/allow_nil.rb +0 -0
  370. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/duck/supported_validators/instance_of/type_declaration_extension/extend_registered_type_declaration/desugarizers/class_desugarizer.rb +0 -0
  371. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/duck/supported_validators/instance_of/type_declaration_extension/extend_registered_type_declaration/desugarizers/class_type_desugarizer.rb +0 -0
  372. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/duck/supported_validators/instance_of/type_declaration_extension/extend_registered_type_declaration/desugarizers/instance_of_class_desugarizer.rb +0 -0
  373. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/duck/supported_validators/instance_of/type_declaration_extension/extend_registered_type_declaration/desugarizers/instance_of_symbol_desugarizer.rb +0 -0
  374. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/duck/supported_validators/instance_of/type_declaration_extension/extend_registered_type_declaration/type_declaration_validators/is_valid_class.rb +0 -0
  375. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/duck/supported_validators/instance_of.rb +0 -0
  376. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/duck/supported_validators/one_of/type_declaration_extension/extend_registered_type_declaration/desugarizers/cast_one_of.rb +0 -0
  377. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/duck/supported_validators/one_of/type_declaration_extension/extend_registered_type_declaration/desugarizers/module_desugarizer.rb +0 -0
  378. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/duck/supported_validators/one_of.rb +0 -0
  379. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/duck.rb +0 -0
  380. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/duckture.rb +0 -0
  381. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/email/transformers/downcase.rb +0 -0
  382. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/email/validator_base.rb +0 -0
  383. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/float/casters/integer.rb +0 -0
  384. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/float/casters/string.rb +0 -0
  385. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/integer/casters/string.rb +0 -0
  386. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/number/supported_validators/max.rb +0 -0
  387. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/number/supported_validators/min.rb +0 -0
  388. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/string/casters/numeric.rb +0 -0
  389. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/string/casters/symbol.rb +0 -0
  390. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/string/supported_transformers/downcase.rb +0 -0
  391. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/string/supported_validators/matches.rb +0 -0
  392. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/string/supported_validators/max_length.rb +0 -0
  393. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/symbol/casters/string.rb +0 -0
  394. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/tuple/supported_processors/element_type_declarations/type_declaration_extension/extend_tuple_type_declaration/desugarizers/set_size.rb +0 -0
  395. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/tuple/supported_processors/element_type_declarations/type_declaration_extension/extend_tuple_type_declaration/type_declaration_validators/size_matches.rb +0 -0
  396. /data/projects/{builtin_types → typesystem/projects/builtin_types}/src/tuple/supported_processors/element_type_declarations.rb +0 -0
  397. /data/projects/{callback → typesystem/projects/callback}/src/block/after.rb +0 -0
  398. /data/projects/{callback → typesystem/projects/callback}/src/block/around.rb +0 -0
  399. /data/projects/{callback → typesystem/projects/callback}/src/block/before.rb +0 -0
  400. /data/projects/{callback → typesystem/projects/callback}/src/block/concerns/block_parameter_not_allowed.rb +0 -0
  401. /data/projects/{callback → typesystem/projects/callback}/src/block/concerns/block_parameter_required.rb +0 -0
  402. /data/projects/{callback → typesystem/projects/callback}/src/block/concerns/keyword_argumentable_block.rb +0 -0
  403. /data/projects/{callback → typesystem/projects/callback}/src/block/concerns/single_argument_block.rb +0 -0
  404. /data/projects/{callback → typesystem/projects/callback}/src/block/error.rb +0 -0
  405. /data/projects/{callback → typesystem/projects/callback}/src/block.rb +0 -0
  406. /data/projects/{callback → typesystem/projects/callback}/src/registry/base.rb +0 -0
  407. /data/projects/{callback → typesystem/projects/callback}/src/registry/chained_conditioned.rb +0 -0
  408. /data/projects/{callback → typesystem/projects/callback}/src/registry/chained_multiple_action.rb +0 -0
  409. /data/projects/{callback → typesystem/projects/callback}/src/registry/conditioned.rb +0 -0
  410. /data/projects/{callback → typesystem/projects/callback}/src/registry/joined_conditioned.rb +0 -0
  411. /data/projects/{callback → typesystem/projects/callback}/src/registry/multiple_action.rb +0 -0
  412. /data/projects/{callback → typesystem/projects/callback}/src/registry/single_action.rb +0 -0
  413. /data/projects/{callback → typesystem/projects/callback}/src/runner.rb +0 -0
  414. /data/projects/{common → typesystem/projects/common}/src/error_collection.rb +0 -0
  415. /data/projects/{common → typesystem/projects/common}/src/possible_error.rb +0 -0
  416. /data/projects/{common → typesystem/projects/common}/src/runtime_error.rb +0 -0
  417. /data/projects/{concerns → typesystem/projects/concerns}/src/concern.rb +0 -0
  418. /data/projects/{domain → typesystem/projects/domain}/src/organization.rb +0 -0
  419. /data/projects/{domain → typesystem/projects/domain}/src/organization_module_extension.rb +0 -0
  420. /data/projects/{enumerated → typesystem/projects/enumerated}/src/enumerated.rb +0 -0
  421. /data/projects/{enumerated → typesystem/projects/enumerated}/src/values.rb +0 -0
  422. /data/projects/{namespace → typesystem/projects/namespace}/src/ambiguous_registry.rb +0 -0
  423. /data/projects/{namespace → typesystem/projects/namespace}/src/base_registry.rb +0 -0
  424. /data/projects/{namespace → typesystem/projects/namespace}/src/extensions/module.rb +0 -0
  425. /data/projects/{namespace → typesystem/projects/namespace}/src/namespace/lookup_mode.rb +0 -0
  426. /data/projects/{namespace → typesystem/projects/namespace}/src/prefixless_registry.rb +0 -0
  427. /data/projects/{namespace → typesystem/projects/namespace}/src/scoped.rb +0 -0
  428. /data/projects/{namespace → typesystem/projects/namespace}/src/unambiguous_registry.rb +0 -0
  429. /data/projects/{state_machine → typesystem/projects/state_machine}/src/log_entry.rb +0 -0
  430. /data/projects/{state_machine → typesystem/projects/state_machine}/src/state_machine.rb +0 -0
  431. /data/projects/{state_machine → typesystem/projects/state_machine}/src/transitions.rb +0 -0
  432. /data/projects/{state_machine → typesystem/projects/state_machine}/src/validations.rb +0 -0
  433. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/attributes.rb +0 -0
  434. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/attributes_transformers/from_yaml.rb +0 -0
  435. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/attributes_transformers/only.rb +0 -0
  436. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/attributes_transformers/reject.rb +0 -0
  437. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/attributes_transformers/set.rb +0 -0
  438. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/attributes_transformers.rb +0 -0
  439. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/caster.rb +0 -0
  440. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/desugarizer.rb +0 -0
  441. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/desugarizer_pipeline.rb +0 -0
  442. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/element_processor.rb +0 -0
  443. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_array_type_declaration/array_desugarizer.rb +0 -0
  444. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_array_type_declaration/element_type_declaration_desugarizer.rb +0 -0
  445. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_array_type_declaration/to_type_transformer.rb +0 -0
  446. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_array_type_declaration/type_set_to_array_desugarizer.rb +0 -0
  447. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_array_type_declaration.rb +0 -0
  448. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_associative_array_type_declaration/key_type_declaration_desugarizer.rb +0 -0
  449. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_associative_array_type_declaration/to_type_transformer.rb +0 -0
  450. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_associative_array_type_declaration/value_type_declaration_desugarizer.rb +0 -0
  451. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_associative_array_type_declaration.rb +0 -0
  452. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_attributes_type_declaration/dsl_desugarizer.rb +0 -0
  453. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_attributes_type_declaration/element_type_declarations_desugarizer.rb +0 -0
  454. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_attributes_type_declaration/hash_desugarizer.rb +0 -0
  455. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_attributes_type_declaration/to_type_transformer.rb +0 -0
  456. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_attributes_type_declaration.rb +0 -0
  457. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_registered_type_declaration/to_type_transformer.rb +0 -0
  458. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_registered_type_declaration.rb +0 -0
  459. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_tuple_type_declaration/array_desugarizer.rb +0 -0
  460. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_tuple_type_declaration/to_type_transformer.rb +0 -0
  461. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/extend_tuple_type_declaration.rb +0 -0
  462. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/registered_type_declaration/to_type_transformer.rb +0 -0
  463. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/handlers/registered_type_declaration.rb +0 -0
  464. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/lazy_element_types/attributes.rb +0 -0
  465. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/lazy_element_types/hash.rb +0 -0
  466. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/lazy_element_types/tuple.rb +0 -0
  467. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/processor.rb +0 -0
  468. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/remove_sensitive_values_transformer.rb +0 -0
  469. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/sensitive_type_remover.rb +0 -0
  470. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/sensitive_type_removers/array.rb +0 -0
  471. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/sensitive_type_removers/attributes.rb +0 -0
  472. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/sensitive_value_removers/array.rb +0 -0
  473. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/sensitive_value_removers/attributes.rb +0 -0
  474. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/to_type_transformer.rb +0 -0
  475. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/transformer.rb +0 -0
  476. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/type_builder.rb +0 -0
  477. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/type_declaration_error.rb +0 -0
  478. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/type_declaration_handler_registry.rb +0 -0
  479. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/type_declaration_validator.rb +0 -0
  480. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/type_declarations.rb +0 -0
  481. /data/projects/{type_declarations → typesystem/projects/type_declarations}/src/validator.rb +0 -0
  482. /data/projects/{types → typesystem/projects/types}/src/element_processor.rb +0 -0
  483. /data/projects/{types → typesystem/projects/types}/src/extensions/error.rb +0 -0
  484. /data/projects/{types → typesystem/projects/types}/src/type/concerns/reflection.rb +0 -0
  485. /data/projects/{types → typesystem/projects/types}/src/types.rb +0 -0
  486. /data/projects/{value → typesystem/projects/value}/src/caster.rb +0 -0
  487. /data/projects/{value → typesystem/projects/value}/src/data_error.rb +0 -0
  488. /data/projects/{value → typesystem/projects/value}/src/mutator.rb +0 -0
  489. /data/projects/{value → typesystem/projects/value}/src/processor/casting.rb +0 -0
  490. /data/projects/{value → typesystem/projects/value}/src/processor/multi.rb +0 -0
  491. /data/projects/{value → typesystem/projects/value}/src/processor/pipeline.rb +0 -0
  492. /data/projects/{value → typesystem/projects/value}/src/processor/runner.rb +0 -0
  493. /data/projects/{value → typesystem/projects/value}/src/processor/selection.rb +0 -0
  494. /data/projects/{value → typesystem/projects/value}/src/transformer.rb +0 -0
  495. /data/projects/{value → typesystem/projects/value}/src/validator.rb +0 -0
@@ -1,28 +1,39 @@
1
1
  module Foobara
2
2
  class CommandConnector
3
- # TODO: should switch to a processor and give errors if the authenticator header is malformed
4
- class Authenticator < Value::Transformer
5
- attr_reader :block
3
+ class Authenticator < TypeDeclarations::TypedTransformer
4
+ class << self
5
+ attr_writer :default_symbol
6
+ attr_accessor :default_explanation, :default_block
6
7
 
7
- def initialize(symbol: nil, explanation: nil, &block)
8
- symbol ||= Util.non_full_name_underscore(self.class).to_sym
9
- explanation ||= symbol
8
+ def subclass(to: nil, symbol: nil, explanation: nil, &default_block)
9
+ klass = super(to:, from: Request, &nil)
10
10
 
11
- super(symbol:, explanation:)
11
+ klass.default_symbol = symbol if symbol
12
+ klass.default_explanation = explanation if explanation
13
+ klass.default_block = default_block if default_block
12
14
 
13
- @block = block
14
- end
15
+ klass
16
+ end
15
17
 
16
- def relevant_entity_classes(_request)
17
- nil
18
- end
18
+ def default_symbol
19
+ @default_symbol || Util.non_full_name_underscore(self)&.to_sym
20
+ end
19
21
 
20
- def symbol
21
- declaration_data[:symbol]
22
+ def instance
23
+ @instance ||= new
24
+ end
22
25
  end
23
26
 
24
- def explanation
25
- declaration_data[:explanation]
27
+ attr_accessor :symbol
28
+ attr_reader :block, :explanation
29
+
30
+ def initialize(symbol: nil, explanation: nil, &block)
31
+ self.symbol = symbol || self.class.default_symbol
32
+ @explanation = explanation || self.class.default_explanation || self.symbol
33
+
34
+ super()
35
+
36
+ @block = block || self.class.default_block
26
37
  end
27
38
 
28
39
  def transform(request)
@@ -4,8 +4,10 @@ module Foobara
4
4
  class CommandConnector
5
5
  module Commands
6
6
  class Describe < Foobara::Command
7
- inputs manifestable: :duck,
8
- request: :duck
7
+ inputs do
8
+ manifestable :duck, :required
9
+ request :duck
10
+ end
9
11
  result :associative_array
10
12
 
11
13
  def execute
@@ -63,6 +63,31 @@ module Foobara
63
63
  command_class.authenticator
64
64
  end
65
65
 
66
+ def auth_mappers
67
+ # TODO: make this consistent?
68
+ command_connector.auth_map
69
+ end
70
+
71
+ def auth_mapped_method?(method_name)
72
+ auth_mappers&.key?(method_name)
73
+ end
74
+
75
+ def auth_mapper_for(name)
76
+ auth_mappers&.[](name.to_sym)
77
+ end
78
+
79
+ def auth_mapped_value_for(name)
80
+ return unless authenticated_user
81
+
82
+ @auth_mapper_cache ||= {}
83
+
84
+ if @auth_mapper_cache.key?(name)
85
+ @auth_mapper_cache[name]
86
+ else
87
+ @auth_mapper_cache[name] = auth_mapper_for(name)&.process_value!(authenticated_user)
88
+ end
89
+ end
90
+
66
91
  def serializer
67
92
  return @serializer if defined?(@serializer)
68
93
 
@@ -113,11 +138,12 @@ module Foobara
113
138
  outcome.error_collection
114
139
  end
115
140
 
141
+ # TODO: move this to entity_plumbing
116
142
  def relevant_entity_classes
117
143
  if command_class.is_a?(::Class) && command_class < TransformedCommand
118
144
  entity_classes = authenticator&.relevant_entity_classes(self)
119
145
  [*entity_classes, *relevant_entity_classes_from_inputs_transformer]
120
- end || []
146
+ end || EMPTY_ARRAY
121
147
  end
122
148
 
123
149
  private
@@ -63,7 +63,7 @@ module Foobara
63
63
  case object
64
64
  when Class
65
65
  if object < Authenticator
66
- object.new
66
+ object.instance
67
67
  else
68
68
  # :nocov:
69
69
  raise ArgumentError, "Expected a class that inherits from Authenticator"
@@ -116,17 +116,94 @@ module Foobara
116
116
  end
117
117
  end
118
118
  end
119
+
120
+ # don't call this auth_user ?
121
+ def to_auth_user_mapper(object)
122
+ case object
123
+ when TypeDeclarations::TypedTransformer
124
+ object
125
+ when ::Class
126
+ if object < TypeDeclarations::TypedTransformer
127
+ object.instance
128
+ elsif object < Foobara::DomainMapper
129
+ build_auth_mapper(object.to_type) { |authenticated_user| object.map!(authenticated_user) }
130
+ elsif object < Foobara::Command
131
+ inputs_type = object.inputs_type
132
+ element_types = inputs_type.element_types
133
+ size = element_types.size
134
+
135
+ first_required_input = if size == 1
136
+ element_types.keys.first
137
+ elsif size > 1
138
+ declaration = inputs_type&.declaration_data
139
+ required_attribute_names = declaration&.[](:required) || EMPTY_ARRAY
140
+
141
+ if required_attribute_names.size == 1
142
+ required_attribute_names.first
143
+ else
144
+ # :nocov:
145
+ raise ArgumentError,
146
+ "Ambiguous inputs when trying to use #{object} as a mapper. " \
147
+ "Should have either only 1 input or only 1 required input."
148
+ # :nocov:
149
+ end
150
+ else
151
+ # :nocov:
152
+ raise ArgumentError, "To use a command as a mapper it must take an input to map"
153
+ # :nocov:
154
+ end
155
+
156
+ build_auth_mapper(object.result_type) do |authenticated_user|
157
+ object.run!(first_required_input => authenticated_user)
158
+ end
159
+ else
160
+ # :nocov:
161
+ raise ArgumentError, "not sure how to convert a #{object} to an auth mapper"
162
+ # :nocov:
163
+ end
164
+ when ::Hash
165
+ object => { to:, map: }
166
+ build_auth_mapper(to, &map)
167
+ when ::Array
168
+ object => [to, map]
169
+ build_auth_mapper(to, &map)
170
+ else
171
+ # :nocov:
172
+ raise ArgumentError, "Not sure how to convert #{object} to an auth mapper"
173
+ # :nocov:
174
+ end
175
+ end
176
+
177
+ # TODO: make private
178
+ def build_auth_mapper(to_type, &)
179
+ TypeDeclarations::TypedTransformer.subclass(to: to_type, &).instance
180
+ end
119
181
  end
120
182
 
121
- attr_accessor :command_registry, :authenticator, :capture_unknown_error, :name
183
+ attr_accessor :command_registry, :authenticator, :capture_unknown_error, :name,
184
+ :auth_map
122
185
 
123
186
  def initialize(name: nil,
124
187
  authenticator: nil,
125
188
  capture_unknown_error: nil,
126
189
  default_serializers: nil,
127
- default_pre_commit_transformers: nil)
190
+ default_pre_commit_transformers: nil,
191
+ auth_map: nil,
192
+ current_user: nil,
193
+ &block)
128
194
  authenticator = self.class.to_authenticator(authenticator)
129
195
 
196
+ if current_user
197
+ auth_map ||= {}
198
+ auth_map[:current_user] = current_user
199
+ end
200
+
201
+ if auth_map
202
+ self.auth_map = auth_map.transform_values do |mapper|
203
+ self.class.to_auth_user_mapper(mapper)
204
+ end
205
+ end
206
+
130
207
  self.authenticator = authenticator
131
208
  self.command_registry = CommandRegistry.new(authenticator:)
132
209
  self.capture_unknown_error = capture_unknown_error
@@ -143,8 +220,15 @@ module Foobara
143
220
  self.class.allowed_rules_to_register.each do |ruleish_args|
144
221
  command_registry.allowed_rule(*ruleish_args)
145
222
  end
223
+
224
+ if block
225
+ instance_eval(&block)
226
+ end
146
227
  end
147
228
 
229
+ # TODO: should this be the official way to connect a command instead of #connect ?
230
+ def command(...) = connect(...)
231
+
148
232
  def connect(*args, **opts)
149
233
  args, opts = desugarize_connect_args(args, opts)
150
234
 
@@ -211,19 +295,55 @@ module Foobara
211
295
  self.class.find_builtin_command_class(command_class_name)
212
296
  end
213
297
 
214
- foobara_delegate :add_default_inputs_transformer,
215
- :add_default_result_transformer,
216
- :add_default_errors_transformer,
217
- :add_default_pre_commit_transformer,
218
- :add_default_serializer,
219
- :add_default_response_mutator,
220
- :allowed_rule,
221
- :allowed_rules,
222
- :transform_command_class,
223
- :transformed_command_from_name,
224
- :each_transformed_command_class,
225
- :all_transformed_command_classes,
226
- to: :command_registry
298
+ def add_default_inputs_transformer(transformer)
299
+ command_registry.add_default_inputs_transformer(transformer)
300
+ end
301
+
302
+ def add_default_result_transformer(transformer)
303
+ command_registry.add_default_result_transformer(transformer)
304
+ end
305
+
306
+ def add_default_errors_transformer(transformer)
307
+ command_registry.add_default_errors_transformer(transformer)
308
+ end
309
+
310
+ def add_default_pre_commit_transformer(transformer)
311
+ command_registry.add_default_pre_commit_transformer(transformer)
312
+ end
313
+
314
+ def add_default_serializer(serializer)
315
+ command_registry.add_default_serializer(serializer)
316
+ end
317
+
318
+ def add_default_response_mutator(mutator)
319
+ # :nocov:
320
+ command_registry.add_default_response_mutator(mutator)
321
+ # :nocov:
322
+ end
323
+
324
+ def allowed_rule(*)
325
+ # :nocov:
326
+ command_registry.allowed_rule(*)
327
+ # :nocov:
328
+ end
329
+
330
+ def allowed_rules(*)
331
+ command_registry.allowed_rules(*)
332
+ end
333
+
334
+ def transformed_command_from_name(*)
335
+ command_registry.transformed_command_from_name(*)
336
+ end
337
+
338
+ def each_transformed_command_class(&)
339
+ # :nocov:
340
+ command_registry.each_transformed_command_class(&)
341
+ # :nocov:
342
+ end
343
+
344
+ def all_transformed_command_classes
345
+ command_registry.all_transformed_command_classes
346
+ end
227
347
 
228
348
  def lookup_command(name)
229
349
  command_registry.foobara_lookup_command(name)
@@ -295,12 +415,15 @@ module Foobara
295
415
  when "run"
296
416
  request.inputs
297
417
  when "describe"
298
- manifestable = transformed_command_from_name(full_command_name) || type_from_name(full_command_name)
418
+ manifestable_name = full_command_name || request.inputs[:manifestable]
419
+ manifestable = if manifestable_name
420
+ transformed_command_from_name(manifestable_name) || type_from_name(manifestable_name)
421
+ end
299
422
 
300
423
  unless manifestable
301
424
  # :nocov:
302
425
  raise NoCommandOrTypeFoundError.new(
303
- message: "Could not find command or type registered for #{full_command_name}"
426
+ message: "Could not find command or type registered for #{manifestable_name}"
304
427
  )
305
428
  # :nocov:
306
429
  end
@@ -438,6 +561,7 @@ module Foobara
438
561
  end
439
562
  end
440
563
 
564
+ # TODO: get all this persistence stuff out of here and into entities plumbing somehow
441
565
  def run_request(request)
442
566
  command_class = determine_command_class(request)
443
567
  request.command_class = command_class
@@ -61,7 +61,17 @@ module Foobara
61
61
  end
62
62
  end
63
63
 
64
- foobara_delegate :domain, :organization, to: :command_class
64
+ def domain
65
+ # :nocov:
66
+ command_class.domain
67
+ # :nocov:
68
+ end
69
+
70
+ def organization
71
+ # :nocov:
72
+ command_class.organization
73
+ # :nocov:
74
+ end
65
75
 
66
76
  def description
67
77
  command_class.description
@@ -594,19 +604,57 @@ module Foobara
594
604
  construct_command
595
605
  end
596
606
 
597
- foobara_delegate :description, to: :command_class
598
- foobara_delegate :full_command_name,
599
- :command_name,
600
- :command_class,
601
- :capture_unknown_error,
602
- :inputs_transformers,
603
- :result_transformers,
604
- :errors_transformers,
605
- :pre_commit_transformers,
606
- :serializers,
607
- :allowed_rule,
608
- :authenticator,
609
- to: :class
607
+ def full_command_name
608
+ # :nocov:
609
+ self.class.full_command_name
610
+ # :nocov:
611
+ end
612
+
613
+ def command_name
614
+ # :nocov:
615
+ self.class.command_name
616
+ # :nocov:
617
+ end
618
+
619
+ def command_class
620
+ self.class.command_class
621
+ end
622
+
623
+ def capture_unknown_error
624
+ self.class.capture_unknown_error
625
+ end
626
+
627
+ def inputs_transformers
628
+ # :nocov:
629
+ self.class.inputs_transformers
630
+ # :nocov:
631
+ end
632
+
633
+ def result_transformers
634
+ # :nocov:
635
+ self.class.result_transformers
636
+ # :nocov:
637
+ end
638
+
639
+ def errors_transformers
640
+ self.class.errors_transformers
641
+ end
642
+
643
+ def pre_commit_transformers
644
+ self.class.pre_commit_transformers
645
+ end
646
+
647
+ def serializers
648
+ self.class.serializers
649
+ end
650
+
651
+ def allowed_rule
652
+ self.class.allowed_rule
653
+ end
654
+
655
+ def authenticator
656
+ self.class.authenticator
657
+ end
610
658
 
611
659
  def run
612
660
  apply_allowed_rule
@@ -734,7 +782,9 @@ module Foobara
734
782
  end
735
783
 
736
784
  def method_missing(method_name, ...)
737
- if command.respond_to?(method_name)
785
+ if auth_mapped_method?(method_name)
786
+ auth_mapped_value_for(method_name)
787
+ elsif command.respond_to?(method_name)
738
788
  command.send(method_name, ...)
739
789
  else
740
790
  # :nocov:
@@ -743,8 +793,16 @@ module Foobara
743
793
  end
744
794
  end
745
795
 
796
+ def auth_mapped_value_for(name)
797
+ request.auth_mapped_value_for(name)
798
+ end
799
+
800
+ def auth_mapped_method?(method_name)
801
+ request&.auth_mapped_method?(method_name)
802
+ end
803
+
746
804
  def respond_to_missing?(method_name, private = false)
747
- command.respond_to?(method_name, private) || super
805
+ command.respond_to?(method_name, private) || auth_mapped_method?(method_name) || super
748
806
  end
749
807
 
750
808
  private
@@ -1,3 +1,5 @@
1
+ require "foobara/command"
2
+
1
3
  module Foobara
2
4
  class DomainMapper
3
5
  class << self
@@ -8,3 +10,5 @@ module Foobara
8
10
  end
9
11
  end
10
12
  end
13
+
14
+ Foobara.project("domain_mapper", project_path: "#{__dir__}/../..")
@@ -52,6 +52,8 @@ module Foobara
52
52
  [*match_score(from_type, from_value), *match_score(to_type, to_value)].sum
53
53
  end
54
54
 
55
+ private
56
+
55
57
  def match_score(type_indicator, value)
56
58
  return 1 if type_indicator.nil? || value.nil?
57
59
  return 20 if type_indicator == value
@@ -1,3 +1,5 @@
1
+ require "foobara/model"
2
+
1
3
  module Foobara
2
4
  class DetachedEntity < Model
3
5
  abstract
@@ -24,3 +26,5 @@ module Foobara
24
26
  end
25
27
  end
26
28
  end
29
+
30
+ Foobara.project("detached_entity", project_path: "#{__dir__}/../..")
@@ -4,7 +4,9 @@ module Foobara
4
4
  module PrimaryKey
5
5
  include Concern
6
6
 
7
- foobara_delegate :primary_key_attribute, to: :class
7
+ def primary_key_attribute
8
+ self.class.primary_key_attribute
9
+ end
8
10
 
9
11
  module ClassMethods
10
12
  def primary_key(attribute_name)
@@ -4,7 +4,15 @@ module Foobara
4
4
  module Types
5
5
  include Concern
6
6
 
7
- foobara_delegate :full_entity_name, :entity_name, to: :class
7
+ def full_entity_name
8
+ # :nocov:
9
+ self.class.full_entity_name
10
+ # :nocov:
11
+ end
12
+
13
+ def entity_name
14
+ self.class.entity_name
15
+ end
8
16
 
9
17
  module ClassMethods
10
18
  def entity_type
@@ -5,7 +5,7 @@ module Foobara
5
5
  class ModelInstanceIsValid < Model::Validators::ModelInstanceIsValid
6
6
  # Why is this here in entity/ instead of in model/?
7
7
  def possible_errors
8
- return [] if parent_declaration_data == expected_type_symbol
8
+ return EMPTY_ARRAY if parent_declaration_data == expected_type_symbol
9
9
 
10
10
  # TODO: we should also ask the class if it is mutable...
11
11
  mutable = parent_declaration_data.key?(:mutable) ? parent_declaration_data[:mutable] : false
@@ -1,3 +1,5 @@
1
+ require "foobara/detached_entity"
2
+
1
3
  module Foobara
2
4
  # TODO: I think we should have a configuration that indicates if created records can have primary keys passed to them
3
5
  # or not. That is, do primary keys get issued by the database upon insertion? Or are they generated externally
@@ -29,3 +31,5 @@ module Foobara
29
31
  end
30
32
  end
31
33
  end
34
+
35
+ Foobara.project("entity", project_path: "#{__dir__}/../..")
@@ -1,3 +1,5 @@
1
+ require "foobara/callback"
2
+
1
3
  module Foobara
2
4
  class Entity < DetachedEntity
3
5
  module Concerns
@@ -17,11 +17,7 @@ module Foobara
17
17
  if skip_dependent_transactions
18
18
  entity_base.transaction(mode, &)
19
19
  else
20
- Foobara::Persistence.transaction(
21
- self, *deep_depends_on,
22
- mode:,
23
- &
24
- )
20
+ Foobara::Persistence.transaction(self, *deep_depends_on, mode:, &)
25
21
  end
26
22
  end
27
23
  end
@@ -0,0 +1,111 @@
1
+ module Foobara
2
+ module Domain
3
+ module DomainModuleExtension
4
+ module ClassMethods
5
+ attr_reader :foobara_default_entity_base
6
+
7
+ def foobara_set_entity_base(*, name: nil, table_prefix: nil)
8
+ name ||= Util.underscore(scoped_full_name).gsub("::", "_")
9
+ base = Persistence.register_base(*, name:, table_prefix:)
10
+ @foobara_default_entity_base = base
11
+ end
12
+
13
+ def foobara_register_and_deanonymize_entity(name, *, &)
14
+ entity_class = foobara_register_entity(name, *, &)
15
+ Foobara::Model.deanonymize_class(entity_class)
16
+ end
17
+
18
+ # TODO: kill this off
19
+ def foobara_register_entity(name, *args, &block)
20
+ # TODO: introduce a Namespace#scope method to simplify this a bit
21
+ Foobara::Namespace.use self do
22
+ if block
23
+ args = [
24
+ TypeDeclarations::Dsl::Attributes.to_declaration(&block).declaration_data,
25
+ *args
26
+ ]
27
+ end
28
+
29
+ attributes_type_declaration, *args = args
30
+
31
+ model_base_class, description = case args.size
32
+ when 0
33
+ []
34
+ when 1, 2
35
+ arg, other = args
36
+
37
+ if args.first.is_a?(::String)
38
+ [other, arg]
39
+ else
40
+ args
41
+ end
42
+ else
43
+ # :nocov:
44
+ raise ArgumentError, "Too many arguments"
45
+ # :nocov:
46
+ end
47
+
48
+ if model_base_class
49
+ attributes_type_declaration = TypeDeclarations::Attributes.merge(
50
+ model_base_class.attributes_type.declaration_data,
51
+ attributes_type_declaration
52
+ )
53
+ end
54
+
55
+ handler = foobara_type_builder.handler_for_class(
56
+ Foobara::TypeDeclarations::Handlers::ExtendAttributesTypeDeclaration
57
+ )
58
+
59
+ attributes_type = handler.type_for_declaration(attributes_type_declaration)
60
+
61
+ # TODO: reuse the model_base_class primary key if it has one...
62
+ primary_key = attributes_type.element_types.keys.first
63
+
64
+ model_module = unless scoped_full_path.empty?
65
+ scoped_full_name
66
+ end
67
+
68
+ declaration = TypeDeclaration.new(
69
+ Util.remove_blank(
70
+ type: :entity,
71
+ name:,
72
+ model_base_class:,
73
+ model_module:,
74
+ attributes_declaration: attributes_type_declaration,
75
+ primary_key:,
76
+ description:
77
+ )
78
+ )
79
+
80
+ declaration.is_absolutified = true
81
+ declaration.is_duped = true
82
+
83
+ entity_type = foobara_type_builder.type_for_declaration(declaration)
84
+
85
+ entity_type.target_class
86
+ end
87
+ end
88
+
89
+ def foobara_register_and_deanonymize_entities(entity_names_to_attributes)
90
+ entities = []
91
+
92
+ entity_names_to_attributes.each_pair do |entity_name, attributes_declaration|
93
+ entities << foobara_register_and_deanonymize_entity(entity_name, attributes_declaration)
94
+ end
95
+
96
+ entities
97
+ end
98
+
99
+ def foobara_register_entities(entity_names_to_attributes)
100
+ entities = []
101
+
102
+ entity_names_to_attributes.each_pair do |entity_name, attributes_type_declaration|
103
+ entities << foobara_register_entity(entity_name, attributes_type_declaration)
104
+ end
105
+
106
+ entities
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end