ecoportal-api-graphql 1.3.13 → 1.3.16
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/CHANGELOG.md +87 -0
- data/lib/ecoportal/api/common/graphql/client.rb +0 -2
- data/lib/ecoportal/api/common/graphql/http_client.rb +6 -0
- data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +17 -17
- data/lib/ecoportal/api/graphql/base/file_container.rb +14 -14
- data/lib/ecoportal/api/graphql/base/location_classification_type.rb +15 -15
- data/lib/ecoportal/api/graphql/base/location_structure.rb +27 -27
- data/lib/ecoportal/api/graphql/base/organization.rb +15 -15
- data/lib/ecoportal/api/graphql/base/page/task.rb +24 -0
- data/lib/ecoportal/api/graphql/base/page.rb +17 -16
- data/lib/ecoportal/api/graphql/base/template.rb +35 -0
- data/lib/ecoportal/api/graphql/base.rb +37 -35
- data/lib/ecoportal/api/graphql/builder/contractor_entity.rb +41 -41
- data/lib/ecoportal/api/graphql/compat/response.rb +35 -35
- data/lib/ecoportal/api/graphql/connection/action.rb +11 -11
- data/lib/ecoportal/api/graphql/connection/action_category.rb +11 -11
- data/lib/ecoportal/api/graphql/connection/contractor_entity.rb +11 -11
- data/lib/ecoportal/api/graphql/connection/page.rb +11 -11
- data/lib/ecoportal/api/graphql/connection/person_member.rb +11 -11
- data/lib/ecoportal/api/graphql/connection/preview_page.rb +11 -11
- data/lib/ecoportal/api/graphql/connection.rb +17 -17
- data/lib/ecoportal/api/graphql/file_upload/client.rb +21 -10
- data/lib/ecoportal/api/graphql/fragment/field_configuration.rb +38 -0
- data/lib/ecoportal/api/graphql/fragment/force.rb +14 -10
- data/lib/ecoportal/api/graphql/fragment/location_node.rb +26 -26
- data/lib/ecoportal/api/graphql/fragment/page_task.rb +39 -0
- data/lib/ecoportal/api/graphql/fragment/template.rb +51 -0
- data/lib/ecoportal/api/graphql/fragment.rb +3 -0
- data/lib/ecoportal/api/graphql/input/contractor_entity.rb +14 -14
- data/lib/ecoportal/api/graphql/input/preset_view/update.rb +16 -16
- data/lib/ecoportal/api/graphql/input/workflow_command/add_stage.rb +18 -18
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_field_configuration.rb +21 -21
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_page.rb +28 -28
- data/lib/ecoportal/api/graphql/input/workflow_command/edit_page_creator_permissions.rb +18 -18
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/cross_reference.rb +23 -23
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/date.rb +20 -20
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/image_gallery.rb +20 -20
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/people.rb +24 -24
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/plain_text.rb +20 -20
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/rich_text.rb +20 -20
- data/lib/ecoportal/api/graphql/input/workflow_command/field_config/select.rb +20 -20
- data/lib/ecoportal/api/graphql/input/workflow_command/move_field.rb +18 -18
- data/lib/ecoportal/api/graphql/input/workflow_command/reorder_forces.rb +18 -18
- data/lib/ecoportal/api/graphql/input/workflow_command/reorder_section.rb +18 -18
- data/lib/ecoportal/api/graphql/input/workflow_command.rb +251 -251
- data/lib/ecoportal/api/graphql/input.rb +24 -24
- data/lib/ecoportal/api/graphql/logic/connection.rb +34 -34
- data/lib/ecoportal/api/graphql/model/page/task.rb +16 -0
- data/lib/ecoportal/api/graphql/model/page.rb +16 -15
- data/lib/ecoportal/api/graphql/model/person_member.rb +15 -15
- data/lib/ecoportal/api/graphql/model/template.rb +15 -0
- data/lib/ecoportal/api/graphql/model.rb +32 -30
- data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +45 -45
- data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +40 -40
- data/lib/ecoportal/api/graphql/mutation/contractor_entity.rb +14 -14
- data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +40 -40
- data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +38 -40
- data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +38 -40
- data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +38 -40
- data/lib/ecoportal/api/graphql/mutation/page/execute_force_commands.rb +7 -7
- data/lib/ecoportal/api/graphql/mutation/page/execute_workflow_commands.rb +8 -7
- data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +38 -40
- data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +40 -40
- data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +40 -40
- data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +40 -40
- data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +34 -35
- data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +35 -35
- data/lib/ecoportal/api/graphql/mutation/smart_fill/generate.rb +36 -36
- data/lib/ecoportal/api/graphql/mutation/smart_fill/submit_feedback.rb +40 -40
- data/lib/ecoportal/api/graphql/mutation/smart_fill.rb +13 -13
- data/lib/ecoportal/api/graphql/mutation/template/create_related_page.rb +46 -46
- data/lib/ecoportal/api/graphql/mutation/template/destroy_related_page.rb +1 -1
- data/lib/ecoportal/api/graphql/mutation/template/update_information.rb +1 -1
- data/lib/ecoportal/api/graphql/mutation.rb +20 -20
- data/lib/ecoportal/api/graphql/payload/contractor_entity.rb +14 -14
- data/lib/ecoportal/api/graphql/payload/ok_payload.rb +36 -21
- data/lib/ecoportal/api/graphql/payload/page/draft.rb +26 -13
- data/lib/ecoportal/api/graphql/payload/page/review_task.rb +13 -13
- data/lib/ecoportal/api/graphql/payload/page/review_task_batch.rb +23 -0
- data/lib/ecoportal/api/graphql/payload/page.rb +20 -19
- data/lib/ecoportal/api/graphql/payload/preset_view.rb +15 -11
- data/lib/ecoportal/api/graphql/payload/register.rb +15 -11
- data/lib/ecoportal/api/graphql/payload/template/create_related_page.rb +1 -1
- data/lib/ecoportal/api/graphql/payload/template/destroy_related_page.rb +1 -1
- data/lib/ecoportal/api/graphql/payload/template/update_information.rb +1 -1
- data/lib/ecoportal/api/graphql/payload.rb +23 -23
- data/lib/ecoportal/api/graphql/query/location_structures.rb +57 -57
- data/lib/ecoportal/api/graphql/query/page.rb +45 -45
- data/lib/ecoportal/api/graphql/query/page_with_forces.rb +9 -3
- data/lib/ecoportal/api/graphql/query/pages_workflow_commands.rb +9 -3
- data/lib/ecoportal/api/graphql/query/register_preset_views.rb +78 -78
- data/lib/ecoportal/api/graphql/query.rb +27 -27
- data/lib/ecoportal/api/graphql.rb +9 -5
- data/lib/ecoportal/api/graphql_version.rb +1 -1
- metadata +9 -180
- data/.ai-assistance/bridge/CLAUDE.md +0 -338
- data/.ai-assistance/bridge/archive/.gitkeep +0 -0
- data/.ai-assistance/bridge/archive/oscar-a1b2c3d-gitlab-mcp-doc-update.inbox.md +0 -29
- data/.ai-assistance/bridge/archive/oscar-a1b2c3d-gitlab-mcp-doc-update.outbox.md +0 -18
- data/.ai-assistance/bridge/archive/oscar-c912c25-gemini-design-review.inbox.md +0 -42
- data/.ai-assistance/bridge/archive/oscar-c912c25-gemini-design-review.outbox.md +0 -115
- data/.ai-assistance/bridge/context/gemini-review-prompt.txt +0 -48
- data/.ai-assistance/bridge/context/gemini-review-response.md +0 -104
- data/.ai-assistance/bridge/context/project.md +0 -42
- data/.ai-assistance/bridge/inbox/.gitkeep +0 -0
- data/.ai-assistance/bridge/outbox/.gitkeep +0 -0
- data/.ai-assistance/bridge/outbox/request-for-standards-discovery.md +0 -48
- data/.ai-assistance/bridge/queue/.gitkeep +0 -1
- data/.ai-assistance/capabilities/CLAUDE.md +0 -27
- data/.ai-assistance/capabilities/assumptions-log.md +0 -80
- data/.ai-assistance/capabilities/code.md +0 -47
- data/.ai-assistance/capabilities/connectors.md +0 -37
- data/.ai-assistance/capabilities/cowork.md +0 -55
- data/.ai-assistance/code/OVERVIEW.md +0 -155
- data/.ai-assistance/code/data_fields.md +0 -242
- data/.ai-assistance/code/dependencies.md +0 -151
- data/.ai-assistance/code/diff_as_input.md +0 -234
- data/.ai-assistance/code/diff_pairing_engine.md +0 -243
- data/.ai-assistance/code/diff_service_deep_dive.md +0 -192
- data/.ai-assistance/code/ecoPortal_architecture/00_overview_and_index.md +0 -55
- data/.ai-assistance/code/ecoPortal_architecture/01_terminology_dictionary.md +0 -181
- data/.ai-assistance/code/ecoPortal_architecture/02_data_model.md +0 -192
- data/.ai-assistance/code/ecoPortal_architecture/03_api_layers.md +0 -147
- data/.ai-assistance/code/ecoPortal_architecture/04_graphql_queries_mutations.md +0 -277
- data/.ai-assistance/code/ecoPortal_architecture/05_page_workflows.md +0 -200
- data/.ai-assistance/code/ecoPortal_architecture/06_search_and_filters.md +0 -228
- data/.ai-assistance/code/ecoPortal_architecture/07_data_fields.md +0 -197
- data/.ai-assistance/code/ecoPortal_architecture/08_stages_sections.md +0 -243
- data/.ai-assistance/code/ecoPortal_architecture/09_people_contractors_locations.md +0 -196
- data/.ai-assistance/code/ecoPortal_architecture/10_forces_workflow_builder.md +0 -132
- data/.ai-assistance/code/ecoPortal_architecture/11_integration_gems.md +0 -187
- data/.ai-assistance/code/ecoPortal_architecture/12_ai_documentation_sources_gaps.md +0 -236
- data/.ai-assistance/code/ecoPortal_architecture/13_ai_infrastructure.md +0 -183
- data/.ai-assistance/code/ecoportal_schema_reference.md +0 -240
- data/.ai-assistance/code/filter_contract_matrix.md +0 -177
- data/.ai-assistance/code/graphql_domain_knowledge.md +0 -240
- data/.ai-assistance/code/refactoring/datafield-readwrite-shape-asymmetry.md +0 -71
- data/.ai-assistance/code/refactoring/opportunities.md +0 -251
- data/.ai-assistance/code/schema_analysis.md +0 -321
- data/.ai-assistance/code/search_filters.md +0 -868
- data/.ai-assistance/code/spec_coverage.md +0 -73
- data/.ai-assistance/code/template_diff_pairing_domain.md +0 -175
- data/.ai-assistance/code/workflow-command-guide.md +0 -466
- data/.ai-assistance/code/workflow-space.md +0 -353
- data/.ai-assistance/conventions/CLAUDE.md +0 -30
- data/.ai-assistance/conventions/code-working-tree-protocol.md +0 -199
- data/.ai-assistance/conventions/gitignore-rules.md +0 -42
- data/.ai-assistance/conventions/permission-guidance.md +0 -120
- data/.ai-assistance/integrations/README.md +0 -70
- data/.ai-assistance/integrations/gitkraken-mcp.md +0 -107
- data/.ai-assistance/integrations/gitlab-mcp.md +0 -123
- data/.ai-assistance/integrations/local-git.md +0 -60
- data/.ai-assistance/local_paths.example.md +0 -17
- data/.ai-assistance/projects/TODO.md +0 -118
- data/.ai-assistance/projects/api-v2-to-graphql-migration/DECISIONS.md +0 -168
- data/.ai-assistance/projects/api-v2-to-graphql-migration/INTENT.md +0 -60
- data/.ai-assistance/projects/api-v2-to-graphql-migration/TODO.md +0 -267
- data/.ai-assistance/projects/api-v2-to-graphql-migration/UPSTREAM.md +0 -53
- data/.ai-assistance/projects/api-v2-to-graphql-migration/notes/csv-template-pipeline-design.md +0 -102
- data/.ai-assistance/projects/api-v2-to-graphql-migration/notes/cutover-usecase-gap-audit.md +0 -139
- data/.ai-assistance/projects/compat-layer-audit/COMPAT_AUDIT.md +0 -244
- data/.ai-assistance/projects/dynamic-model-generation/INTENT.md +0 -93
- data/.ai-assistance/projects/eco-helpers-compat/INTENT.md +0 -244
- data/.ai-assistance/projects/eco-helpers-compat/MIGRATION_GUIDE.md +0 -266
- data/.ai-assistance/projects/eco-helpers-compat/TODO.md +0 -86
- data/.ai-assistance/projects/ecoportal-api-v2-doublemodel-review/INTENT.md +0 -101
- data/.ai-assistance/projects/graphql-agent/GAP_ANALYSIS.md +0 -177
- data/.ai-assistance/projects/ooze-graphql-native-migration/DECISIONS.md +0 -161
- data/.ai-assistance/projects/ooze-graphql-native-migration/INTENT.md +0 -125
- data/.ai-assistance/projects/ooze-graphql-native-migration/INVENTORY.md +0 -136
- data/.ai-assistance/projects/ooze-graphql-native-migration/RISKS.md +0 -126
- data/.ai-assistance/projects/ooze-graphql-native-migration/TODO.md +0 -261
- data/.ai-assistance/projects/ooze-graphql-native-migration/analysis/2026-06-30-cutover-workflow-deep-review.md +0 -122
- data/.ai-assistance/projects/ooze-graphql-native-migration/analysis/2026-07-01-forces-via-workflow-commands-miss-rca.md +0 -148
- data/.ai-assistance/projects/page-model/DECISIONS.md +0 -245
- data/.ai-assistance/projects/page-model/TODO.md +0 -190
- data/.ai-assistance/projects/qa-services-delivery/DECISIONS.md +0 -93
- data/.ai-assistance/projects/qa-services-delivery/INTENT.md +0 -76
- data/.ai-assistance/projects/qa-services-delivery/PHASE3-SCOPE.md +0 -115
- data/.ai-assistance/projects/qa-services-delivery/ROADMAP.md +0 -99
- data/.ai-assistance/projects/qa-services-delivery/TODO.md +0 -81
- data/.ai-assistance/projects/search-filter-builder/INTENT.md +0 -107
- data/.ai-assistance/projects/search-filter-builder/TODO.md +0 -131
- data/.ai-assistance/projects/template-automatic-build-maintenance/INTENT.md +0 -87
- data/.ai-assistance/projects/template-automatic-build-maintenance/TODO.md +0 -108
- data/.ai-assistance/projects/template-diff-deploy/INTENT.md +0 -12
- data/.ai-assistance/projects/template-diff-deploy/TODO.md +0 -9
- data/.ai-assistance/projects/template-maintenance/DESIGN.md +0 -134
- data/.ai-assistance/projects/template-maintenance/PHASE0-FINDINGS.md +0 -93
- data/.ai-assistance/projects/template-maintenance/README.md +0 -14
- data/.ai-assistance/projects/template-model-logic/CATEGORY_CATALOG.md +0 -236
- data/.ai-assistance/projects/template-model-logic/CLASSIFICATION_SPIKE.md +0 -243
- data/.ai-assistance/projects/template-model-logic/DESIGN_NOTE.md +0 -154
- data/.ai-assistance/projects/workflow-space/TODO.md +0 -213
- data/.ai-assistance/reinstall-claude-desktop-windows.md +0 -136
- data/.ai-assistance/scripts/CLAUDE.md +0 -150
- data/.ai-assistance/scripts/bridge-inbox-check.sh +0 -75
- data/.ai-assistance/scripts/bridge-init.sh +0 -86
- data/.ai-assistance/scripts/bridge-status.sh +0 -44
- data/.ai-assistance/scripts/capabilities-check.ts +0 -104
- data/.ai-assistance/scripts/check-outbox.sh +0 -43
- data/.ai-assistance/scripts/dep_graph.rb +0 -91
- data/.ai-assistance/scripts/lock-acquire.sh +0 -103
- data/.ai-assistance/scripts/lock-multi.sh +0 -124
- data/.ai-assistance/scripts/lock-queue.sh +0 -94
- data/.ai-assistance/scripts/setup-mcps.test.ts +0 -188
- data/.ai-assistance/scripts/setup-mcps.ts +0 -234
- data/.ai-assistance/scripts/task-complete.ts +0 -74
- data/.ai-assistance/scripts/task-create.ts +0 -75
- data/.ai-assistance/scripts/task-read.ts +0 -125
- data/.ai-assistance/scripts/token-logger.js +0 -220
- data/.ai-assistance/scripts/token-report.ts +0 -158
- data/.ai-assistance/scripts/token-session-start.js +0 -66
- data/.ai-assistance/skills/ai-instructions/SKILL.md +0 -48
- data/.ai-assistance/skills/code-specs/SKILL.md +0 -69
- data/.ai-assistance/skills/corporate-policies/SKILL.md +0 -201
- data/.ai-assistance/skills/dep-graph/SKILL.md +0 -139
- data/.ai-assistance/skills/ep-ai-manager/SKILL.md +0 -417
- data/.ai-assistance/skills/gemini-assist/SKILL.md +0 -63
- data/.ai-assistance/skills/gemini-assist/gemini-mcp-server.js +0 -205
- data/.ai-assistance/skills/gemini-assist/gemini_ask.py +0 -1
- data/.ai-assistance/skills/gemini-assist/gemini_ask.rb +0 -240
- data/.ai-assistance/skills/gemini-assist/prompts/cycle_end_review.txt +0 -25
- data/.ai-assistance/skills/graphql-schema-analysis/SKILL.md +0 -261
- data/.ai-assistance/skills/procedural-memory/SKILL.md +0 -319
- data/.ai-assistance/skills/project-cycle/SKILL.md +0 -177
- data/.ai-assistance/skills/project-self-docs/SKILL.md +0 -181
- data/.ai-assistance/skills/project-self-docs/scripts/self_docs_scan.py +0 -378
- data/.ai-assistance/skills/refactor/SKILL.md +0 -62
- data/.ai-assistance/skills/rubocop/SKILL.md +0 -93
- data/.ai-assistance/skills/ruby-scripting/SKILL.md +0 -215
- data/.ai-assistance/skills/spec-generation/SKILL.md +0 -72
- data/.ai-assistance/standards-version.json +0 -22
- data/.ai-assistance/token-budget.json +0 -32
- data/.ai-assistance/version.json +0 -39
- data/.claude/settings.json +0 -150
- data/.env.example +0 -18
- data/.gitattributes +0 -15
- data/.gitignore +0 -37
- data/.gitlab-ci.yml +0 -45
- data/.markdownlint.json +0 -4
- data/.rspec +0 -3
- data/.rubocop.yml +0 -121
- data/.ruby-version +0 -1
- data/.yardopts +0 -10
- data/CLAUDE.md +0 -243
- data/Gemfile +0 -30
- data/Rakefile +0 -90
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/bin/setup.ps1 +0 -6
- data/docs/self-docs/ARCHITECTURE.md +0 -88
- data/docs/self-docs/CHANGES.jsonl +0 -12
- data/docs/self-docs/COMPLIANCE.md +0 -79
- data/docs/self-docs/CONVENTIONS.md +0 -74
- data/docs/self-docs/INTEGRATIONS.md +0 -65
- data/docs/self-docs/OPERATIONS.md +0 -76
- data/docs/self-docs/OVERVIEW.md +0 -64
- data/docs/self-docs/STATUS.md +0 -73
- data/docs/self-docs/self-docs-index.json +0 -51
- data/docs/worklog.md +0 -977
- data/ecoportal-api-graphql.gemspec +0 -40
- data/scripts/auto-worker-scheduler.sh +0 -386
- data/tests/actions_get.rb +0 -7
- data/tests/contractor_entities_get.rb +0 -20
- data/tests/contractor_entity_create.rb +0 -19
- data/tests/contractor_entity_udpate.rb +0 -20
- data/tests/dump_page_model.rb +0 -74
- data/tests/dump_template_model.rb +0 -90
- data/tests/loc_structure_get.rb +0 -10
- data/tests/loc_structure_update.rb +0 -51
- data/tests/loc_structures_get.rb +0 -15
- data/tests/local_libs.rb +0 -20
- data/tests/validate_queries.rb +0 -127
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2eada698a590c0214f8eb7a37255efe68c2573de6c73e3e1ce42ba6a8ff5accb
|
|
4
|
+
data.tar.gz: 316b65e4027224711711d2248ada651911b1e64ce48aeff6bffb22144e53cd11
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f0894ce98e42628e50bb594ccbaa0050ae07518517a08745d54f5f61dc4031f959163b69caa1768ed978d0499abbb478c2dc4811867239373c324cac8008cc2a
|
|
7
|
+
data.tar.gz: 43e3dcf9dd61f521573a2249d26c92a571c23f06f2c742e9b19aa5554832b1195b251f0832da70f6231c68c0f94e108ff6487738a1e81e1c8c7d214944a98e0d
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,93 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.3.16] - 2026-08-13
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Packaging-only republish of `1.3.15` with an allowlisted gemspec (backported from `2.0.0`).
|
|
10
|
+
Versions `1.3.9`-`1.3.15` shipped internal repository content (`.ai-assistance/` project notes,
|
|
11
|
+
`docs/worklog.md`, architecture docs) to rubygems.org via the old denylist `spec.files`; they
|
|
12
|
+
will be yanked. `1.3.16` is the identical `lib/` code (including the `1.3.15` OozeRedirect
|
|
13
|
+
`executeWorkflowCommands` fix) packaged clean, so the `1.x` line keeps a clean latest release.
|
|
14
|
+
|
|
15
|
+
## [1.3.15] - 2026-07-30
|
|
16
|
+
|
|
17
|
+
**Backwards-compatible.** Every change here fixes a query or mutation document that the live
|
|
18
|
+
schema rejected — i.e. code paths that could not run at all — plus the CI gate that found them.
|
|
19
|
+
Cherry-picked onto the 1.3.x line from `main`, where they landed alongside **breaking** changes
|
|
20
|
+
that are deliberately NOT in this release (see "Deferred to 1.4.0" below).
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- **`FileUpload::Client` authenticated the v2 REST endpoints wrongly.** The ported S3
|
|
25
|
+
register/poll steps sent `Authorization: Bearer <oauth_token>`; those endpoints authenticate via
|
|
26
|
+
`X-ECOPORTAL-API-KEY`, so step 3 404'd and `#upload` never completed. `Ecoportal::API::GraphQL.new`
|
|
27
|
+
accepts an additive `api_key:` (independent of the GraphQL endpoint's own email/pass OAuth),
|
|
28
|
+
`HttpClient#api_key` is public, and the client raises a clear error when it is missing.
|
|
29
|
+
⚠ **Not yet live-verified** — verify against a sandbox org before relying on it.
|
|
30
|
+
- **Three invalid union selections.** `Query::RegisterPresetViews` (`fieldConfigurations`),
|
|
31
|
+
`Query::PageWithForces` (`forces`) and `Query::PagesWorkflowCommands` (`workflow`) selected
|
|
32
|
+
fields directly on a union, which is invalid GraphQL ("Selections can't be made directly on
|
|
33
|
+
unions") — all three queries failed outright. They now select through the members' shared
|
|
34
|
+
interface (`FieldConfigurationInterface` / `BasePageInterface`). Response shapes are unchanged.
|
|
35
|
+
- **`fragment ForceFields` asked for a non-existent `id` on bindings.** `Force.bindings` is
|
|
36
|
+
`[BindingInterface]`, whose only fields are `name` / `referenceId` (+ per-member `reference`),
|
|
37
|
+
so every query spreading the fragment was invalid. Now selects on the interface directly.
|
|
38
|
+
NOTE the read/write asymmetry this exposes: `WorkflowEditBindingInput` / `removeBinding` require
|
|
39
|
+
a binding `id` that no read exposes, so `BindingCollection#delete!(binding)` has no source for it.
|
|
40
|
+
- **7 invalid `PageFields` spreads.** The four review-task mutations return `item: TaskInterface`
|
|
41
|
+
(not a page — the page is reachable via `subject`), `Template::{Create,Destroy}RelatedPage`
|
|
42
|
+
return `RelatedPages`, and `Template::UpdateInformation` returns the narrow `Template` type. New
|
|
43
|
+
`:PageTaskFields` / `:TemplateRelatedPages` / `:TemplateInformation` fragments and read-only
|
|
44
|
+
`Base/Model::Page::Task` + `Base/Model::Template::{RelatedPages,Information}` models; the payload
|
|
45
|
+
`item_class`es pointed at `Model::PageUnion`, which never matched the schema. The template
|
|
46
|
+
mutations that genuinely return a page (`Create`/`Publish`/`Unpublish`/`Update`) are unchanged.
|
|
47
|
+
- **6 payloads selected an `item` their type does not have.** `Page::CreateDraft` → `{ id }`,
|
|
48
|
+
`Page::{DeleteDraft,PublishDraft}` → `{ ok }`, `Page::BatchUpdateReviewTask` → `{ count }` (and
|
|
49
|
+
its own `Payload::Page::ReviewTaskBatch`), `Register::Destroy` → `{ ok }`, `PresetView::Destroy`
|
|
50
|
+
→ `{ clientMutationId errors }`. `Payload::Page::Draft` gained `id`/`ok`, `Payload::Register`
|
|
51
|
+
gained `ok`.
|
|
52
|
+
- **`executeWorkflowCommands` was rendered with arguments it never accepted** — the schema takes a
|
|
53
|
+
single `input: ExecuteWorkflowCommandsInput!`, so the **page-level command bus could not run**.
|
|
54
|
+
Both classes' `#query` already built the right `input` hash; only the documents were wrong.
|
|
55
|
+
- **`Payload::OkPayload` now models `errors`** — it selected them but computed `success?` purely
|
|
56
|
+
from `ok`, silently ignoring a populated errors object.
|
|
57
|
+
|
|
58
|
+
### Added (tooling — no runtime effect)
|
|
59
|
+
|
|
60
|
+
- **`validate-queries` CI job** (`.gitlab-ci.yml`): renders every query + mutation against a
|
|
61
|
+
freshly introspected schema and fails on render failures plus the always-invalid selection
|
|
62
|
+
classes ("must have selections", "can't be made on scalars", "can't be made directly on unions",
|
|
63
|
+
"can't be spread inside"). This gate is what found everything above.
|
|
64
|
+
- **`tests/dump_schema.rb`**: fresh introspection through the gem's own `HttpClient`. Requires
|
|
65
|
+
`SERVER` explicitly (the gem's default host is production). Schema dumps are never committed.
|
|
66
|
+
|
|
67
|
+
### Deferred to 1.4.0 (breaking — intentionally absent here)
|
|
68
|
+
|
|
69
|
+
- The AI-summary rewire (`generateAiSummary` → `generatePageSummary`,
|
|
70
|
+
`submitAiSummaryFeedback` → `submitPageAiSummaryFeedback`, changed `#query` keywords,
|
|
71
|
+
`Base::AiSummaryVersion` field removals) and the removal of the `SmartFill` mutations
|
|
72
|
+
(`smartFillGenerate` / `smartFillSubmitFeedback` do not exist in the schema).
|
|
73
|
+
- The 2026-07-13 `WorkflowCommandInput` schema sync and the polymorphic read-model layer.
|
|
74
|
+
|
|
75
|
+
## [1.3.14] - 2026-07-16
|
|
76
|
+
|
|
77
|
+
Re-issue of the **1.3.13 HttpClient resilience fix** under a fresh version. The `1.3.13`
|
|
78
|
+
artifact published to the gem server (2026-07-11) could not be relied upon to contain the
|
|
79
|
+
fix below — RubyGems versions are immutable and cannot be re-pushed, so the fix ships here
|
|
80
|
+
as `1.3.14`. Functionally identical to the *intended* `1.3.13` (this is `1.3.12` + the
|
|
81
|
+
resilience fix, nothing else). **Backwards-compatible.**
|
|
82
|
+
|
|
83
|
+
Consumers that need the 429/1015 resilience (e.g. bulk `cans-upsert` live runs) must floor
|
|
84
|
+
`ecoportal-api-graphql >= 1.3.14` — a `>= 1.3.13` floor is not sufficient.
|
|
85
|
+
|
|
86
|
+
### Fixed
|
|
87
|
+
|
|
88
|
+
- Same fix as documented under `[1.3.13]` below: `Common::GraphQL::HttpClient#execute` routes
|
|
89
|
+
through the inherited `instrument → with_retry { rate_throttling }` pipeline, so a single
|
|
90
|
+
HTTP 429 (Cloudflare edge rate-limit `1015`) no longer aborts the run.
|
|
91
|
+
|
|
5
92
|
## [1.3.13] - 2026-07-12
|
|
6
93
|
|
|
7
94
|
Reliability: the GraphQL `HttpClient` now inherits the **same request-resilience
|
|
@@ -21,6 +21,12 @@ module Ecoportal
|
|
|
21
21
|
|
|
22
22
|
attr_reader :host, :version
|
|
23
23
|
|
|
24
|
+
# Publicly exposes the configured api_key (inherited as `private` from
|
|
25
|
+
# `Common::Client`) — `FileUpload::Client` needs it directly to authenticate
|
|
26
|
+
# against the v2 REST endpoints, independent of this client's own `@version`
|
|
27
|
+
# (which stays `'graphql'` and therefore always builds a Bearer `key_token`).
|
|
28
|
+
public :api_key
|
|
29
|
+
|
|
24
30
|
include Ecoportal::API::Common::GraphQL::AuthService
|
|
25
31
|
|
|
26
32
|
def initialize(
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
module Ecoportal
|
|
2
|
-
module API
|
|
3
|
-
class GraphQL
|
|
4
|
-
module Base
|
|
5
|
-
# Represents one generation version of an AiSummary field.
|
|
6
|
-
# Returned by generateAiSummary — tracks the prompt, output, token usage, and status.
|
|
7
|
-
class AiSummaryVersion < Logic::BaseModel
|
|
8
|
-
passkey :id
|
|
9
|
-
passthrough :aiSummary, :status, :prompt
|
|
10
|
-
passthrough :inputTokens, :outputTokens, :totalTokens
|
|
11
|
-
passthrough :resourceType # "field" | "stage" | "page"
|
|
12
|
-
passarray :ratings # [[user_id, score], ...]
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
1
|
+
module Ecoportal
|
|
2
|
+
module API
|
|
3
|
+
class GraphQL
|
|
4
|
+
module Base
|
|
5
|
+
# Represents one generation version of an AiSummary field.
|
|
6
|
+
# Returned by generateAiSummary — tracks the prompt, output, token usage, and status.
|
|
7
|
+
class AiSummaryVersion < Logic::BaseModel
|
|
8
|
+
passkey :id
|
|
9
|
+
passthrough :aiSummary, :status, :prompt
|
|
10
|
+
passthrough :inputTokens, :outputTokens, :totalTokens
|
|
11
|
+
passthrough :resourceType # "field" | "stage" | "page"
|
|
12
|
+
passarray :ratings # [[user_id, score], ...]
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
module Ecoportal
|
|
2
|
-
module API
|
|
3
|
-
class GraphQL
|
|
4
|
-
module Base
|
|
5
|
-
class FileContainer < Logic::BaseModel
|
|
6
|
-
passkey :id
|
|
7
|
-
passthrough :name, :activeName
|
|
8
|
-
passthrough :fileSize, :token, :activeVersionId
|
|
9
|
-
passarray :tags
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
1
|
+
module Ecoportal
|
|
2
|
+
module API
|
|
3
|
+
class GraphQL
|
|
4
|
+
module Base
|
|
5
|
+
class FileContainer < Logic::BaseModel
|
|
6
|
+
passkey :id
|
|
7
|
+
passthrough :name, :activeName
|
|
8
|
+
passthrough :fileSize, :token, :activeVersionId
|
|
9
|
+
passarray :tags
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
module Ecoportal
|
|
2
|
-
module API
|
|
3
|
-
class GraphQL
|
|
4
|
-
module Base
|
|
5
|
-
class LocationClassificationType < Logic::BaseModel
|
|
6
|
-
root!
|
|
7
|
-
|
|
8
|
-
passkey :id
|
|
9
|
-
passthrough :name
|
|
10
|
-
passboolean :active
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
1
|
+
module Ecoportal
|
|
2
|
+
module API
|
|
3
|
+
class GraphQL
|
|
4
|
+
module Base
|
|
5
|
+
class LocationClassificationType < Logic::BaseModel
|
|
6
|
+
root!
|
|
7
|
+
|
|
8
|
+
passkey :id
|
|
9
|
+
passthrough :name
|
|
10
|
+
passboolean :active
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
module Ecoportal
|
|
2
|
-
module API
|
|
3
|
-
class GraphQL
|
|
4
|
-
module Base
|
|
5
|
-
class LocationStructure < Interface::LocationStructure::Nodes
|
|
6
|
-
read_only!
|
|
7
|
-
|
|
8
|
-
class_resolver :location_node_class, Base::LocationNode
|
|
9
|
-
class_resolver :draft_class, "Base::LocationStructure::Draft"
|
|
10
|
-
|
|
11
|
-
passkey :id
|
|
12
|
-
passthrough :name, :weight
|
|
13
|
-
passboolean :archived, :published, :visitorManagementEnabled
|
|
14
|
-
embeds_one :updatedAt, klass: Base::DateTime
|
|
15
|
-
|
|
16
|
-
embeds_many :drafts, klass: :draft_class, order_key: :createdAt
|
|
17
|
-
|
|
18
|
-
def draft?
|
|
19
|
-
false
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
require_relative 'location_structure/draft'
|
|
1
|
+
module Ecoportal
|
|
2
|
+
module API
|
|
3
|
+
class GraphQL
|
|
4
|
+
module Base
|
|
5
|
+
class LocationStructure < Interface::LocationStructure::Nodes
|
|
6
|
+
read_only!
|
|
7
|
+
|
|
8
|
+
class_resolver :location_node_class, Base::LocationNode
|
|
9
|
+
class_resolver :draft_class, "Base::LocationStructure::Draft"
|
|
10
|
+
|
|
11
|
+
passkey :id
|
|
12
|
+
passthrough :name, :weight
|
|
13
|
+
passboolean :archived, :published, :visitorManagementEnabled
|
|
14
|
+
embeds_one :updatedAt, klass: Base::DateTime
|
|
15
|
+
|
|
16
|
+
embeds_many :drafts, klass: :draft_class, order_key: :createdAt
|
|
17
|
+
|
|
18
|
+
def draft?
|
|
19
|
+
false
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
require_relative 'location_structure/draft'
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
module Ecoportal
|
|
2
|
-
module API
|
|
3
|
-
class GraphQL
|
|
4
|
-
module Base
|
|
5
|
-
class Organization < Logic::BaseModel
|
|
6
|
-
root!
|
|
7
|
-
|
|
8
|
-
passkey :id
|
|
9
|
-
passthrough :name, :companyName
|
|
10
|
-
passthrough :logoUrl, read_only: true
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
1
|
+
module Ecoportal
|
|
2
|
+
module API
|
|
3
|
+
class GraphQL
|
|
4
|
+
module Base
|
|
5
|
+
class Organization < Logic::BaseModel
|
|
6
|
+
root!
|
|
7
|
+
|
|
8
|
+
passkey :id
|
|
9
|
+
passthrough :name, :companyName
|
|
10
|
+
passthrough :logoUrl, read_only: true
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Ecoportal
|
|
2
|
+
module API
|
|
3
|
+
class GraphQL
|
|
4
|
+
module Base
|
|
5
|
+
module Page
|
|
6
|
+
# A page TASK — the `item` of the review-task mutations (`TaskInterface`:
|
|
7
|
+
# CompletePage / InComment / ReviewPage). Read-only.
|
|
8
|
+
#
|
|
9
|
+
# This is NOT a page: the page it belongs to is `subject` (a PageUnion). The
|
|
10
|
+
# review-task payloads used to type `item` as `Model::PageUnion`, which never
|
|
11
|
+
# matched the schema (see `Fragment :PageTaskFields`).
|
|
12
|
+
class Task < Logic::BaseModel
|
|
13
|
+
read_only!
|
|
14
|
+
|
|
15
|
+
passkey :id
|
|
16
|
+
passthrough :__typename, :stageId, :relativeStatus, :taskNotes
|
|
17
|
+
passboolean :complete, :overdue, :escalated
|
|
18
|
+
passdate :createdAt, :completedAt, :due
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
module Ecoportal
|
|
2
|
-
module API
|
|
3
|
-
class GraphQL
|
|
4
|
-
module Base
|
|
5
|
-
module Page
|
|
6
|
-
end
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
require_relative 'page/basic'
|
|
13
|
-
require_relative 'page/data_field'
|
|
14
|
-
require_relative 'page/section'
|
|
15
|
-
require_relative 'page/section_collection'
|
|
16
|
-
require_relative 'page/phased'
|
|
1
|
+
module Ecoportal
|
|
2
|
+
module API
|
|
3
|
+
class GraphQL
|
|
4
|
+
module Base
|
|
5
|
+
module Page
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
require_relative 'page/basic'
|
|
13
|
+
require_relative 'page/data_field'
|
|
14
|
+
require_relative 'page/section'
|
|
15
|
+
require_relative 'page/section_collection'
|
|
16
|
+
require_relative 'page/phased'
|
|
17
|
+
require_relative 'page/task'
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Ecoportal
|
|
2
|
+
module API
|
|
3
|
+
class GraphQL
|
|
4
|
+
module Base
|
|
5
|
+
# Namespace for the narrow template-side types.
|
|
6
|
+
#
|
|
7
|
+
# ★ Note the platform asymmetry: in most of this gem a "template" IS a page (a page with
|
|
8
|
+
# `template: true`), which is why `Query::Templates` and most `Payload::Template::*`
|
|
9
|
+
# resolve to `Model::PageUnion`. The two types here are the exceptions — distinct schema
|
|
10
|
+
# types returned by specific template mutations.
|
|
11
|
+
module Template
|
|
12
|
+
# `item` of `updateTemplateInformation` (schema type `Template`). Read-only.
|
|
13
|
+
class Information < Logic::BaseModel
|
|
14
|
+
read_only!
|
|
15
|
+
|
|
16
|
+
passkey :id
|
|
17
|
+
passthrough :description, :aiDescription, :templateType, :templateContainerUid
|
|
18
|
+
passboolean :active, :public, :creatorEnabled, :creatorEditable
|
|
19
|
+
passarray :folders
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# `item` of `createTemplateRelatedPage` / `destroyTemplateRelatedPage`
|
|
23
|
+
# (schema type `RelatedPages`) — a related-pages CONFIG entry, not a page. Read-only.
|
|
24
|
+
class RelatedPages < Logic::BaseModel
|
|
25
|
+
read_only!
|
|
26
|
+
|
|
27
|
+
passkey :id
|
|
28
|
+
passthrough :title, :registerId
|
|
29
|
+
passboolean :hasInaccessibleVariables
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -1,35 +1,37 @@
|
|
|
1
|
-
module Ecoportal
|
|
2
|
-
module API
|
|
3
|
-
class GraphQL
|
|
4
|
-
module Base
|
|
5
|
-
end
|
|
6
|
-
end
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
require_relative 'base/date_time'
|
|
11
|
-
require_relative 'base/page_info'
|
|
12
|
-
require_relative 'base/location_classification_type'
|
|
13
|
-
require_relative 'base/location_node'
|
|
14
|
-
require_relative 'base/location_structure'
|
|
15
|
-
require_relative 'base/person_member'
|
|
16
|
-
require_relative 'base/file_attachment'
|
|
17
|
-
require_relative 'base/file_container'
|
|
18
|
-
require_relative 'base/field'
|
|
19
|
-
require_relative 'base/page'
|
|
20
|
-
require_relative 'base/resource'
|
|
21
|
-
require_relative 'base/action_category'
|
|
22
|
-
require_relative 'base/action'
|
|
23
|
-
require_relative 'base/contractor_entity'
|
|
24
|
-
require_relative 'base/preview_page'
|
|
25
|
-
require_relative 'base/delta_result'
|
|
26
|
-
require_relative 'base/organization'
|
|
27
|
-
|
|
28
|
-
require_relative 'base/register'
|
|
29
|
-
require_relative 'base/preset_view'
|
|
30
|
-
|
|
31
|
-
require_relative 'base/ai_summary_version'
|
|
32
|
-
|
|
33
|
-
require_relative 'base/force'
|
|
34
|
-
require_relative 'base/pages_workflow'
|
|
35
|
-
require_relative 'base/kickstand'
|
|
1
|
+
module Ecoportal
|
|
2
|
+
module API
|
|
3
|
+
class GraphQL
|
|
4
|
+
module Base
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
require_relative 'base/date_time'
|
|
11
|
+
require_relative 'base/page_info'
|
|
12
|
+
require_relative 'base/location_classification_type'
|
|
13
|
+
require_relative 'base/location_node'
|
|
14
|
+
require_relative 'base/location_structure'
|
|
15
|
+
require_relative 'base/person_member'
|
|
16
|
+
require_relative 'base/file_attachment'
|
|
17
|
+
require_relative 'base/file_container'
|
|
18
|
+
require_relative 'base/field'
|
|
19
|
+
require_relative 'base/page'
|
|
20
|
+
require_relative 'base/resource'
|
|
21
|
+
require_relative 'base/action_category'
|
|
22
|
+
require_relative 'base/action'
|
|
23
|
+
require_relative 'base/contractor_entity'
|
|
24
|
+
require_relative 'base/preview_page'
|
|
25
|
+
require_relative 'base/delta_result'
|
|
26
|
+
require_relative 'base/organization'
|
|
27
|
+
|
|
28
|
+
require_relative 'base/register'
|
|
29
|
+
require_relative 'base/preset_view'
|
|
30
|
+
|
|
31
|
+
require_relative 'base/ai_summary_version'
|
|
32
|
+
|
|
33
|
+
require_relative 'base/force'
|
|
34
|
+
require_relative 'base/pages_workflow'
|
|
35
|
+
require_relative 'base/kickstand'
|
|
36
|
+
|
|
37
|
+
require_relative 'base/template'
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
module Ecoportal
|
|
2
|
-
module API
|
|
3
|
-
class GraphQL
|
|
4
|
-
module Builder
|
|
5
|
-
class ContractorEntity
|
|
6
|
-
attr_reader :client
|
|
7
|
-
|
|
8
|
-
def initialize(client)
|
|
9
|
-
@client = client
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def create(**kargs, &block)
|
|
13
|
-
createMutation.query(**kargs, &block)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def update(**kargs, &block)
|
|
17
|
-
updateMutation.query(**kargs, &block)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def destroy(**kargs, &block)
|
|
21
|
-
destroyMutation.query(**kargs, &block)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
def createMutation
|
|
27
|
-
Mutation::ContractorEntity::Create.new(client)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def updateMutation
|
|
31
|
-
Mutation::ContractorEntity::Update.new(client)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def destroyMutation
|
|
35
|
-
Mutation::ContractorEntity::Destroy.new(client)
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
1
|
+
module Ecoportal
|
|
2
|
+
module API
|
|
3
|
+
class GraphQL
|
|
4
|
+
module Builder
|
|
5
|
+
class ContractorEntity
|
|
6
|
+
attr_reader :client
|
|
7
|
+
|
|
8
|
+
def initialize(client)
|
|
9
|
+
@client = client
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def create(**kargs, &block)
|
|
13
|
+
createMutation.query(**kargs, &block)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def update(**kargs, &block)
|
|
17
|
+
updateMutation.query(**kargs, &block)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def destroy(**kargs, &block)
|
|
21
|
+
destroyMutation.query(**kargs, &block)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
def createMutation
|
|
27
|
+
Mutation::ContractorEntity::Create.new(client)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def updateMutation
|
|
31
|
+
Mutation::ContractorEntity::Update.new(client)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def destroyMutation
|
|
35
|
+
Mutation::ContractorEntity::Destroy.new(client)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
module Ecoportal
|
|
2
|
-
module API
|
|
3
|
-
class GraphQL
|
|
4
|
-
module Compat
|
|
5
|
-
# Wraps a GraphQL mutation payload to expose the v2-compatible response interface.
|
|
6
|
-
# Scripts check .success? and .status after update/create operations.
|
|
7
|
-
class Response
|
|
8
|
-
def initialize(payload)
|
|
9
|
-
@payload = payload
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def success?
|
|
13
|
-
@payload.success?
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def error?
|
|
17
|
-
@payload.error?
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def status
|
|
21
|
-
@payload.error? ? :error : :ok
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def body
|
|
25
|
-
@payload.error_doc
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def item
|
|
29
|
-
@payload.item
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
1
|
+
module Ecoportal
|
|
2
|
+
module API
|
|
3
|
+
class GraphQL
|
|
4
|
+
module Compat
|
|
5
|
+
# Wraps a GraphQL mutation payload to expose the v2-compatible response interface.
|
|
6
|
+
# Scripts check .success? and .status after update/create operations.
|
|
7
|
+
class Response
|
|
8
|
+
def initialize(payload)
|
|
9
|
+
@payload = payload
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def success?
|
|
13
|
+
@payload.success?
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def error?
|
|
17
|
+
@payload.error?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def status
|
|
21
|
+
@payload.error? ? :error : :ok
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def body
|
|
25
|
+
@payload.error_doc
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def item
|
|
29
|
+
@payload.item
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
module Ecoportal
|
|
2
|
-
module API
|
|
3
|
-
class GraphQL
|
|
4
|
-
module Connection
|
|
5
|
-
class Action < Logic::Connection
|
|
6
|
-
class_resolver :node_class, Model::Action
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
1
|
+
module Ecoportal
|
|
2
|
+
module API
|
|
3
|
+
class GraphQL
|
|
4
|
+
module Connection
|
|
5
|
+
class Action < Logic::Connection
|
|
6
|
+
class_resolver :node_class, Model::Action
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|