ecoportal-api-graphql 1.3.5 → 1.3.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +943 -477
  3. data/LICENSE +21 -21
  4. data/README.md +24 -24
  5. data/lib/ecoportal/api/common/graphql/auth_service.rb +115 -115
  6. data/lib/ecoportal/api/common/graphql/class_helpers.rb +46 -46
  7. data/lib/ecoportal/api/common/graphql/client.rb +69 -69
  8. data/lib/ecoportal/api/common/graphql/hash_helpers.rb +105 -105
  9. data/lib/ecoportal/api/common/graphql/http_client.rb +195 -145
  10. data/lib/ecoportal/api/common/graphql/model/as_input.rb +54 -51
  11. data/lib/ecoportal/api/common/graphql/model/diffable/classic_diff_service.rb +49 -47
  12. data/lib/ecoportal/api/common/graphql/model/diffable/diff_service.rb +188 -180
  13. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff.rb +55 -55
  14. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff_nesting.rb +295 -242
  15. data/lib/ecoportal/api/common/graphql/model/diffable.rb +54 -54
  16. data/lib/ecoportal/api/common/graphql/model.rb +17 -17
  17. data/lib/ecoportal/api/common/graphql/patches.rb +1 -1
  18. data/lib/ecoportal/api/common/graphql/query_integration.rb +45 -45
  19. data/lib/ecoportal/api/common/graphql.rb +16 -16
  20. data/lib/ecoportal/api/common.graphql.rb +8 -8
  21. data/lib/ecoportal/api/graphql/base/action.rb +43 -43
  22. data/lib/ecoportal/api/graphql/base/action_category.rb +15 -15
  23. data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +17 -0
  24. data/lib/ecoportal/api/graphql/base/contractor_entity/member_changes.rb +67 -67
  25. data/lib/ecoportal/api/graphql/base/contractor_entity.rb +24 -24
  26. data/lib/ecoportal/api/graphql/base/date_time.rb +12 -12
  27. data/lib/ecoportal/api/graphql/base/delta_result.rb +16 -0
  28. data/lib/ecoportal/api/graphql/base/field.rb +12 -12
  29. data/lib/ecoportal/api/graphql/base/file_attachment.rb +15 -15
  30. data/lib/ecoportal/api/graphql/base/file_container.rb +14 -14
  31. data/lib/ecoportal/api/graphql/base/force/binding.rb +19 -0
  32. data/lib/ecoportal/api/graphql/base/force/binding_collection.rb +62 -0
  33. data/lib/ecoportal/api/graphql/base/force/collection.rb +47 -0
  34. data/lib/ecoportal/api/graphql/base/force.rb +65 -0
  35. data/lib/ecoportal/api/graphql/base/kickstand/job.rb +17 -0
  36. data/lib/ecoportal/api/graphql/base/kickstand/workflow.rb +18 -0
  37. data/lib/ecoportal/api/graphql/base/kickstand.rb +13 -0
  38. data/lib/ecoportal/api/graphql/base/location_classification_type.rb +15 -15
  39. data/lib/ecoportal/api/graphql/base/location_node.rb +14 -14
  40. data/lib/ecoportal/api/graphql/base/location_structure/draft/structure.rb +37 -37
  41. data/lib/ecoportal/api/graphql/base/location_structure/draft.rb +93 -93
  42. data/lib/ecoportal/api/graphql/base/location_structure.rb +27 -27
  43. data/lib/ecoportal/api/graphql/base/organization.rb +15 -15
  44. data/lib/ecoportal/api/graphql/base/page/basic.rb +38 -0
  45. data/lib/ecoportal/api/graphql/base/page/data_field/actions_list.rb +9 -0
  46. data/lib/ecoportal/api/graphql/base/page/data_field/ai_summary.rb +18 -0
  47. data/lib/ecoportal/api/graphql/base/page/data_field/checklist.rb +29 -0
  48. data/lib/ecoportal/api/graphql/base/page/data_field/collection.rb +119 -0
  49. data/lib/ecoportal/api/graphql/base/page/data_field/contractor_entities.rb +28 -0
  50. data/lib/ecoportal/api/graphql/base/page/data_field/cross_reference.rb +54 -0
  51. data/lib/ecoportal/api/graphql/base/page/data_field/date_field.rb +23 -0
  52. data/lib/ecoportal/api/graphql/base/page/data_field/file_field.rb +25 -0
  53. data/lib/ecoportal/api/graphql/base/page/data_field/gauge.rb +19 -0
  54. data/lib/ecoportal/api/graphql/base/page/data_field/geo.rb +24 -0
  55. data/lib/ecoportal/api/graphql/base/page/data_field/image_gallery.rb +24 -0
  56. data/lib/ecoportal/api/graphql/base/page/data_field/law.rb +8 -0
  57. data/lib/ecoportal/api/graphql/base/page/data_field/mailbox.rb +9 -0
  58. data/lib/ecoportal/api/graphql/base/page/data_field/number.rb +20 -0
  59. data/lib/ecoportal/api/graphql/base/page/data_field/people.rb +35 -0
  60. data/lib/ecoportal/api/graphql/base/page/data_field/plain_text.rb +17 -0
  61. data/lib/ecoportal/api/graphql/base/page/data_field/rich_text.rb +26 -0
  62. data/lib/ecoportal/api/graphql/base/page/data_field/select.rb +41 -0
  63. data/lib/ecoportal/api/graphql/base/page/data_field/signature.rb +9 -0
  64. data/lib/ecoportal/api/graphql/base/page/data_field/smart_fill.rb +17 -0
  65. data/lib/ecoportal/api/graphql/base/page/data_field/table.rb +9 -0
  66. data/lib/ecoportal/api/graphql/base/page/data_field/tag_field.rb +21 -0
  67. data/lib/ecoportal/api/graphql/base/page/data_field.rb +137 -12
  68. data/lib/ecoportal/api/graphql/base/page/phased/stage.rb +68 -14
  69. data/lib/ecoportal/api/graphql/base/page/phased.rb +15 -14
  70. data/lib/ecoportal/api/graphql/base/page/section.rb +48 -12
  71. data/lib/ecoportal/api/graphql/base/page/section_collection.rb +85 -0
  72. data/lib/ecoportal/api/graphql/base/page/task.rb +24 -0
  73. data/lib/ecoportal/api/graphql/base/page.rb +17 -14
  74. data/lib/ecoportal/api/graphql/base/page_info.rb +12 -12
  75. data/lib/ecoportal/api/graphql/base/pages_workflow/action_type_selection.rb +17 -0
  76. data/lib/ecoportal/api/graphql/base/pages_workflow/callback_type.rb +28 -0
  77. data/lib/ecoportal/api/graphql/base/pages_workflow/command_change.rb +17 -0
  78. data/lib/ecoportal/api/graphql/base/pages_workflow/command_change_message.rb +15 -0
  79. data/lib/ecoportal/api/graphql/base/pages_workflow/command_es_change.rb +17 -0
  80. data/lib/ecoportal/api/graphql/base/pages_workflow/command_interface.rb +36 -0
  81. data/lib/ecoportal/api/graphql/base/pages_workflow/email_config.rb +18 -0
  82. data/lib/ecoportal/api/graphql/base/pages_workflow/escalation_level.rb +19 -0
  83. data/lib/ecoportal/api/graphql/base/pages_workflow/in_system_config.rb +16 -0
  84. data/lib/ecoportal/api/graphql/base/pages_workflow/mailbox_field_selection.rb +17 -0
  85. data/lib/ecoportal/api/graphql/base/pages_workflow/operation_interface.rb +39 -0
  86. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/assign_to.rb +27 -0
  87. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/create_page.rb +21 -0
  88. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/send_notification.rb +30 -0
  89. data/lib/ecoportal/api/graphql/base/pages_workflow/people_field_selection.rb +17 -0
  90. data/lib/ecoportal/api/graphql/base/pages_workflow/recipient_config.rb +34 -0
  91. data/lib/ecoportal/api/graphql/base/pages_workflow/register_field.rb +17 -0
  92. data/lib/ecoportal/api/graphql/base/pages_workflow/task_config_selection.rb +17 -0
  93. data/lib/ecoportal/api/graphql/base/pages_workflow/time_delay_config.rb +16 -0
  94. data/lib/ecoportal/api/graphql/base/pages_workflow/trigger_interface.rb +26 -0
  95. data/lib/ecoportal/api/graphql/base/pages_workflow/triggers/conditional_logic.rb +17 -0
  96. data/lib/ecoportal/api/graphql/base/pages_workflow/user_selection.rb +16 -0
  97. data/lib/ecoportal/api/graphql/base/pages_workflow.rb +35 -0
  98. data/lib/ecoportal/api/graphql/base/person_member.rb +22 -22
  99. data/lib/ecoportal/api/graphql/base/preset_view.rb +17 -0
  100. data/lib/ecoportal/api/graphql/base/preview_page.rb +23 -0
  101. data/lib/ecoportal/api/graphql/base/register.rb +18 -0
  102. data/lib/ecoportal/api/graphql/base/resource.rb +13 -13
  103. data/lib/ecoportal/api/graphql/base/template.rb +35 -0
  104. data/lib/ecoportal/api/graphql/base.rb +37 -24
  105. data/lib/ecoportal/api/graphql/builder/action.rb +41 -41
  106. data/lib/ecoportal/api/graphql/builder/contractor_entity.rb +41 -41
  107. data/lib/ecoportal/api/graphql/builder/kickstand.rb +73 -0
  108. data/lib/ecoportal/api/graphql/builder/location_structure/draft.rb +64 -64
  109. data/lib/ecoportal/api/graphql/builder/location_structure.rb +40 -40
  110. data/lib/ecoportal/api/graphql/builder/page.rb +210 -41
  111. data/lib/ecoportal/api/graphql/builder/register/preset_view.rb +84 -0
  112. data/lib/ecoportal/api/graphql/builder/register.rb +49 -41
  113. data/lib/ecoportal/api/graphql/builder/template.rb +80 -0
  114. data/lib/ecoportal/api/graphql/builder/template_builder.rb +174 -0
  115. data/lib/ecoportal/api/graphql/builder.rb +17 -14
  116. data/lib/ecoportal/api/graphql/compat/filter_translator.rb +142 -0
  117. data/lib/ecoportal/api/graphql/compat/page_reference.rb +23 -0
  118. data/lib/ecoportal/api/graphql/compat/pages.rb +212 -0
  119. data/lib/ecoportal/api/graphql/compat/registers.rb +84 -0
  120. data/lib/ecoportal/api/graphql/compat/response.rb +35 -0
  121. data/lib/ecoportal/api/graphql/compat/search_results.rb +33 -0
  122. data/lib/ecoportal/api/graphql/compat/stage_collection.rb +70 -0
  123. data/lib/ecoportal/api/graphql/compat/stage_view.rb +76 -0
  124. data/lib/ecoportal/api/graphql/compat.rb +17 -0
  125. data/lib/ecoportal/api/graphql/concerns/data_field_access.rb +71 -0
  126. data/lib/ecoportal/api/graphql/concerns/deprecation.rb +20 -0
  127. data/lib/ecoportal/api/graphql/concerns/fragment_definitions.rb +68 -75
  128. data/lib/ecoportal/api/graphql/concerns/page_compat.rb +51 -0
  129. data/lib/ecoportal/api/graphql/concerns/snake_camel_access.rb +60 -0
  130. data/lib/ecoportal/api/graphql/concerns.rb +14 -10
  131. data/lib/ecoportal/api/graphql/connection/action.rb +11 -11
  132. data/lib/ecoportal/api/graphql/connection/action_category.rb +11 -11
  133. data/lib/ecoportal/api/graphql/connection/contractor_entity.rb +11 -11
  134. data/lib/ecoportal/api/graphql/connection/page.rb +11 -0
  135. data/lib/ecoportal/api/graphql/connection/pages_workflow_command.rb +13 -0
  136. data/lib/ecoportal/api/graphql/connection/person_member.rb +11 -11
  137. data/lib/ecoportal/api/graphql/connection/preset_view.rb +11 -0
  138. data/lib/ecoportal/api/graphql/connection/preview_page.rb +11 -0
  139. data/lib/ecoportal/api/graphql/connection.rb +17 -13
  140. data/lib/ecoportal/api/graphql/diff/change.rb +59 -0
  141. data/lib/ecoportal/api/graphql/diff/command_synthesizer.rb +329 -0
  142. data/lib/ecoportal/api/graphql/diff/cross_object_diff.rb +165 -0
  143. data/lib/ecoportal/api/graphql/diff/deploy.rb +121 -0
  144. data/lib/ecoportal/api/graphql/diff/id_resolver.rb +64 -0
  145. data/lib/ecoportal/api/graphql/diff/pairing/candidate.rb +32 -0
  146. data/lib/ecoportal/api/graphql/diff/pairing/engine.rb +173 -0
  147. data/lib/ecoportal/api/graphql/diff/pairing/ledger.rb +119 -0
  148. data/lib/ecoportal/api/graphql/diff/pairing/signals.rb +104 -0
  149. data/lib/ecoportal/api/graphql/diff/strategy.rb +113 -0
  150. data/lib/ecoportal/api/graphql/diff/version_diff.rb +332 -0
  151. data/lib/ecoportal/api/graphql/diff.rb +34 -0
  152. data/lib/ecoportal/api/graphql/error/locations_error/fetch_nested.rb +51 -51
  153. data/lib/ecoportal/api/graphql/error/locations_error.rb +28 -28
  154. data/lib/ecoportal/api/graphql/error/locations_validation_error.rb +20 -20
  155. data/lib/ecoportal/api/graphql/error/validation_errors.rb +28 -28
  156. data/lib/ecoportal/api/graphql/error.rb +12 -12
  157. data/lib/ecoportal/api/graphql/file_upload/client.rb +192 -0
  158. data/lib/ecoportal/api/graphql/file_upload.rb +10 -0
  159. data/lib/ecoportal/api/graphql/fragment/action.rb +65 -65
  160. data/lib/ecoportal/api/graphql/fragment/action_category.rb +17 -17
  161. data/lib/ecoportal/api/graphql/fragment/contractor_entity.rb +20 -20
  162. data/lib/ecoportal/api/graphql/fragment/field_configuration.rb +38 -0
  163. data/lib/ecoportal/api/graphql/fragment/force.rb +34 -0
  164. data/lib/ecoportal/api/graphql/fragment/location_draft.rb +53 -53
  165. data/lib/ecoportal/api/graphql/fragment/location_node.rb +26 -26
  166. data/lib/ecoportal/api/graphql/fragment/locations_error.rb +19 -19
  167. data/lib/ecoportal/api/graphql/fragment/page.rb +85 -0
  168. data/lib/ecoportal/api/graphql/fragment/page_task.rb +39 -0
  169. data/lib/ecoportal/api/graphql/fragment/pages/common_page_union.rb +396 -0
  170. data/lib/ecoportal/api/graphql/fragment/pages.rb +15 -0
  171. data/lib/ecoportal/api/graphql/fragment/pages_workflow.rb +172 -0
  172. data/lib/ecoportal/api/graphql/fragment/pagination.rb +17 -17
  173. data/lib/ecoportal/api/graphql/fragment/template.rb +51 -0
  174. data/lib/ecoportal/api/graphql/fragment.rb +40 -27
  175. data/lib/ecoportal/api/graphql/helpers/locations_tree.rb +41 -41
  176. data/lib/ecoportal/api/graphql/helpers.rb +10 -10
  177. data/lib/ecoportal/api/graphql/input/action/archive.rb +14 -14
  178. data/lib/ecoportal/api/graphql/input/action/create.rb +13 -13
  179. data/lib/ecoportal/api/graphql/input/action/update.rb +14 -14
  180. data/lib/ecoportal/api/graphql/input/action.rb +14 -14
  181. data/lib/ecoportal/api/graphql/input/contractor_entity/create.rb +14 -14
  182. data/lib/ecoportal/api/graphql/input/contractor_entity/destroy.rb +13 -13
  183. data/lib/ecoportal/api/graphql/input/contractor_entity/update.rb +41 -16
  184. data/lib/ecoportal/api/graphql/input/contractor_entity.rb +14 -14
  185. data/lib/ecoportal/api/graphql/input/delta_input.rb +16 -0
  186. data/lib/ecoportal/api/graphql/input/id_diff.rb +11 -11
  187. data/lib/ecoportal/api/graphql/input/location_structure/apply_commands.rb +47 -47
  188. data/lib/ecoportal/api/graphql/input/location_structure/archive_command.rb +13 -13
  189. data/lib/ecoportal/api/graphql/input/location_structure/delete_command.rb +13 -13
  190. data/lib/ecoportal/api/graphql/input/location_structure/draft/add_commands.rb +49 -49
  191. data/lib/ecoportal/api/graphql/input/location_structure/draft/create.rb +15 -15
  192. data/lib/ecoportal/api/graphql/input/location_structure/draft/delete.rb +15 -15
  193. data/lib/ecoportal/api/graphql/input/location_structure/draft/drop_bad_commands.rb +16 -16
  194. data/lib/ecoportal/api/graphql/input/location_structure/draft/publish.rb +16 -16
  195. data/lib/ecoportal/api/graphql/input/location_structure/draft.rb +19 -19
  196. data/lib/ecoportal/api/graphql/input/location_structure/insert_command.rb +13 -13
  197. data/lib/ecoportal/api/graphql/input/location_structure/move_command.rb +14 -14
  198. data/lib/ecoportal/api/graphql/input/location_structure/reorder_command.rb +13 -13
  199. data/lib/ecoportal/api/graphql/input/location_structure/unarchive_command.rb +13 -13
  200. data/lib/ecoportal/api/graphql/input/location_structure/update_command.rb +27 -27
  201. data/lib/ecoportal/api/graphql/input/location_structure.rb +20 -20
  202. data/lib/ecoportal/api/graphql/input/page/archive.rb +14 -0
  203. data/lib/ecoportal/api/graphql/input/page/build_from_template.rb +13 -0
  204. data/lib/ecoportal/api/graphql/input/page/create_draft.rb +13 -0
  205. data/lib/ecoportal/api/graphql/input/page/create_from_template.rb +18 -0
  206. data/lib/ecoportal/api/graphql/input/page/delete_draft.rb +13 -0
  207. data/lib/ecoportal/api/graphql/input/page/publish_draft.rb +13 -0
  208. data/lib/ecoportal/api/graphql/input/page/review_task.rb +14 -0
  209. data/lib/ecoportal/api/graphql/input/page/unarchive.rb +14 -0
  210. data/lib/ecoportal/api/graphql/input/page/update.rb +140 -0
  211. data/lib/ecoportal/api/graphql/input/page.rb +26 -0
  212. data/lib/ecoportal/api/graphql/input/preset_view/create.rb +18 -0
  213. data/lib/ecoportal/api/graphql/input/preset_view/permission.rb +16 -0
  214. data/lib/ecoportal/api/graphql/input/preset_view/update.rb +16 -0
  215. data/lib/ecoportal/api/graphql/input/preset_view.rb +14 -0
  216. data/lib/ecoportal/api/graphql/input/register/create.rb +18 -0
  217. data/lib/ecoportal/api/graphql/input/register/update.rb +15 -0
  218. data/lib/ecoportal/api/graphql/input/register.rb +13 -0
  219. data/lib/ecoportal/api/graphql/input/search.rb +13 -13
  220. data/lib/ecoportal/api/graphql/input/search_conf/ai_generator.rb +234 -0
  221. data/lib/ecoportal/api/graphql/input/search_conf.rb +436 -0
  222. data/lib/ecoportal/api/graphql/input/search_filter.rb +12 -12
  223. data/lib/ecoportal/api/graphql/input/search_sorter.rb +11 -11
  224. data/lib/ecoportal/api/graphql/input/variable_binding.rb +20 -0
  225. data/lib/ecoportal/api/graphql/input/workflow_command/add_action_tag.rb +18 -0
  226. data/lib/ecoportal/api/graphql/input/workflow_command/add_binding.rb +18 -0
  227. data/lib/ecoportal/api/graphql/input/workflow_command/add_comment_tagging_user_group.rb +18 -0
  228. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_direct_strategy_user.rb +18 -0
  229. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_strategy.rb +18 -0
  230. data/lib/ecoportal/api/graphql/input/workflow_command/add_direct_strategy_user.rb +18 -0
  231. data/lib/ecoportal/api/graphql/input/workflow_command/add_field.rb +27 -0
  232. data/lib/ecoportal/api/graphql/input/workflow_command/add_force.rb +18 -0
  233. data/lib/ecoportal/api/graphql/input/workflow_command/add_gauge_field_stop.rb +19 -0
  234. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_field_config.rb +23 -0
  235. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_helper.rb +18 -0
  236. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation.rb +18 -0
  237. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_direct_strategy_user.rb +18 -0
  238. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_strategy.rb +18 -0
  239. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_action_type.rb +18 -0
  240. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_filter.rb +18 -0
  241. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_people_field.rb +18 -0
  242. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_task_config.rb +18 -0
  243. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_user.rb +18 -0
  244. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback.rb +23 -0
  245. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback_action.rb +18 -0
  246. data/lib/ecoportal/api/graphql/input/workflow_command/add_section.rb +18 -0
  247. data/lib/ecoportal/api/graphql/input/workflow_command/add_select_field_option.rb +19 -0
  248. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage.rb +18 -0
  249. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_section.rb +18 -0
  250. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_tag.rb +18 -0
  251. data/lib/ecoportal/api/graphql/input/workflow_command/add_strategy.rb +18 -0
  252. data/lib/ecoportal/api/graphql/input/workflow_command/add_task.rb +18 -0
  253. data/lib/ecoportal/api/graphql/input/workflow_command/add_task_assignment_user_group.rb +18 -0
  254. data/lib/ecoportal/api/graphql/input/workflow_command/add_workflow_callback.rb +18 -0
  255. data/lib/ecoportal/api/graphql/input/workflow_command/collapse_section.rb +18 -0
  256. data/lib/ecoportal/api/graphql/input/workflow_command/edit_binding.rb +18 -0
  257. data/lib/ecoportal/api/graphql/input/workflow_command/edit_creator_permissions.rb +18 -0
  258. data/lib/ecoportal/api/graphql/input/workflow_command/edit_default_strategy.rb +18 -0
  259. data/lib/ecoportal/api/graphql/input/workflow_command/edit_field_configuration.rb +21 -0
  260. data/lib/ecoportal/api/graphql/input/workflow_command/edit_force.rb +18 -0
  261. data/lib/ecoportal/api/graphql/input/workflow_command/edit_gauge_field_stop.rb +19 -0
  262. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_field_config.rb +19 -0
  263. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_helper.rb +18 -0
  264. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation.rb +18 -0
  265. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation_strategy.rb +18 -0
  266. data/lib/ecoportal/api/graphql/input/workflow_command/edit_page.rb +28 -0
  267. data/lib/ecoportal/api/graphql/input/workflow_command/edit_page_creator_permissions.rb +18 -0
  268. data/lib/ecoportal/api/graphql/input/workflow_command/edit_reminder.rb +18 -0
  269. data/lib/ecoportal/api/graphql/input/workflow_command/edit_required_sign_offs.rb +18 -0
  270. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_comment_tagging.rb +18 -0
  271. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_task_assignment.rb +18 -0
  272. data/lib/ecoportal/api/graphql/input/workflow_command/edit_scheduled_callback.rb +22 -0
  273. data/lib/ecoportal/api/graphql/input/workflow_command/edit_section_header.rb +18 -0
  274. data/lib/ecoportal/api/graphql/input/workflow_command/edit_select_field_option.rb +19 -0
  275. data/lib/ecoportal/api/graphql/input/workflow_command/edit_stage.rb +18 -0
  276. data/lib/ecoportal/api/graphql/input/workflow_command/edit_strategy.rb +18 -0
  277. data/lib/ecoportal/api/graphql/input/workflow_command/edit_task_due.rb +18 -0
  278. data/lib/ecoportal/api/graphql/input/workflow_command/edit_trigger.rb +18 -0
  279. data/lib/ecoportal/api/graphql/input/workflow_command/expand_section.rb +18 -0
  280. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/contractor_entities.rb +24 -0
  281. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/cross_reference.rb +23 -0
  282. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/date.rb +20 -0
  283. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/gauge.rb +20 -0
  284. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/image_gallery.rb +20 -0
  285. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/location_field.rb +24 -0
  286. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/people.rb +24 -0
  287. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/plain_text.rb +20 -0
  288. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/rich_text.rb +20 -0
  289. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/select.rb +20 -0
  290. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/signature.rb +20 -0
  291. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/table.rb +25 -0
  292. data/lib/ecoportal/api/graphql/input/workflow_command/move_field.rb +18 -0
  293. data/lib/ecoportal/api/graphql/input/workflow_command/move_stage.rb +18 -0
  294. data/lib/ecoportal/api/graphql/input/workflow_command/remove_action_tag.rb +18 -0
  295. data/lib/ecoportal/api/graphql/input/workflow_command/remove_binding.rb +18 -0
  296. data/lib/ecoportal/api/graphql/input/workflow_command/remove_callback.rb +18 -0
  297. data/lib/ecoportal/api/graphql/input/workflow_command/remove_comment_tagging_user_group.rb +18 -0
  298. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_direct_strategy_user.rb +18 -0
  299. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_strategy.rb +18 -0
  300. data/lib/ecoportal/api/graphql/input/workflow_command/remove_direct_strategy_user.rb +18 -0
  301. data/lib/ecoportal/api/graphql/input/workflow_command/remove_field.rb +18 -0
  302. data/lib/ecoportal/api/graphql/input/workflow_command/remove_force.rb +18 -0
  303. data/lib/ecoportal/api/graphql/input/workflow_command/remove_gauge_field_stop.rb +17 -0
  304. data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_field_config.rb +17 -0
  305. data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_helper.rb +18 -0
  306. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation.rb +18 -0
  307. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_direct_strategy_user.rb +18 -0
  308. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_strategy.rb +18 -0
  309. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_action_type.rb +18 -0
  310. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_filter.rb +18 -0
  311. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_people_field.rb +18 -0
  312. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_task_config.rb +18 -0
  313. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_user.rb +18 -0
  314. data/lib/ecoportal/api/graphql/input/workflow_command/remove_scheduled_callback.rb +18 -0
  315. data/lib/ecoportal/api/graphql/input/workflow_command/remove_section.rb +18 -0
  316. data/lib/ecoportal/api/graphql/input/workflow_command/remove_select_field_option.rb +17 -0
  317. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage.rb +18 -0
  318. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_section.rb +18 -0
  319. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_tag.rb +18 -0
  320. data/lib/ecoportal/api/graphql/input/workflow_command/remove_strategy.rb +18 -0
  321. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task.rb +18 -0
  322. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_assignment_user_group.rb +18 -0
  323. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_due.rb +18 -0
  324. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_priority_level.rb +18 -0
  325. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_forces.rb +18 -0
  326. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_section.rb +18 -0
  327. data/lib/ecoportal/api/graphql/input/workflow_command.rb +251 -0
  328. data/lib/ecoportal/api/graphql/input.rb +24 -16
  329. data/lib/ecoportal/api/graphql/interface/base_page.rb +100 -58
  330. data/lib/ecoportal/api/graphql/interface/location_structure/command.rb +30 -30
  331. data/lib/ecoportal/api/graphql/interface/location_structure/node.rb +43 -43
  332. data/lib/ecoportal/api/graphql/interface/location_structure/nodes.rb +27 -28
  333. data/lib/ecoportal/api/graphql/interface/location_structure.rb +14 -14
  334. data/lib/ecoportal/api/graphql/interface.rb +11 -11
  335. data/lib/ecoportal/api/graphql/logic/base_model.rb +15 -13
  336. data/lib/ecoportal/api/graphql/logic/base_query.rb +193 -150
  337. data/lib/ecoportal/api/graphql/logic/connection.rb +34 -34
  338. data/lib/ecoportal/api/graphql/logic/input.rb +26 -11
  339. data/lib/ecoportal/api/graphql/logic/mutation.rb +59 -59
  340. data/lib/ecoportal/api/graphql/logic/payload.rb +42 -42
  341. data/lib/ecoportal/api/graphql/logic/query.rb +23 -23
  342. data/lib/ecoportal/api/graphql/logic/query_array.rb +30 -30
  343. data/lib/ecoportal/api/graphql/logic/query_connection.rb +48 -48
  344. data/lib/ecoportal/api/graphql/logic.rb +18 -18
  345. data/lib/ecoportal/api/graphql/model/account.rb +15 -15
  346. data/lib/ecoportal/api/graphql/model/action.rb +22 -22
  347. data/lib/ecoportal/api/graphql/model/ai_summary_version.rb +10 -0
  348. data/lib/ecoportal/api/graphql/model/contractor_entity.rb +12 -12
  349. data/lib/ecoportal/api/graphql/model/field.rb +10 -10
  350. data/lib/ecoportal/api/graphql/model/file_attachment.rb +10 -10
  351. data/lib/ecoportal/api/graphql/model/file_container.rb +11 -11
  352. data/lib/ecoportal/api/graphql/model/location_node.rb +14 -14
  353. data/lib/ecoportal/api/graphql/model/location_structure/draft/structure.rb +15 -15
  354. data/lib/ecoportal/api/graphql/model/location_structure/draft.rb +15 -15
  355. data/lib/ecoportal/api/graphql/model/location_structure.rb +16 -16
  356. data/lib/ecoportal/api/graphql/model/organization.rb +65 -55
  357. data/lib/ecoportal/api/graphql/model/page/basic.rb +14 -0
  358. data/lib/ecoportal/api/graphql/model/page/data_field.rb +12 -12
  359. data/lib/ecoportal/api/graphql/model/page/phased/stage.rb +14 -14
  360. data/lib/ecoportal/api/graphql/model/page/phased.rb +82 -20
  361. data/lib/ecoportal/api/graphql/model/page/section.rb +12 -12
  362. data/lib/ecoportal/api/graphql/model/page/task.rb +16 -0
  363. data/lib/ecoportal/api/graphql/model/page.rb +16 -14
  364. data/lib/ecoportal/api/graphql/model/page_union.rb +21 -0
  365. data/lib/ecoportal/api/graphql/model/pages_workflow.rb +20 -0
  366. data/lib/ecoportal/api/graphql/model/person_member.rb +15 -15
  367. data/lib/ecoportal/api/graphql/model/preset_view.rb +10 -0
  368. data/lib/ecoportal/api/graphql/model/preview_page.rb +10 -0
  369. data/lib/ecoportal/api/graphql/model/register.rb +10 -0
  370. data/lib/ecoportal/api/graphql/model/resource.rb +13 -13
  371. data/lib/ecoportal/api/graphql/model/template.rb +15 -0
  372. data/lib/ecoportal/api/graphql/model/user.rb +14 -14
  373. data/lib/ecoportal/api/graphql/model.rb +32 -22
  374. data/lib/ecoportal/api/graphql/mutation/action/archive.rb +41 -41
  375. data/lib/ecoportal/api/graphql/mutation/action/create.rb +40 -40
  376. data/lib/ecoportal/api/graphql/mutation/action/update.rb +40 -40
  377. data/lib/ecoportal/api/graphql/mutation/action.rb +14 -14
  378. data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +45 -0
  379. data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +40 -0
  380. data/lib/ecoportal/api/graphql/mutation/ai_summary.rb +13 -0
  381. data/lib/ecoportal/api/graphql/mutation/contractor_entity/create.rb +40 -40
  382. data/lib/ecoportal/api/graphql/mutation/contractor_entity/destroy.rb +40 -40
  383. data/lib/ecoportal/api/graphql/mutation/contractor_entity/update.rb +40 -40
  384. data/lib/ecoportal/api/graphql/mutation/contractor_entity.rb +14 -14
  385. data/lib/ecoportal/api/graphql/mutation/kickstand/bulk_update_jobs.rb +43 -0
  386. data/lib/ecoportal/api/graphql/mutation/kickstand/bulk_update_workflows.rb +43 -0
  387. data/lib/ecoportal/api/graphql/mutation/kickstand/fail_job.rb +39 -0
  388. data/lib/ecoportal/api/graphql/mutation/kickstand/fail_workflow.rb +39 -0
  389. data/lib/ecoportal/api/graphql/mutation/kickstand/start_job.rb +39 -0
  390. data/lib/ecoportal/api/graphql/mutation/kickstand/start_workflow.rb +39 -0
  391. data/lib/ecoportal/api/graphql/mutation/kickstand/stop_workflow.rb +39 -0
  392. data/lib/ecoportal/api/graphql/mutation/kickstand.rb +18 -0
  393. data/lib/ecoportal/api/graphql/mutation/location_structure/apply_commands.rb +54 -54
  394. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/add_commands.rb +55 -55
  395. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/create.rb +54 -54
  396. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/delete.rb +43 -43
  397. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/drop_bad_commands.rb +56 -56
  398. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/publish.rb +66 -66
  399. data/lib/ecoportal/api/graphql/mutation/location_structure/draft.rb +18 -18
  400. data/lib/ecoportal/api/graphql/mutation/location_structure.rb +13 -13
  401. data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +40 -0
  402. data/lib/ecoportal/api/graphql/mutation/page/archive.rb +40 -0
  403. data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +38 -0
  404. data/lib/ecoportal/api/graphql/mutation/page/build_from_template.rb +50 -0
  405. data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +38 -0
  406. data/lib/ecoportal/api/graphql/mutation/page/create_from_template.rb +43 -0
  407. data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +38 -0
  408. data/lib/ecoportal/api/graphql/mutation/page/execute_force_commands.rb +69 -0
  409. data/lib/ecoportal/api/graphql/mutation/page/execute_workflow_commands.rb +52 -0
  410. data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +38 -0
  411. data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +40 -0
  412. data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +40 -0
  413. data/lib/ecoportal/api/graphql/mutation/page/unarchive.rb +40 -0
  414. data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +40 -0
  415. data/lib/ecoportal/api/graphql/mutation/page/update.rb +40 -0
  416. data/lib/ecoportal/api/graphql/mutation/page/update_variable_bindings.rb +44 -0
  417. data/lib/ecoportal/api/graphql/mutation/page.rb +28 -0
  418. data/lib/ecoportal/api/graphql/mutation/preset_view/create.rb +35 -0
  419. data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +34 -0
  420. data/lib/ecoportal/api/graphql/mutation/preset_view/permission.rb +37 -0
  421. data/lib/ecoportal/api/graphql/mutation/preset_view/update.rb +35 -0
  422. data/lib/ecoportal/api/graphql/mutation/preset_view.rb +15 -0
  423. data/lib/ecoportal/api/graphql/mutation/register/create.rb +35 -0
  424. data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +35 -0
  425. data/lib/ecoportal/api/graphql/mutation/register/update.rb +35 -0
  426. data/lib/ecoportal/api/graphql/mutation/register.rb +14 -0
  427. data/lib/ecoportal/api/graphql/mutation/smart_fill/generate.rb +36 -0
  428. data/lib/ecoportal/api/graphql/mutation/smart_fill/submit_feedback.rb +40 -0
  429. data/lib/ecoportal/api/graphql/mutation/smart_fill.rb +13 -0
  430. data/lib/ecoportal/api/graphql/mutation/template/create.rb +39 -0
  431. data/lib/ecoportal/api/graphql/mutation/template/create_related_page.rb +46 -0
  432. data/lib/ecoportal/api/graphql/mutation/template/destroy_related_page.rb +43 -0
  433. data/lib/ecoportal/api/graphql/mutation/template/publish.rb +39 -0
  434. data/lib/ecoportal/api/graphql/mutation/template/unpublish.rb +39 -0
  435. data/lib/ecoportal/api/graphql/mutation/template/update.rb +43 -0
  436. data/lib/ecoportal/api/graphql/mutation/template/update_information.rb +43 -0
  437. data/lib/ecoportal/api/graphql/mutation/template.rb +18 -0
  438. data/lib/ecoportal/api/graphql/mutation.rb +20 -12
  439. data/lib/ecoportal/api/graphql/payload/action/archive.rb +13 -13
  440. data/lib/ecoportal/api/graphql/payload/action/create.rb +13 -13
  441. data/lib/ecoportal/api/graphql/payload/action/update.rb +13 -13
  442. data/lib/ecoportal/api/graphql/payload/action.rb +14 -14
  443. data/lib/ecoportal/api/graphql/payload/ai_summary_generate.rb +12 -0
  444. data/lib/ecoportal/api/graphql/payload/contractor_entity/create.rb +13 -13
  445. data/lib/ecoportal/api/graphql/payload/contractor_entity/destroy.rb +12 -12
  446. data/lib/ecoportal/api/graphql/payload/contractor_entity/update.rb +12 -12
  447. data/lib/ecoportal/api/graphql/payload/contractor_entity.rb +14 -14
  448. data/lib/ecoportal/api/graphql/payload/execute_workflow_commands.rb +36 -0
  449. data/lib/ecoportal/api/graphql/payload/force_commands.rb +31 -0
  450. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_jobs.rb +36 -0
  451. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_workflows.rb +36 -0
  452. data/lib/ecoportal/api/graphql/payload/kickstand/job.rb +13 -0
  453. data/lib/ecoportal/api/graphql/payload/kickstand/workflow.rb +13 -0
  454. data/lib/ecoportal/api/graphql/payload/kickstand.rb +15 -0
  455. data/lib/ecoportal/api/graphql/payload/location_structure/apply_commands.rb +51 -51
  456. data/lib/ecoportal/api/graphql/payload/location_structure/command_execution_result.rb +50 -50
  457. data/lib/ecoportal/api/graphql/payload/location_structure/draft/add_commands.rb +30 -30
  458. data/lib/ecoportal/api/graphql/payload/location_structure/draft/create.rb +33 -34
  459. data/lib/ecoportal/api/graphql/payload/location_structure/draft/delete.rb +30 -30
  460. data/lib/ecoportal/api/graphql/payload/location_structure/draft/drop_bad_commands.rb +43 -43
  461. data/lib/ecoportal/api/graphql/payload/location_structure/draft/publish.rb +63 -63
  462. data/lib/ecoportal/api/graphql/payload/location_structure/draft.rb +18 -18
  463. data/lib/ecoportal/api/graphql/payload/location_structure.rb +14 -14
  464. data/lib/ecoportal/api/graphql/payload/ok_payload.rb +36 -0
  465. data/lib/ecoportal/api/graphql/payload/page/archive.rb +13 -0
  466. data/lib/ecoportal/api/graphql/payload/page/build_from_template.rb +13 -0
  467. data/lib/ecoportal/api/graphql/payload/page/create_from_template.rb +13 -0
  468. data/lib/ecoportal/api/graphql/payload/page/draft.rb +26 -0
  469. data/lib/ecoportal/api/graphql/payload/page/review_task.rb +13 -0
  470. data/lib/ecoportal/api/graphql/payload/page/review_task_batch.rb +23 -0
  471. data/lib/ecoportal/api/graphql/payload/page/unarchive.rb +13 -0
  472. data/lib/ecoportal/api/graphql/payload/page/update.rb +13 -0
  473. data/lib/ecoportal/api/graphql/payload/page/update_variable_bindings.rb +13 -0
  474. data/lib/ecoportal/api/graphql/payload/page.rb +20 -0
  475. data/lib/ecoportal/api/graphql/payload/preset_view.rb +15 -0
  476. data/lib/ecoportal/api/graphql/payload/register.rb +15 -0
  477. data/lib/ecoportal/api/graphql/payload/template/create.rb +13 -0
  478. data/lib/ecoportal/api/graphql/payload/template/create_related_page.rb +13 -0
  479. data/lib/ecoportal/api/graphql/payload/template/destroy_related_page.rb +13 -0
  480. data/lib/ecoportal/api/graphql/payload/template/publish.rb +13 -0
  481. data/lib/ecoportal/api/graphql/payload/template/unpublish.rb +13 -0
  482. data/lib/ecoportal/api/graphql/payload/template/update.rb +13 -0
  483. data/lib/ecoportal/api/graphql/payload/template/update_information.rb +13 -0
  484. data/lib/ecoportal/api/graphql/payload/template.rb +18 -0
  485. data/lib/ecoportal/api/graphql/payload.rb +23 -12
  486. data/lib/ecoportal/api/graphql/query/action.rb +33 -33
  487. data/lib/ecoportal/api/graphql/query/action_categories.rb +53 -53
  488. data/lib/ecoportal/api/graphql/query/actions.rb +43 -43
  489. data/lib/ecoportal/api/graphql/query/contractor_entities.rb +53 -53
  490. data/lib/ecoportal/api/graphql/query/file_upload_signature.rb +76 -0
  491. data/lib/ecoportal/api/graphql/query/location_classifications.rb +39 -39
  492. data/lib/ecoportal/api/graphql/query/location_structure/draft.rb +62 -62
  493. data/lib/ecoportal/api/graphql/query/location_structure.rb +61 -61
  494. data/lib/ecoportal/api/graphql/query/location_structures.rb +57 -57
  495. data/lib/ecoportal/api/graphql/query/page.rb +45 -0
  496. data/lib/ecoportal/api/graphql/query/page_delta.rb +47 -0
  497. data/lib/ecoportal/api/graphql/query/page_with_forces.rb +49 -0
  498. data/lib/ecoportal/api/graphql/query/pages.rb +59 -0
  499. data/lib/ecoportal/api/graphql/query/pages_workflow_commands.rb +65 -0
  500. data/lib/ecoportal/api/graphql/query/register_preset_views.rb +78 -0
  501. data/lib/ecoportal/api/graphql/query/register_preview_pages.rb +83 -0
  502. data/lib/ecoportal/api/graphql/query/templates.rb +53 -0
  503. data/lib/ecoportal/api/graphql/query.rb +27 -16
  504. data/lib/ecoportal/api/graphql.rb +143 -80
  505. data/lib/ecoportal/api/graphql_version.rb +5 -5
  506. data/lib/ecoportal/api-graphql.rb +10 -10
  507. metadata +328 -25
  508. data/.gitignore +0 -24
  509. data/.markdownlint.json +0 -4
  510. data/.rspec +0 -3
  511. data/.rubocop.yml +0 -97
  512. data/.ruby-version +0 -1
  513. data/.yardopts +0 -10
  514. data/Gemfile +0 -6
  515. data/Rakefile +0 -38
  516. data/bin/console +0 -14
  517. data/bin/setup +0 -8
  518. data/bin/setup.ps1 +0 -6
  519. data/ecoportal-api-graphql.gemspec +0 -40
  520. data/tests/actions_get.rb +0 -7
  521. data/tests/contractor_entities_get.rb +0 -20
  522. data/tests/contractor_entity_create.rb +0 -19
  523. data/tests/contractor_entity_udpate.rb +0 -20
  524. data/tests/loc_structure_get.rb +0 -11
  525. data/tests/loc_structure_update.rb +0 -51
  526. data/tests/loc_structures_get.rb +0 -15
  527. data/tests/local_libs.rb +0 -20
