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,17 +0,0 @@
1
- RSpec.describe Foobara::CommandConnector::NotFoundError do
2
- describe "message" do
3
- let(:error) { described_class.for("foo") }
4
-
5
- it "mentions the not-found item" do
6
- expect(error.message).to eq("Not found: foo")
7
- end
8
-
9
- context "when there's no not-found item provided" do
10
- let(:error) { described_class.for(nil) }
11
-
12
- it "has a basic not-found message" do
13
- expect(error.message).to eq("Not found")
14
- end
15
- end
16
- end
17
- end
@@ -1,108 +0,0 @@
1
- RSpec.describe Foobara::CommandConnectors::Transformers::LoadAtomsPreCommitTransformer do
2
- after { Foobara.reset_alls }
3
-
4
- before do
5
- crud_driver = Foobara::Persistence::CrudDrivers::InMemory.new
6
- Foobara::Persistence.default_crud_driver = crud_driver
7
- end
8
-
9
- let(:some_entity_class) do
10
- stub_class "SomeEntity", Foobara::Entity do
11
- attributes do
12
- id :integer
13
- foo :string
14
- bar :string
15
- end
16
-
17
- primary_key :id
18
- end
19
- end
20
- let(:some_model_class) do
21
- some_entity_class
22
-
23
- stub_class "SomeModel", Foobara::Model do
24
- attributes do
25
- some_entity SomeEntity
26
- foo :string
27
- bar :string
28
- end
29
- end
30
- end
31
-
32
- let(:type) do
33
- some_model_class
34
-
35
- Foobara::TypeDeclarations::Dsl::Attributes.to_declaration do
36
- some_tuple [:integer, :string, SomeEntity]
37
- some_array [{ type: SomeEntity, description: "some random entity" }]
38
- some_model SomeModel
39
- end
40
- end
41
-
42
- let(:value) do
43
- some_record_id = some_record.id
44
-
45
- some_entity_class.transaction do
46
- {
47
- some_tuple: [1, "foo", some_record_id],
48
- some_array: [some_record_id],
49
- some_model: { some_entity: some_record_id, foo: "foo", bar: "bar" }
50
- }
51
- end
52
- end
53
- let(:some_record) do
54
- some_entity_class.transaction do
55
- some_entity_class.create(foo: "foo", bar: "bar")
56
- end
57
- end
58
- let(:some_other_record) do
59
- some_entity_class.transaction do
60
- some_entity_class.create(foo: "baz", bar: "baz")
61
- end
62
- end
63
-
64
- let(:command_class) do
65
- inputs_type = type
66
- id = some_other_record.primary_key
67
-
68
- stub_class "SomeCommand", Foobara::Command do
69
- inputs inputs_type
70
- result inputs_type
71
-
72
- define_method :execute do
73
- inputs.merge(some_tuple: [*some_tuple[..-2], id])
74
- end
75
- end
76
- end
77
-
78
- let(:command_connector) do
79
- cc = command_class
80
- Foobara::CommandConnector.new(default_pre_commit_transformers: described_class) do
81
- command cc
82
- end
83
- end
84
-
85
- let(:transformer) { described_class.new(to: type) }
86
-
87
- describe "#transform" do
88
- it "gives what was passed in because we expect this data to be cast where needed" do
89
- command_connector
90
- response = command_connector.run(
91
- full_command_name: command_class.full_command_name,
92
- inputs: value,
93
- action: "run"
94
- )
95
-
96
- expect(response).to be_success
97
-
98
- result = response.outcome.result
99
-
100
- expect(result).to eq(
101
- some_tuple: [1, "foo", some_other_record],
102
- some_array: [some_record],
103
- some_model: SomeModel.new(some_entity: some_record, foo: "foo", bar: "bar")
104
- )
105
- expect(result[:some_array].first).to be_loaded
106
- end
107
- end
108
- end
@@ -1,118 +0,0 @@
1
- RSpec.describe Foobara::CommandConnector::Request do
2
- let(:request) do
3
- described_class.new
4
- end
5
-
6
- describe "#serializer" do
7
- before do
8
- request.serializers = serializers
9
- end
10
-
11
- context "when there's no serializers" do
12
- let(:serializers) { nil }
13
-
14
- it "is nil" do
15
- expect(request.serializer).to be_nil
16
- end
17
- end
18
-
19
- context "when there is a serializer" do
20
- let(:serializers) { [:yaml] }
21
-
22
- it "returns the serializer" do
23
- expect(request.serializer.process_value!(foo: 1)).to eq("---\n:foo: 1\n")
24
- end
25
-
26
- context "when serializer is declared as a class" do
27
- let(:serializers) { [Foobara::CommandConnectors::Serializers::YamlSerializer] }
28
-
29
- it "returns the serializer" do
30
- expect(request.serializer.process_value!(foo: 1)).to eq("---\n:foo: 1\n")
31
- end
32
- end
33
-
34
- context "when serializer is an instance" do
35
- let(:serializers) { [Foobara::CommandConnectors::Serializers::YamlSerializer.new("some request")] }
36
-
37
- it "returns the serializer" do
38
- expect(request.serializer.process_value!(foo: 1)).to eq("---\n:foo: 1\n")
39
- end
40
- end
41
-
42
- context "when serializer is a proc" do
43
- let(:serializers) { [proc { "100" }] }
44
-
45
- it "returns the serializer" do
46
- expect(request.serializer.process_value!(foo: 1)).to eq("100")
47
- end
48
- end
49
- end
50
-
51
- context "when there are multiple serializers" do
52
- let(:serializers) { [:yaml, :json] }
53
-
54
- it "returns the serializer" do
55
- expect(request.serializer.processors.size).to eq(2)
56
- end
57
- end
58
- end
59
-
60
- context "with a ran command" do
61
- let(:command_class) do
62
- stub_class("SomeCommand", Foobara::Command) do
63
- inputs a: :integer
64
-
65
- def execute
66
- a * a
67
- end
68
- end
69
- end
70
-
71
- let(:command) { command_class.new(inputs).tap(&:run) }
72
- let(:inputs) { { a: 4 } }
73
- let(:serializers) { [] }
74
-
75
- before do
76
- request.command = command
77
- request.serializers = serializers
78
- end
79
-
80
- describe "#response_body" do
81
- it "gives the response body" do
82
- expect(request.error_collection).to be_empty
83
- expect(request.response_body).to eq(16)
84
- end
85
-
86
- context "with a serializer" do
87
- let(:serializers) { [:json] }
88
-
89
- it "gives the response body" do
90
- expect(request.response_body).to eq("16")
91
- end
92
- end
93
- end
94
- end
95
-
96
- context "with an auth-mapped method" do
97
- let(:command_class) do
98
- stub_class("SomeCommand", Foobara::Command) do
99
- def self.requires_authentication = true
100
- end
101
- end
102
-
103
- let(:request) do
104
- foo_mapper = Foobara::TypeDeclarations::TypedTransformer.subclass(to: :symbol) { :bar }.instance
105
- # TODO: make a block form of this
106
- authenticator = Foobara::CommandConnector.to_authenticator(-> { :some_user })
107
-
108
- described_class.new(authenticator:, auth_mappers: { foo: foo_mapper }).tap do |request|
109
- request.command_class = command_class
110
- request.authenticate
111
- end
112
- end
113
-
114
- it "can access the auth-mapped method" do
115
- expect(request.foo).to eq(:bar)
116
- end
117
- end
118
- end
@@ -1,9 +0,0 @@
1
- RSpec.describe Foobara::CommandConnectors::Serializer do
2
- describe ".serializer_from_symbol" do
3
- it "can find the correct serializer" do
4
- expect(
5
- described_class.serializer_from_symbol(:yaml)
6
- ).to eq(Foobara::CommandConnectors::Serializers::YamlSerializer)
7
- end
8
- end
9
- end
@@ -1,45 +0,0 @@
1
- RSpec.describe Foobara::CommandConnectors::Serializers::AggregateSerializer 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(:serializer) { described_class.new }
11
- let(:entity_class) do
12
- stub_class "SomeEntity", Foobara::Entity do
13
- attributes do
14
- id :integer
15
- foo :string, :required
16
- bar :string, :required
17
- end
18
- primary_key :id
19
- end
20
- end
21
-
22
- describe "#serialize" do
23
- context "when serializing an unloaded thunk" do
24
- let(:record) do
25
- entity_class.transaction do
26
- entity_class.create(foo: "foo", bar: "bar")
27
- end
28
- end
29
-
30
- it "loads the thunk" do
31
- record_id = record.id
32
-
33
- entity_class.transaction do
34
- thunk = entity_class.thunk(record_id)
35
- expect(thunk).to_not be_loaded
36
-
37
- result = serializer.serialize(thunk)
38
-
39
- expect(thunk).to be_loaded
40
- expect(result).to eq(foo: "foo", bar: "bar", id: record_id)
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,68 +0,0 @@
1
- RSpec.describe Foobara::CommandConnectors::Serializers::AtomicSerializer 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(:serializer) { described_class.new }
11
- let(:entity_class) do
12
- stub_class "SomeEntity", Foobara::Entity do
13
- attributes do
14
- id :integer
15
- foo :string, :required
16
- bar :string, :required
17
- end
18
- primary_key :id
19
- end
20
- end
21
-
22
- describe "#serialize" do
23
- let(:record) do
24
- entity_class.transaction do
25
- entity_class.create(foo: "foo", bar: "bar")
26
- end
27
- end
28
-
29
- context "when serializing an unloaded thunk" do
30
- it "loads the thunk" do
31
- record_id = record.id
32
-
33
- entity_class.transaction do
34
- thunk = entity_class.thunk(record_id)
35
- expect(thunk).to_not be_loaded
36
-
37
- result = serializer.serialize(thunk)
38
-
39
- expect(thunk).to be_loaded
40
- expect(result).to eq(foo: "foo", bar: "bar", id: record_id)
41
- end
42
- end
43
- end
44
-
45
- context "when serializing a model containing an entity" do
46
- let(:model_class) do
47
- entity_class
48
-
49
- stub_class "SomeModel", Foobara::Model do
50
- attributes do
51
- some_entity :SomeEntity, :required
52
- name :string, :required
53
- end
54
- end
55
- end
56
-
57
- let(:model_instance) do
58
- model_class.new(some_entity: record, name: "some name")
59
- end
60
-
61
- it "serializes the entity in an atomic fashion" do
62
- result = serializer.serialize(model_instance)
63
-
64
- expect(result).to eq(some_entity: { foo: "foo", bar: "bar", id: record.id }, name: "some name")
65
- end
66
- end
67
- end
68
- end
@@ -1,36 +0,0 @@
1
- RSpec.describe Foobara::CommandConnectors::Serializers::EntitiesToPrimaryKeysSerializer do
2
- after do
3
- Foobara.reset_alls
4
- end
5
-
6
- let(:serializer) { described_class.new(detached_to_primary_key:) }
7
- let(:object) { detached_entity_class.new(foo: "foo", bar: "bar", id: 100) }
8
- let(:detached_entity_class) do
9
- stub_class "SomeDetachedEntity", Foobara::DetachedEntity do
10
- attributes do
11
- id :integer, :required
12
- foo :string, :required
13
- bar :string, :required
14
- end
15
- primary_key :id
16
- end
17
- end
18
-
19
- describe "#serialize" do
20
- context "when detached_to_primary_key is true" do
21
- let(:detached_to_primary_key) { true }
22
-
23
- it "converts it to its primary key" do
24
- expect(serializer.serialize(object)).to eq(100)
25
- end
26
- end
27
-
28
- context "when detached_to_primary_key is false" do
29
- let(:detached_to_primary_key) { false }
30
-
31
- it "converts it to its attributes" do
32
- expect(serializer.serialize(object)).to eq(foo: "foo", bar: "bar", id: 100)
33
- end
34
- end
35
- end
36
- end
@@ -1,22 +0,0 @@
1
- RSpec.describe Foobara::CommandConnectors::Serializers::JsonSerializer do
2
- let(:serializer) { described_class.new("some request") }
3
- let(:object) { { foo: "bar" } }
4
-
5
- describe "#serialize" do
6
- it "serializes the object to json" do
7
- expect(serializer.serialize(object)).to eq('{"foo":"bar"}')
8
- end
9
- end
10
-
11
- describe "#deserialize" do
12
- it "deserializes the object from json" do
13
- expect(serializer.deserialize('{"foo":"bar"}')).to eq("foo" => "bar")
14
- end
15
- end
16
-
17
- describe "#priority" do
18
- subject { serializer.priority }
19
-
20
- it { is_expected.to be_a(Integer) }
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- RSpec.describe Foobara::CommandConnectors::Serializers::NoopSerializer do
2
- let(:serializer) { described_class.new("some request") }
3
- let(:object) { "asdf" }
4
-
5
- describe "#serialize" do
6
- it "serializes the object to json" do
7
- expect(serializer.serialize(object)).to eq(object)
8
- end
9
- end
10
-
11
- describe "#deserialize" do
12
- it "deserializes the object from json" do
13
- expect(serializer.deserialize(object)).to eq(object)
14
- end
15
- end
16
-
17
- describe "#priority" do
18
- subject { serializer.priority }
19
-
20
- it { is_expected.to be_a(Integer) }
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- RSpec.describe Foobara::CommandConnectors::Serializers::YamlSerializer do
2
- let(:serializer) { described_class.new("some request") }
3
- let(:object) { { foo: "bar" } }
4
-
5
- describe "#serialize" do
6
- it "serializes the object to yaml" do
7
- expect(serializer.serialize(object)).to eq("---\n:foo: bar\n")
8
- end
9
- end
10
-
11
- describe "#deserialize" do
12
- it "deserializes the object from yaml" do
13
- expect(serializer.deserialize("---\n:foo: bar\n")).to eq(foo: "bar")
14
- end
15
- end
16
-
17
- describe "#priority" do
18
- subject { serializer.priority }
19
-
20
- it { is_expected.to be_a(Integer) }
21
- end
22
- end
@@ -1,56 +0,0 @@
1
- ENV["FOOBARA_ENV"] = "test"
2
-
3
- require "bundler/setup"
4
-
5
- if ENV["RUBY_DEBUG"] == "true"
6
- require "debug"
7
- elsif ENV["SKIP_PRY"] != "true" && ENV["CI"] != "true"
8
- require "pry"
9
- require "pry-byebug" unless ENV["SKIP_BYEBUG"] == "true"
10
- end
11
-
12
- require "rspec/its"
13
- require "simplecov"
14
-
15
- SimpleCov.root "#{__dir__}/../../../"
16
- SimpleCov.command_name "command_connectors"
17
- SimpleCov.coverage_dir "coverage/command_connectors"
18
-
19
- SimpleCov.start do
20
- add_filter "spec/support/"
21
- # This avoids printing out info about coverage generated by HTTPFormatter
22
- formatter Class.new { def format(_result) = nil }
23
- end
24
-
25
- require "foobara/all"
26
- require "foobara/command_connectors"
27
- # TODO: eliminate this require! We should not depend on entities in this project!
28
- require "foobara/entities_plumbing"
29
-
30
- RSpec.configure do |config|
31
- # Need to do :all instead of :each because for specs that use .around,
32
- # .after(:each) do |example| here is called after example.run but before any threads created in
33
- # .around might have been cleaned up.
34
- config.after(:suite) do
35
- threads = Thread.list.reject { |t| t.name == "DEBUGGER__::SESSION@server" }
36
- expect(threads.size).to eq(1)
37
- end
38
- config.filter_run_when_matching :focus
39
-
40
- # Enable flags like --only-failures and --next-failure
41
- config.example_status_persistence_file_path = ".rspec_status"
42
-
43
- # Disable RSpec exposing methods globally on `Module` and `main`
44
- config.disable_monkey_patching!
45
-
46
- config.order = :defined
47
-
48
- config.expect_with :rspec do |c|
49
- c.syntax = :expect
50
- end
51
-
52
- # config.raise_errors_for_deprecations!
53
- end
54
-
55
- require "foobara/spec_helpers/all"
56
- Dir["#{__dir__}/support/**/*.rb"].each { |f| require f }
@@ -1,32 +0,0 @@
1
- RSpec.configure do |config|
2
- # TODO: move this to foobara-spec-helpers project
3
- config.around(:each, :profile) do |example|
4
- require "ruby-prof"
5
- RubyProf.start
6
-
7
- example.run
8
-
9
- result = RubyProf.stop
10
- printer = RubyProf::GraphHtmlPrinter.new(result)
11
- File.open("tmp/profile-out.html", "w+") do |file|
12
- printer.print(file)
13
- end
14
- end
15
-
16
- if ENV["RUBY_PROF"] == "true"
17
- config.before(:suite) do
18
- require "ruby-prof"
19
- require "ruby-prof/profile"
20
- RubyProf.start
21
- end
22
-
23
- config.after(:suite) do
24
- result = RubyProf.stop
25
-
26
- printer = RubyProf::GraphHtmlPrinter.new(result)
27
- File.open("tmp/profile-out.html", "w+") do |file|
28
- printer.print(file)
29
- end
30
- end
31
- end
32
- end
@@ -1,6 +0,0 @@
1
- # Convenient whenever running into an infinite loop
2
- Signal.trap("TERM") do
3
- puts "SIGTERM received, printing backtrace:"
4
- puts caller.join("\n")
5
- exit
6
- end
@@ -1,119 +0,0 @@
1
- RSpec.describe Foobara::CommandConnectors::Transformers::EntityToPrimaryKeyInputsTransformer do
2
- after { Foobara.reset_alls }
3
-
4
- before do
5
- crud_driver = Foobara::Persistence::CrudDrivers::InMemory.new
6
- Foobara::Persistence.default_crud_driver = crud_driver
7
- end
8
-
9
- let(:some_entity_class) do
10
- stub_class "SomeEntity", Foobara::Entity do
11
- attributes do
12
- id :integer
13
- foo :string
14
- bar :string
15
- end
16
-
17
- primary_key :id
18
- end
19
- end
20
- let(:some_model_class) do
21
- some_entity_class
22
-
23
- stub_class "SomeModel", Foobara::Model do
24
- attributes do
25
- some_entity SomeEntity
26
- foo :string
27
- bar :string
28
- end
29
- end
30
- end
31
-
32
- let(:type) do
33
- some_model_class
34
-
35
- Foobara::TypeDeclarations::Dsl::Attributes.to_declaration do
36
- some_tuple [:integer, :string, SomeEntity]
37
- some_array [{ type: SomeEntity, description: "some random entity" }]
38
- some_model SomeModel
39
- end
40
- end
41
-
42
- let(:value) do
43
- some_record_id = some_record.id
44
-
45
- some_entity_class.transaction do
46
- {
47
- some_tuple: [1, "foo", some_record_id],
48
- some_array: [some_record_id],
49
- some_model: { some_entity: some_record_id, foo: "foo", bar: "bar" }
50
- }
51
- end
52
- end
53
- let(:some_record) do
54
- some_entity_class.transaction do
55
- some_entity_class.create(foo: "foo", bar: "bar")
56
- end
57
- end
58
-
59
- let(:transformer) { described_class.new(to: type) }
60
-
61
- it "gives an expected from_type" do
62
- expect(transformer.from_type.declaration_data).to eq(
63
- type: :attributes,
64
- element_type_declarations: {
65
- some_tuple: {
66
- type: :tuple,
67
- element_type_declarations: [
68
- :integer,
69
- :string,
70
- { type: :integer, description: "SomeEntity id" }
71
- ],
72
- size: 3
73
- },
74
- some_array: {
75
- type: :array,
76
- element_type_declaration: { type: :integer, description: "SomeEntity id : some random entity" }
77
- },
78
- some_model: {
79
- type: :attributes,
80
- element_type_declarations: {
81
- some_entity: { type: :integer, description: "SomeEntity id" },
82
- foo: :string,
83
- bar: :string
84
- }
85
- }
86
- }
87
- )
88
- end
89
-
90
- context "when type has no associations and isn't an entity" do
91
- let(:type) { Foobara::BuiltinTypes[:string] }
92
-
93
- it "has a from_type that is the to_type" do
94
- expect(transformer.from_type).to eq(transformer.to_type)
95
- end
96
- end
97
-
98
- describe "#to_type" do
99
- context "when it is :allow_nil" do
100
- let(:type) do
101
- Foobara::GlobalDomain.foobara_type_from_declaration(some_entity_class, :allow_nil)
102
- end
103
-
104
- it "carries over the allow_nil processor" do
105
- expect(transformer.to_type.declaration_data).to eq(type: :SomeEntity, allow_nil: true)
106
- end
107
- end
108
- end
109
-
110
- describe "#transform" do
111
- it "gives what was passed in because we expect this data to be cast where needed" do
112
- expect(transformer.transform(value)).to eq(
113
- some_tuple: [1, "foo", some_record.id],
114
- some_array: [some_record.id],
115
- some_model: { some_entity: some_record.id, foo: "foo", bar: "bar" }
116
- )
117
- end
118
- end
119
- end