foobara 0.5.10 → 0.6.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 (325) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +22 -0
  4. data/lib/foobara/all.rb +4 -2
  5. data/projects/command/src/command_pattern_implementation/concerns/command_data.rb +3 -3
  6. data/projects/command/src/command_pattern_implementation/concerns/domain_mappers.rb +2 -2
  7. data/projects/command/src/command_pattern_implementation/concerns/errors.rb +27 -27
  8. data/projects/command/src/command_pattern_implementation/concerns/errors_type.rb +7 -11
  9. data/projects/command/src/command_pattern_implementation/concerns/inputs.rb +4 -24
  10. data/projects/command/src/command_pattern_implementation/concerns/inputs_type.rb +9 -14
  11. data/projects/command/src/command_pattern_implementation/concerns/reflection.rb +7 -20
  12. data/projects/command/src/command_pattern_implementation/concerns/runtime.rb +3 -48
  13. data/projects/command/src/command_pattern_implementation/concerns/subcommands.rb +5 -5
  14. data/projects/command/src/command_pattern_implementation.rb +0 -1
  15. data/projects/command_connectors/lib/foobara/command_connectors.rb +1 -1
  16. data/projects/command_connectors/src/command_connector/concerns/desugarizers.rb +5 -5
  17. data/projects/command_connectors/src/command_connector/concerns/reflection.rb +63 -17
  18. data/projects/command_connectors/src/command_connector/request.rb +26 -10
  19. data/projects/command_connectors/src/command_connector/response.rb +2 -0
  20. data/projects/command_connectors/src/command_connector.rb +62 -58
  21. data/projects/command_connectors/src/command_registry/exposed_command.rb +7 -2
  22. data/projects/command_connectors/src/command_registry.rb +24 -18
  23. data/projects/command_connectors/src/desugarizer.rb +2 -2
  24. data/projects/command_connectors/src/desugarizers/attributes.rb +8 -8
  25. data/projects/command_connectors/src/desugarizers/auth.rb +1 -1
  26. data/projects/command_connectors/src/desugarizers/set_inputs.rb +3 -3
  27. data/projects/command_connectors/src/desugarizers/symbols_to_true.rb +2 -2
  28. data/projects/command_connectors/src/request_mutator.rb +6 -6
  29. data/projects/command_connectors/src/response_mutator.rb +6 -6
  30. data/projects/command_connectors/src/transformed_command.rb +39 -36
  31. data/projects/command_connectors/src/transformers/auth_errors_transformer.rb +2 -2
  32. data/projects/command_connectors/src/transformers/entity_to_primary_key_inputs_transformer.rb +2 -2
  33. data/projects/command_connectors/src/transformers/load_delegated_attributes_entities_pre_commit_transformer.rb +1 -1
  34. data/projects/domain_mapper/src/domain_mapper.rb +4 -4
  35. data/projects/domain_mapper/src/domain_mapper_lookups.rb +3 -3
  36. data/projects/entities/projects/detached_entity/lib/foobara/detached_entity.rb +1 -1
  37. data/projects/entities/projects/detached_entity/src/concerns/associations.rb +18 -18
  38. data/projects/entities/projects/detached_entity/src/concerns/initialization.rb +2 -2
  39. data/projects/entities/projects/detached_entity/src/concerns/primary_key.rb +4 -4
  40. data/projects/entities/projects/detached_entity/src/concerns/types.rb +2 -2
  41. data/projects/entities/projects/detached_entity/src/detached_entity_type.rb +4 -4
  42. data/projects/entities/projects/detached_entity/src/extensions/builtin_types/detached_entity/casters/primary_key.rb +1 -1
  43. data/projects/entities/projects/detached_entity/src/extensions/builtin_types/detached_entity/validators/model_instance_is_valid.rb +2 -2
  44. data/projects/entities/projects/detached_entity/src/extensions/type_declarations/handlers/registered_type_declaration/validate_primary_key_present.rb +30 -0
  45. data/projects/entities/projects/detached_entity/src/remove_sensitive_values_transformer_extensions.rb +2 -2
  46. data/projects/entities/projects/entity/lib/foobara/entity.rb +1 -1
  47. data/projects/entities/projects/entity/src/concerns/attributes.rb +6 -6
  48. data/projects/entities/projects/entity/src/concerns/callbacks.rb +1 -1
  49. data/projects/entities/projects/entity/src/concerns/initialization.rb +8 -8
  50. data/projects/entities/projects/entity/src/concerns/mutations.rb +4 -4
  51. data/projects/entities/projects/entity/src/concerns/persistence.rb +3 -3
  52. data/projects/entities/projects/entity/src/concerns/queries.rb +7 -7
  53. data/projects/entities/projects/entity/src/extensions/domain/domain_module_extension.rb +4 -4
  54. data/projects/entities/projects/entity/src/new_prepend.rb +2 -2
  55. data/projects/entities/projects/entity/src/not_found_error.rb +8 -8
  56. data/projects/entities/projects/entity/src/sensitive_value_removers/entity.rb +8 -5
  57. data/projects/entities/projects/in_memory_crud_driver_minimal/src/in_memory_minimal.rb +4 -4
  58. data/projects/entities/projects/model_attribute_helpers/lib/foobara/model_attribute_helpers.rb +0 -2
  59. data/projects/entities/projects/model_attribute_helpers/src/attribute_helper_aliases.rb +1 -1
  60. data/projects/entities/projects/model_attribute_helpers/src/attribute_helpers.rb +2 -2
  61. data/projects/entities/projects/nested_transactionable/lib/foobara/nested_transactionable.rb +5 -5
  62. data/projects/entities/projects/persistence/lib/foobara/persistence.rb +1 -1
  63. data/projects/entities/projects/persistence/src/entity_attributes_crud_driver.rb +35 -37
  64. data/projects/entities/projects/persistence/src/entity_base/transaction/concerns/entity_callback_handling.rb +25 -25
  65. data/projects/entities/projects/persistence/src/entity_base/transaction/concerns/state_transitions.rb +8 -8
  66. data/projects/entities/projects/persistence/src/entity_base/transaction/concerns/transaction_tracking.rb +1 -1
  67. data/projects/entities/projects/persistence/src/entity_base/transaction.rb +9 -9
  68. data/projects/entities/projects/persistence/src/entity_base/transaction_table/concerns/record_tracking.rb +4 -4
  69. data/projects/entities/projects/persistence/src/entity_base/transaction_table.rb +52 -52
  70. data/projects/entities/projects/persistence/src/entity_base.rb +7 -7
  71. data/projects/entities/projects/persistence/src/persistence.rb +23 -23
  72. data/projects/entities/projects/weak_object_set/src/weak_object_set.rb +16 -16
  73. data/projects/entities_plumbing/lib/foobara/entities_plumbing.rb +6 -2
  74. data/projects/entities_plumbing/src/extensions/command_pattern_implementation/concerns/entities.rb +21 -5
  75. data/projects/entities_plumbing/src/extensions/command_pattern_implementation/concerns/entity_errors_type.rb +23 -0
  76. data/projects/entities_plumbing/src/extensions/command_pattern_implementation/concerns/entity_inputs.rb +33 -0
  77. data/projects/entities_plumbing/src/extensions/command_pattern_implementation/concerns/entity_reflection.rb +39 -0
  78. data/projects/entities_plumbing/src/extensions/command_pattern_implementation/concerns/runtime.rb +39 -0
  79. data/projects/manifest/src/base_manifest.rb +9 -9
  80. data/projects/manifest/src/model.rb +4 -4
  81. data/projects/manifest/src/type.rb +3 -3
  82. data/projects/manifest/src/type_declaration.rb +4 -4
  83. data/projects/model_plumbing/lib/foobara/model_plumbing.rb +2 -0
  84. data/projects/model_plumbing/src/extensions/command_pattern_implementation/concerns/model_inputs_type.rb +35 -0
  85. data/projects/typesystem/projects/builtin_types/lib/foobara/builtin_types.rb +2 -1
  86. data/projects/typesystem/projects/builtin_types/src/builtin_types.rb +8 -8
  87. data/projects/typesystem/projects/builtin_types/src/duck/supported_validators/one_of/type_declaration_extension/extend_registered_type_declaration/desugarizers/module_desugarizer.rb +2 -2
  88. data/projects/typesystem/projects/builtin_types/src/email/validator_base.rb +4 -4
  89. data/projects/typesystem/projects/callback/src/block/concerns/block_parameter_required.rb +2 -2
  90. data/projects/typesystem/projects/callback/src/block/concerns/keyword_argumentable_block.rb +2 -2
  91. data/projects/typesystem/projects/callback/src/block/concerns/single_argument_block.rb +2 -2
  92. data/projects/typesystem/projects/callback/src/block.rb +4 -4
  93. data/projects/typesystem/projects/callback/src/registry/base.rb +10 -10
  94. data/projects/typesystem/projects/callback/src/registry/conditioned.rb +2 -2
  95. data/projects/typesystem/projects/callback/src/registry/multiple_action.rb +6 -6
  96. data/projects/typesystem/projects/callback/src/runner.rb +4 -4
  97. data/projects/typesystem/projects/callback/src/set.rb +4 -4
  98. data/projects/typesystem/projects/common/src/data_path.rb +14 -14
  99. data/projects/typesystem/projects/common/src/error.rb +11 -11
  100. data/projects/typesystem/projects/common/src/error_collection.rb +14 -14
  101. data/projects/typesystem/projects/common/src/error_key.rb +5 -3
  102. data/projects/typesystem/projects/common/src/outcome.rb +5 -5
  103. data/projects/typesystem/projects/common/src/possible_error.rb +2 -2
  104. data/projects/typesystem/projects/concerns/src/concern.rb +3 -3
  105. data/projects/typesystem/projects/delegate/src/extensions/module.rb +4 -4
  106. data/projects/typesystem/projects/domain/lib/foobara/domain.rb +2 -2
  107. data/projects/typesystem/projects/domain/src/domain.rb +5 -5
  108. data/projects/typesystem/projects/domain/src/domain_module_extension.rb +22 -22
  109. data/projects/typesystem/projects/domain/src/extensions/foobara.rb +14 -6
  110. data/projects/typesystem/projects/domain/src/module_extension.rb +4 -4
  111. data/projects/typesystem/projects/domain/src/organization.rb +6 -6
  112. data/projects/typesystem/projects/enumerated/src/accessors.rb +4 -4
  113. data/projects/typesystem/projects/enumerated/src/values.rb +14 -14
  114. data/projects/{entities → typesystem}/projects/model/lib/foobara/model.rb +1 -1
  115. data/projects/{entities → typesystem}/projects/model/src/concerns/classes.rb +4 -4
  116. data/projects/{entities → typesystem}/projects/model/src/concerns/types.rb +5 -5
  117. data/projects/{entities → typesystem}/projects/model/src/extensions/builtin_types/model/casters/hash.rb +1 -1
  118. data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_model_type_declaration/attributes_handler_desugarizer.rb +2 -2
  119. data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_model_type_declaration/model_class_desugarizer.rb +6 -6
  120. data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_model_type_declaration/to_type_transformer.rb +4 -4
  121. data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_registered_model_type_declaration.rb +2 -2
  122. data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/registered_type_declaration/model_class_desugarizer.rb +6 -10
  123. data/projects/{entities → typesystem}/projects/model/src/model.rb +13 -13
  124. data/projects/{entities → typesystem}/projects/model/src/sensitive_value_removers/model.rb +1 -1
  125. data/projects/typesystem/projects/namespace/src/ambiguous_registry.rb +5 -5
  126. data/projects/typesystem/projects/namespace/src/base_registry.rb +8 -8
  127. data/projects/typesystem/projects/namespace/src/is_namespace.rb +19 -19
  128. data/projects/typesystem/projects/namespace/src/namespace/lookup_mode.rb +2 -2
  129. data/projects/typesystem/projects/namespace/src/namespace.rb +5 -5
  130. data/projects/typesystem/projects/namespace/src/namespace_helpers.rb +4 -4
  131. data/projects/typesystem/projects/namespace/src/prefixless_registry.rb +3 -3
  132. data/projects/typesystem/projects/namespace/src/scoped.rb +7 -7
  133. data/projects/typesystem/projects/project/src/foobara.rb +13 -7
  134. data/projects/typesystem/projects/project/src/project.rb +1 -1
  135. data/projects/typesystem/projects/state_machine/src/callbacks.rb +14 -14
  136. data/projects/typesystem/projects/state_machine/src/state_machine.rb +2 -2
  137. data/projects/typesystem/projects/state_machine/src/sugar.rb +3 -3
  138. data/projects/typesystem/projects/type_declarations/lib/foobara/type_declarations.rb +1 -1
  139. data/projects/typesystem/projects/type_declarations/src/attributes.rb +2 -2
  140. data/projects/typesystem/projects/type_declarations/src/attributes_transformers/from_yaml.rb +2 -2
  141. data/projects/typesystem/projects/type_declarations/src/attributes_transformers/only.rb +2 -2
  142. data/projects/typesystem/projects/type_declarations/src/attributes_transformers/reject.rb +2 -2
  143. data/projects/typesystem/projects/type_declarations/src/attributes_transformers/set.rb +4 -4
  144. data/projects/typesystem/projects/type_declarations/src/desugarizer.rb +2 -2
  145. data/projects/typesystem/projects/type_declarations/src/dsl/attributes.rb +9 -9
  146. data/projects/typesystem/projects/type_declarations/src/error_extension.rb +6 -6
  147. data/projects/typesystem/projects/type_declarations/src/handlers/extend_array_type_declaration/array_desugarizer.rb +3 -3
  148. data/projects/typesystem/projects/type_declarations/src/handlers/extend_array_type_declaration/element_type_declaration_desugarizer.rb +2 -2
  149. data/projects/typesystem/projects/type_declarations/src/handlers/extend_array_type_declaration/type_set_to_array_desugarizer.rb +2 -2
  150. data/projects/typesystem/projects/type_declarations/src/handlers/extend_attributes_type_declaration/element_type_declarations_desugarizer.rb +2 -2
  151. data/projects/typesystem/projects/type_declarations/src/handlers/extend_registered_type_declaration/to_type_transformer.rb +2 -2
  152. data/projects/typesystem/projects/type_declarations/src/handlers/extend_registered_type_declaration.rb +2 -2
  153. data/projects/typesystem/projects/type_declarations/src/handlers/extend_tuple_type_declaration/array_desugarizer.rb +2 -2
  154. data/projects/typesystem/projects/type_declarations/src/handlers/registered_type_declaration.rb +4 -3
  155. data/projects/typesystem/projects/type_declarations/src/remove_sensitive_values_transformer.rb +3 -3
  156. data/projects/typesystem/projects/type_declarations/src/type_builder.rb +5 -5
  157. data/projects/typesystem/projects/type_declarations/src/type_declaration.rb +7 -1
  158. data/projects/typesystem/projects/type_declarations/src/type_declaration_handler.rb +13 -13
  159. data/projects/typesystem/projects/type_declarations/src/type_declaration_handler_registry.rb +2 -2
  160. data/projects/typesystem/projects/type_declarations/src/type_declaration_validator.rb +2 -2
  161. data/projects/typesystem/projects/type_declarations/src/type_declarations.rb +2 -2
  162. data/projects/typesystem/projects/type_declarations/src/with_registries.rb +2 -2
  163. data/projects/typesystem/projects/types/lib/foobara/types.rb +0 -2
  164. data/projects/typesystem/projects/types/src/extensions/error.rb +5 -5
  165. data/projects/typesystem/projects/types/src/type/concerns/reflection.rb +22 -22
  166. data/projects/typesystem/projects/types/src/type/concerns/supported_processor_registration.rb +4 -4
  167. data/projects/typesystem/projects/types/src/type.rb +25 -25
  168. data/projects/typesystem/projects/value/src/caster.rb +11 -11
  169. data/projects/typesystem/projects/value/src/data_error.rb +1 -1
  170. data/projects/typesystem/projects/value/src/mutator.rb +3 -3
  171. data/projects/typesystem/projects/value/src/processor/casting.rb +6 -6
  172. data/projects/typesystem/projects/value/src/processor/pipeline.rb +2 -2
  173. data/projects/typesystem/projects/value/src/processor/runner.rb +1 -1
  174. data/projects/typesystem/projects/value/src/processor/selection.rb +3 -3
  175. data/projects/typesystem/projects/value/src/processor.rb +23 -23
  176. data/projects/typesystem/projects/value/src/transformer.rb +5 -5
  177. data/projects/typesystem/projects/value/src/validator.rb +3 -3
  178. data/version.rb +2 -2
  179. metadata +44 -160
  180. data/projects/command_connectors/Guardfile +0 -6
  181. data/projects/command_connectors/spec/allowed_rules_spec.rb +0 -77
  182. data/projects/command_connectors/spec/ambiguous_lookups_spec.rb +0 -143
  183. data/projects/command_connectors/spec/auth_mappers_spec.rb +0 -201
  184. data/projects/command_connectors/spec/command_connector_spec.rb +0 -2460
  185. data/projects/command_connectors/spec/command_registry_spec.rb +0 -9
  186. data/projects/command_connectors/spec/commands/describe_spec.rb +0 -83
  187. data/projects/command_connectors/spec/commands/ping_spec.rb +0 -14
  188. data/projects/command_connectors/spec/commands/query_git_commit_info_spec.rb +0 -55
  189. data/projects/command_connectors/spec/fixtures/command_connectors/manifest_with_errors_with_missing_command_parents.yaml +0 -1662
  190. data/projects/command_connectors/spec/not_found_error_spec.rb +0 -17
  191. data/projects/command_connectors/spec/pre_commit_transformers/load_atoms_pre_commit_transformer_spec.rb +0 -108
  192. data/projects/command_connectors/spec/request_spec.rb +0 -118
  193. data/projects/command_connectors/spec/serializer_spec.rb +0 -9
  194. data/projects/command_connectors/spec/serializers/aggregate_serializer_spec.rb +0 -45
  195. data/projects/command_connectors/spec/serializers/atomic_serializer_spec.rb +0 -68
  196. data/projects/command_connectors/spec/serializers/entities_to_primary_keys_serializer_spec.rb +0 -36
  197. data/projects/command_connectors/spec/serializers/json_serializer_spec.rb +0 -22
  198. data/projects/command_connectors/spec/serializers/noop_serializer_spec.rb +0 -22
  199. data/projects/command_connectors/spec/serializers/yaml_serializer_spec.rb +0 -22
  200. data/projects/command_connectors/spec/spec_helper.rb +0 -56
  201. data/projects/command_connectors/spec/support/rubyprof.rb +0 -32
  202. data/projects/command_connectors/spec/support/term_trap.rb +0 -6
  203. data/projects/command_connectors/spec/transformers/entity_to_primary_key_inputs_transformer_spec.rb +0 -119
  204. data/projects/entities/Guardfile +0 -6
  205. data/projects/entities/spec/builtin_types/detached_entity_spec.rb +0 -300
  206. data/projects/entities/spec/builtin_types/entity_spec.rb +0 -501
  207. data/projects/entities/spec/builtin_types/model_spec.rb +0 -420
  208. data/projects/entities/spec/detached_entity/casting_spec.rb +0 -31
  209. data/projects/entities/spec/entity/concerns/associations_spec.rb +0 -73
  210. data/projects/entities/spec/entity/concerns/attribute_helpers_spec.rb +0 -220
  211. data/projects/entities/spec/entity/concerns/callbacks_spec.rb +0 -61
  212. data/projects/entities/spec/entity/concerns/initialization_spec.rb +0 -213
  213. data/projects/entities/spec/entity/concerns/mutations_spec.rb +0 -38
  214. data/projects/entities/spec/entity/concerns/queries_spec.rb +0 -184
  215. data/projects/entities/spec/entity/entity_spec.rb +0 -240
  216. data/projects/entities/spec/entity/extending_existing_spec.rb +0 -137
  217. data/projects/entities/spec/entity/extensions/domain_module_extension_spec.rb +0 -42
  218. data/projects/entities/spec/entity/from_type_declaration_spec.rb +0 -34
  219. data/projects/entities/spec/entity/that_owns_spec.rb +0 -243
  220. data/projects/entities/spec/entity/weak_object_set_spec.rb +0 -91
  221. data/projects/entities/spec/model/model_spec.rb +0 -135
  222. data/projects/entities/spec/model/types_spec.rb +0 -397
  223. data/projects/entities/spec/nested_transactionable/nested_transactionable_spec.rb +0 -67
  224. data/projects/entities/spec/persistence/entity_attributes_crud_drivers/in_memory_minimal_spec.rb +0 -13
  225. data/projects/entities/spec/persistence/entity_base/transaction_spec.rb +0 -509
  226. data/projects/entities/spec/persistence/entity_base/transaction_table_spec.rb +0 -58
  227. data/projects/entities/spec/persistence/persistence_spec.rb +0 -148
  228. data/projects/entities/spec/spec_helper.rb +0 -54
  229. data/projects/entities/spec/support/rubyprof.rb +0 -32
  230. data/projects/entities/spec/support/term_trap.rb +0 -6
  231. data/projects/entities/spec/type_declarations/sensitive_type_removers_spec.rb +0 -90
  232. data/projects/entities_plumbing/Guardfile +0 -6
  233. data/projects/entities_plumbing/spec/auth_mappers_spec.rb +0 -159
  234. data/projects/entities_plumbing/spec/spec_helper.rb +0 -55
  235. data/projects/entities_plumbing/spec/support/rubyprof.rb +0 -32
  236. data/projects/entities_plumbing/spec/support/term_trap.rb +0 -6
  237. data/projects/entities_plumbing/spec/transaction_spec.rb +0 -534
  238. data/projects/manifest/Guardfile +0 -6
  239. data/projects/manifest/spec/associations_spec.rb +0 -67
  240. data/projects/manifest/spec/manifest_spec.rb +0 -382
  241. data/projects/manifest/spec/model_spec.rb +0 -126
  242. data/projects/manifest/spec/spec_helper.rb +0 -54
  243. data/projects/manifest/spec/type_declaration_spec.rb +0 -39
  244. data/projects/manifest/spec/type_spec.rb +0 -30
  245. data/projects/typesystem/spec/builtin_types/allow_nil_spec.rb +0 -138
  246. data/projects/typesystem/spec/builtin_types/array_spec.rb +0 -140
  247. data/projects/typesystem/spec/builtin_types/associative_array_spec.rb +0 -228
  248. data/projects/typesystem/spec/builtin_types/attributes_spec.rb +0 -490
  249. data/projects/typesystem/spec/builtin_types/big_decimal_spec.rb +0 -42
  250. data/projects/typesystem/spec/builtin_types/boolean_spec.rb +0 -43
  251. data/projects/typesystem/spec/builtin_types/class_type_desugarizer_spec.rb +0 -17
  252. data/projects/typesystem/spec/builtin_types/custom_type_spec.rb +0 -430
  253. data/projects/typesystem/spec/builtin_types/date_spec.rb +0 -37
  254. data/projects/typesystem/spec/builtin_types/datetime_spec.rb +0 -49
  255. data/projects/typesystem/spec/builtin_types/email_spec.rb +0 -44
  256. data/projects/typesystem/spec/builtin_types/float_spec.rb +0 -59
  257. data/projects/typesystem/spec/builtin_types/instance_of_spec.rb +0 -75
  258. data/projects/typesystem/spec/builtin_types/one_of_spec.rb +0 -73
  259. data/projects/typesystem/spec/builtin_types/string_spec.rb +0 -117
  260. data/projects/typesystem/spec/builtin_types/symbol_spec.rb +0 -24
  261. data/projects/typesystem/spec/builtin_types/tuple_spec.rb +0 -125
  262. data/projects/typesystem/spec/callback/callback_spec.rb +0 -155
  263. data/projects/typesystem/spec/callback/registry/conditioned_spec.rb +0 -152
  264. data/projects/typesystem/spec/callback/registry/multiple_action_spec.rb +0 -144
  265. data/projects/typesystem/spec/callback/registry/single_action_spec.rb +0 -114
  266. data/projects/typesystem/spec/common/data_path_spec.rb +0 -268
  267. data/projects/typesystem/spec/common/error_collection_spec.rb +0 -77
  268. data/projects/typesystem/spec/common/error_key_spec.rb +0 -56
  269. data/projects/typesystem/spec/common/outcome_spec.rb +0 -65
  270. data/projects/typesystem/spec/common/possible_error_spec.rb +0 -17
  271. data/projects/typesystem/spec/concerns/concern_spec.rb +0 -122
  272. data/projects/typesystem/spec/enumerated/accessors_spec.rb +0 -182
  273. data/projects/typesystem/spec/enumerated/enumerated_spec.rb +0 -32
  274. data/projects/typesystem/spec/enumerated/values_spec.rb +0 -67
  275. data/projects/typesystem/spec/foobara/foobara_spec.rb +0 -45
  276. data/projects/typesystem/spec/namespace/ambiguous_registry_spec.rb +0 -70
  277. data/projects/typesystem/spec/namespace/foobara_simulation_spec.rb +0 -254
  278. data/projects/typesystem/spec/namespace/is_namespace_spec.rb +0 -103
  279. data/projects/typesystem/spec/namespace/namespace_helpers_spec.rb +0 -67
  280. data/projects/typesystem/spec/namespace/namespace_spec.rb +0 -335
  281. data/projects/typesystem/spec/namespace/prefixless_registry_spec.rb +0 -30
  282. data/projects/typesystem/spec/namespace/unambiguous_registry_spec.rb +0 -50
  283. data/projects/typesystem/spec/spec_helper.rb +0 -52
  284. data/projects/typesystem/spec/state_machine/callbacks_spec.rb +0 -144
  285. data/projects/typesystem/spec/state_machine/state_machine_spec.rb +0 -224
  286. data/projects/typesystem/spec/state_machine/target_attribute_spec.rb +0 -46
  287. data/projects/typesystem/spec/support/rubyprof.rb +0 -32
  288. data/projects/typesystem/spec/support/term_trap.rb +0 -6
  289. data/projects/typesystem/spec/type_declarations/attributes_spec.rb +0 -14
  290. data/projects/typesystem/spec/type_declarations/attributes_transformer_spec.rb +0 -95
  291. data/projects/typesystem/spec/type_declarations/dsl/attributes_spec.rb +0 -107
  292. data/projects/typesystem/spec/type_declarations/handlers/extend_registered_type_declaration_spec.rb +0 -13
  293. data/projects/typesystem/spec/type_declarations/sensitive_type_removers_spec.rb +0 -210
  294. data/projects/typesystem/spec/type_declarations/type_builder_spec.rb +0 -47
  295. data/projects/typesystem/spec/type_declarations/type_declaration_spec.rb +0 -252
  296. data/projects/typesystem/spec/type_declarations/type_declarations_spec.rb +0 -11
  297. data/projects/typesystem/spec/type_declarations/typed_transformer_spec.rb +0 -65
  298. data/projects/typesystem/spec/types/sensitive_spec.rb +0 -36
  299. data/projects/typesystem/spec/types/type_spec.rb +0 -102
  300. data/projects/typesystem/spec/value/caster_spec.rb +0 -23
  301. data/projects/typesystem/spec/value/processor/runner_spec.rb +0 -34
  302. data/projects/typesystem/spec/value/processor/selection_spec.rb +0 -71
  303. data/projects/typesystem/spec/value/processor_spec.rb +0 -76
  304. data/projects/typesystem/spec/value/transformer_spec.rb +0 -27
  305. /data/projects/{command/src → entities_plumbing/src/extensions}/command_pattern_implementation/concerns/transactions.rb +0 -0
  306. /data/projects/{entities → typesystem}/projects/model/src/concerns/aliases.rb +0 -0
  307. /data/projects/{entities → typesystem}/projects/model/src/concerns/reflection.rb +0 -0
  308. /data/projects/{entities → typesystem}/projects/model/src/extensions/builtin_types/model/supported_transformers/mutable.rb +0 -0
  309. /data/projects/{entities → typesystem}/projects/model/src/extensions/builtin_types/model/validators/model_instance_is_valid.rb +0 -0
  310. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_model_type_declaration/array_with_symbolic_elements.rb +0 -0
  311. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_model_type_declaration/delegates_desugarizer.rb +0 -0
  312. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_model_type_declaration/delegates_validator.rb +0 -0
  313. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_model_type_declaration/hash_desugarizer.rb +0 -0
  314. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_model_type_declaration/move_private_from_element_types_to_root.rb +0 -0
  315. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_model_type_declaration/symbolize_private.rb +0 -0
  316. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_model_type_declaration/valid_attribute_names.rb +0 -0
  317. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_model_type_declaration.rb +0 -0
  318. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_registered_model_type_declaration/hash_desugarizer.rb +0 -0
  319. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_registered_model_type_declaration/model_class_type_desugarizer.rb +0 -0
  320. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_registered_model_type_declaration/mutable_validator.rb +0 -0
  321. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_registered_model_type_declaration/normalize_mutable_attributes_desugarizer.rb +0 -0
  322. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/handlers/extend_registered_model_type_declaration/to_type_transformer.rb +0 -0
  323. /data/projects/{entities → typesystem}/projects/model/src/extensions/type_declarations/lazy_element_types/model.rb +0 -0
  324. /data/projects/{entities → typesystem}/projects/model/src/sensitive_type_removers/extended_model.rb +0 -0
  325. /data/projects/{entities → typesystem}/projects/model/src/sensitive_type_removers/model.rb +0 -0
