hecks 0.1.4.rc → 0.3.0

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 (400) hide show
  1. checksums.yaml +5 -5
  2. data/lib/hecks/adapters/driven/claude_code.adapter +3 -0
  3. data/lib/hecks/adapters/driven/claude_code.rb +127 -0
  4. data/lib/hecks/adapters/driven/d1.adapter +12 -0
  5. data/lib/hecks/adapters/driven/d1.rb +403 -0
  6. data/lib/hecks/adapters/driven/folder.adapter +3 -0
  7. data/lib/hecks/adapters/driven/folder.rb +199 -0
  8. data/lib/hecks/adapters/driven/google_authentication.adapter +3 -0
  9. data/lib/hecks/adapters/driven/google_authentication.rb +100 -0
  10. data/lib/hecks/adapters/driven/governance_authorization.adapter +3 -0
  11. data/lib/hecks/adapters/driven/governance_authorization.rb +62 -0
  12. data/lib/hecks/adapters/driven/heki/journal.rb +51 -0
  13. data/lib/hecks/adapters/driven/heki/saga_store.rb +0 -0
  14. data/lib/hecks/adapters/driven/heki/snapshot.rb +38 -0
  15. data/lib/hecks/adapters/driven/heki.adapter +4 -0
  16. data/lib/hecks/adapters/driven/heki.rb +148 -0
  17. data/lib/hecks/adapters/driven/identity_registry.adapter +3 -0
  18. data/lib/hecks/adapters/driven/identity_registry.rb +26 -0
  19. data/lib/hecks/adapters/driven/in_memory_ordering.rb +51 -0
  20. data/lib/hecks/adapters/driven/lambda/client.rb +63 -0
  21. data/lib/hecks/adapters/driven/lambda.adapter +4 -0
  22. data/lib/hecks/adapters/driven/lambda.rb +131 -0
  23. data/lib/hecks/adapters/driven/memory.adapter +3 -0
  24. data/lib/hecks/adapters/driven/memory.rb +103 -0
  25. data/lib/hecks/adapters/driven/mock_stripe_adapter.adapter +3 -0
  26. data/lib/hecks/adapters/driven/mock_stripe_adapter.rb +28 -0
  27. data/lib/hecks/adapters/driven/postgres/codec.rb +80 -0
  28. data/lib/hecks/adapters/driven/postgres/schema_builder.rb +168 -0
  29. data/lib/hecks/adapters/driven/postgres.adapter +5 -0
  30. data/lib/hecks/adapters/driven/postgres.rb +391 -0
  31. data/lib/hecks/adapters/driven/postgres_era/lineage/era_store.rb +171 -0
  32. data/lib/hecks/adapters/driven/postgres_era/lineage/field_cache.rb +190 -0
  33. data/lib/hecks/adapters/driven/postgres_era/lineage/head_compiler.rb +429 -0
  34. data/lib/hecks/adapters/driven/postgres_era/lineage/mint_transaction.rb +166 -0
  35. data/lib/hecks/adapters/driven/postgres_era/lineage/provisioning.rb +286 -0
  36. data/lib/hecks/adapters/driven/postgres_era/lineage/resumable_backfill.rb +168 -0
  37. data/lib/hecks/adapters/driven/postgres_era/lineage/tail_merge.rb +163 -0
  38. data/lib/hecks/adapters/driven/postgres_era/lineage/transform_installer.rb +114 -0
  39. data/lib/hecks/adapters/driven/postgres_era/lineage.rb +137 -0
  40. data/lib/hecks/adapters/driven/postgres_era/lineage_manager/coverage_check.rb +89 -0
  41. data/lib/hecks/adapters/driven/postgres_era/lineage_manager/era_resolver.rb +82 -0
  42. data/lib/hecks/adapters/driven/postgres_era/lineage_manager/merge_coordinator.rb +43 -0
  43. data/lib/hecks/adapters/driven/postgres_era/lineage_manager/minter.rb +132 -0
  44. data/lib/hecks/adapters/driven/postgres_era/lineage_manager.rb +74 -0
  45. data/lib/hecks/adapters/driven/postgres_era.adapter +6 -0
  46. data/lib/hecks/adapters/driven/postgres_era.rb +671 -0
  47. data/lib/hecks/adapters/driven/prism.adapter +3 -0
  48. data/lib/hecks/adapters/driven/prism.rb +80 -0
  49. data/lib/hecks/adapters/driven/secure_random_identity.adapter +3 -0
  50. data/lib/hecks/adapters/driven/secure_random_identity.rb +14 -0
  51. data/lib/hecks/adapters/driven/sql_query_builder.rb +221 -0
  52. data/lib/hecks/adapters/driven/sqlite/codec.rb +63 -0
  53. data/lib/hecks/adapters/driven/sqlite/projection.rb +105 -0
  54. data/lib/hecks/adapters/driven/sqlite/schema_builder.rb +180 -0
  55. data/lib/hecks/adapters/driven/sqlite.adapter +9 -0
  56. data/lib/hecks/adapters/driven/sqlite.rb +285 -0
  57. data/lib/hecks/adapters/driven/system_clock.adapter +3 -0
  58. data/lib/hecks/adapters/driven/system_clock.rb +14 -0
  59. data/lib/hecks/adapters/driven.rb +36 -0
  60. data/lib/hecks/adapters.rb +6 -0
  61. data/lib/hecks/behaviors/dsl.rb +96 -0
  62. data/lib/hecks/behaviors/expectations.rb +280 -0
  63. data/lib/hecks/behaviors/ir.rb +31 -0
  64. data/lib/hecks/behaviors/rspec.rb +42 -0
  65. data/lib/hecks/behaviors/runner.rb +96 -0
  66. data/lib/hecks/behaviors.rb +25 -0
  67. data/lib/hecks/bluebook/aggregate.rb +108 -0
  68. data/lib/hecks/bluebook/assembly/aggregate_assembly.rb +134 -0
  69. data/lib/hecks/bluebook/assembly/build.rb +48 -0
  70. data/lib/hecks/bluebook/assembly/contract.rb +112 -0
  71. data/lib/hecks/bluebook/assembly/contracts.rb +409 -0
  72. data/lib/hecks/bluebook/assembly/marks.rb +227 -0
  73. data/lib/hecks/bluebook/assembly/specializer.rb +70 -0
  74. data/lib/hecks/bluebook/assembly.rb +78 -0
  75. data/lib/hecks/bluebook/attribute.rb +96 -0
  76. data/lib/hecks/bluebook/behaviour/aggregate.rb +83 -0
  77. data/lib/hecks/bluebook/behaviour/attribute.rb +27 -0
  78. data/lib/hecks/bluebook/behaviour/chapter.rb +72 -0
  79. data/lib/hecks/bluebook/behaviour/command.rb +116 -0
  80. data/lib/hecks/bluebook/behaviour/domain_port.rb +25 -0
  81. data/lib/hecks/bluebook/behaviour/entity.rb +59 -0
  82. data/lib/hecks/bluebook/behaviour/hexagon.rb +50 -0
  83. data/lib/hecks/bluebook/behaviour/lifecycle.rb +51 -0
  84. data/lib/hecks/bluebook/behaviour/policy.rb +52 -0
  85. data/lib/hecks/bluebook/behaviour/process_manager.rb +38 -0
  86. data/lib/hecks/bluebook/behaviour/query.rb +10 -0
  87. data/lib/hecks/bluebook/behaviour/read_model.rb +29 -0
  88. data/lib/hecks/bluebook/behaviour/traits.rb +81 -0
  89. data/lib/hecks/bluebook/behaviour/value_object.rb +33 -0
  90. data/lib/hecks/bluebook/chapter.rb +68 -0
  91. data/lib/hecks/bluebook/command.rb +124 -0
  92. data/lib/hecks/bluebook/domain_port.rb +102 -0
  93. data/lib/hecks/bluebook/dsl/adapter_builder.rb +34 -0
  94. data/lib/hecks/bluebook/dsl/aggregate_builder.rb +906 -0
  95. data/lib/hecks/bluebook/dsl/attribute_collector.rb +327 -0
  96. data/lib/hecks/bluebook/dsl/binding_proxy.rb +71 -0
  97. data/lib/hecks/bluebook/dsl/bluebook_builder.rb +1018 -0
  98. data/lib/hecks/bluebook/dsl/command_builder.rb +626 -0
  99. data/lib/hecks/bluebook/dsl/const_shim.rb +81 -0
  100. data/lib/hecks/bluebook/dsl/domain_port_builder.rb +79 -0
  101. data/lib/hecks/bluebook/dsl/entity_builder.rb +305 -0
  102. data/lib/hecks/bluebook/dsl/generic_dispatch.rb +366 -0
  103. data/lib/hecks/bluebook/dsl/hecksagon_builder.rb +163 -0
  104. data/lib/hecks/bluebook/dsl/identity_declaration.rb +191 -0
  105. data/lib/hecks/bluebook/dsl/lifecycle_builder.rb +44 -0
  106. data/lib/hecks/bluebook/dsl/malformed.rb +7 -0
  107. data/lib/hecks/bluebook/dsl/policy_builder.rb +120 -0
  108. data/lib/hecks/bluebook/dsl/port_builder.rb +30 -0
  109. data/lib/hecks/bluebook/dsl/port_operation_builder.rb +142 -0
  110. data/lib/hecks/bluebook/dsl/process_manager_builder.rb +207 -0
  111. data/lib/hecks/bluebook/dsl/query_builder.rb +113 -0
  112. data/lib/hecks/bluebook/dsl/read_model_builder.rb +233 -0
  113. data/lib/hecks/bluebook/dsl/rule_reference.rb +172 -0
  114. data/lib/hecks/bluebook/dsl/translation_builder.rb +243 -0
  115. data/lib/hecks/bluebook/dsl/value_object_builder.rb +178 -0
  116. data/lib/hecks/bluebook/dsl/word_gate.rb +221 -0
  117. data/lib/hecks/bluebook/dsl/world_builder.rb +77 -0
  118. data/lib/hecks/bluebook/dsl.rb +45 -0
  119. data/lib/hecks/bluebook/entity.rb +103 -0
  120. data/lib/hecks/bluebook/expression/canonical_form.rb +55 -0
  121. data/lib/hecks/bluebook/expression/evaluator.rb +261 -0
  122. data/lib/hecks/bluebook/expression/projection.json +170 -0
  123. data/lib/hecks/bluebook/expression/resolver/block_predicates.rb +233 -0
  124. data/lib/hecks/bluebook/expression/resolver.rb +630 -0
  125. data/lib/hecks/bluebook/expression.rb +13 -0
  126. data/lib/hecks/bluebook/hexagon.rb +60 -0
  127. data/lib/hecks/bluebook/lifecycle.rb +42 -0
  128. data/lib/hecks/bluebook/meta_validator/adapter_judge.rb +54 -0
  129. data/lib/hecks/bluebook/meta_validator/judge.rb +559 -0
  130. data/lib/hecks/bluebook/meta_validator/plan.rb +332 -0
  131. data/lib/hecks/bluebook/meta_validator/port_judge.rb +47 -0
  132. data/lib/hecks/bluebook/meta_validator/readings.rb +350 -0
  133. data/lib/hecks/bluebook/meta_validator/reconstruction.rb +312 -0
  134. data/lib/hecks/bluebook/meta_validator/shapes.rb +246 -0
  135. data/lib/hecks/bluebook/meta_validator/syntax_boot.rb +255 -0
  136. data/lib/hecks/bluebook/meta_validator/translation_judge.rb +138 -0
  137. data/lib/hecks/bluebook/meta_validator/world_judge.rb +78 -0
  138. data/lib/hecks/bluebook/meta_validator.rb +452 -0
  139. data/lib/hecks/bluebook/model_check.rb +318 -0
  140. data/lib/hecks/bluebook/pattern_subset.rb +120 -0
  141. data/lib/hecks/bluebook/policy.rb +41 -0
  142. data/lib/hecks/bluebook/process_manager.rb +86 -0
  143. data/lib/hecks/bluebook/project_discovery.rb +30 -0
  144. data/lib/hecks/bluebook/project_loader.rb +40 -0
  145. data/lib/hecks/bluebook/project_register.rb +82 -0
  146. data/lib/hecks/bluebook/query.rb +61 -0
  147. data/lib/hecks/bluebook/read_model.rb +109 -0
  148. data/lib/hecks/bluebook/reference.rb +74 -0
  149. data/lib/hecks/bluebook/smoke_test.rb +166 -0
  150. data/lib/hecks/bluebook/synthesizer.rb +95 -0
  151. data/lib/hecks/bluebook/translation.rb +92 -0
  152. data/lib/hecks/bluebook/value_object.rb +58 -0
  153. data/lib/hecks/bluebook.rb +74 -0
  154. data/lib/hecks/codemod.rb +342 -0
  155. data/lib/hecks/construct.rb +71 -0
  156. data/lib/hecks/deploy/bluebook/deploy.bluebook +219 -0
  157. data/lib/hecks/deploy/bluebook/deploy.hecksagon +4 -0
  158. data/lib/hecks/deploy/oidc.json +18 -0
  159. data/lib/hecks/doc/reference.rb +389 -0
  160. data/lib/hecks/embryonaut_bluebook.rb +75 -0
  161. data/lib/hecks/facade/cli_door.rb +116 -0
  162. data/lib/hecks/facade/cli_runner.rb +190 -0
  163. data/lib/hecks/facade/command_request.rb +105 -0
  164. data/lib/hecks/facade/handle.rb +173 -0
  165. data/lib/hecks/facade/json_door.rb +154 -0
  166. data/lib/hecks/facade/surface/aggregate_door.rb +185 -0
  167. data/lib/hecks/facade/surface/chapter.rb +107 -0
  168. data/lib/hecks/facade/surface.rb +48 -0
  169. data/lib/hecks/facade.rb +44 -0
  170. data/lib/hecks/forms/app.rb +300 -0
  171. data/lib/hecks/forms/command_form_renderer.rb +113 -0
  172. data/lib/hecks/forms/examples/banking_console.bluebook +3 -0
  173. data/lib/hecks/forms/field_renderer.rb +170 -0
  174. data/lib/hecks/forms/field_shape.rb +232 -0
  175. data/lib/hecks/forms/html.rb +53 -0
  176. data/lib/hecks/forms/index_renderer.rb +35 -0
  177. data/lib/hecks/forms/page.rb +157 -0
  178. data/lib/hecks/forms/params.rb +132 -0
  179. data/lib/hecks/forms/query_form_renderer.rb +114 -0
  180. data/lib/hecks/forms/record_renderer.rb +115 -0
  181. data/lib/hecks/forms/record_table.rb +63 -0
  182. data/lib/hecks/forms/reference_options.rb +30 -0
  183. data/lib/hecks/forms/value_object_shape.rb +46 -0
  184. data/lib/hecks/forms.rb +54 -0
  185. data/lib/hecks/fqn.rb +94 -0
  186. data/lib/hecks/framework/bluebook/compliance.bluebook +1 -0
  187. data/lib/hecks/framework/bluebook/console_settings.bluebook +489 -0
  188. data/lib/hecks/framework/bluebook/framework.hecksagon +32 -0
  189. data/lib/hecks/framework/bluebook/governance.bluebook +130 -0
  190. data/lib/hecks/framework/bluebook/identity.bluebook +90 -0
  191. data/lib/hecks/framework/oidc.json +39 -0
  192. data/lib/hecks/framework.rb +90 -0
  193. data/lib/hecks/freezer.rb +67 -0
  194. data/lib/hecks/fuzzing/invalid_value_generator.rb +86 -0
  195. data/lib/hecks/fuzzing/isolated_boot.rb +92 -0
  196. data/lib/hecks/fuzzing/properties.rb +1146 -0
  197. data/lib/hecks/fuzzing/replay.rb +635 -0
  198. data/lib/hecks/fuzzing/sequence_generator/catalog.rb +93 -0
  199. data/lib/hecks/fuzzing/sequence_generator/outcome_tracker.rb +54 -0
  200. data/lib/hecks/fuzzing/sequence_generator/picker.rb +96 -0
  201. data/lib/hecks/fuzzing/sequence_generator/step_builder.rb +185 -0
  202. data/lib/hecks/fuzzing/sequence_generator.rb +130 -0
  203. data/lib/hecks/fuzzing/value_generator.rb +177 -0
  204. data/lib/hecks/fuzzing.rb +12 -0
  205. data/lib/hecks/grammar/evolve.rb +291 -0
  206. data/lib/hecks/grammar/expression.bluebook +417 -0
  207. data/lib/hecks/grammar/expression_operators.json +1152 -0
  208. data/lib/hecks/grammar/grammar.hecksagon +20 -0
  209. data/lib/hecks/grammar/oidc.json +69 -0
  210. data/lib/hecks/grammar/translation.bluebook +203 -0
  211. data/lib/hecks/grammar.rb +178 -0
  212. data/lib/hecks/ir.rb +126 -0
  213. data/lib/hecks/language/adapter.bluebook +116 -0
  214. data/lib/hecks/language/bluebook/aggregate.bluebook +581 -0
  215. data/lib/hecks/language/bluebook/attaches/paging.bluebook +76 -0
  216. data/lib/hecks/language/bluebook/bluebook.bluebook +256 -0
  217. data/lib/hecks/language/bluebook/bluebook.hecksagon +24 -0
  218. data/lib/hecks/language/bluebook/command.bluebook +437 -0
  219. data/lib/hecks/language/bluebook/entity.bluebook +316 -0
  220. data/lib/hecks/language/bluebook/policy.bluebook +172 -0
  221. data/lib/hecks/language/bluebook/process_manager.bluebook +264 -0
  222. data/lib/hecks/language/bluebook/projection.bluebook +267 -0
  223. data/lib/hecks/language/bluebook/query.bluebook +245 -0
  224. data/lib/hecks/language/bluebook/shape.bluebook +292 -0
  225. data/lib/hecks/language/bluebook/syntax.bluebook +447 -0
  226. data/lib/hecks/language/bluebook/vocabulary.bluebook +364 -0
  227. data/lib/hecks/language/hecksagon/adapter_binding.bluebook +51 -0
  228. data/lib/hecks/language/hecksagon/domain_port.bluebook +76 -0
  229. data/lib/hecks/language/hecksagon/hecksagon.bluebook +131 -0
  230. data/lib/hecks/language/hecksagon/port_operation.bluebook +102 -0
  231. data/lib/hecks/language/oidc.json +313 -0
  232. data/lib/hecks/language/port.bluebook +92 -0
  233. data/lib/hecks/language/translation/translation.bluebook +110 -0
  234. data/lib/hecks/language/translation/translation_aggregate.bluebook +267 -0
  235. data/lib/hecks/language/world/wiring.bluebook +62 -0
  236. data/lib/hecks/language/world/world.bluebook +84 -0
  237. data/lib/hecks/literal.rb +125 -0
  238. data/lib/hecks/naming.rb +121 -0
  239. data/lib/hecks/ports/access_control.port +4 -0
  240. data/lib/hecks/ports/access_control.rb +62 -0
  241. data/lib/hecks/ports/agent/answers.rb +104 -0
  242. data/lib/hecks/ports/agent.port +4 -0
  243. data/lib/hecks/ports/agent.rb +167 -0
  244. data/lib/hecks/ports/authentication.port +4 -0
  245. data/lib/hecks/ports/authentication.rb +50 -0
  246. data/lib/hecks/ports/authorization.port +4 -0
  247. data/lib/hecks/ports/authorization.rb +59 -0
  248. data/lib/hecks/ports/clock.port +4 -0
  249. data/lib/hecks/ports/clock.rb +62 -0
  250. data/lib/hecks/ports/extraction.port +4 -0
  251. data/lib/hecks/ports/extraction.rb +37 -0
  252. data/lib/hecks/ports/identity_assignment.port +4 -0
  253. data/lib/hecks/ports/identity_assignment.rb +45 -0
  254. data/lib/hecks/ports/identity_generation.port +4 -0
  255. data/lib/hecks/ports/identity_generation.rb +49 -0
  256. data/lib/hecks/ports/identity_resolution.port +4 -0
  257. data/lib/hecks/ports/identity_resolution.rb +40 -0
  258. data/lib/hecks/ports/loading.port +4 -0
  259. data/lib/hecks/ports/loading.rb +13 -0
  260. data/lib/hecks/ports/persistence/append_only.rb +102 -0
  261. data/lib/hecks/ports/persistence/binding_policy.rb +56 -0
  262. data/lib/hecks/ports/persistence/execution.rb +18 -0
  263. data/lib/hecks/ports/persistence/lineage.rb +277 -0
  264. data/lib/hecks/ports/persistence/null_saga_store.rb +25 -0
  265. data/lib/hecks/ports/persistence/remote_runtime.rb +42 -0
  266. data/lib/hecks/ports/persistence/repository_factory.rb +30 -0
  267. data/lib/hecks/ports/persistence.port +4 -0
  268. data/lib/hecks/ports/persistence.rb +39 -0
  269. data/lib/hecks/ports/projection.port +4 -0
  270. data/lib/hecks/ports/projection.rb +76 -0
  271. data/lib/hecks/ports/query/in_memory.rb +60 -0
  272. data/lib/hecks/ports/query/ordering.rb +41 -0
  273. data/lib/hecks/ports/query.rb +36 -0
  274. data/lib/hecks/ports.rb +27 -0
  275. data/lib/hecks/projections/diagrams.rb +413 -0
  276. data/lib/hecks/projections/ir.rb +18 -0
  277. data/lib/hecks/projections/model/deviations.rb +98 -0
  278. data/lib/hecks/projections/model.rb +145 -0
  279. data/lib/hecks/projections/oidc.rb +110 -0
  280. data/lib/hecks/projections/parser_table.rb +159 -0
  281. data/lib/hecks/projections/reference.rb +38 -0
  282. data/lib/hecks/projections/shape.rb +31 -0
  283. data/lib/hecks/projections/statements.rb +110 -0
  284. data/lib/hecks/projections/vocabulary.rb +100 -0
  285. data/lib/hecks/projections.rb +32 -0
  286. data/lib/hecks/projector/cli_projector.rb +437 -0
  287. data/lib/hecks/projector/docs_projector.rb +321 -0
  288. data/lib/hecks/projector/exporter.rb +141 -0
  289. data/lib/hecks/projector/ir_projector.rb +18 -0
  290. data/lib/hecks/projector/narrate_projector.rb +243 -0
  291. data/lib/hecks/projector/target.rb +97 -0
  292. data/lib/hecks/projector.rb +186 -0
  293. data/lib/hecks/query_ir.rb +392 -0
  294. data/lib/hecks/query_specification/common/authorization_spec.rb +9 -0
  295. data/lib/hecks/query_specification/common/comparators.rb +25 -0
  296. data/lib/hecks/query_specification/common/comparison.rb +174 -0
  297. data/lib/hecks/query_specification/common/cursor_spec.rb +9 -0
  298. data/lib/hecks/query_specification/common/dsl.rb +58 -0
  299. data/lib/hecks/query_specification/common/inspection_spec.rb +9 -0
  300. data/lib/hecks/query_specification/common/limit_spec.rb +9 -0
  301. data/lib/hecks/query_specification/common/null_policy.rb +80 -0
  302. data/lib/hecks/query_specification/common/null_semantics.rb +11 -0
  303. data/lib/hecks/query_specification/common/offset_spec.rb +9 -0
  304. data/lib/hecks/query_specification/common/options.rb +32 -0
  305. data/lib/hecks/query_specification/common/order_by.rb +9 -0
  306. data/lib/hecks/query_specification/common/specification.rb +10 -0
  307. data/lib/hecks/query_specification/common/where_clause.rb +9 -0
  308. data/lib/hecks/query_specification/field_path.rb +89 -0
  309. data/lib/hecks/query_specification/hop_path.rb +130 -0
  310. data/lib/hecks/query_specification/read_model/specification.rb +18 -0
  311. data/lib/hecks/query_specification.rb +14 -0
  312. data/lib/hecks/rendering.rb +48 -0
  313. data/lib/hecks/router/namespace_installer.rb +157 -0
  314. data/lib/hecks/router.rb +70 -0
  315. data/lib/hecks/runtime/caller.rb +50 -0
  316. data/lib/hecks/runtime/capability_graph.rb +44 -0
  317. data/lib/hecks/runtime/command_interpreter/argument_gate.rb +124 -0
  318. data/lib/hecks/runtime/command_interpreter/mutation_applier.rb +248 -0
  319. data/lib/hecks/runtime/command_interpreter.rb +413 -0
  320. data/lib/hecks/runtime/command_rules/admissibility.rb +307 -0
  321. data/lib/hecks/runtime/command_rules/arithmetic.rb +254 -0
  322. data/lib/hecks/runtime/command_rules/authorization.rb +64 -0
  323. data/lib/hecks/runtime/command_rules/emission.rb +34 -0
  324. data/lib/hecks/runtime/command_rules/references.rb +181 -0
  325. data/lib/hecks/runtime/command_rules.rb +28 -0
  326. data/lib/hecks/runtime/dependency_planning.rb +231 -0
  327. data/lib/hecks/runtime/dispatcher.rb +286 -0
  328. data/lib/hecks/runtime/entity_element.rb +253 -0
  329. data/lib/hecks/runtime/entity_interpreter.rb +228 -0
  330. data/lib/hecks/runtime/era_check.rb +136 -0
  331. data/lib/hecks/runtime/era_guard/shape_diff.rb +128 -0
  332. data/lib/hecks/runtime/era_guard.rb +193 -0
  333. data/lib/hecks/runtime/era_tamper.rb +61 -0
  334. data/lib/hecks/runtime/errors.rb +100 -0
  335. data/lib/hecks/runtime/event.rb +51 -0
  336. data/lib/hecks/runtime/identity.rb +128 -0
  337. data/lib/hecks/runtime/instance.rb +120 -0
  338. data/lib/hecks/runtime/interpreting.rb +69 -0
  339. data/lib/hecks/runtime/loader.rb +143 -0
  340. data/lib/hecks/runtime/policy_interpreter.rb +366 -0
  341. data/lib/hecks/runtime/port_operation_interpreter.rb +210 -0
  342. data/lib/hecks/runtime/query_interpreter.rb +254 -0
  343. data/lib/hecks/runtime/reaction_invocation.rb +245 -0
  344. data/lib/hecks/runtime/read_model_interpreter.rb +266 -0
  345. data/lib/hecks/runtime/rebuild_sweep.rb +74 -0
  346. data/lib/hecks/runtime/reference_hop.rb +99 -0
  347. data/lib/hecks/runtime/refusal_wording.rb +124 -0
  348. data/lib/hecks/runtime/registry/saga_persistence.rb +70 -0
  349. data/lib/hecks/runtime/registry/verification.rb +158 -0
  350. data/lib/hecks/runtime/registry.rb +218 -0
  351. data/lib/hecks/runtime/remote_dispatcher.rb +143 -0
  352. data/lib/hecks/runtime/routing.rb +96 -0
  353. data/lib/hecks/runtime/saga_interpreter/correlation.rb +97 -0
  354. data/lib/hecks/runtime/saga_interpreter.rb +301 -0
  355. data/lib/hecks/runtime/storage_shape.rb +120 -0
  356. data/lib/hecks/runtime/tenant_check.rb +84 -0
  357. data/lib/hecks/runtime/tenant_scope.rb +55 -0
  358. data/lib/hecks/runtime/value/admission.rb +112 -0
  359. data/lib/hecks/runtime/value/coercion.rb +500 -0
  360. data/lib/hecks/runtime/value/invariant_violation.rb +5 -0
  361. data/lib/hecks/runtime/value.rb +125 -0
  362. data/lib/hecks/runtime.rb +95 -0
  363. data/lib/hecks/translation/audit/approval_digest.rb +31 -0
  364. data/lib/hecks/translation/audit/layer_one.rb +37 -0
  365. data/lib/hecks/translation/audit/layer_two.rb +77 -0
  366. data/lib/hecks/translation/audit/unfed_report.rb +42 -0
  367. data/lib/hecks/translation/audit.rb +70 -0
  368. data/lib/hecks/translation/reattest.rb +72 -0
  369. data/lib/hecks/translation/rule_compiler.rb +120 -0
  370. data/lib/hecks/translation/scaffold/differ.rb +183 -0
  371. data/lib/hecks/translation/scaffold/renderer.rb +41 -0
  372. data/lib/hecks/translation/scaffold/writer.rb +28 -0
  373. data/lib/hecks/translation/scaffold.rb +30 -0
  374. data/lib/hecks/translation.rb +11 -0
  375. data/lib/hecks/version.rb +16 -0
  376. data/lib/hecks/vocabulary.rb +213 -0
  377. data/lib/hecks.rb +118 -7
  378. metadata +403 -172
  379. data/bin/hecks +0 -7
  380. data/bin/hecks_console +0 -10
  381. data/lib/cli/build.rb +0 -13
  382. data/lib/cli/command_runner.rb +0 -25
  383. data/lib/cli/console.rb +0 -8
  384. data/lib/cli/generate.rb +0 -35
  385. data/lib/cli/package.rb +0 -13
  386. data/lib/cli/test.rb +0 -56
  387. data/lib/cli.rb +0 -28
  388. data/lib/console/commands.rb +0 -9
  389. data/lib/console.rb +0 -23
  390. data/lib/packager/generate_binary_package.rb +0 -105
  391. data/lib/packager/generate_lambda_package.rb +0 -26
  392. data/lib/packager/templates/binary_package/build/linux-x86_64/lib/app/hello.rb +0 -1
  393. data/lib/packager/templates/binary_package/build/resources/%domain_name%.rb.tt +0 -17
  394. data/lib/packager/templates/binary_package/build/resources/Dockerfile.tt +0 -8
  395. data/lib/packager/templates/binary_package/build/resources/Gemfile.tt +0 -4
  396. data/lib/packager/templates/binary_package/build/resources/bundle/config +0 -3
  397. data/lib/packager/templates/binary_package/build/resources/wrapper.tt +0 -13
  398. data/lib/packager/templates/lambda_package/handler.js.tt +0 -12
  399. data/lib/packager/templates/lambda_package/serverless.yml.tt +0 -100
  400. data/lib/packager.rb +0 -2
