hecks 3.13.0 → 4.0.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.
- checksums.yaml +4 -4
- data/examples/pizzas/adapters/fake_processor.rb +34 -0
- data/examples/pizzas/adapters/payment_signature.rb +66 -0
- data/examples/pizzas/adapters/payment_webhook.rb +87 -0
- data/examples/pizzas/bluebook/pizzas.behaviors +33 -0
- data/examples/pizzas/bluebook/pizzas.bluebook +4 -4
- data/examples/pizzas/bluebook/pizzas.hecksagon +5 -3
- data/examples/pizzas/config.ru +22 -0
- data/lib/hecks/adapters/driven/prism.rb +0 -2
- data/lib/hecks/adapters/driven.rb +0 -2
- data/lib/hecks/adapters/driving/json.rb +1 -7
- data/lib/hecks/bluebook/dsl/attribute_collector.rb +15 -5
- data/lib/hecks/bluebook/dsl/bootstrap_table.rb +2 -2
- data/lib/hecks/bluebook/dsl/derivation_words.rb +58 -0
- data/lib/hecks/bluebook/dsl/translation_builder.rb +6 -37
- data/lib/hecks/bluebook/expression/ast_json.rb +0 -9
- data/lib/hecks/bluebook/hecksagon.rb +1 -1
- data/lib/hecks/bluebook/meta_validator/translation_judge/rules.rb +7 -10
- data/lib/hecks/bluebook/meta_validator/translation_judge.rb +4 -8
- data/lib/hecks/bluebook/meta_validator.rb +0 -11
- data/lib/hecks/bluebook/named_pattern.rb +33 -0
- data/lib/hecks/bluebook/translation.rb +18 -10
- data/lib/hecks/bluebook/translation_expression/evaluator.rb +63 -0
- data/lib/hecks/bluebook/translation_expression/parser.rb +127 -0
- data/lib/hecks/bluebook/translation_expression.rb +39 -0
- data/lib/hecks/bluebook/translation_plan.rb +70 -0
- data/lib/hecks/bluebook.rb +3 -0
- data/lib/hecks/chapters.rb +3 -3
- data/lib/hecks/cli/domain_stub.rb +1 -1
- data/lib/hecks/cli/interview_aggregate.rb +4 -4
- data/lib/hecks/composer/adapters/claude_composer.adapter +3 -0
- data/lib/hecks/composer/adapters/claude_composer.rb +83 -0
- data/lib/hecks/composer/adapters/fake_agent.adapter +3 -0
- data/lib/hecks/composer/adapters/fake_agent.rb +55 -0
- data/lib/hecks/composer/adapters/jev.adapter +3 -0
- data/lib/hecks/composer/adapters/jev.rb +66 -0
- data/lib/hecks/composer/agent.rb +113 -0
- data/lib/hecks/composer/assistant.rb +110 -0
- data/lib/hecks/composer/behavior_run.rb +53 -0
- data/lib/hecks/composer/bluebook/composer.bluebook +178 -0
- data/lib/hecks/composer/bluebook/composer.hecksagon +16 -0
- data/lib/hecks/composer/board.rb +65 -0
- data/lib/hecks/composer/board_edit/command_text.rb +39 -0
- data/lib/hecks/composer/board_edit/source.rb +84 -0
- data/lib/hecks/composer/board_edit.rb +144 -0
- data/lib/hecks/composer/check.rb +89 -0
- data/lib/hecks/composer/domains.rb +81 -0
- data/lib/hecks/composer/jobs.rb +134 -0
- data/lib/hecks/composer/layout.rb +37 -0
- data/lib/hecks/composer/live.rb +150 -0
- data/lib/hecks/composer/outline.rb +48 -0
- data/lib/hecks/composer/page.html +989 -0
- data/lib/hecks/composer/panels.rb +142 -0
- data/lib/hecks/composer/parse.rb +83 -0
- data/lib/hecks/composer/plain.rb +28 -0
- data/lib/hecks/composer/ports/composer_agent.port +7 -0
- data/lib/hecks/composer/session.rb +141 -0
- data/lib/hecks/composer/toolbox.rb +166 -0
- data/lib/hecks/composer/web.rb +156 -0
- data/lib/hecks/composer/workbench.rb +51 -0
- data/lib/hecks/composer/workspace.rb +81 -0
- data/lib/hecks/composer.rb +17 -0
- data/lib/hecks/corpus/adapters.rb +22 -0
- data/lib/hecks/corpus/rust.rb +1 -1
- data/lib/hecks/corpus/worlds.rb +19 -0
- data/lib/hecks/corpus.rb +5 -0
- data/lib/hecks/deploy/bluebook/deploy.bluebook +34 -34
- data/lib/hecks/forms/app/commands.rb +2 -3
- data/lib/hecks/forms/app/queries.rb +2 -3
- data/lib/hecks/forms/app/records.rb +17 -5
- data/lib/hecks/forms/command_form_renderer.rb +42 -16
- data/lib/hecks/forms/field_controls.rb +2 -2
- data/lib/hecks/forms/field_renderer.rb +1 -1
- data/lib/hecks/forms/field_shape.rb +36 -17
- data/lib/hecks/forms/index_renderer.rb +2 -1
- data/lib/hecks/forms/page.rb +1 -1
- data/lib/hecks/forms/params.rb +0 -13
- data/lib/hecks/forms/query_form_renderer.rb +7 -6
- data/lib/hecks/forms/record_renderer.rb +11 -7
- data/lib/hecks/forms/rule_words.rb +100 -0
- data/lib/hecks/forms/value_object_shape.rb +2 -1
- data/lib/hecks/framework/bluebook/change.bluebook +2 -2
- data/lib/hecks/fuzzing/bounded_exhaustive_expressions.rb +0 -3
- data/lib/hecks/fuzzing/domain_generator/block_rendering.rb +1 -1
- data/lib/hecks/fuzzing/isolated_boot/worlds.rb +3 -6
- data/lib/hecks/fuzzing/replay/filters.rb +2 -6
- data/lib/hecks/gate/stages.yml +25 -0
- data/lib/hecks/grammar/evolve/seeds.rb +0 -6
- data/lib/hecks/grammar/evolve.rb +0 -3
- data/lib/hecks/grammar/translation.bluebook +1 -1
- data/lib/hecks/hecks/adapters/codebase/composing.rb +56 -0
- data/lib/hecks/hecks/adapters/codebase/source_tree.rb +3 -1
- data/lib/hecks/hecks/adapters/journal_store/changes.rb +0 -26
- data/lib/hecks/hecks/adapters/journal_store/examination.rb +2 -23
- data/lib/hecks/hecks/adapters/journal_store/readings.rb +3 -11
- data/lib/hecks/hecks/adapters/journal_store.rb +0 -11
- data/lib/hecks/hecks/adapters/rehearsal/inquiry.rb +4 -11
- data/lib/hecks/hecks/adapters/rehearsal/memory_store.rb +0 -9
- data/lib/hecks/hecks/adapters/rehearsal/postgres_reading.rb +0 -4
- data/lib/hecks/hecks/codebase.behaviors +6 -0
- data/lib/hecks/hecks/codebase.bluebook +58 -37
- data/lib/hecks/hecks/composer.behaviors +68 -0
- data/lib/hecks/hecks/context_map.hecksagon +1 -1
- data/lib/hecks/hecks/custodian.behaviors +0 -6
- data/lib/hecks/hecks/custodian.bluebook +15 -92
- data/lib/hecks/hecks/hecks.bluebook +2 -2
- data/lib/hecks/hecks/hecks.hecksagon +2 -2
- data/lib/hecks/hecks/hecks.world +1 -1
- data/lib/hecks/hecks/rehearsal.bluebook +10 -16
- data/lib/hecks/hecks/tooling.bluebook +22 -22
- data/lib/hecks/kernel_capabilities/templates.rb +4 -4
- data/lib/hecks/kernel_capabilities.rb +1 -1
- data/lib/hecks/language/bluebook/aggregate.bluebook +1 -0
- data/lib/hecks/language/bluebook/command.bluebook +1 -0
- data/lib/hecks/language/bluebook/entity.bluebook +1 -0
- data/lib/hecks/language/bluebook/query.bluebook +1 -0
- data/lib/hecks/language/bluebook/shape.bluebook +8 -7
- data/lib/hecks/language/bluebook/vocabulary.bluebook +2 -3
- data/lib/hecks/language/hecksagon/port_operation.bluebook +1 -0
- data/lib/hecks/language/translation/translation_aggregate.bluebook +21 -24
- data/lib/hecks/ports/access_control.rb +2 -2
- data/lib/hecks/ports/persistence/plugins/era/era_check.rb +3 -41
- data/lib/hecks/ports/persistence/plugins/era/lineage/coverage.rb +7 -7
- data/lib/hecks/ports/persistence/plugins/era/lineage/rewrite.rb +25 -2
- data/lib/hecks/ports/persistence/plugins/era/lineage/rules.rb +4 -4
- data/lib/hecks/ports/persistence/plugins/era/lineage.rb +17 -25
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/base_sql.rb +0 -12
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/domain_rename.rb +1 -1
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/era_store.rb +2 -22
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage/provisioning.rb +0 -1
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage.rb +9 -3
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/minter.rb +3 -29
- data/lib/hecks/ports/persistence/plugins/era/postgres_era/lineage_manager/refusals.rb +2 -26
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/layer_two.rb +6 -33
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/unfed_report.rb +3 -3
- data/lib/hecks/ports/persistence/plugins/era/translation/audit.rb +2 -4
- data/lib/hecks/ports/persistence/plugins/era/translation/expression_sql.rb +52 -0
- data/lib/hecks/ports/persistence/plugins/era/translation/rule_compiler.rb +23 -29
- data/lib/hecks/ports/persistence/plugins/era/translation/scaffold.rb +1 -1
- data/lib/hecks/ports/persistence/plugins/era/translation.rb +0 -1
- data/lib/hecks/ports/persistence/plugins/era.rb +3 -6
- data/lib/hecks/ports.rb +0 -1
- data/lib/hecks/projection_files.rb +3 -1
- data/lib/hecks/projections/deploy/templates/lambda/nat_comment_oauth.tmpl +1 -1
- data/lib/hecks/projections/glossary/entries.rb +10 -4
- data/lib/hecks/projections/glossary/groups.rb +42 -0
- data/lib/hecks/projections/glossary/html/page.rb +7 -2
- data/lib/hecks/projections/glossary/html/parser.rb +1 -1
- data/lib/hecks/projections/glossary/html/sections.rb +31 -11
- data/lib/hecks/projections/glossary/html.rb +1 -2
- data/lib/hecks/projections/glossary/markdown.rb +31 -28
- data/lib/hecks/projections/glossary/mermaid.rb +3 -0
- data/lib/hecks/projections/glossary/page.css +143 -153
- data/lib/hecks/projections/glossary/page.js +63 -3
- data/lib/hecks/projections/glossary/sentences/actions.rb +88 -0
- data/lib/hecks/projections/glossary/sentences/paths.rb +77 -0
- data/lib/hecks/projections/glossary/sentences/queries.rb +90 -0
- data/lib/hecks/projections/glossary/sentences/value_objects.rb +32 -5
- data/lib/hecks/projections/glossary/sentences.rb +13 -3
- data/lib/hecks/projections/glossary/slugs.rb +4 -1
- data/lib/hecks/projections/glossary.rb +2 -1
- data/lib/hecks/projections/plain_english.rb +97 -0
- data/lib/hecks/projections/rust_vocabulary/arguments.rb +2 -2
- data/lib/hecks/projections/rust_vocabulary/enum_body.rb +20 -25
- data/lib/hecks/projections/rust_vocabulary/tests.rb +2 -2
- data/lib/hecks/projections/rust_vocabulary.rb +14 -6
- data/lib/hecks/projections/site/cms_editor/color.rb +0 -6
- data/lib/hecks/projections/statements/actions.rb +99 -0
- data/lib/hecks/projections/statements/relationships.rb +86 -0
- data/lib/hecks/projections/statements.rb +15 -24
- data/lib/hecks/projector/exporter/adapters.rb +112 -0
- data/lib/hecks/projector/exporter/translations.rb +18 -35
- data/lib/hecks/projector/exporter/worlds.rb +103 -0
- data/lib/hecks/projector/exporter.rb +5 -1
- data/lib/hecks/quality_control/adapters/agent.rb +6 -7
- data/lib/hecks/quality_control/adapters/agent_profile.rb +16 -114
- data/lib/hecks/quality_control/cli/qa_mine_combinations.rb +1 -1
- data/lib/hecks/quality_control/quality_control.bluebook +51 -51
- data/lib/hecks/runtime/loader/boot_steps.rb +0 -20
- data/lib/hecks/runtime/outbox.rb +2 -9
- data/lib/hecks/runtime/port_operation_interpreter.rb +1 -9
- data/lib/hecks/runtime/remote_dispatcher.rb +2 -2
- data/lib/hecks/runtime/value.rb +13 -0
- data/lib/hecks/rust_build/project_rust/target_ir.rb +23 -4
- data/lib/hecks/rust_build/wasm.rb +0 -12
- data/lib/hecks/rust_build/write_if_changed.rb +12 -12
- data/lib/hecks/rust_format.rb +77 -0
- data/lib/hecks/site/bluebook/site.bluebook +5 -5
- data/lib/hecks/sme/bluebook/sme.bluebook +12 -12
- data/lib/hecks/tickets/bluebook/tickets.bluebook +3 -3
- data/lib/hecks/tools/fuzz_sweep/findings.rb +3 -9
- data/lib/hecks/tools/fuzz_sweep.rb +1 -3
- data/lib/hecks/tools/translation_audit/verdicts.rb +3 -28
- data/lib/hecks/tools/translation_audit.rb +8 -10
- data/lib/hecks/tools/translation_scaffold/reporting.rb +1 -1
- data/lib/hecks/version.rb +1 -1
- data/lib/hecks/vocabulary.rb +2 -1
- data/lib/hecks.rb +3 -0
- data/prebuilt/{58208399bada10b0db99928c48e38789288fc58f7b71a72b21bfa386680e32ed.marshal → 02c09c73b272c1fb5a9ae6d87bb5e5e529208e00f6b4b597dc2c0fd70a9c0964.marshal} +0 -0
- data/prebuilt/{2b59737fbdbd5f44edda0fddce2611f45d76087b3a7c782d1f1a17ea58c77948.marshal → bb84a835cf6a15136bad5ca03aa5bf93a5b92f5f72444618d3ef2412b987fb32.marshal} +0 -0
- data/prebuilt/verdicts-f1f10da14c8e8f01b4c9b7e3e2d74be8cd2bf4676364ed17fa16975d2a076d75.json +1 -0
- data/rust/Cargo.toml +40 -0
- data/rust/build/Cargo.toml +36 -0
- data/rust/build/clippy.toml +4 -0
- data/rust/build/src/adapters_pass.rs +196 -0
- data/rust/build/src/binding_pass.rs +54 -13
- data/rust/build/src/build_artifact.rs +23 -5
- data/rust/build/src/cargo_sync.rs +69 -26
- data/rust/build/src/lineage_pass.rs +101 -87
- data/rust/build/src/main.rs +11 -2
- data/rust/build/src/pipeline.rs +80 -19
- data/rust/build/src/reserved_names.rs +6 -50
- data/rust/build/src/resolve.rs +82 -35
- data/rust/build/src/rustfmt.rs +100 -0
- data/rust/build/src/seams_pass.rs +85 -16
- data/rust/build/src/subprocess.rs +30 -6
- data/rust/build/src/tmp.rs +5 -2
- data/rust/build/src/translation_pass.rs +72 -22
- data/rust/build/src/world_pass.rs +109 -0
- data/rust/clippy.toml +4 -0
- data/rust/codegen/Cargo.toml +36 -0
- data/rust/codegen/clippy.toml +4 -0
- data/rust/codegen/src/asks.rs +40 -14
- data/rust/codegen/src/attr.rs +2 -2
- data/rust/codegen/src/bridging.rs +676 -117
- data/rust/codegen/src/commands.rs +979 -373
- data/rust/codegen/src/constraints.rs +88 -25
- data/rust/codegen/src/dependency_planning.rs +128 -34
- data/rust/codegen/src/domain_generator.rs +300 -170
- data/rust/codegen/src/exemplar.rs +87 -32
- data/rust/codegen/src/expr_emitter.rs +54 -6
- data/rust/codegen/src/fielded.rs +193 -41
- data/rust/codegen/src/hecks_naming.rs +124 -16
- data/rust/codegen/src/hecks_naming_tests.rs +81 -0
- data/rust/codegen/src/json.rs +80 -44
- data/rust/codegen/src/json_codec.rs +585 -149
- data/rust/codegen/src/literal.rs +104 -138
- data/rust/codegen/src/main.rs +145 -52
- data/rust/codegen/src/manifest.rs +76 -14
- data/rust/codegen/src/mutations.rs +1212 -239
- data/rust/codegen/src/naming.rs +111 -60
- data/rust/codegen/src/optional_pass.rs +90 -28
- data/rust/codegen/src/ports.rs +5 -4
- data/rust/codegen/src/prelude.rs +139 -49
- data/rust/codegen/src/queries.rs +601 -226
- data/rust/codegen/src/reactions.rs +268 -74
- data/rust/codegen/src/read_models.rs +606 -205
- data/rust/codegen/src/reference_specs.rs +16 -3
- data/rust/codegen/src/registry.rs +128 -79
- data/rust/codegen/src/reserved_names.rs +6 -50
- data/rust/codegen/src/shared.rs +71 -22
- data/rust/codegen/src/sidecars.rs +15 -5
- data/rust/codegen/src/skip_reason.rs +8 -2
- data/rust/codegen/src/types.rs +306 -108
- data/rust/host/Cargo.lock +1 -0
- data/rust/host/Cargo.toml +40 -4
- data/rust/host/HECKS_RELEASE +1 -1
- data/rust/host/clippy.toml +4 -0
- data/rust/host/src/api.rs +698 -218
- data/rust/host/src/auth.rs +491 -214
- data/rust/host/src/b64.rs +91 -0
- data/rust/host/src/bin/expr_harness.rs +6 -2
- data/rust/host/src/bin/lineage_harness.rs +47 -11
- data/rust/host/src/bin/mint_harness.rs +70 -37
- data/rust/host/src/bin/validate_harness.rs +16 -8
- data/rust/host/src/boot.rs +144 -68
- data/rust/host/src/boundary_fuzz/api.rs +130 -32
- data/rust/host/src/boundary_fuzz/auth.rs +108 -23
- data/rust/host/src/boundary_fuzz/expr_json.rs +85 -11
- data/rust/host/src/boundary_fuzz/ir.rs +164 -12
- data/rust/host/src/boundary_fuzz/server.rs +283 -36
- data/rust/host/src/boundary_fuzz/web.rs +56 -8
- data/rust/host/src/checkout.rs +78 -32
- data/rust/host/src/clock.rs +8 -0
- data/rust/host/src/commerce_ir.rs +333 -95
- data/rust/host/src/crypto.rs +33 -0
- data/rust/host/src/dispatch.rs +990 -331
- data/rust/host/src/expr_json.rs +1021 -273
- data/rust/host/src/extension.rs +24 -4
- data/rust/host/src/field_hints.rs +11 -7
- data/rust/host/src/fuzz_support.rs +85 -13
- data/rust/host/src/host.rs +100 -0
- data/rust/host/src/http.rs +22 -0
- data/rust/host/src/ir.rs +326 -16
- data/rust/host/src/journal.rs +277 -176
- data/rust/host/src/lambda_client.rs +219 -53
- data/rust/host/src/lib.rs +16 -4
- data/rust/host/src/log.rs +62 -11
- data/rust/host/src/mint.rs +1153 -326
- data/rust/host/src/needs.rs +185 -44
- data/rust/host/src/payments/keystore.rs +197 -45
- data/rust/host/src/payments/roles.rs +191 -0
- data/rust/host/src/payments/tests.rs +1445 -275
- data/rust/host/src/payments.rs +409 -121
- data/rust/host/src/platform_signin/attack_tests.rs +5 -5
- data/rust/host/src/platform_signin/config.rs +11 -11
- data/rust/host/src/platform_signin/cookie.rs +2 -2
- data/rust/host/src/platform_signin/extension.rs +2 -1
- data/rust/host/src/platform_signin/handler.rs +9 -8
- data/rust/host/src/platform_signin/jti.rs +4 -2
- data/rust/host/src/platform_signin/jwks.rs +2 -1
- data/rust/host/src/platform_signin/jws.rs +2 -37
- data/rust/host/src/platform_signin/known_answer_tests.rs +5 -1
- data/rust/host/src/platform_signin/mode_tests.rs +5 -3
- data/rust/host/src/platform_signin/pages.rs +20 -20
- data/rust/host/src/platform_signin/session.rs +8 -1
- data/rust/host/src/platform_signin/settings.rs +6 -6
- data/rust/host/src/platform_signin/strict_json.rs +12 -9
- data/rust/host/src/platform_signin/verify.rs +41 -41
- data/rust/host/src/platform_signin/wiring_support.rs +13 -18
- data/rust/host/src/presentation.rs +207 -63
- data/rust/host/src/presentation_write.rs +502 -187
- data/rust/host/src/query_step.rs +69 -18
- data/rust/host/src/rate_limit.rs +541 -142
- data/rust/host/src/reference_transform.rs +77 -25
- data/rust/host/src/reference_validate.rs +443 -104
- data/rust/host/src/resend.rs +190 -55
- data/rust/host/src/secrets.rs +116 -21
- data/rust/host/src/server.rs +483 -104
- data/rust/host/src/storage_shape.rs +88 -21
- data/rust/host/src/test_pg.rs +17 -7
- data/rust/host/src/ui_schema.rs +495 -207
- data/rust/host/src/wasm_runner.rs +21 -6
- data/rust/host/src/web/commerce.rs +101 -23
- data/rust/host/src/web/newsletter/cooldown.rs +10 -3
- data/rust/host/src/web/newsletter/template.rs +26 -7
- data/rust/host/src/web/newsletter/tests.rs +112 -23
- data/rust/host/src/web/newsletter.rs +209 -59
- data/rust/host/src/web/newsletter_send.rs +251 -79
- data/rust/host/src/web/registration_receipt/tests.rs +16 -4
- data/rust/host/src/web/registration_receipt.rs +100 -24
- data/rust/host/src/web/registrations.rs +1384 -332
- data/rust/host/src/web/resend_webhook.rs +138 -80
- data/rust/host/src/web.rs +2416 -508
- data/rust/lsp/Cargo.toml +36 -0
- data/rust/lsp/clippy.toml +4 -0
- data/rust/lsp/src/json.rs +29 -22
- data/rust/lsp/src/main.rs +81 -31
- data/rust/lsp/src/outline.rs +23 -7
- data/rust/lsp/src/rpc.rs +17 -4
- data/rust/parser/Cargo.toml +36 -0
- data/rust/parser/clippy.toml +4 -0
- data/rust/parser/src/build/closed_sets.rs +6 -1
- data/rust/parser/src/build/identity.rs +4 -3
- data/rust/parser/src/build/mod.rs +1 -0
- data/rust/parser/src/build/named_pattern.rs +26 -0
- data/rust/parser/src/build/naming.rs +2 -80
- data/rust/parser/src/build/pattern_subset.rs +6 -8
- data/rust/parser/src/build/query_derive.rs +3 -1
- data/rust/parser/src/build/query_inference.rs +14 -5
- data/rust/parser/src/build/read_model.rs +4 -1
- data/rust/parser/src/build/references.rs +4 -3
- data/rust/parser/src/canonical.rs +34 -15
- data/rust/parser/src/emit.rs +187 -105
- data/rust/parser/src/expr/ast_json.rs +134 -42
- data/rust/parser/src/expr/evaluator.rs +27 -9
- data/rust/parser/src/expr/mod.rs +54 -13
- data/rust/parser/src/expr/resolver.rs +299 -92
- data/rust/parser/src/ir.rs +35 -3
- data/rust/parser/src/keywords.rs +7168 -510
- data/rust/parser/src/lex.rs +11 -25
- data/rust/parser/src/lib.rs +1 -0
- data/rust/parser/src/main.rs +65 -6
- data/rust/parser/src/parse/adapter.rs +157 -0
- data/rust/parser/src/parse/aggregate.rs +19 -10
- data/rust/parser/src/parse/chapter.rs +16 -17
- data/rust/parser/src/parse/command.rs +35 -16
- data/rust/parser/src/parse/domain_port.rs +4 -7
- data/rust/parser/src/parse/entity.rs +21 -11
- data/rust/parser/src/parse/hecksagon.rs +10 -4
- data/rust/parser/src/parse/lifecycle.rs +9 -5
- data/rust/parser/src/parse/mod.rs +43 -91
- data/rust/parser/src/parse/needs.rs +21 -12
- data/rust/parser/src/parse/policy.rs +2 -2
- data/rust/parser/src/parse/process_manager.rs +9 -11
- data/rust/parser/src/parse/query.rs +8 -4
- data/rust/parser/src/parse/read_model.rs +57 -16
- data/rust/parser/src/parse/value_object.rs +7 -2
- data/rust/parser/src/parse/world.rs +322 -0
- data/rust/parser/src/ruby_value.rs +7 -6
- data/rust/src/exemplar/json.rs +4 -4
- data/rust/src/exemplar/mutations.rs +18 -0
- data/rust/src/exemplar/read_models.rs +1 -10
- data/rust/src/kernel/attribute_shapes/composite.rs +54 -14
- data/rust/src/kernel/attribute_shapes/list.rs +2 -2
- data/rust/src/kernel/attribute_shapes/mod.rs +8 -8
- data/rust/src/kernel/attribute_shapes/scalar.rs +2 -2
- data/rust/src/kernel/cli.rs +229 -112
- data/rust/src/kernel/dispatch.rs +323 -115
- data/rust/src/kernel/dispatch_guard_tests.rs +327 -65
- data/rust/src/kernel/expr.rs +203 -86
- data/rust/src/kernel/expression_operators/arithmetic.rs +138 -25
- data/rust/src/kernel/expression_operators/comparison.rs +87 -2
- data/rust/src/kernel/expression_operators/enumeration.rs +106 -22
- data/rust/src/kernel/expression_operators/logical.rs +9 -3
- data/rust/src/kernel/expression_operators/membership.rs +3 -1
- data/rust/src/kernel/expression_operators/mod.rs +34 -21
- data/rust/src/kernel/expression_operators/pattern_match.rs +46 -11
- data/rust/src/kernel/expression_operators/positional.rs +84 -30
- data/rust/src/kernel/expression_operators/presence.rs +52 -13
- data/rust/src/kernel/expression_operators/sign_test.rs +3 -1
- data/rust/src/kernel/expression_operators/sized.rs +24 -8
- data/rust/src/kernel/expression_operators/text.rs +120 -27
- data/rust/src/kernel/expression_operators/to_string.rs +10 -4
- data/rust/src/kernel/json.rs +230 -148
- data/rust/src/kernel/mod.rs +46 -33
- data/rust/src/kernel/named_query.rs +63 -15
- data/rust/src/kernel/needs.rs +112 -25
- data/rust/src/kernel/orchestrate.rs +980 -581
- data/rust/src/kernel/orchestrate_guard_tests.rs +538 -140
- data/rust/src/kernel/pattern.rs +107 -34
- data/rust/src/kernel/query_comparators.rs +118 -41
- data/rust/src/kernel/query_ordering.rs +13 -5
- data/rust/src/kernel/read_model.rs +479 -181
- data/rust/src/kernel/reference_lookup.rs +122 -26
- data/rust/src/kernel/repository.rs +293 -66
- data/rust/src/kernel/routing.rs +58 -42
- data/rust/src/kernel/ruby_float.rs +139 -0
- data/rust/src/kernel/vocab/aggregate_dispatch_order.rs +57 -57
- data/rust/src/kernel/vocab/entity_dispatch_order.rs +54 -54
- data/rust/src/kernel/vocab/field_hint.rs +19 -25
- data/rust/src/kernel/vocab/mod.rs +6 -6
- data/rust/src/kernel/vocab/query_comparator.rs +23 -24
- data/rust/src/kernel/vocab/refusal_template.rs +501 -297
- data/rust/src/lib.rs +50 -0
- data/rust/src/main.rs +4 -1
- data/rust/web/Cargo.toml +36 -0
- data/rust/web/clippy.toml +4 -0
- metadata +85 -15
- data/examples/pizzas/bluebook/hecksagon/mock_stripe_payment_adapter.rb +0 -36
- data/lib/hecks/adapters/driven/google_authentication.adapter +0 -3
- data/lib/hecks/adapters/driven/google_authentication.rb +0 -99
- data/lib/hecks/adapters/driven/mock_stripe_adapter.adapter +0 -3
- data/lib/hecks/adapters/driven/mock_stripe_adapter.rb +0 -32
- data/lib/hecks/ports/authentication.port +0 -6
- data/lib/hecks/ports/authentication.rb +0 -67
- data/lib/hecks/ports/persistence/plugins/era/translation/approval_file.rb +0 -255
- data/lib/hecks/ports/persistence/plugins/era/translation/audit/approval_digest.rb +0 -22
- data/prebuilt/verdicts-48318ca172edd21443b1ad02801c697fff100b746e828f09db987647641a5df2.json +0 -1
- data/rust/host/src/approval.rs +0 -652
data/rust/src/lib.rs
CHANGED
|
@@ -1,8 +1,58 @@
|
|
|
1
1
|
//! Library face of the crate, shared by the native/WASI binary and the rust/web browser cdylib.
|
|
2
2
|
//! Std-only, zero Cargo dependencies (ADR 0012); wasm-bindgen lives in rust/web.
|
|
3
|
+
|
|
4
|
+
// Generated code keeps one shape for every domain, so a domain with no arms still has its `match`,
|
|
5
|
+
// a store still has its `new()`, a chapter may hold an aggregate named like itself
|
|
6
|
+
// (identity::identity), and every command gets the same signature whether or not it uses all of
|
|
7
|
+
// it. Clippy's complaints about that shape are not bugs to fix per file; the generators fix the
|
|
8
|
+
// ones that are real (see the emitters in rust/codegen/src).
|
|
9
|
+
#[allow(
|
|
10
|
+
clippy::match_single_binding,
|
|
11
|
+
clippy::match_like_matches_macro,
|
|
12
|
+
clippy::new_without_default,
|
|
13
|
+
clippy::module_inception,
|
|
14
|
+
clippy::needless_pass_by_value,
|
|
15
|
+
clippy::needless_pass_by_ref_mut,
|
|
16
|
+
clippy::unused_self,
|
|
17
|
+
clippy::unnecessary_wraps,
|
|
18
|
+
clippy::trivially_copy_pass_by_ref,
|
|
19
|
+
clippy::no_effect_underscore_binding,
|
|
20
|
+
clippy::missing_const_for_fn,
|
|
21
|
+
clippy::derive_partial_eq_without_eq,
|
|
22
|
+
clippy::single_match_else,
|
|
23
|
+
clippy::needless_continue,
|
|
24
|
+
clippy::implicit_clone,
|
|
25
|
+
clippy::assigning_clones,
|
|
26
|
+
clippy::doc_link_with_quotes,
|
|
27
|
+
clippy::redundant_closure_for_method_calls
|
|
28
|
+
)]
|
|
3
29
|
pub mod generated;
|
|
4
30
|
pub mod kernel;
|
|
5
31
|
|
|
6
32
|
// Test-only: rust/codegen/src/exemplar.rs slices shapes out of this; never in a release build.
|
|
33
|
+
// The files are templates with placeholder bodies, named after their placeholders, so they are
|
|
34
|
+
// neither formatted nor linted as code.
|
|
7
35
|
#[cfg(test)]
|
|
36
|
+
#[rustfmt::skip]
|
|
37
|
+
#[allow(
|
|
38
|
+
clippy::match_single_binding,
|
|
39
|
+
clippy::match_like_matches_macro,
|
|
40
|
+
clippy::new_without_default,
|
|
41
|
+
clippy::ptr_arg,
|
|
42
|
+
clippy::borrow_deref_ref,
|
|
43
|
+
clippy::needless_pass_by_value,
|
|
44
|
+
clippy::needless_pass_by_ref_mut,
|
|
45
|
+
clippy::unused_self,
|
|
46
|
+
clippy::unnecessary_wraps,
|
|
47
|
+
clippy::trivially_copy_pass_by_ref,
|
|
48
|
+
clippy::no_effect_underscore_binding,
|
|
49
|
+
clippy::missing_const_for_fn,
|
|
50
|
+
clippy::derive_partial_eq_without_eq,
|
|
51
|
+
clippy::use_self,
|
|
52
|
+
clippy::uninlined_format_args,
|
|
53
|
+
clippy::redundant_closure_for_method_calls,
|
|
54
|
+
clippy::map_unwrap_or,
|
|
55
|
+
clippy::doc_link_with_quotes,
|
|
56
|
+
unused_mut
|
|
57
|
+
)]
|
|
8
58
|
pub mod exemplar;
|
data/rust/src/main.rs
CHANGED
|
@@ -11,6 +11,9 @@ fn main() {
|
|
|
11
11
|
return;
|
|
12
12
|
}
|
|
13
13
|
let mut input = String::new();
|
|
14
|
-
std::io::stdin().read_to_string(&mut input)
|
|
14
|
+
if let Err(error) = std::io::stdin().read_to_string(&mut input) {
|
|
15
|
+
eprintln!("failed to read stdin: {error}");
|
|
16
|
+
std::process::exit(1);
|
|
17
|
+
}
|
|
15
18
|
println!("{}", rust::kernel::cli::run(&input));
|
|
16
19
|
}
|
data/rust/web/Cargo.toml
CHANGED
|
@@ -16,3 +16,39 @@ crate-type = ["cdylib"]
|
|
|
16
16
|
[dependencies]
|
|
17
17
|
rust = { path = ".." }
|
|
18
18
|
wasm-bindgen = "=0.2.126"
|
|
19
|
+
|
|
20
|
+
# Clippy beyond its defaults: pedantic and nursery, plus the restriction lints that keep a panic
|
|
21
|
+
# out of library code. `hecks gate_run.gate stage=ci only=rust_clippy` makes each of these an error.
|
|
22
|
+
# The same table is in every crate's Cargo.toml; change them together.
|
|
23
|
+
[lints.clippy]
|
|
24
|
+
pedantic = { level = "warn", priority = -1 }
|
|
25
|
+
nursery = { level = "warn", priority = -1 }
|
|
26
|
+
unwrap_used = "warn"
|
|
27
|
+
expect_used = "warn"
|
|
28
|
+
panic = "warn"
|
|
29
|
+
dbg_macro = "warn"
|
|
30
|
+
todo = "warn"
|
|
31
|
+
unimplemented = "warn"
|
|
32
|
+
# Lints that ask for prose or an attribute on every item rather than for better code.
|
|
33
|
+
missing_errors_doc = "allow"
|
|
34
|
+
missing_panics_doc = "allow"
|
|
35
|
+
must_use_candidate = "allow"
|
|
36
|
+
return_self_not_must_use = "allow"
|
|
37
|
+
module_name_repetitions = "allow"
|
|
38
|
+
too_many_lines = "allow"
|
|
39
|
+
too_long_first_doc_paragraph = "allow"
|
|
40
|
+
doc_markdown = "allow"
|
|
41
|
+
# Numeric conversions here are deliberate: JSON numbers are f64 and ids are small.
|
|
42
|
+
cast_possible_truncation = "allow"
|
|
43
|
+
cast_possible_wrap = "allow"
|
|
44
|
+
cast_precision_loss = "allow"
|
|
45
|
+
cast_sign_loss = "allow"
|
|
46
|
+
# Naming heuristics that fire on ordinary short names.
|
|
47
|
+
similar_names = "allow"
|
|
48
|
+
many_single_char_names = "allow"
|
|
49
|
+
struct_field_names = "allow"
|
|
50
|
+
# Heuristics that cost more clarity than they buy here.
|
|
51
|
+
redundant_pub_crate = "allow"
|
|
52
|
+
future_not_send = "allow"
|
|
53
|
+
significant_drop_tightening = "allow"
|
|
54
|
+
match_same_arms = "allow"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hecks
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 4.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chris Young
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-10-
|
|
11
|
+
date: 2026-10-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: prism
|
|
@@ -35,12 +35,15 @@ executables:
|
|
|
35
35
|
extensions: []
|
|
36
36
|
extra_rdoc_files: []
|
|
37
37
|
files:
|
|
38
|
-
- examples/pizzas/
|
|
38
|
+
- examples/pizzas/adapters/fake_processor.rb
|
|
39
|
+
- examples/pizzas/adapters/payment_signature.rb
|
|
40
|
+
- examples/pizzas/adapters/payment_webhook.rb
|
|
39
41
|
- examples/pizzas/bluebook/pizzas.behaviors
|
|
40
42
|
- examples/pizzas/bluebook/pizzas.bluebook
|
|
41
43
|
- examples/pizzas/bluebook/pizzas.hecksagon
|
|
42
44
|
- examples/pizzas/bluebook/pizzas.world
|
|
43
45
|
- examples/pizzas/bluebook/translations/2-77625c.bluebook
|
|
46
|
+
- examples/pizzas/config.ru
|
|
44
47
|
- examples/pizzas/oidc.json
|
|
45
48
|
- examples/pizzas/pizzas_behaviors.hecksagon
|
|
46
49
|
- exe/hecks
|
|
@@ -54,8 +57,6 @@ files:
|
|
|
54
57
|
- lib/hecks/adapters/driven/d1/connection.rb
|
|
55
58
|
- lib/hecks/adapters/driven/folder.adapter
|
|
56
59
|
- lib/hecks/adapters/driven/folder.rb
|
|
57
|
-
- lib/hecks/adapters/driven/google_authentication.adapter
|
|
58
|
-
- lib/hecks/adapters/driven/google_authentication.rb
|
|
59
60
|
- lib/hecks/adapters/driven/governance_authorization.adapter
|
|
60
61
|
- lib/hecks/adapters/driven/governance_authorization.rb
|
|
61
62
|
- lib/hecks/adapters/driven/heki.adapter
|
|
@@ -79,8 +80,6 @@ files:
|
|
|
79
80
|
- lib/hecks/adapters/driven/memory/outbox_rows.rb
|
|
80
81
|
- lib/hecks/adapters/driven/memory/shared_elements.rb
|
|
81
82
|
- lib/hecks/adapters/driven/memory/shared_elements/values.rb
|
|
82
|
-
- lib/hecks/adapters/driven/mock_stripe_adapter.adapter
|
|
83
|
-
- lib/hecks/adapters/driven/mock_stripe_adapter.rb
|
|
84
83
|
- lib/hecks/adapters/driven/postgres.adapter
|
|
85
84
|
- lib/hecks/adapters/driven/postgres.rb
|
|
86
85
|
- lib/hecks/adapters/driven/postgres/codec.rb
|
|
@@ -242,6 +241,7 @@ files:
|
|
|
242
241
|
- lib/hecks/bluebook/dsl/command_builder/owner.rb
|
|
243
242
|
- lib/hecks/bluebook/dsl/command_builder/rules.rb
|
|
244
243
|
- lib/hecks/bluebook/dsl/const_shim.rb
|
|
244
|
+
- lib/hecks/bluebook/dsl/derivation_words.rb
|
|
245
245
|
- lib/hecks/bluebook/dsl/domain_port_builder.rb
|
|
246
246
|
- lib/hecks/bluebook/dsl/entity_builder.rb
|
|
247
247
|
- lib/hecks/bluebook/dsl/entity_builder/rules.rb
|
|
@@ -322,6 +322,7 @@ files:
|
|
|
322
322
|
- lib/hecks/bluebook/model_check/reference_checks.rb
|
|
323
323
|
- lib/hecks/bluebook/model_check/saga_checks.rb
|
|
324
324
|
- lib/hecks/bluebook/model_check/verbs.rb
|
|
325
|
+
- lib/hecks/bluebook/named_pattern.rb
|
|
325
326
|
- lib/hecks/bluebook/pattern_subset.rb
|
|
326
327
|
- lib/hecks/bluebook/pattern_subset/refusals.rb
|
|
327
328
|
- lib/hecks/bluebook/pattern_subset/scan.rb
|
|
@@ -336,6 +337,10 @@ files:
|
|
|
336
337
|
- lib/hecks/bluebook/smoke_test.rb
|
|
337
338
|
- lib/hecks/bluebook/synthesizer.rb
|
|
338
339
|
- lib/hecks/bluebook/translation.rb
|
|
340
|
+
- lib/hecks/bluebook/translation_expression.rb
|
|
341
|
+
- lib/hecks/bluebook/translation_expression/evaluator.rb
|
|
342
|
+
- lib/hecks/bluebook/translation_expression/parser.rb
|
|
343
|
+
- lib/hecks/bluebook/translation_plan.rb
|
|
339
344
|
- lib/hecks/bluebook/value_object.rb
|
|
340
345
|
- lib/hecks/cache_dir.rb
|
|
341
346
|
- lib/hecks/canonical_json.rb
|
|
@@ -405,11 +410,45 @@ files:
|
|
|
405
410
|
- lib/hecks/codemod.rb
|
|
406
411
|
- lib/hecks/codemod/runner.rb
|
|
407
412
|
- lib/hecks/codemod/sweep.rb
|
|
413
|
+
- lib/hecks/composer.rb
|
|
414
|
+
- lib/hecks/composer/adapters/claude_composer.adapter
|
|
415
|
+
- lib/hecks/composer/adapters/claude_composer.rb
|
|
416
|
+
- lib/hecks/composer/adapters/fake_agent.adapter
|
|
417
|
+
- lib/hecks/composer/adapters/fake_agent.rb
|
|
418
|
+
- lib/hecks/composer/adapters/jev.adapter
|
|
419
|
+
- lib/hecks/composer/adapters/jev.rb
|
|
420
|
+
- lib/hecks/composer/agent.rb
|
|
421
|
+
- lib/hecks/composer/assistant.rb
|
|
422
|
+
- lib/hecks/composer/behavior_run.rb
|
|
423
|
+
- lib/hecks/composer/bluebook/composer.bluebook
|
|
424
|
+
- lib/hecks/composer/bluebook/composer.hecksagon
|
|
425
|
+
- lib/hecks/composer/board.rb
|
|
426
|
+
- lib/hecks/composer/board_edit.rb
|
|
427
|
+
- lib/hecks/composer/board_edit/command_text.rb
|
|
428
|
+
- lib/hecks/composer/board_edit/source.rb
|
|
429
|
+
- lib/hecks/composer/check.rb
|
|
430
|
+
- lib/hecks/composer/domains.rb
|
|
431
|
+
- lib/hecks/composer/jobs.rb
|
|
432
|
+
- lib/hecks/composer/layout.rb
|
|
433
|
+
- lib/hecks/composer/live.rb
|
|
434
|
+
- lib/hecks/composer/outline.rb
|
|
435
|
+
- lib/hecks/composer/page.html
|
|
436
|
+
- lib/hecks/composer/panels.rb
|
|
437
|
+
- lib/hecks/composer/parse.rb
|
|
438
|
+
- lib/hecks/composer/plain.rb
|
|
439
|
+
- lib/hecks/composer/ports/composer_agent.port
|
|
440
|
+
- lib/hecks/composer/session.rb
|
|
441
|
+
- lib/hecks/composer/toolbox.rb
|
|
442
|
+
- lib/hecks/composer/web.rb
|
|
443
|
+
- lib/hecks/composer/workbench.rb
|
|
444
|
+
- lib/hecks/composer/workspace.rb
|
|
408
445
|
- lib/hecks/construct.rb
|
|
409
446
|
- lib/hecks/corpus.rb
|
|
447
|
+
- lib/hecks/corpus/adapters.rb
|
|
410
448
|
- lib/hecks/corpus/routes.rb
|
|
411
449
|
- lib/hecks/corpus/rust.rb
|
|
412
450
|
- lib/hecks/corpus/sources.rb
|
|
451
|
+
- lib/hecks/corpus/worlds.rb
|
|
413
452
|
- lib/hecks/deploy/bluebook/deploy.bluebook
|
|
414
453
|
- lib/hecks/deploy/bluebook/deploy.hecksagon
|
|
415
454
|
- lib/hecks/deploy/oidc.json
|
|
@@ -452,6 +491,7 @@ files:
|
|
|
452
491
|
- lib/hecks/forms/record_renderer.rb
|
|
453
492
|
- lib/hecks/forms/record_table.rb
|
|
454
493
|
- lib/hecks/forms/reference_options.rb
|
|
494
|
+
- lib/hecks/forms/rule_words.rb
|
|
455
495
|
- lib/hecks/forms/text_shape.rb
|
|
456
496
|
- lib/hecks/forms/value_object_shape.rb
|
|
457
497
|
- lib/hecks/fqn.rb
|
|
@@ -592,6 +632,7 @@ files:
|
|
|
592
632
|
- lib/hecks/grammar/translation.oidc.json
|
|
593
633
|
- lib/hecks/hecks/adapters/bluebook_report.rb
|
|
594
634
|
- lib/hecks/hecks/adapters/codebase/codemods.rb
|
|
635
|
+
- lib/hecks/hecks/adapters/codebase/composing.rb
|
|
595
636
|
- lib/hecks/hecks/adapters/codebase/conformance.rb
|
|
596
637
|
- lib/hecks/hecks/adapters/codebase/corpus_tasks.rb
|
|
597
638
|
- lib/hecks/hecks/adapters/codebase/gate.rb
|
|
@@ -690,6 +731,7 @@ files:
|
|
|
690
731
|
- lib/hecks/hecks/adapters/world_clearing.rb
|
|
691
732
|
- lib/hecks/hecks/codebase.behaviors
|
|
692
733
|
- lib/hecks/hecks/codebase.bluebook
|
|
734
|
+
- lib/hecks/hecks/composer.behaviors
|
|
693
735
|
- lib/hecks/hecks/context_map.hecksagon
|
|
694
736
|
- lib/hecks/hecks/custodian.behaviors
|
|
695
737
|
- lib/hecks/hecks/custodian.bluebook
|
|
@@ -748,8 +790,6 @@ files:
|
|
|
748
790
|
- lib/hecks/ports/agent.port
|
|
749
791
|
- lib/hecks/ports/agent.rb
|
|
750
792
|
- lib/hecks/ports/agent/answers.rb
|
|
751
|
-
- lib/hecks/ports/authentication.port
|
|
752
|
-
- lib/hecks/ports/authentication.rb
|
|
753
793
|
- lib/hecks/ports/authorization.port
|
|
754
794
|
- lib/hecks/ports/authorization.rb
|
|
755
795
|
- lib/hecks/ports/clock.port
|
|
@@ -819,12 +859,11 @@ files:
|
|
|
819
859
|
- lib/hecks/ports/persistence/plugins/era/postgres_era/sagas.rb
|
|
820
860
|
- lib/hecks/ports/persistence/plugins/era/storage_shape.rb
|
|
821
861
|
- lib/hecks/ports/persistence/plugins/era/translation.rb
|
|
822
|
-
- lib/hecks/ports/persistence/plugins/era/translation/approval_file.rb
|
|
823
862
|
- lib/hecks/ports/persistence/plugins/era/translation/audit.rb
|
|
824
|
-
- lib/hecks/ports/persistence/plugins/era/translation/audit/approval_digest.rb
|
|
825
863
|
- lib/hecks/ports/persistence/plugins/era/translation/audit/layer_one.rb
|
|
826
864
|
- lib/hecks/ports/persistence/plugins/era/translation/audit/layer_two.rb
|
|
827
865
|
- lib/hecks/ports/persistence/plugins/era/translation/audit/unfed_report.rb
|
|
866
|
+
- lib/hecks/ports/persistence/plugins/era/translation/expression_sql.rb
|
|
828
867
|
- lib/hecks/ports/persistence/plugins/era/translation/reattest.rb
|
|
829
868
|
- lib/hecks/ports/persistence/plugins/era/translation/rule_compiler.rb
|
|
830
869
|
- lib/hecks/ports/persistence/plugins/era/translation/scaffold.rb
|
|
@@ -1063,6 +1102,7 @@ files:
|
|
|
1063
1102
|
- lib/hecks/projections/diagrams/structure.rb
|
|
1064
1103
|
- lib/hecks/projections/glossary.rb
|
|
1065
1104
|
- lib/hecks/projections/glossary/entries.rb
|
|
1105
|
+
- lib/hecks/projections/glossary/groups.rb
|
|
1066
1106
|
- lib/hecks/projections/glossary/html.rb
|
|
1067
1107
|
- lib/hecks/projections/glossary/html/page.rb
|
|
1068
1108
|
- lib/hecks/projections/glossary/html/parser.rb
|
|
@@ -1075,6 +1115,9 @@ files:
|
|
|
1075
1115
|
- lib/hecks/projections/glossary/sections.rb
|
|
1076
1116
|
- lib/hecks/projections/glossary/sensitivity.rb
|
|
1077
1117
|
- lib/hecks/projections/glossary/sentences.rb
|
|
1118
|
+
- lib/hecks/projections/glossary/sentences/actions.rb
|
|
1119
|
+
- lib/hecks/projections/glossary/sentences/paths.rb
|
|
1120
|
+
- lib/hecks/projections/glossary/sentences/queries.rb
|
|
1078
1121
|
- lib/hecks/projections/glossary/sentences/value_objects.rb
|
|
1079
1122
|
- lib/hecks/projections/glossary/slugs.rb
|
|
1080
1123
|
- lib/hecks/projections/ir.rb
|
|
@@ -1082,6 +1125,7 @@ files:
|
|
|
1082
1125
|
- lib/hecks/projections/model/deviations.rb
|
|
1083
1126
|
- lib/hecks/projections/oidc.rb
|
|
1084
1127
|
- lib/hecks/projections/parser_table.rb
|
|
1128
|
+
- lib/hecks/projections/plain_english.rb
|
|
1085
1129
|
- lib/hecks/projections/reference.rb
|
|
1086
1130
|
- lib/hecks/projections/rust_vocabulary.rb
|
|
1087
1131
|
- lib/hecks/projections/rust_vocabulary/arguments.rb
|
|
@@ -1230,6 +1274,8 @@ files:
|
|
|
1230
1274
|
- lib/hecks/projections/site/table/row_builder.rb
|
|
1231
1275
|
- lib/hecks/projections/site/table/row_defaults.rb
|
|
1232
1276
|
- lib/hecks/projections/statements.rb
|
|
1277
|
+
- lib/hecks/projections/statements/actions.rb
|
|
1278
|
+
- lib/hecks/projections/statements/relationships.rb
|
|
1233
1279
|
- lib/hecks/projections/vocabulary.rb
|
|
1234
1280
|
- lib/hecks/projector.rb
|
|
1235
1281
|
- lib/hecks/projector/cli_audience.rb
|
|
@@ -1246,9 +1292,11 @@ files:
|
|
|
1246
1292
|
- lib/hecks/projector/docs_projector/behaviour.rb
|
|
1247
1293
|
- lib/hecks/projector/docs_projector/closing.rb
|
|
1248
1294
|
- lib/hecks/projector/exporter.rb
|
|
1295
|
+
- lib/hecks/projector/exporter/adapters.rb
|
|
1249
1296
|
- lib/hecks/projector/exporter/bindings.rb
|
|
1250
1297
|
- lib/hecks/projector/exporter/capability_values.rb
|
|
1251
1298
|
- lib/hecks/projector/exporter/translations.rb
|
|
1299
|
+
- lib/hecks/projector/exporter/worlds.rb
|
|
1252
1300
|
- lib/hecks/projector/ir_projector.rb
|
|
1253
1301
|
- lib/hecks/projector/narrate_projector.rb
|
|
1254
1302
|
- lib/hecks/projector/narrate_projector/commands.rb
|
|
@@ -1517,6 +1565,7 @@ files:
|
|
|
1517
1565
|
- lib/hecks/rust_build/wasm.rb
|
|
1518
1566
|
- lib/hecks/rust_build/wasm_browser.rb
|
|
1519
1567
|
- lib/hecks/rust_build/write_if_changed.rb
|
|
1568
|
+
- lib/hecks/rust_format.rb
|
|
1520
1569
|
- lib/hecks/served_options.rb
|
|
1521
1570
|
- lib/hecks/site/bluebook/site.bluebook
|
|
1522
1571
|
- lib/hecks/site/bluebook/site.hecksagon
|
|
@@ -1636,9 +1685,9 @@ files:
|
|
|
1636
1685
|
- lib/rubocop/cop/hecks/symbol_string_key_mix.rb
|
|
1637
1686
|
- lib/rubocop/cop/hecks/thread_shared_ivar_mutation.rb
|
|
1638
1687
|
- lib/rubocop/cop/hecks/untyped_raise.rb
|
|
1639
|
-
- prebuilt/
|
|
1640
|
-
- prebuilt/
|
|
1641
|
-
- prebuilt/verdicts-
|
|
1688
|
+
- prebuilt/02c09c73b272c1fb5a9ae6d87bb5e5e529208e00f6b4b597dc2c0fd70a9c0964.marshal
|
|
1689
|
+
- prebuilt/bb84a835cf6a15136bad5ca03aa5bf93a5b92f5f72444618d3ef2412b987fb32.marshal
|
|
1690
|
+
- prebuilt/verdicts-f1f10da14c8e8f01b4c9b7e3e2d74be8cd2bf4676364ed17fa16975d2a076d75.json
|
|
1642
1691
|
- qa/settings.yml
|
|
1643
1692
|
- rust/.cargo/config.toml
|
|
1644
1693
|
- rust/.cargo/mutants.toml
|
|
@@ -1649,6 +1698,8 @@ files:
|
|
|
1649
1698
|
- rust/build/.gitignore
|
|
1650
1699
|
- rust/build/Cargo.lock
|
|
1651
1700
|
- rust/build/Cargo.toml
|
|
1701
|
+
- rust/build/clippy.toml
|
|
1702
|
+
- rust/build/src/adapters_pass.rs
|
|
1652
1703
|
- rust/build/src/binding_pass.rs
|
|
1653
1704
|
- rust/build/src/build_artifact.rs
|
|
1654
1705
|
- rust/build/src/cargo_sync.rs
|
|
@@ -1658,14 +1709,18 @@ files:
|
|
|
1658
1709
|
- rust/build/src/reserved_names.rs
|
|
1659
1710
|
- rust/build/src/resolve.rs
|
|
1660
1711
|
- rust/build/src/root.rs
|
|
1712
|
+
- rust/build/src/rustfmt.rs
|
|
1661
1713
|
- rust/build/src/seams_pass.rs
|
|
1662
1714
|
- rust/build/src/subprocess.rs
|
|
1663
1715
|
- rust/build/src/tmp.rs
|
|
1664
1716
|
- rust/build/src/translation_pass.rs
|
|
1717
|
+
- rust/build/src/world_pass.rs
|
|
1718
|
+
- rust/clippy.toml
|
|
1665
1719
|
- rust/codegen/.cargo/config.toml
|
|
1666
1720
|
- rust/codegen/.gitignore
|
|
1667
1721
|
- rust/codegen/Cargo.lock
|
|
1668
1722
|
- rust/codegen/Cargo.toml
|
|
1723
|
+
- rust/codegen/clippy.toml
|
|
1669
1724
|
- rust/codegen/src/asks.rs
|
|
1670
1725
|
- rust/codegen/src/attr.rs
|
|
1671
1726
|
- rust/codegen/src/bridging.rs
|
|
@@ -1677,6 +1732,7 @@ files:
|
|
|
1677
1732
|
- rust/codegen/src/expr_emitter.rs
|
|
1678
1733
|
- rust/codegen/src/fielded.rs
|
|
1679
1734
|
- rust/codegen/src/hecks_naming.rs
|
|
1735
|
+
- rust/codegen/src/hecks_naming_tests.rs
|
|
1680
1736
|
- rust/codegen/src/json.rs
|
|
1681
1737
|
- rust/codegen/src/json_codec.rs
|
|
1682
1738
|
- rust/codegen/src/literal.rs
|
|
@@ -1702,10 +1758,11 @@ files:
|
|
|
1702
1758
|
- rust/host/Cargo.lock
|
|
1703
1759
|
- rust/host/Cargo.toml
|
|
1704
1760
|
- rust/host/HECKS_RELEASE
|
|
1761
|
+
- rust/host/clippy.toml
|
|
1705
1762
|
- rust/host/rds-ca-bundle.pem
|
|
1706
1763
|
- rust/host/src/api.rs
|
|
1707
|
-
- rust/host/src/approval.rs
|
|
1708
1764
|
- rust/host/src/auth.rs
|
|
1765
|
+
- rust/host/src/b64.rs
|
|
1709
1766
|
- rust/host/src/bin/expr_harness.rs
|
|
1710
1767
|
- rust/host/src/bin/lineage_harness.rs
|
|
1711
1768
|
- rust/host/src/bin/mint_harness.rs
|
|
@@ -1718,12 +1775,16 @@ files:
|
|
|
1718
1775
|
- rust/host/src/boundary_fuzz/server.rs
|
|
1719
1776
|
- rust/host/src/boundary_fuzz/web.rs
|
|
1720
1777
|
- rust/host/src/checkout.rs
|
|
1778
|
+
- rust/host/src/clock.rs
|
|
1721
1779
|
- rust/host/src/commerce_ir.rs
|
|
1780
|
+
- rust/host/src/crypto.rs
|
|
1722
1781
|
- rust/host/src/dispatch.rs
|
|
1723
1782
|
- rust/host/src/expr_json.rs
|
|
1724
1783
|
- rust/host/src/extension.rs
|
|
1725
1784
|
- rust/host/src/field_hints.rs
|
|
1726
1785
|
- rust/host/src/fuzz_support.rs
|
|
1786
|
+
- rust/host/src/host.rs
|
|
1787
|
+
- rust/host/src/http.rs
|
|
1727
1788
|
- rust/host/src/ir.rs
|
|
1728
1789
|
- rust/host/src/journal.rs
|
|
1729
1790
|
- rust/host/src/lambda_client.rs
|
|
@@ -1734,6 +1795,7 @@ files:
|
|
|
1734
1795
|
- rust/host/src/needs.rs
|
|
1735
1796
|
- rust/host/src/payments.rs
|
|
1736
1797
|
- rust/host/src/payments/keystore.rs
|
|
1798
|
+
- rust/host/src/payments/roles.rs
|
|
1737
1799
|
- rust/host/src/payments/tests.rs
|
|
1738
1800
|
- rust/host/src/platform_signin/attack_tests.rs
|
|
1739
1801
|
- rust/host/src/platform_signin/config.rs
|
|
@@ -1786,6 +1848,7 @@ files:
|
|
|
1786
1848
|
- rust/lsp/Cargo.lock
|
|
1787
1849
|
- rust/lsp/Cargo.toml
|
|
1788
1850
|
- rust/lsp/README.md
|
|
1851
|
+
- rust/lsp/clippy.toml
|
|
1789
1852
|
- rust/lsp/src/diagnostics.rs
|
|
1790
1853
|
- rust/lsp/src/json.rs
|
|
1791
1854
|
- rust/lsp/src/main.rs
|
|
@@ -1795,6 +1858,7 @@ files:
|
|
|
1795
1858
|
- rust/parser/.gitignore
|
|
1796
1859
|
- rust/parser/Cargo.lock
|
|
1797
1860
|
- rust/parser/Cargo.toml
|
|
1861
|
+
- rust/parser/clippy.toml
|
|
1798
1862
|
- rust/parser/fuzz/.gitignore
|
|
1799
1863
|
- rust/parser/fuzz/Cargo.lock
|
|
1800
1864
|
- rust/parser/fuzz/Cargo.toml
|
|
@@ -1804,6 +1868,7 @@ files:
|
|
|
1804
1868
|
- rust/parser/src/build/closed_sets.rs
|
|
1805
1869
|
- rust/parser/src/build/identity.rs
|
|
1806
1870
|
- rust/parser/src/build/mod.rs
|
|
1871
|
+
- rust/parser/src/build/named_pattern.rs
|
|
1807
1872
|
- rust/parser/src/build/naming.rs
|
|
1808
1873
|
- rust/parser/src/build/pattern_subset.rs
|
|
1809
1874
|
- rust/parser/src/build/query_derive.rs
|
|
@@ -1821,7 +1886,9 @@ files:
|
|
|
1821
1886
|
- rust/parser/src/ir.rs
|
|
1822
1887
|
- rust/parser/src/keywords.rs
|
|
1823
1888
|
- rust/parser/src/lex.rs
|
|
1889
|
+
- rust/parser/src/lib.rs
|
|
1824
1890
|
- rust/parser/src/main.rs
|
|
1891
|
+
- rust/parser/src/parse/adapter.rs
|
|
1825
1892
|
- rust/parser/src/parse/aggregate.rs
|
|
1826
1893
|
- rust/parser/src/parse/chapter.rs
|
|
1827
1894
|
- rust/parser/src/parse/command.rs
|
|
@@ -1837,6 +1904,7 @@ files:
|
|
|
1837
1904
|
- rust/parser/src/parse/query.rs
|
|
1838
1905
|
- rust/parser/src/parse/read_model.rs
|
|
1839
1906
|
- rust/parser/src/parse/value_object.rs
|
|
1907
|
+
- rust/parser/src/parse/world.rs
|
|
1840
1908
|
- rust/parser/src/ruby_value.rs
|
|
1841
1909
|
- rust/src/exemplar/commands.rs
|
|
1842
1910
|
- rust/src/exemplar/constraints.rs
|
|
@@ -1884,6 +1952,7 @@ files:
|
|
|
1884
1952
|
- rust/src/kernel/reference_lookup.rs
|
|
1885
1953
|
- rust/src/kernel/repository.rs
|
|
1886
1954
|
- rust/src/kernel/routing.rs
|
|
1955
|
+
- rust/src/kernel/ruby_float.rs
|
|
1887
1956
|
- rust/src/kernel/vocab/aggregate_dispatch_order.rs
|
|
1888
1957
|
- rust/src/kernel/vocab/entity_dispatch_order.rs
|
|
1889
1958
|
- rust/src/kernel/vocab/field_hint.rs
|
|
@@ -1895,6 +1964,7 @@ files:
|
|
|
1895
1964
|
- rust/web/.gitignore
|
|
1896
1965
|
- rust/web/Cargo.lock
|
|
1897
1966
|
- rust/web/Cargo.toml
|
|
1967
|
+
- rust/web/clippy.toml
|
|
1898
1968
|
- rust/web/src/lib.rs
|
|
1899
1969
|
homepage: https://github.com/heckslabs/hecks
|
|
1900
1970
|
licenses:
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
# Driving adapter standing in for a Stripe webhook handler: boots Pizzas and calls
|
|
4
|
-
# Dispatcher#dispatch_port, which translates the payment into PizzaPaymentReceived.
|
|
5
|
-
#
|
|
6
|
-
# examples/pizzas/bluebook/hecksagon/mock_stripe_payment_adapter.rb
|
|
7
|
-
|
|
8
|
-
$LOAD_PATH.unshift File.expand_path("../../../../lib", __dir__)
|
|
9
|
-
|
|
10
|
-
require "hecks"
|
|
11
|
-
|
|
12
|
-
DOMAIN = File.expand_path("../..", __dir__)
|
|
13
|
-
RUNTIME = Hecks.boot(DOMAIN)
|
|
14
|
-
|
|
15
|
-
# Unique per run: identity is never minted, so a repeated name would be refused as AlreadyExists.
|
|
16
|
-
NAME = "StripeDemoMargherita-#{Process.pid}-#{rand(10_000)}".freeze
|
|
17
|
-
|
|
18
|
-
# Set the stage: an order Purchase's `given` rules will accept.
|
|
19
|
-
order = Order.create_pizza(name: { value: NAME }, pizza: { price_cents: { cents: 1200 }, size: { value: "large" } })
|
|
20
|
-
order.add_topping(topping: { value: "Basil" }, amount: { value: 3 })
|
|
21
|
-
|
|
22
|
-
puts "Before payment: #{order.status}, customer=#{order.customer_name.inspect}"
|
|
23
|
-
|
|
24
|
-
# The webhook: a real handler would verify a Stripe signature; a reference is always a bare id.
|
|
25
|
-
RUNTIME.dispatch_port(
|
|
26
|
-
"Pizzas", "Order", "PaymentGateway", "Receive",
|
|
27
|
-
flat: {
|
|
28
|
-
name: NAME,
|
|
29
|
-
customer_name: { value: "Chris" },
|
|
30
|
-
amount: { cents: 1200 }
|
|
31
|
-
}
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
sold = Order.find(NAME)
|
|
35
|
-
puts "After payment: #{sold.status}, customer=#{sold.customer_name.to_h}"
|
|
36
|
-
puts "Events: #{sold.events.map(&:name).join(", ")}"
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
require "securerandom"
|
|
2
|
-
|
|
3
|
-
require_relative "../../ports/authentication"
|
|
4
|
-
|
|
5
|
-
module Hecks
|
|
6
|
-
module Adapters
|
|
7
|
-
# Google's OIDC handshake — the `authentication` port's adapter for Google
|
|
8
|
-
# sign-in, via `oauth2` (code exchange) and `google-id-token` (verification).
|
|
9
|
-
#
|
|
10
|
-
# `oauth2`/`google-id-token` load lazily, inside the methods that use
|
|
11
|
-
# them, so a domain that never binds this adapter never needs them installed.
|
|
12
|
-
#
|
|
13
|
-
# `GOOGLE_CLIENT_ID`/`GOOGLE_CLIENT_SECRET`/`GOOGLE_REDIRECT_URI` have no
|
|
14
|
-
# defaults, on purpose: a half-configured login should refuse to boot.
|
|
15
|
-
module GoogleAuthentication
|
|
16
|
-
ISSUER = "https://accounts.google.com".freeze
|
|
17
|
-
|
|
18
|
-
module_function
|
|
19
|
-
|
|
20
|
-
# Builds the OAuth2 client for Google's token endpoints.
|
|
21
|
-
#
|
|
22
|
-
# @return [OAuth2::Client] a client configured for Google's OAuth2/OIDC endpoints
|
|
23
|
-
# @raise [KeyError] if `GOOGLE_CLIENT_ID` or `GOOGLE_CLIENT_SECRET` is unset
|
|
24
|
-
def client
|
|
25
|
-
require "oauth2"
|
|
26
|
-
OAuth2::Client.new(
|
|
27
|
-
ENV.fetch("GOOGLE_CLIENT_ID"), ENV.fetch("GOOGLE_CLIENT_SECRET"),
|
|
28
|
-
site: "https://oauth2.googleapis.com",
|
|
29
|
-
authorize_url: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
30
|
-
token_url: "/token"
|
|
31
|
-
)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# The URL to send a browser to, carrying a fresh CSRF `state` the caller
|
|
35
|
-
# must stash (typically in a session) and check again in `verify`.
|
|
36
|
-
#
|
|
37
|
-
# @return [Array(String, String)] the URL to send the browser to, and the fresh CSRF
|
|
38
|
-
# `state` embedded in it
|
|
39
|
-
# @raise [KeyError] if `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` or
|
|
40
|
-
# `GOOGLE_REDIRECT_URI` is unset
|
|
41
|
-
def authorization_url
|
|
42
|
-
state = SecureRandom.hex(24)
|
|
43
|
-
url = client.auth_code.authorize_url(
|
|
44
|
-
redirect_uri: ENV.fetch("GOOGLE_REDIRECT_URI"),
|
|
45
|
-
scope: "openid email profile",
|
|
46
|
-
state: state
|
|
47
|
-
)
|
|
48
|
-
[url, state]
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# Exchanges `code` for tokens and verifies the ID token against Google's
|
|
52
|
-
# JWKS; `email_verified` tells a caller if Google actually checked the email.
|
|
53
|
-
# @param code [String] the authorization code the provider sent back
|
|
54
|
-
# @param state [String, nil] the state parameter the provider returned; nil is refused
|
|
55
|
-
# @param expected_state [String, nil] the state `authorization_url` handed out before
|
|
56
|
-
# the redirect; nil is refused
|
|
57
|
-
# @return [Hash{Symbol => Object}] `issuer:` and `subject:` (String), `email:` (String,
|
|
58
|
-
# or nil if the token carries none), `email_verified:` (Boolean)
|
|
59
|
-
# @raise [Ports::Authentication::ValidationError] if the state check, code exchange, or
|
|
60
|
-
# ID token verification fails
|
|
61
|
-
# @raise [KeyError] if `GOOGLE_CLIENT_ID` or `GOOGLE_REDIRECT_URI` is unset, or a
|
|
62
|
-
# verified token lacks an `iss` or `sub` claim
|
|
63
|
-
def verify(code:, state:, expected_state:)
|
|
64
|
-
# Both requires happen up front: the rescue below matches
|
|
65
|
-
# GoogleIDToken::ValidationError, resolved only when caught, so
|
|
66
|
-
# requiring it lazily after an OAuth2::Error would mask the real failure.
|
|
67
|
-
require "oauth2"
|
|
68
|
-
require "google-id-token"
|
|
69
|
-
|
|
70
|
-
raise Ports::Authentication::ValidationError, "state mismatch" unless state && expected_state && state == expected_state
|
|
71
|
-
|
|
72
|
-
identity(GoogleIDToken::Validator.new.check(exchange(code), ENV.fetch("GOOGLE_CLIENT_ID")))
|
|
73
|
-
rescue OAuth2::Error, GoogleIDToken::ValidationError => e
|
|
74
|
-
raise Ports::Authentication::ValidationError, e.message
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Exchanges an authorization code for the provider's raw ID token.
|
|
78
|
-
#
|
|
79
|
-
# @param code [String] the authorization code the provider sent back
|
|
80
|
-
# @return [String] the unverified ID token
|
|
81
|
-
# @raise [Ports::Authentication::ValidationError] if the response carries no ID token
|
|
82
|
-
def exchange(code)
|
|
83
|
-
token = client.auth_code.get_token(code, redirect_uri: ENV.fetch("GOOGLE_REDIRECT_URI"))
|
|
84
|
-
token.params["id_token"] or raise Ports::Authentication::ValidationError, "no id_token in the response"
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
# Reads the identity claims out of a verified ID token payload.
|
|
88
|
-
#
|
|
89
|
-
# @param payload [Hash{String => Object}] the verified token claims
|
|
90
|
-
# @return [Hash{Symbol => Object}] the same shape `verify` returns
|
|
91
|
-
def identity(payload)
|
|
92
|
-
{
|
|
93
|
-
issuer: payload.fetch("iss"), subject: payload.fetch("sub"),
|
|
94
|
-
email: payload["email"], email_verified: [true, "true"].include?(payload["email_verified"])
|
|
95
|
-
}
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
end
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Hecks
|
|
4
|
-
module Adapters
|
|
5
|
-
# A network-free stand-in for a Checkout-Session-style payment adapter, matching it by
|
|
6
|
-
# method shape alone. The returned URL carries `registration_id`, as webhook metadata would.
|
|
7
|
-
class MockStripeAdapter
|
|
8
|
-
# Accepts and discards the shared adapter constructor arguments; this adapter holds no
|
|
9
|
-
# state of its own.
|
|
10
|
-
#
|
|
11
|
-
# @param aggregate [Bluebook::Aggregate, nil] accepted for the shared adapter
|
|
12
|
-
# constructor shape and ignored
|
|
13
|
-
# @param settings [Hash] accepted for the shared adapter constructor shape and ignored
|
|
14
|
-
# @param root [String, nil] accepted for the shared adapter constructor shape and ignored
|
|
15
|
-
def initialize(aggregate: nil, settings: {}, root: nil); end
|
|
16
|
-
|
|
17
|
-
# Builds a fake checkout URL carrying `registration_id`, standing in for a real
|
|
18
|
-
# Checkout-Session call.
|
|
19
|
-
#
|
|
20
|
-
# @param event [Object] the record data a real adapter would read; never read here
|
|
21
|
-
# @param registration_id [String] embedded in the returned URL, never read otherwise
|
|
22
|
-
# @param success_url [String] the base URL to redirect a successful payer to
|
|
23
|
-
# @param cancel_url [String] accepted for the shared call shape and never read
|
|
24
|
-
# @return [String] `success_url` with `mock_checkout=1` and `mock_registration_id`
|
|
25
|
-
# query parameters appended
|
|
26
|
-
def create_session(event:, registration_id:, success_url:, cancel_url:)
|
|
27
|
-
separator = success_url.include?("?") ? "&" : "?"
|
|
28
|
-
"#{success_url}#{separator}mock_checkout=1&mock_registration_id=#{registration_id}"
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|