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
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
require_relative 'local_libs'
|
|
2
|
-
|
|
3
|
-
STRUCT_ID = "592642a4ae0c6a00236b110d".freeze # mini test
|
|
4
|
-
# STRUCT_ID = "626745bcba616a001f7e5011" # wcc
|
|
5
|
-
|
|
6
|
-
api = Ecoportal::API::GraphQL.new
|
|
7
|
-
|
|
8
|
-
# DESIRED DESIGN: (to review: it might be that draft tree model already stores the commands?)
|
|
9
|
-
# tree = api.currentOrganization.LocationStructure(id: STRUCT_ID)
|
|
10
|
-
# node = tree.node["SYDNEY"]
|
|
11
|
-
# node.name = "Sydney City"
|
|
12
|
-
# tree.node["UPS"].move("AUCKLAND") # or tree.move("UPS", to: "AUCKLAND")
|
|
13
|
-
# tree.node["FFFF."].delete
|
|
14
|
-
# tree.node["UPS"].insert("CHILD", name: "Child").insert("GRAND CHILD", name: "Grand Child")
|
|
15
|
-
# tree.change_commands # => return Ecoportal::API::GraphQL::Input::ApplyCommands
|
|
16
|
-
|
|
17
|
-
INPUT = {
|
|
18
|
-
change: {
|
|
19
|
-
clientMutationId: "",
|
|
20
|
-
id: STRUCT_ID,
|
|
21
|
-
commands: [
|
|
22
|
-
{ update: { nodeId: "SYDNEY", name: "Sydney City" } },
|
|
23
|
-
{ move: { nodeId: "UPS", parentId: "AUCKLAND" } },
|
|
24
|
-
{ archive: { nodeId: "FFFF." } },
|
|
25
|
-
{ insert: { parentId: "UPS", nodeId: "CHILD", name: "Child" } },
|
|
26
|
-
{ insert: { parentId: "CHILD", nodeId: "GRAND CHILD", name: "Grand Child" } }
|
|
27
|
-
]
|
|
28
|
-
},
|
|
29
|
-
revert: {
|
|
30
|
-
clientMutationId: "",
|
|
31
|
-
id: STRUCT_ID,
|
|
32
|
-
commands: [
|
|
33
|
-
{ update: { nodeId: "SYDNEY", name: "Sydney" } },
|
|
34
|
-
{ move: { nodeId: "UPS", parentId: "SUB'TAGs" } },
|
|
35
|
-
{ unarchive: { nodeId: "FFFF." } },
|
|
36
|
-
{ archive: { nodeId: "CHILD" } }
|
|
37
|
-
]
|
|
38
|
-
}
|
|
39
|
-
}.freeze
|
|
40
|
-
|
|
41
|
-
operation = :change
|
|
42
|
-
response = api.locationStructure.applyCommands(input: INPUT[operation])
|
|
43
|
-
|
|
44
|
-
if response.success? && (structure = response.structure)
|
|
45
|
-
puts "Applied '#{operation}' changes to '#{structure.name}' structure:"
|
|
46
|
-
pp structure.treeify
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
puts "Some more feedback:"
|
|
50
|
-
#pp response.results.as_json
|
|
51
|
-
pp response.results.map(&:as_json)
|
data/tests/loc_structures_get.rb
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
require_relative 'local_libs'
|
|
2
|
-
|
|
3
|
-
api = Ecoportal::API::GraphQL.new
|
|
4
|
-
kargs = {
|
|
5
|
-
includeArchived: false,
|
|
6
|
-
includeUnpublished: false
|
|
7
|
-
}
|
|
8
|
-
trees = api.currentOrganization.locationStructures(**kargs)
|
|
9
|
-
trees.each_with_index do |tree, _idx|
|
|
10
|
-
puts "#{tree.weight}. '#{tree.name}' (#{tree.id})"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
trees.each do |tree|
|
|
14
|
-
pp tree.treeify
|
|
15
|
-
end
|
data/tests/local_libs.rb
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
require 'byebug'
|
|
2
|
-
base_dir = 'C:/ruby_scripts/git'
|
|
3
|
-
|
|
4
|
-
api_path = File.join(base_dir, '/ecoportal-api/lib')
|
|
5
|
-
$LOAD_PATH.unshift File.expand_path(api_path)
|
|
6
|
-
#require 'ecoportal/api'
|
|
7
|
-
api_req = File.join(base_dir, '/ecoportal-api/lib/ecoportal/api')
|
|
8
|
-
require api_req
|
|
9
|
-
|
|
10
|
-
api_v2_path = File.join(base_dir, '/ecoportal-api-v2/lib')
|
|
11
|
-
$LOAD_PATH.unshift File.expand_path(api_v2_path)
|
|
12
|
-
#require 'ecoportal/api-v2'
|
|
13
|
-
require File.join(base_dir, '/ecoportal-api-v2/lib/ecoportal/api-v2')
|
|
14
|
-
|
|
15
|
-
$LOAD_PATH.unshift File.join(base_dir, '/graphlient/lib')
|
|
16
|
-
require File.join(base_dir, '/graphlient/lib/graphlient')
|
|
17
|
-
|
|
18
|
-
graphql = File.join(base_dir, '/ecoportal-api-graphql/lib')
|
|
19
|
-
$LOAD_PATH.unshift File.expand_path(graphql)
|
|
20
|
-
require_relative File.expand_path(File.join(graphql, 'ecoportal/api-graphql'))
|
data/tests/validate_queries.rb
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
require 'ecoportal/api-graphql'
|
|
2
|
-
require 'json'
|
|
3
|
-
require 'graphql'
|
|
4
|
-
|
|
5
|
-
# Validate EVERY gem query against a GraphQL schema, offline — catches the whole class of
|
|
6
|
-
# "field must have selections" (object field selected bare) and "selections can't be made on
|
|
7
|
-
# scalars" (scalar over-selected) bugs before they reach a client runner.
|
|
8
|
-
#
|
|
9
|
-
# This is how the 2026-07-03 LocationStructure `updatedAt` prod failure (and a sibling
|
|
10
|
-
# `createdAt` over-selection in the LocationDraft fragment) were found. Those queries had no
|
|
11
|
-
# spec; this script would have flagged them.
|
|
12
|
-
#
|
|
13
|
-
# It renders each query's block offline (auth is stubbed — no network), assembles its fragments,
|
|
14
|
-
# and validates the full document against a schema introspection JSON.
|
|
15
|
-
#
|
|
16
|
-
# Usage (run under bundler so the graphlient fork's #to_query_string is available):
|
|
17
|
-
# bundle exec ruby tests/validate_queries.rb [PATH_TO_SCHEMA_INTROSPECTION_JSON]
|
|
18
|
-
#
|
|
19
|
-
# Get a fresh schema JSON via an introspection query against the org's endpoint; the default
|
|
20
|
-
# below points at the last captured dump. Prefer a fresh dump — a stale one yields false
|
|
21
|
-
# "field doesn't exist" noise (harmless: this script only *fails* on the two structural classes).
|
|
22
|
-
|
|
23
|
-
DEFAULT_SCHEMA = File.expand_path('../.ai-assistance/tmp/20260605T101224_live_ep_graphql_schema.graphql.json', __dir__)
|
|
24
|
-
STRUCTURAL = ['must have selections', "can't be made on scalars"].freeze
|
|
25
|
-
|
|
26
|
-
schema_path = ARGV[0] || DEFAULT_SCHEMA
|
|
27
|
-
unless File.exist?(schema_path)
|
|
28
|
-
warn "Schema introspection JSON not found: #{schema_path}"
|
|
29
|
-
warn 'Pass a path: bundle exec ruby tests/validate_queries.rb <schema.json>'
|
|
30
|
-
exit 2
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# Build a client offline — stub the session token so no network/creds are needed for rendering.
|
|
34
|
-
Ecoportal::API::Common::GraphQL::Client.class_eval do
|
|
35
|
-
def session_token(*_args, **_kwargs)
|
|
36
|
-
'dummy'
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
client = Ecoportal::API::Common::GraphQL::Client.new(
|
|
40
|
-
email: 'validate@local', pass: 'x', org_id: 'validate', host: 'live.ecoportal.com', no_schema: true
|
|
41
|
-
)
|
|
42
|
-
schema = GraphQL::Schema.from_introspection(JSON.parse(File.read(schema_path)))
|
|
43
|
-
|
|
44
|
-
# Collect every concrete query AND mutation class (recursively, incl. nested like
|
|
45
|
-
# LocationStructure::Draft). Mutations are included because a dead fragment reference (e.g. the
|
|
46
|
-
# removed `___Const__Fragment` convention) only surfaces when the operation is RENDERED — and
|
|
47
|
-
# mutations were previously unscanned, which is exactly how the Action/ContractorEntity mutation
|
|
48
|
-
# fragment breakage reached production undetected.
|
|
49
|
-
op_classes = []
|
|
50
|
-
collect = lambda do |mod|
|
|
51
|
-
mod.constants.each do |const|
|
|
52
|
-
obj = begin
|
|
53
|
-
mod.const_get(const)
|
|
54
|
-
rescue StandardError
|
|
55
|
-
next
|
|
56
|
-
end
|
|
57
|
-
next unless obj.is_a?(Module)
|
|
58
|
-
|
|
59
|
-
op_classes << obj if obj.is_a?(Class) && obj.private_method_defined?(:basic_block)
|
|
60
|
-
collect.call(obj)
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
collect.call(Ecoportal::API::GraphQL::Query)
|
|
64
|
-
collect.call(Ecoportal::API::GraphQL::Mutation)
|
|
65
|
-
op_classes.uniq!
|
|
66
|
-
|
|
67
|
-
structural_bugs = {}
|
|
68
|
-
other_errors = {}
|
|
69
|
-
render_failures = {}
|
|
70
|
-
render_skips = []
|
|
71
|
-
|
|
72
|
-
op_classes.sort_by(&:name).each do |klass|
|
|
73
|
-
inst = klass.new(client)
|
|
74
|
-
begin
|
|
75
|
-
query_str = client.to_query_string(&inst.send(:basic_block))
|
|
76
|
-
rescue NameError => e
|
|
77
|
-
# The operation cannot even RENDER — an unresolved constant / dead fragment reference
|
|
78
|
-
# (e.g. the removed `___Const__Fragment` convention pointing at a Fragment:: constant that
|
|
79
|
-
# no longer exists now that fragments are a registry). Same bug class that crashed the live
|
|
80
|
-
# LocationDraft / Action / ContractorEntity paths. HARD FAIL.
|
|
81
|
-
render_failures[klass.name] = ["#{e.class}: #{e.message}"]
|
|
82
|
-
next
|
|
83
|
-
end
|
|
84
|
-
fragments = begin
|
|
85
|
-
inst.send(:assemble_fragments, query_str)
|
|
86
|
-
rescue StandardError
|
|
87
|
-
''
|
|
88
|
-
end
|
|
89
|
-
full = fragments.to_s.empty? ? query_str : "#{query_str}\n\n#{fragments}"
|
|
90
|
-
messages = schema.validate(full).map(&:message)
|
|
91
|
-
bugs = messages.select { |m| STRUCTURAL.any? { |s| m.include?(s) } }
|
|
92
|
-
other = messages - bugs
|
|
93
|
-
structural_bugs[klass.name] = bugs unless bugs.empty?
|
|
94
|
-
other_errors[klass.name] = other unless other.empty?
|
|
95
|
-
rescue StandardError => e
|
|
96
|
-
render_skips << "#{klass.name} — #{e.class}: #{e.message}"
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
puts "Validated #{op_classes.size} query + mutation classes against #{File.basename(schema_path)}\n\n"
|
|
100
|
-
|
|
101
|
-
puts '## FRAGMENT / RENDER FAILURES (fail the build — operation could not render, e.g. dead fragment ref):'
|
|
102
|
-
if render_failures.empty?
|
|
103
|
-
puts ' none ✅'
|
|
104
|
-
else
|
|
105
|
-
render_failures.each { |name, msgs| puts " #{name}\n - #{msgs.join("\n - ")}" }
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
puts "\n## STRUCTURAL BUGS (fail the build — bare object / over-selected scalar):"
|
|
109
|
-
if structural_bugs.empty?
|
|
110
|
-
puts ' none ✅'
|
|
111
|
-
else
|
|
112
|
-
structural_bugs.each { |name, msgs| puts " #{name}\n - #{msgs.join("\n - ")}" }
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
puts "\n## OTHER validation findings (verify — may be schema-dump staleness or union handling):"
|
|
116
|
-
if other_errors.empty?
|
|
117
|
-
puts ' none'
|
|
118
|
-
else
|
|
119
|
-
other_errors.each { |name, msgs| puts " #{name}\n - #{msgs.first(3).join("\n - ")}" }
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
unless render_skips.empty?
|
|
123
|
-
puts "\n## RENDER-SKIPS (could not auto-render — check manually):"
|
|
124
|
-
render_skips.each { |s| puts " #{s}" }
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
exit(structural_bugs.empty? && render_failures.empty? ? 0 : 1)
|