@@ -1,105 +1,105 @@
1
- module Ecoportal
2
- module API
3
- module Common
4
- module GraphQL
5
- module HashHelpers
6
- class << self
7
- def included(base)
8
- base.send(:include, InstanceMethods)
9
- end
10
- end
11
-
12
- module InstanceMethods
13
- def keys_to_sym_deep(value)
14
- transform_keys_deep(value, &:to_sym)
15
- end
16
-
17
- def keys_to_s_deep(value)
18
- transform_keys_deep(value, &:to_s)
19
- end
20
-
21
- def except_keys(value, *keys)
22
- return value unless value.is_a?(Hash)
23
-
24
- deep_dup(value).tap do |out|
25
- keys.each {|key| out.delete(key)}
26
- end
27
- end
28
-
29
- # Targetted removal of keys in `target` that are `nil`
30
- def remove_nil_keys_deep(value, target: [])
31
- remove_keys_deep_if(value, target: target, &:nil?)
32
- end
33
-
34
- # Based on Rails support.
35
- def deep_dup(data)
36
- case data
37
- when Hash
38
- data.each_with_object({}) do |(k, v), copy|
39
- if k.is_a?(::String) || k.is_a?(::Symbol)
40
- copy[k] = deep_dup(v)
41
- else
42
- copy.delete(k)
43
- copy[deep_dup(k)] = deep_dup(v)
44
- end
45
- end
46
- when Enumerable
47
- data.map {|d| deep_dup(d)}
48
- else
49
- data.dup
50
- end
51
- end
52
-
53
- private
54
-
55
- # Iterator
56
- # @param value [Variadic]
57
- # @return [value.class]
58
- def transform_keys_deep(value, &block)
59
- case value
60
- when Hash
61
- value.dup.each_with_object({}) do |(k, v), out|
62
- k_val = block_given?? yield(k) : k
63
- out[k_val] = transform_keys_deep(v, &block)
64
- end
65
- when Enumerable
66
- value.map {|v| transform_keys_deep(v, &block)}
67
- else
68
- value
69
- end
70
- end
71
-
72
- # Targetted removal of keys in `target` that meet
73
- # the `block` condition.
74
- # @param value [Variadic]
75
- # @param target [Array<String>, Array<Symbol>] the target
76
- # `keys` to yield `block` onto.
77
- # @return [value.class]
78
- def remove_keys_deep_if(value, target: [], &block)
79
- msg = 'Expected block. None given.'
80
- raise ArgumentError, msg unless block_given?
81
-
82
- target = [target].flatten.compact
83
- return value if target.empty?
84
-
85
- case value
86
- when Hash
87
- value.dup.each_with_object({}) do |(k, v), out|
88
- next if yield(v) && target.include?(k) # skip
89
-
90
- out[k] = remove_nil_keys_deep(v, target: target, &block)
91
- end
92
- when Enumerable
93
- value.map {|v| remove_nil_keys_deep(v, target: target, &block)}
94
- else
95
- value
96
- end
97
- end
98
- end
99
-
100
- extend InstanceMethods
101
- end
102
- end
103
- end
104
- end
105
- end
1
+ module Ecoportal
2
+ module API
3
+ module Common
4
+ module GraphQL
5
+ module HashHelpers
6
+ class << self
7
+ def included(base)
8
+ base.send(:include, InstanceMethods)
9
+ end
10
+ end
11
+
12
+ module InstanceMethods
13
+ def keys_to_sym_deep(value)
14
+ transform_keys_deep(value, &:to_sym)
15
+ end
16
+
17
+ def keys_to_s_deep(value)
18
+ transform_keys_deep(value, &:to_s)
19
+ end
20
+
21
+ def except_keys(value, *keys)
22
+ return value unless value.is_a?(Hash)
23
+
24
+ deep_dup(value).tap do |out|
25
+ keys.each {|key| out.delete(key)}
26
+ end
27
+ end
28
+
29
+ # Targetted removal of keys in `target` that are `nil`
30
+ def remove_nil_keys_deep(value, target: [])
31
+ remove_keys_deep_if(value, target: target, &:nil?)
32
+ end
33
+
34
+ # Based on Rails support.
35
+ def deep_dup(data)
36
+ case data
37
+ when Hash
38
+ data.each_with_object({}) do |(k, v), copy|
39
+ if k.is_a?(::String) || k.is_a?(::Symbol)
40
+ copy[k] = deep_dup(v)
41
+ else
42
+ copy.delete(k)
43
+ copy[deep_dup(k)] = deep_dup(v)
44
+ end
45
+ end
46
+ when Enumerable
47
+ data.map {|d| deep_dup(d)}
48
+ else
49
+ data.dup
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ # Iterator
56
+ # @param value [Variadic]
57
+ # @return [value.class]
58
+ def transform_keys_deep(value, &block)
59
+ case value
60
+ when Hash
61
+ value.dup.each_with_object({}) do |(k, v), out|
62
+ k_val = block_given?? yield(k) : k
63
+ out[k_val] = transform_keys_deep(v, &block)
64
+ end
65
+ when Enumerable
66
+ value.map {|v| transform_keys_deep(v, &block)}
67
+ else
68
+ value
69
+ end
70
+ end
71
+
72
+ # Targetted removal of keys in `target` that meet
73
+ # the `block` condition.
74
+ # @param value [Variadic]
75
+ # @param target [Array<String>, Array<Symbol>] the target
76
+ # `keys` to yield `block` onto.
77
+ # @return [value.class]
78
+ def remove_keys_deep_if(value, target: [], &block)
79
+ msg = 'Expected block. None given.'
80
+ raise ArgumentError, msg unless block_given?
81
+
82
+ target = [target].flatten.compact
83
+ return value if target.empty?
84
+
85
+ case value
86
+ when Hash
87
+ value.dup.each_with_object({}) do |(k, v), out|
88
+ next if yield(v) && target.include?(k) # skip
89
+
90
+ out[k] = remove_nil_keys_deep(v, target: target, &block)
91
+ end
92
+ when Enumerable
93
+ value.map {|v| remove_nil_keys_deep(v, target: target, &block)}
94
+ else
95
+ value
96
+ end
97
+ end
98
+ end
99
+
100
+ extend InstanceMethods
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -1,145 +1,195 @@
1
- module Ecoportal
2
- module API
3
- module Common
4
- module GraphQL
5
- class HttpClient < Common::Client
6
- class << self
7
- def base_url(host)
8
- "#{protocol(host)}://#{host}"
9
- end
10
-
11
- def protocol(host)
12
- host.match(/^localhost|^127\.0\.0\.1/)? 'http' : 'https'
13
- end
14
- end
15
-
16
- READ_TIMEOUT = 90
17
- WRITE_TIMEOUT = 90
18
-
19
- attr_reader :host, :version
20
-
21
- include Ecoportal::API::Common::GraphQL::AuthService
22
-
23
- def initialize(
24
- email: nil,
25
- pass: nil,
26
- org_id: nil,
27
- api_key: nil,
28
- version: 'graphql',
29
- host: 'live.ecoportal.com',
30
- logger: ::Logger.new(IO::NULL),
31
- deep_logging: false,
32
- no_schema: true
33
- )
34
- @org_id = org_id
35
- @user_email = email
36
- @user_pass = pass
37
- @no_schema = no_schema
38
- @version = version
39
-
40
- super(
41
- api_key: api_key,
42
- host: host,
43
- logger: logger,
44
- deep_logging: deep_logging
45
- )
46
- end
47
-
48
- # Creates a HTTP object adding the `X-ApiKey` or `X-ECOPORTAL-API-KEY` param to the header, depending on the API version.
49
- # @note It configures HTTP so it only allows body data in json format.
50
- # @return [HTTP] HTTP object.
51
- def base_request
52
- @base_request ||=
53
- case @version
54
- when NilClass, 'http'
55
- HTTP
56
- when 'v1', 'v0'
57
- HTTP.headers('X-ApiKey' => key_token)
58
- when 'v2', 'v3'
59
- HTTP.headers('X-ECOPORTAL-API-KEY' => key_token)
60
- when 'graphql'
61
- HTTP.headers('Authorization' => "Bearer #{key_token}")
62
- end.then do |request|
63
- request.accept(:json).timeout(
64
- read: READ_TIMEOUT,
65
- write: WRITE_TIMEOUT
66
- )
67
- end
68
- end
69
-
70
- def org_id
71
- @org_id || fetch_env_required('ORGANIZATION_ID')
72
- end
73
-
74
- # Full URl builder of the request
75
- # @param path [String] the tail that completes the url of the request.
76
- # @return [String] the final url.
77
- def url_for(path)
78
- "#{api_url}#{path}"
79
- end
80
-
81
- private
82
-
83
- def key_token
84
- return if http?
85
- return session_token(host: host) if graphql?
86
- return @api_key if api_key?
87
- return ENV['ORG_INT_KEY'] if v0?
88
-
89
- puts 'Api-key missing!'
90
- end
91
-
92
- def api_url
93
- base_url.then do |url|
94
- next "#{url}/api/#{version}" if v1_0? || v2_3?
95
- next "#{url}/api/#{org_id}/graphql" if graphql?
96
-
97
- url
98
- end
99
- end
100
-
101
- def base_url
102
- @base_url ||= self.class.base_url(host)
103
- end
104
-
105
- def protocol
106
- @protocol ||= self.class.protocol(host)
107
- end
108
-
109
- def http?
110
- return true if @version.nil?
111
-
112
- @version == 'http'
113
- end
114
-
115
- def api_key?
116
- @api_key && !@api_key.match(/\A\W*\z/)
117
- end
118
-
119
- def v1_0?
120
- v1? || v0?
121
- end
122
-
123
- def v1?
124
- @version == 'v1'
125
- end
126
-
127
- def v0?
128
- @version == 'v0'
129
- end
130
-
131
- def v2_3?
132
- return true if @version == 'v2'
133
- return true if @version == 'v3'
134
-
135
- false
136
- end
137
-
138
- def graphql?
139
- @version == 'graphql'
140
- end
141
- end
142
- end
143
- end
144
- end
145
- end
1
+ module Ecoportal
2
+ module API
3
+ module Common
4
+ module GraphQL
5
+ class ResponseError < StandardError; end
6
+
7
+ class HttpClient < Common::Client
8
+ class << self
9
+ def base_url(host)
10
+ "#{protocol(host)}://#{host}"
11
+ end
12
+
13
+ def protocol(host)
14
+ host.match(/^localhost|^127\.0\.0\.1/)? 'http' : 'https'
15
+ end
16
+ end
17
+
18
+ ENDPOINT_PATH = 'external/graphql'.freeze
19
+ READ_TIMEOUT = 90
20
+ WRITE_TIMEOUT = 90
21
+
22
+ attr_reader :host, :version
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
+
30
+ include Ecoportal::API::Common::GraphQL::AuthService
31
+
32
+ def initialize(
33
+ email: nil,
34
+ pass: nil,
35
+ org_id: nil,
36
+ api_key: nil,
37
+ version: 'graphql',
38
+ host: 'live.ecoportal.com',
39
+ logger: ::Logger.new(IO::NULL),
40
+ deep_logging: false,
41
+ no_schema: true
42
+ )
43
+ @org_id = org_id
44
+ @user_email = email
45
+ @user_pass = pass
46
+ @no_schema = no_schema
47
+ @version = version
48
+
49
+ super(
50
+ api_key: api_key,
51
+ host: host,
52
+ logger: logger,
53
+ deep_logging: deep_logging
54
+ )
55
+ end
56
+
57
+ # Creates a HTTP object adding the `X-ApiKey` or `X-ECOPORTAL-API-KEY` param to the header, depending on the API version.
58
+ # @note It configures HTTP so it only allows body data in json format.
59
+ # @return [HTTP] HTTP object.
60
+ def base_request
61
+ @base_request ||=
62
+ case @version
63
+ when NilClass, 'http'
64
+ HTTP
65
+ when 'v1', 'v0'
66
+ HTTP.headers('X-ApiKey' => key_token)
67
+ when 'v2', 'v3'
68
+ HTTP.headers('X-ECOPORTAL-API-KEY' => key_token)
69
+ when 'graphql'
70
+ HTTP.headers('Authorization' => "Bearer #{session_token(host: host)}")
71
+ end.then do |request|
72
+ request ||= HTTP
73
+ request.accept(:json).timeout(
74
+ read: READ_TIMEOUT,
75
+ write: WRITE_TIMEOUT
76
+ )
77
+ end
78
+ end
79
+
80
+ def org_id
81
+ @org_id || fetch_env_required('ORGANIZATION_ID')
82
+ end
83
+
84
+ # Executes a GraphQL query or mutation over HTTP.
85
+ # @param query_string [String] full GraphQL query document.
86
+ # @param variables [Hash] variable values to pass to the operation.
87
+ # @param operation_name [String, nil] when the document has multiple operations.
88
+ # @return [Hash] parsed response body (string-keyed, includes 'data' and optionally 'errors').
89
+ # @raise [Ecoportal::API::Common::Client::Error::UnexpectedServerError] on non-2xx HTTP status.
90
+ # @raise [Ecoportal::API::Common::GraphQL::ResponseError] when the response body contains GraphQL errors.
91
+ def execute(query_string, variables: {}, operation_name: nil)
92
+ body = { query: query_string, variables: variables }
93
+ body[:operationName] = operation_name if operation_name
94
+
95
+ # Route through the inherited `Common::Client` pipeline
96
+ # (`instrument` -> `with_retry` { `rate_throttling` }) so GraphQL requests
97
+ # inherit the SAME battle-tested contingencies as the REST clients:
98
+ # rate-limit backoff (429 / Cloudflare 1015), 5xx + connection-error retries,
99
+ # timeouts, and instrumentation. Do NOT re-issue the request raw here — that
100
+ # bypasses all of the above and is what let live runs die on the first 429.
101
+ response = instrument('POST', ENDPOINT_PATH, body) do
102
+ request { |http| http.post(url_for(''), json: body) }
103
+ end
104
+
105
+ handle_http_response(response)
106
+ end
107
+
108
+ # Full URl builder of the request
109
+ # @param path [String] the tail that completes the url of the request.
110
+ # @return [String] the final url.
111
+ def url_for(path)
112
+ "#{api_url}#{path}"
113
+ end
114
+
115
+ private
116
+
117
+ def key_token
118
+ return if http?
119
+ return session_token(host: host) if graphql?
120
+ return @api_key if api_key?
121
+ return ENV['ORG_INT_KEY'] if v0?
122
+
123
+ puts 'Api-key missing!'
124
+ end
125
+
126
+ def api_url
127
+ base_url.then do |url|
128
+ next "#{url}/api/#{version}" if v1_0? || v2_3?
129
+ next "#{url}/api/#{org_id}/#{ENDPOINT_PATH}" if graphql?
130
+
131
+ url
132
+ end
133
+ end
134
+
135
+ def base_url
136
+ @base_url ||= self.class.base_url(host)
137
+ end
138
+
139
+ def protocol
140
+ @protocol ||= self.class.protocol(host)
141
+ end
142
+
143
+ def http?
144
+ return true if @version.nil?
145
+
146
+ @version == 'http'
147
+ end
148
+
149
+ def api_key?
150
+ @api_key && !@api_key.match(/\A\W*\z/)
151
+ end
152
+
153
+ def v1_0?
154
+ v1? || v0?
155
+ end
156
+
157
+ def v1?
158
+ @version == 'v1'
159
+ end
160
+
161
+ def v0?
162
+ @version == 'v0'
163
+ end
164
+
165
+ def v2_3?
166
+ return true if @version == 'v2'
167
+ return true if @version == 'v3'
168
+
169
+ false
170
+ end
171
+
172
+ def graphql?
173
+ @version == 'graphql'
174
+ end
175
+
176
+ # @param response [Ecoportal::API::Common::Response] the wrapped response
177
+ # produced by the inherited pipeline (body already JSON-parsed).
178
+ def handle_http_response(response)
179
+ unless response.success?
180
+ raise Ecoportal::API::Common::Client::Error::UnexpectedServerError.new(
181
+ response.src_body, code: response.status.code
182
+ )
183
+ end
184
+
185
+ parsed = response.body
186
+ errors = parsed && parsed['errors']
187
+ raise ResponseError, errors.map { |e| e['message'] }.join('; ') if errors&.any?
188
+
189
+ parsed
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
195
+ end
@@ -1,51 +1,54 @@
1
- module Ecoportal
2
- module API
3
- module Common
4
- module GraphQL
5
- class Model
6
- # @todo
7
- # 1. `#as_input` vs `#to_input` **or** named argument `klass`
8
- # One gets the `input` to be already used in a mutation query.
9
- # The other gets the `Input` class object out of the `Base/Model`.
10
- # - To figure out when `as_update` should be called.
11
- # 2. Each Base/Model should have its `Input` class counterpart.
12
- # This could be auto-inflected (via namespace constant lookup)
13
- # at some point.
14
- # 3. Think if a service class can be used to this purpose
15
- # (i.e. decorator of DiffService).
16
- module AsInput
17
- class << self
18
- def included(base)
19
- super
20
-
21
- base.send(:include, Model::Diffable)
22
- base.extend ClassMethods
23
- end
24
- end
25
-
26
- module ClassMethods
27
- def as_input(hash, clientMutationId: '')
28
- hash_input = Ecoportal::API::Common::GraphQL::HashHelpers.
29
- keys_to_sym_deep(hash)
30
-
31
- hash_input.merge!(clientMutationId: clientMutationId)
32
-
33
- Ecoportal::API::Common::GraphQL::HashHelpers.
34
- remove_nil_keys_deep(hash_input, target: :id)
35
- end
36
- end
37
-
38
- # INSTANCE METHODS
39
-
40
- def as_input(clientMutationId: '')
41
- self.class.as_input(
42
- as_update,
43
- clientMutationId: clientMutationId
44
- )
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
1
+ module Ecoportal
2
+ module API
3
+ module Common
4
+ module GraphQL
5
+ class Model
6
+ # @todo
7
+ # 1. `#as_input` vs `#to_input` **or** named argument `klass`
8
+ # One gets the `input` to be already used in a mutation query.
9
+ # The other gets the `Input` class object out of the `Base/Model`.
10
+ # - To figure out when `as_update` should be called.
11
+ # 2. Each Base/Model should have its `Input` class counterpart.
12
+ # This could be auto-inflected (via namespace constant lookup)
13
+ # at some point.
14
+ # 3. Think if a service class can be used to this purpose
15
+ # (i.e. decorator of DiffService).
16
+ module AsInput
17
+ class << self
18
+ def included(base)
19
+ super
20
+
21
+ base.send(:include, Model::Diffable)
22
+ base.extend ClassMethods
23
+ end
24
+ end
25
+
26
+ module ClassMethods
27
+ def as_input(hash, clientMutationId: '')
28
+ hash_input = Ecoportal::API::Common::GraphQL::HashHelpers.
29
+ keys_to_sym_deep(hash)
30
+
31
+ hash_input.merge!(clientMutationId: clientMutationId)
32
+
33
+ Ecoportal::API::Common::GraphQL::HashHelpers.
34
+ remove_nil_keys_deep(hash_input, target: :id)
35
+ end
36
+ end
37
+
38
+ # INSTANCE METHODS
39
+
40
+ def as_input(target_class: nil, clientMutationId: '')
41
+ return target_class.from_model(self, client_mutation_id: clientMutationId) if target_class
42
+
43
+ diff = as_update
44
+ return nil if diff.nil?
45
+
46
+ diff[:patchVer] = patchVer if respond_to?(:patchVer) && !patchVer.nil?
47
+ self.class.as_input(diff, clientMutationId: clientMutationId)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end