@@ -1,509 +0,0 @@
1
- RSpec.describe Foobara::Persistence::EntityBase::Transaction do
2
- before do
3
- Foobara::Persistence.default_crud_driver = Foobara::Persistence::CrudDrivers::InMemory.new
4
- end
5
-
6
- after do
7
- Foobara.reset_alls
8
- end
9
-
10
- let(:entity_class) do
11
- stub_class("SomeEntity", Foobara::Entity) do
12
- attributes pk: :integer,
13
- foo: :integer,
14
- bar: :symbol
15
-
16
- primary_key :pk
17
- end
18
- end
19
-
20
- describe ".transaction" do
21
- it "can create, load, and update records" do
22
- expect {
23
- entity_class.create(foo: 1, bar: :baz)
24
- }.to raise_error(Foobara::Persistence::EntityBase::Transaction::NoCurrentTransactionError)
25
-
26
- transaction = nil
27
-
28
- entity1 = entity_class.transaction do |tx|
29
- transaction = tx
30
-
31
- entity = entity_class.create(foo: 1, bar: :baz)
32
-
33
- expect(entity).to be_a(entity_class)
34
- expect(entity).to_not be_persisted
35
- expect(entity).to_not be_loaded
36
-
37
- expect(tx).to be_open
38
- expect(Foobara::Persistence.current_transaction(entity)).to be(tx)
39
-
40
- entity
41
- end
42
-
43
- expect(transaction).to be_closed
44
- expect(Foobara::Persistence.current_transaction(entity1)).to be_nil
45
-
46
- expect(entity1).to be_a(entity_class)
47
- expect(entity1).to be_persisted
48
- expect(entity1).to be_loaded
49
-
50
- entity_class.transaction do
51
- entity = entity_class.thunk(entity1.primary_key)
52
-
53
- expect(entity).to be_a(entity_class)
54
- expect(entity).to be_persisted
55
- expect(entity).to_not be_loaded
56
-
57
- expect(entity.bar).to eq(:baz)
58
-
59
- expect(entity).to be_loaded
60
-
61
- singleton = entity_class.thunk(entity.primary_key)
62
- expect(singleton).to be(entity)
63
-
64
- entity.bar = "bazbaz"
65
- end
66
-
67
- entity_class.transaction do
68
- entity = Foobara::Persistence.current_transaction(entity_class).load(entity_class, entity1.primary_key)
69
- expect(entity.bar).to eq(:bazbaz)
70
-
71
- expect(entity_class.all.to_a).to eq([entity1])
72
- end
73
- end
74
-
75
- it "can rollback" do
76
- entity1 = entity_class.transaction do
77
- entity_class.create(foo: 10, bar: :baz)
78
- end
79
-
80
- entity_class.transaction do |tx|
81
- entity = entity_class.thunk(entity1.primary_key)
82
- expect(entity.foo).to eq(10)
83
-
84
- entity.foo = 20
85
-
86
- expect(entity.foo).to eq(20)
87
-
88
- begin
89
- tx.rollback!
90
- rescue Foobara::Persistence::EntityBase::Transaction::RolledBack # rubocop:disable Lint/SuppressedException
91
- end
92
-
93
- expect(entity.foo).to eq(10)
94
-
95
- entity_class.transaction do
96
- expect(entity_class.load(entity.primary_key).foo).to eq(10)
97
- end
98
-
99
- expect {
100
- entity.foo = 20
101
- }.to raise_error(Foobara::Persistence::EntityBase::Transaction::NoCurrentTransactionError)
102
- end
103
-
104
- entity_class.transaction do |tx|
105
- entity = entity_class.load(entity1.primary_key)
106
- entity = entity_class.load(entity.primary_key)
107
- expect(entity.foo).to eq(10)
108
-
109
- entity.foo = 20
110
-
111
- expect(entity.foo).to eq(20)
112
-
113
- tx.flush!
114
-
115
- expect(entity.foo).to eq(20)
116
-
117
- entity.foo = 30
118
-
119
- tx.revert!
120
-
121
- expect(entity.foo).to eq(20)
122
- end
123
-
124
- entity_class.transaction do
125
- entity = entity_class.load(entity1.primary_key)
126
- expect(entity.foo).to eq(20)
127
- end
128
- end
129
-
130
- it "can hard delete" do
131
- entity_class.transaction do
132
- expect(entity_class.all.to_a).to be_empty
133
- entity = entity_class.create(foo: 10, bar: :baz)
134
- expect(entity_class.all.to_a).to eq([entity])
135
- entity.hard_delete!
136
- expect(entity_class.all.to_a).to be_empty
137
- end
138
-
139
- entity1 = entity_class.transaction do
140
- expect(entity_class.all.to_a).to be_empty
141
- entity_class.create(foo: 10, bar: :baz)
142
- end
143
-
144
- entity_class.transaction do
145
- entity = entity_class.thunk(entity1.primary_key)
146
- expect(entity.foo).to eq(10)
147
-
148
- entity.hard_delete!
149
-
150
- expect(entity).to be_hard_deleted
151
-
152
- # TODO: make this work without needing to call #to_a
153
- expect(entity_class.all.to_a).to be_empty
154
-
155
- expect {
156
- entity.foo = 20
157
- }.to raise_error(Foobara::Entity::CannotUpdateHardDeletedRecordError)
158
-
159
- expect(entity.foo).to eq(10)
160
-
161
- entity.restore!
162
-
163
- entity.foo = 20
164
- end
165
-
166
- entity_class.transaction do
167
- # TODO: make calling #to_a not necessary
168
- expect(entity_class.all.to_a).to eq([entity1])
169
- entity = entity_class.thunk(entity1.primary_key)
170
-
171
- expect(entity).to be_persisted
172
- expect(entity).to_not be_hard_deleted
173
- expect(entity.foo).to eq(20)
174
-
175
- entity.hard_delete!
176
-
177
- expect(entity_class.all.to_a).to be_empty
178
- expect(entity).to be_hard_deleted
179
- end
180
-
181
- entity_class.transaction do
182
- expect {
183
- entity_class.load(entity1.primary_key)
184
- # TODO: come up with a more sensible error
185
- }.to raise_error(Foobara::Entity::NotFoundError)
186
-
187
- expect(entity_class.all.to_a).to be_empty
188
- end
189
- end
190
-
191
- describe "#hard_delete_all" do
192
- it "deletes everything" do
193
- entities = []
194
-
195
- entity_class.transaction do
196
- 4.times do
197
- entity = entity_class.create(foo: 1, bar: :baz)
198
- entities << entity
199
- end
200
-
201
- # TODO: make calling #to_a not necessary
202
- expect(entity_class.all.to_a).to eq(entities)
203
- end
204
-
205
- entity_ids = entities.map(&:primary_key)
206
-
207
- expect(entity_ids).to contain_exactly(1, 2, 3, 4)
208
-
209
- entity_class.transaction do
210
- entities = []
211
-
212
- entity_class.all do |record|
213
- entities << record
214
- end
215
-
216
- entity_ids = entities.map(&:primary_key)
217
-
218
- expect(entity_ids).to contain_exactly(1, 2, 3, 4)
219
-
220
- 4.times do
221
- entity = entity_class.create(foo: 1, bar: :baz)
222
- entities << entity
223
- end
224
-
225
- expect(entity_class.all).to match_array(entities)
226
-
227
- Foobara::Persistence.current_transaction(entities.first).hard_delete_all!(entity_class)
228
-
229
- expect(entities).to all be_hard_deleted
230
- expect(entity_class.all.to_a).to be_empty
231
- end
232
-
233
- entity_class.transaction do
234
- expect(entity_class.all.to_a).to be_empty
235
- end
236
- end
237
- end
238
-
239
- describe "#truncate" do
240
- it "deletes everything" do
241
- entity_class.transaction do
242
- 4.times do
243
- entity_class.create(foo: 1, bar: :baz)
244
- end
245
-
246
- # TODO: make calling #to_a not necessary
247
- expect(entity_class.count).to eq(4)
248
- end
249
-
250
- entity_class.transaction do
251
- expect(entity_class.count).to eq(4)
252
-
253
- Foobara::Persistence.current_transaction(entity_class).truncate!
254
-
255
- expect(entity_class.count).to eq(0)
256
- expect(entity_class.all.to_a).to be_empty
257
- end
258
-
259
- entity_class.transaction do
260
- expect(entity_class.count).to eq(0)
261
- expect(entity_class.all.to_a).to be_empty
262
- end
263
- end
264
- end
265
-
266
- describe "#load_many" do
267
- it "loads many" do
268
- entities = nil
269
- entity_ids = nil
270
-
271
- entity_class.transaction do |tx|
272
- [
273
- { foo: 11, bar: :baz },
274
- { foo: 22, bar: :baz },
275
- { foo: 33, bar: :baz },
276
- { foo: 44, bar: :baz }
277
- ].map do |attributes|
278
- entity_class.create(attributes)
279
- end
280
-
281
- expect(entity_class.count).to eq(4)
282
-
283
- entity_class.transaction(mode: :use_existing) do
284
- expect(entity_class.count).to eq(4)
285
- end
286
-
287
- tx2 = entity_class.transaction(mode: :use_existing)
288
-
289
- tx2.perform do
290
- expect(entity_class.count).to eq(4)
291
- end
292
-
293
- entity_class.transaction(mode: :open_nested) do
294
- expect(entity_class.count).to eq(0)
295
- end
296
-
297
- tx.flush!
298
-
299
- entity_class.transaction(mode: :use_existing) do
300
- expect(entity_class.count).to eq(4)
301
- end
302
-
303
- entity_class.transaction(mode: :open_nested) do
304
- expect(entity_class.count).to eq(4)
305
- end
306
-
307
- entities = entity_class.all
308
-
309
- expect(entities).to all be_a(Foobara::Entity)
310
- expect(entities.size).to eq(4)
311
-
312
- entity_ids = entities.map(&:primary_key)
313
- expect(entity_ids).to contain_exactly(1, 2, 3, 4)
314
- end
315
-
316
- entity_class.transaction do
317
- entity_class.load_many([entity_class.thunk(1)])
318
- loaded_entities = entity_class.load_many(entity_ids)
319
- expect(loaded_entities).to all be_loaded
320
- expect(loaded_entities).to eq(entities)
321
- end
322
- end
323
- end
324
-
325
- describe "#all_exist?" do
326
- it "answers whether they all exist or not" do
327
- entity_class.transaction do
328
- expect(entity_class.all_exist?([101, 102])).to be(false)
329
-
330
- [
331
- { foo: 11, bar: :baz, pk: 101 },
332
- { foo: 22, bar: :baz, pk: 102 },
333
- { foo: 33, bar: :baz },
334
- { foo: 44, bar: :baz }
335
- ].map do |attributes|
336
- entity_class.create(attributes)
337
- end
338
-
339
- entity_class.all do |record|
340
- expect(record).to_not be_persisted
341
- end
342
-
343
- expect(entity_class.all_exist?([101, 102])).to be(true)
344
- expect(entity_class.all_exist?([1, 2, 101, 102])).to be(false)
345
- end
346
-
347
- entity_class.transaction do
348
- expect(entity_class.all_exist?([1, 2, 101, 102])).to be(true)
349
- expect(entity_class.all_exist?([3])).to be(false)
350
- end
351
- end
352
- end
353
-
354
- describe "#unhard_delete!" do
355
- context "when record was dirty when hard deleted" do
356
- it "is still dirty" do
357
- entity = entity_class.transaction do
358
- entity_class.create(foo: 11, bar: :baz)
359
- end
360
-
361
- entity_class.transaction do
362
- entity = entity_class.thunk(entity.primary_key)
363
-
364
- expect(entity).to be_persisted
365
-
366
- expect(entity).to_not be_dirty
367
-
368
- entity.foo = 12
369
-
370
- expect(entity).to be_dirty
371
- expect(entity).to_not be_hard_deleted
372
-
373
- entity.foo = 11
374
-
375
- expect(entity).to_not be_dirty
376
- expect(entity).to_not be_hard_deleted
377
-
378
- entity.foo = 12
379
-
380
- expect(entity).to be_dirty
381
- expect(entity).to_not be_hard_deleted
382
-
383
- entity.hard_delete!
384
-
385
- expect(entity).to be_dirty
386
- expect(entity).to be_hard_deleted
387
-
388
- entity.unhard_delete!
389
-
390
- expect(entity).to be_dirty
391
- expect(entity).to_not be_hard_deleted
392
- end
393
- end
394
- end
395
- end
396
-
397
- describe "#exists?" do
398
- it "answers it exists or not" do
399
- entity_class.transaction do
400
- expect(entity_class.all_exist?([101, 102])).to be(false)
401
-
402
- entity_class.create(foo: 11, bar: :baz, pk: 101)
403
-
404
- expect(entity_class.exists?(101)).to be(true)
405
-
406
- entity_class.create(foo: 11, bar: :baz)
407
-
408
- expect(entity_class.exists?(1)).to be(false)
409
- end
410
-
411
- entity_class.transaction do
412
- expect(entity_class.exists?(101)).to be(true)
413
-
414
- expect(entity_class.exists?(1)).to be(true)
415
- expect(entity_class.exists?(2)).to be(false)
416
- end
417
- end
418
- end
419
-
420
- context "when creating a record with an already-in-use key" do
421
- it "explodes" do
422
- entity_class.transaction do
423
- entity_class.create(foo: 11, bar: :baz, pk: 101)
424
- end
425
-
426
- expect {
427
- entity_class.transaction do
428
- entity_class.create(foo: 11, bar: :baz, pk: 101)
429
- end
430
- }.to raise_error(Foobara::Persistence::EntityAttributesCrudDriver::Table::CannotInsertError)
431
- end
432
- end
433
-
434
- context "when restoring with a created record" do
435
- it "hard deletes it" do
436
- entity_class.transaction do |tx|
437
- record = entity_class.create(foo: 11, bar: :baz, pk: 101)
438
-
439
- tx.revert!
440
-
441
- expect(record).to be_hard_deleted
442
- end
443
-
444
- entity_class.transaction do
445
- expect(entity_class.count).to eq(0)
446
- end
447
- end
448
- end
449
-
450
- context "when persisting entity with an association" do
451
- let(:aggregate_class) do
452
- stub_class "SomeAggregate", Foobara::Entity do
453
- attributes pk: :integer,
454
- foo: :integer,
455
- some_entities: [SomeEntity]
456
-
457
- primary_key :pk
458
- end
459
- end
460
-
461
- it "writes the records to disk using primary keys" do
462
- some_entity2 = nil
463
-
464
- some_entity1 = entity_class.transaction do
465
- some_entity2 = entity_class.create(foo: 11, bar: :baz)
466
- entity_class.create(foo: 11, bar: :baz, pk: 101)
467
- end
468
-
469
- entity_class.transaction do
470
- some_entity3 = entity_class.create(foo: 11, bar: :baz, pk: 102)
471
- some_entity4 = entity_class.create(foo: 11, bar: :baz)
472
-
473
- aggregate_class.create(
474
- foo: 30,
475
- some_entities: [
476
- 1,
477
- some_entity1,
478
- some_entity3,
479
- some_entity4
480
- ]
481
- )
482
- end
483
-
484
- entity_class.transaction do |tx|
485
- raw_records = aggregate_class.current_transaction_table.entity_attributes_crud_driver_table.records
486
- expect(raw_records.size).to eq(1)
487
- raw_record = raw_records[1]
488
- expect(raw_record[:some_entities]).to contain_exactly(1, 2, 101, 102)
489
-
490
- loaded_aggregate = aggregate_class.load(1)
491
- expect(loaded_aggregate.some_entities).to all be_a(SomeEntity)
492
- expect(loaded_aggregate.some_entities.map(&:primary_key)).to contain_exactly(1, 2, 101, 102)
493
-
494
- aggregate_class.create(
495
- foo: 30,
496
- some_entities: [
497
- entity_class.create(foo: 11, bar: :baz)
498
- ]
499
- )
500
-
501
- expect(aggregate_class.contains_associations?).to be(true)
502
- expect(entity_class.contains_associations?).to be(false)
503
-
504
- tx.flush!
505
- end
506
- end
507
- end
508
- end
509
- end
@@ -1,58 +0,0 @@
1
- RSpec.describe Foobara::Persistence::EntityBase::TransactionTable 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
- end
9
-
10
- let(:user_class) do
11
- stub_class "User", Foobara::Entity do
12
- attributes id: :integer,
13
- first_name: :string
14
- primary_key :id
15
- end
16
- end
17
-
18
- describe "#load_many" do
19
- context "when already loaded" do
20
- let!(:user) do
21
- user_class.transaction do
22
- user_class.create(first_name: "f")
23
- end
24
- end
25
-
26
- it "just returns the already-loaded record" do
27
- user_class.transaction do
28
- record = user_class.load(user.id)
29
- loaded = user_class.load_many(record)
30
-
31
- expect(loaded).to eq([record])
32
- expect(loaded.first).to be_loaded
33
- end
34
- end
35
- end
36
- end
37
-
38
- describe "#all" do
39
- context "when a thunk is unloaded" do
40
- it "still yields the loaded record for that thunk" do
41
- user = user_class.transaction do
42
- user_class.create(first_name: "Basil")
43
- end
44
-
45
- user_class.transaction do |tx|
46
- user_class.thunk(user.id)
47
-
48
- transaction_table = tx.table_for(user_class)
49
-
50
- transaction_table.all do |record|
51
- expect(record).to be_loaded
52
- expect(record.first_name).to eq("Basil")
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,148 +0,0 @@
1
- RSpec.describe Foobara::Persistence do
2
- after do
3
- Foobara.reset_alls
4
- end
5
-
6
- describe ".current_transaction_table" do
7
- before do
8
- described_class.default_crud_driver = Foobara::Persistence::CrudDrivers::InMemory.new
9
-
10
- stub_class :User, Foobara::Entity do
11
- attributes id: :integer
12
- primary_key :id
13
- end
14
- end
15
-
16
- it "returns the transaction table" do
17
- User.transaction do |tx|
18
- table = described_class.current_transaction_table(User)
19
- expect(table).to be_a(Foobara::Persistence::EntityBase::TransactionTable)
20
- expect(table.transaction).to be(tx)
21
- end
22
- end
23
- end
24
-
25
- describe ".register_base" do
26
- context "when using a crud driver that takes args" do
27
- let(:crud_driver_class) do
28
- stub_class "SomeCrudDriver", Foobara::Persistence::EntityAttributesCrudDriver do
29
- attr_accessor :connection_url
30
-
31
- def initialize(connection_url, **)
32
- super(**)
33
- self.connection_url = connection_url
34
- end
35
- end
36
- end
37
-
38
- it "passes the argument through to the crud driver" do
39
- described_class.register_base(
40
- crud_driver_class,
41
- "some_connection_url",
42
- name: "some_base"
43
- )
44
- base = described_class.bases["some_base"]
45
- expect(base.entity_attributes_crud_driver.connection_url).to eq("some_connection_url")
46
- end
47
- end
48
-
49
- context "when using a table prefix" do
50
- let(:user_class) do
51
- stub_class :User, Foobara::Entity do
52
- attributes id: :integer
53
- primary_key :id
54
- end
55
- end
56
-
57
- let(:driver_class) { Foobara::Persistence::CrudDrivers::InMemory }
58
-
59
- it "registers the base and its crud drivers uses prefixes" do
60
- expect {
61
- described_class.register_base(driver_class, name: "some_base", table_prefix: "some_prefix")
62
- }.to change(described_class.bases, :size).by(1)
63
-
64
- base = described_class.bases["some_base"]
65
-
66
- expect(base).to be_a(Foobara::Persistence::EntityBase)
67
-
68
- table = base.entity_attributes_crud_driver.table_for(user_class)
69
-
70
- expect(table.table_name).to eq("some_prefix_user")
71
- end
72
- end
73
- end
74
-
75
- describe ".sort_bases" do
76
- context "with entity classes each with different bases" do
77
- let(:entity_class1) do
78
- stub_class("Entity1", Foobara::Entity) do
79
- attributes do
80
- id :integer
81
- end
82
- primary_key :id
83
- end
84
- end
85
- let(:entity_class2) do
86
- stub_class("Entity2", Foobara::Entity) do
87
- attributes do
88
- id :integer
89
- entity1 Entity1
90
- end
91
- primary_key :id
92
- end
93
- end
94
- let(:entity_class3) do
95
- stub_class("Entity3", Foobara::Entity) do
96
- attributes do
97
- id :integer
98
- entity2 Entity2
99
- end
100
- primary_key :id
101
- end
102
- end
103
- let(:entity_class4) do
104
- stub_class("Entity4", Foobara::Entity) do
105
- attributes do
106
- id :integer
107
- entity3 Entity3
108
- end
109
- primary_key :id
110
- end
111
- end
112
-
113
- let(:base1) { entity_class1.entity_base }
114
- let(:base2) { entity_class2.entity_base }
115
- let(:base3) { entity_class3.entity_base }
116
- let(:base4) { entity_class4.entity_base }
117
- let(:base5) { described_class.register_base(Foobara::Persistence::CrudDrivers::InMemory, name: "Base5") }
118
-
119
- it "can sort the bases as expected" do
120
- [
121
- entity_class1,
122
- entity_class2,
123
- entity_class3,
124
- entity_class4
125
- ].each do |entity_class|
126
- base = described_class.register_base(
127
- Foobara::Persistence::CrudDrivers::InMemory,
128
- name: entity_class.name
129
- )
130
- described_class.register_entity(base, entity_class)
131
- end
132
-
133
- # Without any reason to sort them they will not be sorted so let's create some records
134
- described_class.transaction(base1, base2, base3, base4) do
135
- entity_class4.create(
136
- entity3: entity_class3.create(
137
- entity2: entity_class2.create(entity1: entity_class1.create)
138
- )
139
- )
140
- end
141
-
142
- expect(
143
- described_class.sort_bases([base3, base4, base5, base1, base2])
144
- ).to eq([base4, base3, base2, base1, base5])
145
- end
146
- end
147
- end
148
- end