data/lib/cli/generate.rb DELETED
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
- class Generate < Thor
3
- desc 'domain_objects', 'generate domain objects'
4
- method_option :type,
5
- aliases: '-t',
6
- required: true,
7
- desc: 'The type of the domain object you want to generate',
8
- banner: '[OBJECT_TYPE]',
9
- enum: %w(entity value_object aggregate reference) if File.file?('Domain') || File.file?('hecks.gemspec')
10
-
11
- register(Hecks::Domain::CLI::GenerateDomainObject,
12
- 'domain_object',
13
- 'domain_object',
14
- 'Generate Domain Objects') if File.file?('Domain')
15
-
16
- desc 'resource_server', 'generate resource_server adapter'
17
- register(Hecks::Domain::Adapters::ResourceServer::CLI::GenerateResourceServer,
18
- 'resource_server',
19
- 'resource_server',
20
- 'Generate A Resource Server for a domain') if File.file?('Domain')
21
-
22
- desc 'sql_database', 'generate SQL database adapter'
23
- register(Hecks::Domain::Adapters::SQLDatabase::CLI::GenerateSQLDatabase,
24
- 'sql_database',
25
- 'sql_database',
26
- 'Generate a SQL Server Database adapter') if File.file?('Domain')
27
-
28
- desc 'domain_migrations', 'generate migrations for the sql database adapter based on your domain'
29
- register(Hecks::Domain::Adapters::SQLDatabase::CLI::GenerateDomainMigrations,
30
- 'domain_migrations',
31
- 'domain_migrations',
32
- 'Generate Domain Migrations')
33
-
34
- desc 'readme', 'Generate the hecks Readme with the latest examples'
35
- end
data/lib/cli/package.rb DELETED
@@ -1,13 +0,0 @@
1
- class Package < Thor
2
- desc 'lambda', 'lambda'
3
- register Hecks::Packager::CLI::GenerateLambdaPackage,
4
- 'lambda',
5
- 'lambda',
6
- 'Generate Lambda Package'
7
-
8
- desc 'binary', 'binary'
9
- register Hecks::Packager::CLI::GenerateBinaryPackage,
10
- 'binary',
11
- 'binary',
12
- 'Generate Binary Package'
13
- end
data/lib/cli/test.rb DELETED
@@ -1,56 +0,0 @@
1
- class Test < Thor
2
- include Thor::Actions
3
-
4
- class_option :no_cache, aliases: '-n', desc: 'download resources', default: false, type: :boolean
5
-
6
- desc 'ci', 'Run and test the generators'
7
- def ci
8
- examples
9
- packages
10
- domain_adapters
11
- end
12
-
13
- desc 'domain_adapters', "run the domain adapter specs"
14
- def domain_adapters
15
- generate_resource_server('pizza_builder')
16
- generate_sql_database('pizza_builder')
17
- end
18
-
19
- desc 'examples', 'Generate and run the example specs'
20
- def examples
21
- reset_example('pizza_builder')
22
- run('rspec -f d')
23
- end
24
-
25
- desc 'packages', 'Generate and run the package specs'
26
- def packages
27
- build_binary_package('pizza_builder')
28
- build_lambda_package('pizza_builder')
29
- end
30
-
31
- private
32
-
33
- def generate_sql_database(name)
34
- run("cd ../hecks-examples/#{name} && hecks generate sql_database")
35
- end
36
-
37
- def reset_example(name)
38
- run("cd ../hecks-examples/#{name} && rm -rf lib")
39
- run("cd ../hecks-examples/#{name} && rm -rf spec")
40
- run("cd ../hecks-examples/#{name} && hecks new")
41
- end
42
-
43
- def build_binary_package(name)
44
- run("cd ../hecks-examples/#{name} && hecks package binary #{'-n' if options[:no_cache]}")
45
- end
46
-
47
- def build_lambda_package(name)
48
- run("cd ../hecks-examples/#{name} && hecks package lambda")
49
- end
50
-
51
- def generate_resource_server(name)
52
- run("cd ../hecks-examples/#{name} && rm -rf config.ru")
53
- run("cd ../hecks-examples/#{name} && hecks generate resource_server")
54
- run("cd ../hecks-examples/#{name}")
55
- end
56
- end
data/lib/cli.rb DELETED
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'active_support/inflector'
3
- require_relative 'cli/generate'
4
- require_relative 'cli/package'
5
- require_relative 'cli/test'
6
- require_relative 'cli/console'
7
- require_relative 'cli/command_runner'
8
- require_relative 'cli/build'
9
-
10
- module Hecks
11
- class CLI < Thor
12
- package_name 'hecks'
13
-
14
- desc 'generate', 'generate'
15
- subcommand('generate', Generate)
16
-
17
- desc 'package', 'package'
18
- subcommand('package', Package) if File.file?('Domain')
19
-
20
- desc 'test', 'test'
21
- subcommand('test', Test) if File.file?('hecks.gemspec')
22
-
23
- long_desc 'Generate a domain'
24
- method_option :dryrun, aliases: '-d', type: :boolean, desc: 'Output commands without running'
25
-
26
- register(Hecks::Domain::CLI::New, 'new', 'new', 'Create a new Domain') if File.file?('Domain')
27
- end
28
- end
@@ -1,9 +0,0 @@
1
- module Hecks
2
- module Console
3
- module Commands
4
- def app
5
- @app ||= Hecks::Application.new(domain: Hecks::Console.domain)
6
- end
7
- end
8
- end
9
- end
data/lib/console.rb DELETED
@@ -1,23 +0,0 @@
1
- require 'irb'
2
- require "irb/completion"
3
- require_relative 'console/commands'
4
-
5
- module Hecks
6
- module Console
7
- def self.file
8
- Dir.pwd.split('/').last
9
- end
10
-
11
- def self.full_path
12
- Dir.pwd + "/lib/" + file
13
- end
14
-
15
- def self.domain
16
- file.camelize.constantize
17
- end
18
-
19
- def self.domain_name
20
- domain.to_s
21
- end
22
- end
23
- end
@@ -1,105 +0,0 @@
1
- module Hecks
2
- module Packager
3
- module CLI
4
- class GenerateBinaryPackage < Thor::Group
5
- include Thor::Actions
6
-
7
- class_option :no_cache, aliases: '-n', desc: 'download resources', default: false, type: :boolean
8
-
9
- HOST = "http://d6r77u77i8pq3.cloudfront.net/releases"
10
- OSX_BINARY = "traveling-ruby-20150715-2.2.2-osx.tar.gz"
11
- LINUX_BINARY = 'traveling-ruby-20150715-2.2.2-linux-x86_64.tar.gz'
12
- BUILD_DIR = 'packages/binary/build'
13
- RESOURCES_DIR = BUILD_DIR + '/resources'
14
- OSX_DIR = BUILD_DIR + '/osx'
15
- OSX_LIB_DIR = OSX_DIR + '/lib'
16
- OSX_APP_DIR = OSX_LIB_DIR + '/app'
17
- LINUX_DIR = BUILD_DIR + '/linux-x86_64'
18
- LINUX_LIB_DIR = LINUX_DIR + 'lib'
19
- LINUX_APP_DIR = LINUX_LIB_DIR + '/app'
20
-
21
- def self.source_root
22
- File.dirname(__FILE__) + '/templates'
23
- end
24
-
25
- def create_package_folder
26
- directory('binary_package', './packages/binary')
27
- end
28
-
29
- def domain_name
30
- Dir.pwd.split('/').last
31
- end
32
-
33
- def build
34
- package(OSX_APP_DIR, OSX_LIB_DIR, OSX_BINARY, OSX_DIR)
35
- package(LINUX_APP_DIR, LINUX_LIB_DIR, LINUX_BINARY, LINUX_DIR)
36
- end
37
-
38
- private
39
-
40
- def package(app_dir, lib_dir, binary, package_dir)
41
- empty_directory(app_dir)
42
- empty_directory(lib_dir + '/ruby')
43
- return unless refresh_cache?(app_dir)
44
- # download(binary, lib_dir)
45
- copy_resources(app_dir, package_dir)
46
- bundle_with_ruby_2_2_2(app_dir)
47
- reduce_package_size(app_dir)
48
- end
49
-
50
- def refresh_cache?(app_dir)
51
- return true if options[:no_cache]
52
- return Dir[app_dir + '/*'].empty?
53
- end
54
-
55
- def copy_resources(app_dir, package_dir)
56
- run("cp #{RESOURCES_DIR}/Gemfile #{app_dir}")
57
- run("cp -rf #{RESOURCES_DIR}/bundle #{app_dir}/.bundle")
58
- run("cp -rf #{RESOURCES_DIR}/#{domain_name}.rb #{app_dir}/#{domain_name}.rb")
59
- run("cp -rf #{RESOURCES_DIR}/wrapper #{package_dir}/#{domain_name}")
60
- run("cd #{package_dir} && chmod 744 #{domain_name}")
61
- end
62
-
63
- def download(binary, lib_dir)
64
- run("cd #{RESOURCES_DIR} && curl -O #{HOST}/#{binary}")
65
- run("tar -xzf #{RESOURCES_DIR}/#{binary} -C #{lib_dir}/ruby")
66
- end
67
-
68
- def bundle_with_ruby_2_2_2(app_dir)
69
- run("cp -rf #{RESOURCES_DIR}/Dockerfile #{app_dir}")
70
- run("cp #{domain_name}-0.0.0.gem #{app_dir}")
71
- run("cd #{app_dir} && gem fetch hecks-application hecks-adapters-sql-database")
72
- run("cd #{app_dir} && docker build -t #{domain_name} --no-cache .")
73
- container = `docker create pizza_builder:latest`.gsub("\n", '')
74
- run("docker cp #{container}:/usr/src/app/vendor #{app_dir}")
75
- end
76
-
77
- def reduce_package_size(app_dir)
78
- files = %w(test tests spec features benchmark README* CHANGE* Change*
79
- COPYING* LICENSE* MIT-LICENSE* TODO *.txt *.md *.rdoc doc docs example
80
- examples sample doc-api)
81
-
82
- files.each do |file|
83
- run("rm -rf #{app_dir}/vendor/ruby/*/gems/*/#{file}")
84
- end
85
-
86
- run("rm -rf #{app_dir}/vendor/*/*/cache/*")
87
-
88
- %w(.gitignore .travis.yml).each do |file|
89
- run("rm -rf #{app_dir}/vendor/ruby/*/gems/*/#{file}")
90
- end
91
-
92
- %w(MAKEfile */Makefile */tmp).each do |file|
93
- run("rm -f #{app_dir}/vendor/ruby/*/gems/*/ext/#{file}")
94
- end
95
- %w(*.c *.cpp *.h *.rl *extconf.rb *.java *.class *.md).each do |file|
96
- run("find #{app_dir}/vendor/ruby -name '#{file}' | xargs rm -f")
97
- end
98
- %w(*.0 *.so *.bundle).each do |file|
99
- run("find #{app_dir}/vendor/ruby/*/gems -name '#{file}' | xargs rm -f")
100
- end
101
- end
102
- end
103
- end
104
- end
105
- end
@@ -1,26 +0,0 @@
1
- module Hecks
2
- module Packager
3
- module CLI
4
- class GenerateLambdaPackage < Thor::Group
5
- include Thor::Actions
6
-
7
- def self.source_root
8
- File.dirname(__FILE__) + '/templates'
9
- end
10
-
11
- def create_package_folder
12
- directory('lambda_package', './packages/lambda')
13
- end
14
-
15
- def domain_name
16
- Dir.pwd.split('/').last
17
- end
18
-
19
- def create_function
20
- run("rm -rf packages/lambda/#{domain_name}")
21
- run("cp -r packages/binary/build/osx packages/lambda/#{domain_name}")
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,17 +0,0 @@
1
- require 'hecks'
2
- require '<%= domain_name %>'
3
-
4
- app = Hecks::Application.new(domain: <%= domain_name.camelcase %>)
5
-
6
- # Ruby 2.2.2 doesn't support Fixnum#positive?, so monkey patch it.
7
- class Fixnum
8
- def positive?
9
- self > 0
10
- end
11
- end
12
-
13
- domain_module = ARGV[0].to_sym
14
- method = ARGV[1]
15
- data = JSON.parse(ARGV[2], symbolize_names: true)
16
-
17
- puts app[domain_module].send(method, data).call.result.inspect
@@ -1,8 +0,0 @@
1
- FROM ruby:2.2
2
-
3
- COPY <%= domain_name %>-0.0.0.gem /usr/src/app/<%= domain_name %>-0.0.0.gem
4
- RUN gem install /usr/src/app/<%= domain_name %>-0.0.0.gem
5
- COPY Gemfile /usr/src/app/Gemfile
6
- RUN cd /usr/src/app/ && bundle package
7
- RUN cd /usr/src/app/ && bundle install --path vendor
8
- RUN ls /usr/src/app/
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'hecks'
4
- gem '<%= domain_name %>'
@@ -1,3 +0,0 @@
1
- BUNDLE_PATH: ./vendor
2
- BUNDLE_WITHOUT: development
3
- BUNDLE_DISABLE_SHARED_GEMS: '1'
@@ -1,13 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
-
4
- # Figure out where this script is located.
5
- SELFDIR="`dirname \"$0\"`"
6
- SELFDIR="`cd \"$SELFDIR\" && pwd`"
7
-
8
- # Tell Bundler where the Gemfile and gems are.
9
- export BUNDLE_GEMFILE="$SELFDIR/lib/app/Gemfile"
10
- unset BUNDLE_IGNORE_CONFIG
11
-
12
- # Run the actual app using the bundled Ruby interpreter, with Bundler activated.
13
- exec "$SELFDIR/lib/ruby/bin/ruby" -rbundler/setup "$SELFDIR/lib/app/<%= domain_name %>.rb" "$@"
@@ -1,12 +0,0 @@
1
- 'use strict';
2
-
3
- const spawn = require('child_process').spawn;
4
-
5
- module.exports.<%= domain_name %> = (event, context, callback) => {
6
- var app = '<%= domain_name %>/<%= domain_name %>'
7
- var data = JSON.stringify(event['data'])
8
- var command = app + ' ' + event['module'] + ' ' + event['method'] + ' ' + JSON.stringify(data)
9
- const child = exec(command, (result) => {
10
- context.done(result);
11
- });
12
- };
@@ -1,100 +0,0 @@
1
- # Welcome to Serverless!
2
- #
3
- # This file is the main config file for your service.
4
- # It's very minimal at this point and uses default values.
5
- # You can always add more config options for more control.
6
- # We've included some commented out config examples here.
7
- # Just uncomment any of them to get that config option.
8
- #
9
- # For full config options, check the docs:
10
- # docs.serverless.com
11
- #
12
- # Happy Coding!
13
-
14
- service: lambda
15
-
16
- # You can pin your service to only deploy with a specific Serverless version
17
- # Check out our docs for more details
18
- # frameworkVersion: "=X.X.X"
19
-
20
- provider:
21
- name: aws
22
- runtime: nodejs4.3
23
-
24
- # you can overwrite defaults here
25
- # stage: dev
26
- # region: us-east-1
27
-
28
- # you can add statements to the Lambda function's IAM Role here
29
- # iamRoleStatements:
30
- # - Effect: "Allow"
31
- # Action:
32
- # - "s3:ListBucket"
33
- # Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
34
- # - Effect: "Allow"
35
- # Action:
36
- # - "s3:PutObject"
37
- # Resource:
38
- # Fn::Join:
39
- # - ""
40
- # - - "arn:aws:s3:::"
41
- # - "Ref" : "ServerlessDeploymentBucket"
42
-
43
- # you can define service wide environment variables here
44
- # environment:
45
- # variable1: value1
46
-
47
- # you can add packaging information here
48
- #package:
49
- # include:
50
- # - include-me.js
51
- # - include-me-dir/**
52
- # exclude:
53
- # - exclude-me.js
54
- # - exclude-me-dir/**
55
-
56
- functions:
57
- <%= domain_name %>:
58
- handler: handler.<%= domain_name %>
59
-
60
- # The following are a few example events you can configure
61
- # NOTE: Please make sure to change your handler code to work with those events
62
- # Check the event documentation for details
63
- # events:
64
- # - http:
65
- # path: users/create
66
- # method: get
67
- # - s3: ${env:BUCKET}
68
- # - schedule: rate(10 minutes)
69
- # - sns: greeter-topic
70
- # - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
71
- # - alexaSkill
72
- # - iot:
73
- # sql: "SELECT * FROM 'some_topic'"
74
- # - cloudwatchEvent:
75
- # event:
76
- # source:
77
- # - "aws.ec2"
78
- # detail-type:
79
- # - "EC2 Instance State-change Notification"
80
- # detail:
81
- # state:
82
- # - pending
83
-
84
- # Define function environment variables here
85
- # environment:
86
- # variable2: value2
87
-
88
- # you can add CloudFormation resource templates here
89
- #resources:
90
- # Resources:
91
- # NewResource:
92
- # Type: AWS::S3::Bucket
93
- # Properties:
94
- # BucketName: my-new-bucket
95
- # Outputs:
96
- # NewOutput:
97
- # Description: "Description for the output"
98
- # Value: "Some output value"
99
- Plugins:
100
- - serverless-offline
data/lib/packager.rb DELETED
@@ -1,2 +0,0 @@
1
- require_relative 'packager/generate_binary_package'
2
- require_relative 'packager/generate_lambda_package'