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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1889d43f30de1d85f60a3a6245feffbed013f4a2ad2b357fd9b61209e815ccd3
4
- data.tar.gz: e57dfcd26cfb93c4f96084a61e33325644bddfd2d5d592f19e9c608f285244fe
3
+ metadata.gz: 979ed0e27280b7f1183c77f8ca34eacaab8b232c719bf9f9ad4964ef309da64c
4
+ data.tar.gz: 819ad164acb49337551e91814f5faf3a78a825085c5b723d76fff701d4c1adcd
5
5
  SHA512:
6
- metadata.gz: cd88755c0131cab9ee13fc46b38cafc779e5799aae3c33a8289198a809af9f9a021565ccaadc41d05b5a2c02aed22aad4e9ca0b3b664c0447e488ab8993c939e
7
- data.tar.gz: b9c4090428c31817a87498f261a50a986594d90e8395dfd2250bd56c963373c44d10a8faa27ec0de7500c764ebfd90b6b0ee04d523d4cd7f061041727305e903
6
+ metadata.gz: 488905b81c1b660af40b374cef9f34ebaf5548cae9202afdb2a90680abd78be9673a7b51de2431f1ce836b7815cf82ff1be245757e86da1ea0d4bcb4eed74294
7
+ data.tar.gz: 4a1d3377183c75ceea13be7d1501c686c97f9b6b29f76a01e9a9b9fa0e1addd18a0fdbef4bf6879e21f383aa3dc304d6ed2c1f9d1a3ac788be3db41ecc1793eb
data/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ # [0.4.2] - 2026-01-15
2
+
3
+ - Fix relaxed lookup bug for a symbol starting with a prefix
4
+ - Allow registered types to be looked up by string and in relaxed mode
5
+ - Create entities_plumbing project and implement auth mapping for entities
6
+ - Implement auth mappers concept
7
+ - Change authenticator to be a TypedTransformer
8
+ - Allow passing a block to a connector to simplify connecting stuff a bit
9
+ - Remove likely-unused automatic creation of Types module constants
10
+ - Support official ruby debug
11
+
12
+ # [0.4.1] - 2025-12-19
13
+
14
+ - Add a model_plumbing project and use it to fix up commands when models are reregistered
15
+ - Fix a .to_domain bug where we might grab the wrong global domain
16
+ - Allow running Describe without a full_command_name input
17
+ - Rename BaseManifest#path to BaseManifest#manifest_path (#61)
18
+ - Remove attributes_type from model manifest (#60)
19
+ - Big reorganization of this monorepo into 3 submonorepos: the top-level, typesystem, and entities
20
+ - Make more stuff private that can be private
21
+
1
22
  # [0.3.0] - 2025-11-23
2
23
 
3
24
  - Fix bug caused by exposing errors with organizations as parents
data/README.md CHANGED
@@ -1578,7 +1578,9 @@ module FoobaraDemo
1578
1578
 
1579
1579
  alias animal from
1580
1580
 
1581
- foobara_delegate :first_name, :last_name, :birthday, to: :animal
1581
+ def first_name = animal.first_name
1582
+ def last_name = animal.last_name
1583
+ def birthday = animal.birthday
1582
1584
 
1583
1585
  def birthday_to_age
1584
1586
  today = Date.today
@@ -2116,128 +2118,24 @@ TODO: give some code examples
2116
2118
  * https://foobara.org/videos
2117
2119
  * https://www.youtube.com/@FoobaraFlix
2118
2120
  * YARD Docs
2119
- * All docs combined: https://docs.foobara.com/all/
2121
+ * All docs combined: https://docs.foobara.org/all/
2120
2122
  * Per-repository docs: https://foobara.org/docs
2121
2123
 
2122
2124
  # Help
2123
2125
 
2124
- Are you actually trying to build something with Foobara? Happy to help! miles@foobara.com
2126
+ Are you actually trying to build something with Foobara? Happy to help! miles@foobara.org
2125
2127
 
2126
2128
  # Contributing
2127
2129
 
2128
2130
  There are many ways you could help! There are tasks in the codebase for all skill levels including absolute beginner.
2129
2131
  There's also much need for improved documentation. If you're interested in helping but don't know how, then
2130
- please reach out! miles@foobara.com
2132
+ please reach out! miles@foobara.org
2131
2133
 
2132
2134
  You are welcome to also contribute via a github pull request or open issues for bugs.
2133
2135
  Make sure the test suite and linter pass locally before opening a pull request as
2134
2136
  the build will fail if test coverage is below 100%.
2135
2137
 
2136
- ## Developing locally
2137
-
2138
- You should be able to do the typical stuff:
2139
-
2140
- ### 1. Cloning repository:
2141
- Fork the repository and run this(Only for SSH):
2142
-
2143
- ```
2144
- git clone git@github.com:${your_github_username}/foobara.git
2145
- ```
2146
-
2147
- Create a new branch for you to push into
2148
-
2149
- ```
2150
- git checkout -b <branch-name>
2151
- ```
2152
-
2153
- Now navigate to project directory
2154
-
2155
- ```
2156
- cd foobara
2157
- ```
2158
-
2159
- ### 2. Installing mise (LINUX/WSL)
2160
- Mise is a package manager and helps with managing different versions of ruby. It allows you to switch different versions of ruby.
2161
-
2162
- The installation docs might be updated by mise so here's the reference to that: [Installation Docs](https://mise.jdx.dev/installing-mise.html)
2163
-
2164
- ***If you already installed by following mise's docs then, you can skip this section***
2165
-
2166
- Else to setup mise follow the script given below:
2167
-
2168
- ```
2169
- sudo apt update -y && sudo apt install -y gpg wget \
2170
- build-essential \
2171
- libssl-dev zlib1g-dev libreadline-dev libyaml-dev libxml2-dev \
2172
- libxslt1-dev libffi-dev libgdbm-dev autoconf bison
2173
- wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1> /dev/null
2174
- echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=amd64] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list
2175
- sudo apt update
2176
- sudo apt install -y mise
2177
- ```
2178
-
2179
- Verify if it's installed or not by running:
2180
-
2181
- ```
2182
- mise -v
2183
- ```
2184
-
2185
- It should print out an ascii-art saying "mise-en-place"
2186
-
2187
- ### 3. Install required ruby version
2188
- In this project, currently we require ruby version >=3.4 so we can install it manually using the command below
2189
-
2190
- ```
2191
- mise use -g ruby@3.4
2192
- ```
2193
-
2194
- In case, you want to automatically activate the ruby version whenever you navigate to the directory containing .ruby-version file
2195
-
2196
- This helps a lot when you have lot of ruby projects with different versions and don't want to switch ruby versions each time manually
2197
-
2198
- ```
2199
- mise settings add idiomatic_version_file_enable_tools ruby
2200
- ```
2201
-
2202
- ### 4. Activating mise
2203
- We can activate mise so that it will update the environment variables such that we will use the correct version of ruby.
2204
-
2205
- ```
2206
- echo 'eval "$(mise activate bash)"' >> ~/.bashrc
2207
- ```
2208
-
2209
- Restart the terminal
2210
-
2211
- Now environment variables are updated and you can verify it by running:
2212
-
2213
- ```
2214
- ruby -v
2215
- ```
2216
-
2217
- It will print out the ruby version, which is mentioned in .ruby-version file
2218
-
2219
- You can list out your mise tools and its versions by running:
2220
-
2221
- ```
2222
- mise list
2223
- ```
2224
-
2225
- ### 5. Running tests
2226
- Before running test-suite, we need to install all the dependencies
2227
-
2228
- Run this to install all the dependencies:
2229
-
2230
- ```
2231
- bundle
2232
- ```
2233
-
2234
- Run the tests now:
2235
-
2236
- ```
2237
- rake
2238
- ```
2239
-
2240
- And if the tests/linter pass then you could dive into modifying the code
2138
+ For detailed information regarding contributing, please see [Contributing guide](./CONTRIBUTING.md)
2241
2139
 
2242
2140
  ## Monorepo Structure
2243
2141
 
@@ -2245,8 +2143,16 @@ Foobara is split up into many, many projects
2245
2143
 
2246
2144
  Many are in separate repositories which you can see at: https://github.com/orgs/foobara/repositories
2247
2145
 
2248
- This repository, however, is a monorepo. Sometimes projects are extracted from here
2249
- into their own repositories. Each project in this repository has its own directory in the projects/ directory.
2146
+ This repository, however, is a monorepo which in turn contains two submonorepos! You can
2147
+ see the projects in this repository in projects/ and `projects/typesystem` and `projects/entities`
2148
+ are their own submonorepos with their own `projects/` directories.
2149
+
2150
+ These two submonorepos are in the process of being decoupled for removal into their own
2151
+ repositories/gems so that Foobara can require `typesystem` but not the less stable `entities`
2152
+ in preparation for a 1.0 release.
2153
+
2154
+ Sometimes projects are extracted from this repository
2155
+ into their own repositories.
2250
2156
 
2251
2157
  # Licensing
2252
2158
 
@@ -0,0 +1,22 @@
1
+ require "foobara/delegate"
2
+ # TODO: Weird to have both of these requiring each other...
3
+ require "foobara"
4
+
5
+ module Foobara
6
+ # TODO: delete this but deprecate it for now to not break other projects
7
+ Monorepo = Foobara
8
+
9
+ module All
10
+ # just makes Rubocop happy
11
+ # TODO: delete this and make Rubocop exception in .rubocop.yml
12
+ end
13
+
14
+ require "foobara/model_attribute_helpers"
15
+ require "foobara/model_plumbing"
16
+ # Shouldn't this be optional? Maybe use autoload feature somehow?
17
+ require "foobara/in_memory_crud_driver"
18
+ require "foobara/domain_mapper"
19
+ require "foobara/manifest"
20
+
21
+ install!
22
+ end
@@ -1,12 +1,15 @@
1
1
  module Foobara
2
- # TODO: Make some kind of module to house these methods instead of the Command class
3
- class Service; end
4
-
5
2
  class Command
6
3
  class << self
7
4
  def install!
8
5
  Namespace.global.foobara_add_category_for_subclass_of(:command, self)
6
+
7
+ Domain::DomainModuleExtension::ClassMethods.prepend(
8
+ DomainModuleExtensionExtension::ClassMethods
9
+ )
9
10
  end
10
11
  end
11
12
  end
12
13
  end
14
+
15
+ Foobara.project("command", project_path: "#{__dir__}/../..")
@@ -10,7 +10,9 @@ module Foobara
10
10
 
11
11
  attr_accessor :is_subcommand
12
12
 
13
- foobara_delegate :verify_depends_on!, to: :class
13
+ def verify_depends_on!(subcommand_class)
14
+ self.class.verify_depends_on!(subcommand_class)
15
+ end
14
16
 
15
17
  def subcommand?
16
18
  is_subcommand
@@ -1,3 +1,5 @@
1
+ require "foobara/nested_transactionable"
2
+
1
3
  module Foobara
2
4
  module CommandPatternImplementation
3
5
  module Concerns
@@ -5,6 +7,7 @@ module Foobara
5
7
  include Concern
6
8
  include NestedTransactionable
7
9
 
10
+ # TODO: move this out of here!
8
11
  def relevant_entity_classes
9
12
  return @relevant_entity_classes if defined?(@relevant_entity_classes)
10
13
 
@@ -0,0 +1,16 @@
1
+ module Foobara
2
+ module Domain
3
+ module DomainModuleExtension
4
+ module ClassMethods
5
+ def foobara_command_classes
6
+ foobara_all_command(mode: Namespace::LookupMode::DIRECT)
7
+ end
8
+
9
+ def foobara_can_call_subcommands_from?(other_domain)
10
+ other_domain = Domain.to_domain(other_domain)
11
+ other_domain == self || self == GlobalDomain || foobara_depends_on?(other_domain)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,22 @@
1
+ # rubocop:disable Naming/FileName
2
+ module Foobara
3
+ class Command
4
+ module DomainModuleExtensionExtension
5
+ module ClassMethods
6
+ def foobara_manifest
7
+ to_include = TypeDeclarations.foobara_manifest_context_to_include
8
+
9
+ commands = foobara_all_command(mode: Namespace::LookupMode::DIRECT).map do |command_class|
10
+ if to_include
11
+ to_include << command_class
12
+ end
13
+ command_class.foobara_manifest_reference
14
+ end.sort
15
+
16
+ super.merge(commands:)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ # rubocop:enable Naming/FileName
@@ -0,0 +1,7 @@
1
+ module Foobara
2
+ class << self
3
+ def all_commands
4
+ Namespace.global.foobara_all_command
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ guard :rspec, all_after_pass: false, all_on_start: true, cmd: "bundle exec rspec", failed_mode: :focus do
2
+ watch(%r{^spec/(.+)_spec\.rb$})
3
+ watch(%r{^src/(.+)\.rb$}) { "spec/" }
4
+ watch(%r{^lib/(.+)\.rb$}) { "spec/" }
5
+ watch(%r{^spec/spec_helper.rb$}) { "spec/" }
6
+ end
@@ -32,5 +32,5 @@ module Foobara
32
32
  end
33
33
  end
34
34
 
35
- project "command_connectors"
35
+ project "command_connectors", project_path: "#{__dir__}/../../"
36
36
  end
@@ -0,0 +1,143 @@
1
+ RSpec.describe Foobara::CommandConnector do
2
+ after do
3
+ Foobara.reset_alls
4
+ end
5
+
6
+ before do
7
+ Foobara::Persistence.default_crud_driver = Foobara::Persistence::CrudDrivers::InMemory.new
8
+
9
+ stub_module :DomainA do
10
+ foobara_domain!
11
+ end
12
+
13
+ stub_module :DomainB do
14
+ foobara_domain!
15
+ end
16
+
17
+ stub_class(:User, Foobara::Entity) do
18
+ attributes id: :integer, name: :string
19
+ primary_key :id
20
+ end
21
+
22
+ stub_class("DomainA::User", Foobara::Entity) do
23
+ attributes id: :integer, name: :string
24
+ primary_key :id
25
+ end
26
+
27
+ stub_class("DomainB::User", Foobara::Entity) do
28
+ attributes id: :integer, name: :string
29
+ primary_key :id
30
+ end
31
+
32
+ stub_class(:SomeCommand, Foobara::Command) do
33
+ depends_on_entities(User)
34
+ end
35
+
36
+ stub_class("DomainA::SomeCommand", Foobara::Command) do
37
+ description "Some Command Description"
38
+
39
+ depends_on_entities(User, DomainA::User)
40
+ end
41
+
42
+ stub_class("DomainB::SomeCommand", Foobara::Command) do
43
+ depends_on_entities(User, DomainB::User)
44
+ end
45
+
46
+ command_connector.connect(SomeCommand)
47
+ command_connector.connect(DomainA::SomeCommand)
48
+ command_connector.connect(DomainB::SomeCommand)
49
+ end
50
+
51
+ let(:command_connector) { described_class.new }
52
+
53
+ describe "#transformed_command_from_name" do
54
+ it "can find the correct command or type despite ambiguities" do
55
+ expect(command_connector.lookup_command("SomeCommand").command_class).to eq(SomeCommand)
56
+ expect(command_connector.lookup_command(:SomeCommand).command_class).to eq(SomeCommand)
57
+ expect(
58
+ command_connector.lookup_command("DomainA::SomeCommand").command_class
59
+ ).to eq(DomainA::SomeCommand)
60
+ expect(
61
+ command_connector.lookup_command(:"DomainA::SomeCommand").command_class
62
+ ).to eq(DomainA::SomeCommand)
63
+ expect(
64
+ command_connector.lookup_command("DomainB::SomeCommand").command_class
65
+ ).to eq(DomainB::SomeCommand)
66
+ expect(
67
+ command_connector.lookup_command(:"DomainB::SomeCommand").command_class
68
+ ).to eq(DomainB::SomeCommand)
69
+
70
+ expect(command_connector.type_from_name("User").target_class).to eq(User)
71
+ expect(command_connector.type_from_name(:User).target_class).to eq(User)
72
+ expect(command_connector.type_from_name("DomainA::User").target_class).to eq(DomainA::User)
73
+ expect(command_connector.type_from_name(:"DomainA::User").target_class).to eq(DomainA::User)
74
+ expect(command_connector.type_from_name("DomainB::User").target_class).to eq(DomainB::User)
75
+ expect(command_connector.type_from_name(:"DomainB::User").target_class).to eq(DomainB::User)
76
+ end
77
+ end
78
+
79
+ describe "when connecting a command twice but with a suffix" do
80
+ before do
81
+ command_connector.connect(DomainA::SomeCommand, suffix: "Again")
82
+ end
83
+
84
+ it "registers it again but with the new name" do
85
+ some_command = command_connector.lookup_command("DomainA::SomeCommand")
86
+ some_command_again = command_connector.lookup_command("DomainA::SomeCommandAgain")
87
+
88
+ expect(some_command.command_class).to eq(DomainA::SomeCommand)
89
+ expect(some_command_again.command_class).to eq(DomainA::SomeCommand)
90
+ expect(some_command.command_name).to eq("SomeCommand")
91
+ expect(some_command_again.command_name).to eq("SomeCommandAgain")
92
+ expect(some_command_again.command_class.command_name).to eq("SomeCommand")
93
+
94
+ manifest = some_command_again.foobara_manifest
95
+
96
+ expect(manifest[:scoped_path]).to eq(["SomeCommandAgain"])
97
+ expect(manifest[:scoped_name]).to eq("SomeCommandAgain")
98
+ expect(manifest[:scoped_short_name]).to eq("SomeCommandAgain")
99
+ expect(manifest[:scoped_prefix]).to be_nil
100
+ expect(manifest[:scoped_full_path]).to eq(["DomainA", "SomeCommandAgain"])
101
+ expect(manifest[:scoped_full_name]).to eq("DomainA::SomeCommandAgain")
102
+ expect(manifest[:scoped_category]).to eq(:command)
103
+ expect(manifest[:reference]).to eq("DomainA::SomeCommandAgain")
104
+ expect(manifest[:domain]).to eq("DomainA")
105
+ expect(manifest[:organization]).to eq("global_organization")
106
+ expect(manifest[:parent]).to eq([:domain, "DomainA"])
107
+ expect(manifest[:types_depended_on]).to be_an(Array)
108
+ expect(manifest[:inputs_type]).to be_a(Hash)
109
+ expect(manifest[:description]).to eq("Some Command Description")
110
+ expect(manifest[:errors_transformers]).to be_nil
111
+ end
112
+
113
+ it "includes the suffixed commands in the manifest" do
114
+ manifest = command_connector.foobara_manifest
115
+
116
+ domain_manifest = manifest[:domain][:DomainA]
117
+ commands_list = domain_manifest[:commands]
118
+
119
+ expect(commands_list).to eq([
120
+ "DomainA::SomeCommand",
121
+ "DomainA::SomeCommandAgain"
122
+ ])
123
+ end
124
+ end
125
+
126
+ describe "#foobara_manifest" do
127
+ context "when detached" do
128
+ around do |example|
129
+ Foobara::TypeDeclarations.with_manifest_context(detached: true) do
130
+ example.run
131
+ end
132
+ end
133
+
134
+ it "converts entities to detached entities" do
135
+ manifest = command_connector.foobara_manifest
136
+
137
+ declaration_data = manifest[:type][:"DomainA::User"][:declaration_data]
138
+ expect(declaration_data[:type]).to eq(:detached_entity)
139
+ expect(declaration_data[:model_base_class]).to eq("Foobara::DetachedEntity")
140
+ end
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,201 @@
1
+ RSpec.describe Foobara::CommandConnector do
2
+ after do
3
+ Foobara.reset_alls
4
+ end
5
+
6
+ let(:command_class) do
7
+ stub_class(:ComputeExponent, Foobara::Command) do
8
+ inputs exponent: :integer, base: :integer
9
+ result :integer
10
+
11
+ def execute = base ** exponent
12
+ end
13
+ end
14
+
15
+ let(:command_connector) do
16
+ described_class.new(authenticator:, current_user: current_user_mapper)
17
+ end
18
+
19
+ let(:authenticator) do
20
+ proc { "some_user" }
21
+ end
22
+
23
+ let(:base) { 2 }
24
+ let(:exponent) { 3 }
25
+
26
+ let(:response) { command_connector.run(full_command_name:, action:, inputs:) }
27
+ let(:errors_hash) { response.body.errors_hash }
28
+
29
+ let(:action) { "run" }
30
+ let(:full_command_name) { "ComputeExponent" }
31
+ let(:inputs) do
32
+ { base:, exponent: }
33
+ end
34
+
35
+ describe "#run_command" do
36
+ class << self
37
+ def with_current_user_allowed_rule
38
+ let(:allowed_rule) do
39
+ -> { current_user == "current_user is some_user" }
40
+ end
41
+ end
42
+
43
+ def with_current_user_not_allowed_rule
44
+ let(:allowed_rule) do
45
+ -> { current_user == "asfdasdf" }
46
+ end
47
+ end
48
+
49
+ def with_authenticated_user_allowed_rule
50
+ let(:allowed_rule) do
51
+ -> { authenticated_user == "some_user" }
52
+ end
53
+ end
54
+
55
+ def with_authenticated_user_not_allowed_rule
56
+ let(:allowed_rule) do
57
+ -> { authenticated_user == "asfdasdf" }
58
+ end
59
+ end
60
+ end
61
+
62
+ shared_examples "a connector with auth mappers" do
63
+ before do
64
+ command_connector.connect(command_class, allowed_rule:)
65
+ end
66
+
67
+ context "when using current_user in the allowed rule" do
68
+ context "when allowed" do
69
+ with_current_user_allowed_rule
70
+
71
+ it "runs the command" do
72
+ expect(response.status).to be(0)
73
+ expect(response.body).to eq(8)
74
+ end
75
+ end
76
+
77
+ context "when not allowed" do
78
+ with_current_user_not_allowed_rule
79
+
80
+ it "fails with a relevant error" do
81
+ expect(response.status).to be(1)
82
+ expect(errors_hash.key?("runtime.not_allowed")).to be true
83
+ end
84
+ end
85
+
86
+ context "when calling current_user multiple times" do
87
+ let(:allowed_rule) do
88
+ -> { current_user && current_user == "current_user is some_user" }
89
+ end
90
+
91
+ it "runs the command" do
92
+ expect(response.status).to be(0)
93
+ expect(response.body).to eq(8)
94
+ end
95
+ end
96
+ end
97
+
98
+ context "when using authenticated_user in the allowed rule" do
99
+ context "when allowed" do
100
+ with_authenticated_user_allowed_rule
101
+
102
+ it "runs the command" do
103
+ expect(response.status).to be(0)
104
+ expect(response.body).to eq(8)
105
+ end
106
+ end
107
+
108
+ context "when not allowed" do
109
+ with_authenticated_user_not_allowed_rule
110
+
111
+ it "fails with a relevant error" do
112
+ expect(response.status).to be(1)
113
+ expect(errors_hash.key?("runtime.not_allowed")).to be true
114
+ end
115
+ end
116
+ end
117
+ end
118
+
119
+ context "when auth user mapper is a hash" do
120
+ let(:current_user_mapper) do
121
+ {
122
+ to: :string,
123
+ map: ->(authenticated_user) { "current_user is #{authenticated_user}" }
124
+ }
125
+ end
126
+
127
+ it_behaves_like "a connector with auth mappers"
128
+ end
129
+
130
+ context "when auth user mapper is an array" do
131
+ let(:current_user_mapper) { [:string, ->(authenticated_user) { "current_user is #{authenticated_user}" }] }
132
+
133
+ it_behaves_like "a connector with auth mappers"
134
+ end
135
+
136
+ context "when auth user mapper is a typed transformer class" do
137
+ let(:current_user_mapper) do
138
+ stub_class("SomeTypedTransformer", Foobara::TypeDeclarations::TypedTransformer) do
139
+ to :string
140
+
141
+ def transform(authenticated_user)
142
+ "current_user is #{authenticated_user}"
143
+ end
144
+ end
145
+ end
146
+
147
+ it_behaves_like "a connector with auth mappers"
148
+
149
+ context "when it is an instance" do
150
+ let(:current_user_mapper) { super().instance }
151
+
152
+ it_behaves_like "a connector with auth mappers"
153
+ end
154
+ end
155
+
156
+ context "when auth user mapper is a domain mapper" do
157
+ let(:current_user_mapper) do
158
+ stub_class("SomeDomainMapper", Foobara::DomainMapper) do
159
+ from :string
160
+ to :string
161
+
162
+ def map = "current_user is #{from}"
163
+ end
164
+ end
165
+
166
+ it_behaves_like "a connector with auth mappers"
167
+ end
168
+
169
+ context "when auth user mapper is a command" do
170
+ context "with only one input" do
171
+ let(:current_user_mapper) do
172
+ stub_class("SomeCommand", Foobara::Command) do
173
+ inputs auth_user: :string
174
+ result :string
175
+
176
+ def execute = "current_user is #{auth_user}"
177
+ end
178
+ end
179
+
180
+ it_behaves_like "a connector with auth mappers"
181
+ end
182
+
183
+ context "with multiple inputs but only one required input" do
184
+ let(:current_user_mapper) do
185
+ stub_class("SomeCommand", Foobara::Command) do
186
+ inputs do
187
+ foo :string
188
+ bar :string
189
+ auth_user :string, :required
190
+ end
191
+ result :string
192
+
193
+ def execute = "current_user is #{auth_user}"
194
+ end
195
+ end
196
+
197
+ it_behaves_like "a connector with auth mappers"
198
+ end
199
+ end
200
+ end
201
+ end