has_helpers 5.0.2

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 (748) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +38 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +10 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/.tekton/Chart.yaml +14 -0
  8. data/.tekton/templates/pipelinerun.yaml +44 -0
  9. data/.tekton/values-main.yaml +53 -0
  10. data/.tekton/values-pr.yaml +40 -0
  11. data/.tekton/values.yaml +17 -0
  12. data/.tool-versions +1 -0
  13. data/CHANGELOG.md +204 -0
  14. data/Gemfile +25 -0
  15. data/README.md +76 -0
  16. data/Rakefile +46 -0
  17. data/app/api/has_helpers/rack_api.rb +116 -0
  18. data/app/api/has_helpers/search_api.rb +173 -0
  19. data/app/assets/stylesheets/has_helpers/base.scss +5 -0
  20. data/app/assets/stylesheets/has_helpers/color_palette.scss +33 -0
  21. data/app/assets/stylesheets/has_helpers/color_palettes/default.scss +11 -0
  22. data/app/assets/stylesheets/has_helpers/components/dataset.scss +43 -0
  23. data/app/assets/stylesheets/has_helpers/mixins.scss +149 -0
  24. data/app/commands/has_helpers/cards/available_cards_command.rb +98 -0
  25. data/app/commands/has_helpers/cards/card_data_command.rb +1062 -0
  26. data/app/commands/reports/base_options.rb +79 -0
  27. data/app/commands/reports/belongs_to_options.rb +178 -0
  28. data/app/commands/reports/constant_options.rb +66 -0
  29. data/app/commands/reports/external_graphql_client.rb +116 -0
  30. data/app/commands/reports/fill_dates.rb +65 -0
  31. data/app/commands/reports/filter_option_generator.rb +186 -0
  32. data/app/commands/reports/generator.rb +310 -0
  33. data/app/commands/reports/has_many_options.rb +105 -0
  34. data/app/commands/reports/importer.rb +132 -0
  35. data/app/commands/reports/nested_attribute_options.rb +134 -0
  36. data/app/constants/color.rb +9 -0
  37. data/app/constants/file_format.rb +12 -0
  38. data/app/constants/has_helpers/cards/card_custom_field.rb +12 -0
  39. data/app/constants/has_helpers/cards/card_data_type.rb +11 -0
  40. data/app/constants/has_helpers/cards/card_identifier.rb +10 -0
  41. data/app/constants/has_helpers/cards/card_layout_type.rb +11 -0
  42. data/app/constants/has_helpers/cards/card_variant_type.rb +12 -0
  43. data/app/constants/has_helpers/link_type.rb +10 -0
  44. data/app/constants/has_helpers/notification_alert_status.rb +14 -0
  45. data/app/constants/has_helpers/notification_alert_type.rb +10 -0
  46. data/app/constants/has_helpers/operation.rb +11 -0
  47. data/app/constants/has_helpers/resource_type.rb +25 -0
  48. data/app/constants/icon.rb +22 -0
  49. data/app/constants/logical_operator.rb +7 -0
  50. data/app/constants/option.rb +10 -0
  51. data/app/constants/time_zone.rb +12 -0
  52. data/app/constructors/has_helpers/base_constructor.rb +62 -0
  53. data/app/controllers/concerns/has_helpers/service_trust/authenticated_as_service.rb +51 -0
  54. data/app/controllers/concerns/has_helpers/service_trust/graphql_authentication.rb +57 -0
  55. data/app/controllers/has_helpers/controller.rb +63 -0
  56. data/app/controllers/has_helpers/factory_controller.rb +261 -0
  57. data/app/controllers/has_helpers/graphql_extensions.rb +83 -0
  58. data/app/controllers/has_helpers/health_check_controller.rb +46 -0
  59. data/app/controllers/has_helpers/search_extensions.rb +92 -0
  60. data/app/controllers/has_helpers/service_trust/jwks_controller.rb +20 -0
  61. data/app/controllers/has_helpers/xlsx_export.rb +115 -0
  62. data/app/controllers/search_extensions.rb +5 -0
  63. data/app/graphql/has_helpers/base_type.rb +13 -0
  64. data/app/graphql/has_helpers/base_union.rb +9 -0
  65. data/app/graphql/has_helpers/enums/resource_enum.rb +24 -0
  66. data/app/graphql/has_helpers/middleware/application_access.rb +26 -0
  67. data/app/graphql/has_helpers/mutations/base.rb +27 -0
  68. data/app/graphql/has_helpers/mutations/external_data_sync.rb +72 -0
  69. data/app/graphql/has_helpers/mutations/mark_individual_alert_read.rb +31 -0
  70. data/app/graphql/has_helpers/mutations/mark_notifications_read.rb +50 -0
  71. data/app/graphql/has_helpers/mutations/toggle_favorite.rb +39 -0
  72. data/app/graphql/has_helpers/resolvers/app_nav.rb +107 -0
  73. data/app/graphql/has_helpers/resolvers/base.rb +27 -0
  74. data/app/graphql/has_helpers/resolvers/cards/available_cards.rb +31 -0
  75. data/app/graphql/has_helpers/resolvers/cards/card_data.rb +74 -0
  76. data/app/graphql/has_helpers/resolvers/cards/hover_card_data.rb +153 -0
  77. data/app/graphql/has_helpers/resolvers/favorite.rb +62 -0
  78. data/app/graphql/has_helpers/resolvers/internal/roles.rb +54 -0
  79. data/app/graphql/has_helpers/resolvers/is_favorite.rb +24 -0
  80. data/app/graphql/has_helpers/resolvers/list_notification_alerts.rb +47 -0
  81. data/app/graphql/has_helpers/resolvers/lookup.rb +36 -0
  82. data/app/graphql/has_helpers/resolvers/recently_viewed.rb +54 -0
  83. data/app/graphql/has_helpers/resolvers/resource_tab.rb +22 -0
  84. data/app/graphql/has_helpers/resolvers/search.rb +18 -0
  85. data/app/graphql/has_helpers/resolvers/search_query.rb +38 -0
  86. data/app/graphql/has_helpers/resolvers/user_application_order.rb +35 -0
  87. data/app/graphql/has_helpers/resources/organization_option_resource.rb +28 -0
  88. data/app/graphql/has_helpers/resources/organization_resource_resource.rb +18 -0
  89. data/app/graphql/has_helpers/resources/resource_group_resource.rb +10 -0
  90. data/app/graphql/has_helpers/resources/resource_resource.rb +21 -0
  91. data/app/graphql/has_helpers/resources/user_role_resource.rb +9 -0
  92. data/app/graphql/has_helpers/types/application_order_type.rb +18 -0
  93. data/app/graphql/has_helpers/types/cards/available_card_type.rb +20 -0
  94. data/app/graphql/has_helpers/types/cards/card_badge_type.rb +12 -0
  95. data/app/graphql/has_helpers/types/cards/card_config_type.rb +18 -0
  96. data/app/graphql/has_helpers/types/cards/card_data_type.rb +13 -0
  97. data/app/graphql/has_helpers/types/cards/card_entry_field_type.rb +21 -0
  98. data/app/graphql/has_helpers/types/cards/card_entry_type.rb +12 -0
  99. data/app/graphql/has_helpers/types/cards/card_field_config_type.rb +17 -0
  100. data/app/graphql/has_helpers/types/layouts/app_nav/link_section_type.rb +17 -0
  101. data/app/graphql/has_helpers/types/layouts/app_nav/link_type.rb +20 -0
  102. data/app/graphql/has_helpers/types/layouts/app_nav/sub_link_type.rb +17 -0
  103. data/app/graphql/has_helpers/types/layouts/app_nav/type.rb +16 -0
  104. data/app/graphql/has_helpers/types/lookup.rb +16 -0
  105. data/app/graphql/has_helpers/types/resource_tab/type.rb +15 -0
  106. data/app/graphql/has_helpers/types/role_type.rb +13 -0
  107. data/app/graphql/has_helpers/types/search/detail_badge_type.rb +15 -0
  108. data/app/graphql/has_helpers/types/search/detail_item_type.rb +14 -0
  109. data/app/graphql/has_helpers/types/search/detail_type.rb +16 -0
  110. data/app/graphql/has_helpers/types/search/filter_operation_enum.rb +19 -0
  111. data/app/graphql/has_helpers/types/search/input_type.rb +16 -0
  112. data/app/graphql/has_helpers/types/search/result_type.rb +72 -0
  113. data/app/graphql/has_helpers/types/search/search_filter_input_type.rb +17 -0
  114. data/app/graphql/has_helpers/types/search/type.rb +17 -0
  115. data/app/importers/has_helpers/cards/importer.rb +1223 -0
  116. data/app/lib/has_helpers/application_helper.rb +21 -0
  117. data/app/lib/has_helpers/dn/processor.rb +55 -0
  118. data/app/lib/has_helpers/dn/refresh.rb +13 -0
  119. data/app/lib/has_helpers/dn/utils/backfill_utils.rb +80 -0
  120. data/app/lib/has_helpers/dn/utils/query_utils.rb +216 -0
  121. data/app/lib/has_helpers/feature.rb +88 -0
  122. data/app/lib/has_helpers/hq_exception.rb +18 -0
  123. data/app/lib/has_helpers/index.rb +890 -0
  124. data/app/lib/has_helpers/organization_merge.rb +128 -0
  125. data/app/lib/has_helpers/query/elasticsearch.rb +20 -0
  126. data/app/lib/has_helpers/query/provider.rb +105 -0
  127. data/app/lib/has_helpers/query/sql.rb +133 -0
  128. data/app/lib/has_helpers/query.rb +14 -0
  129. data/app/lib/has_helpers/search/elasticsearch.rb +41 -0
  130. data/app/lib/has_helpers/search/elasticsearch_shared.rb +70 -0
  131. data/app/lib/has_helpers/search/provider.rb +149 -0
  132. data/app/lib/has_helpers/search/search_utils.rb +74 -0
  133. data/app/lib/has_helpers/search/sql_search.rb +219 -0
  134. data/app/lib/has_helpers/search.rb +46 -0
  135. data/app/models/ability.rb +233 -0
  136. data/app/models/has_helpers/application.rb +47 -0
  137. data/app/models/has_helpers/application_record.rb +7 -0
  138. data/app/models/has_helpers/cards/card_builder/base.rb +74 -0
  139. data/app/models/has_helpers/cards/card_builder/card_definition_builder.rb +486 -0
  140. data/app/models/has_helpers/cards/card_builder/definition_context.rb +82 -0
  141. data/app/models/has_helpers/cards/card_builder/field_builder.rb +142 -0
  142. data/app/models/has_helpers/cards/card_builder/resource_builder.rb +34 -0
  143. data/app/models/has_helpers/cards/card_definition.rb +41 -0
  144. data/app/models/has_helpers/cards/card_definition_resource.rb +19 -0
  145. data/app/models/has_helpers/cards/card_field.rb +39 -0
  146. data/app/models/has_helpers/cards/registry.rb +115 -0
  147. data/app/models/has_helpers/cards/role_card_field.rb +28 -0
  148. data/app/models/has_helpers/cards/role_resource_card.rb +41 -0
  149. data/app/models/has_helpers/dn_utils.rb +61 -0
  150. data/app/models/has_helpers/favorite.rb +20 -0
  151. data/app/models/has_helpers/master_record.rb +18 -0
  152. data/app/models/has_helpers/notification_alert.rb +52 -0
  153. data/app/models/has_helpers/organization.rb +16 -0
  154. data/app/models/has_helpers/organization_link.rb +92 -0
  155. data/app/models/has_helpers/organization_methods.rb +62 -0
  156. data/app/models/has_helpers/organization_option.rb +31 -0
  157. data/app/models/has_helpers/organization_resource.rb +45 -0
  158. data/app/models/has_helpers/pending_db_operation.rb +31 -0
  159. data/app/models/has_helpers/recently_viewed.rb +34 -0
  160. data/app/models/has_helpers/reindex_queue.rb +43 -0
  161. data/app/models/has_helpers/resource.rb +38 -0
  162. data/app/models/has_helpers/resource_group.rb +15 -0
  163. data/app/models/has_helpers/restriction.rb +15 -0
  164. data/app/models/has_helpers/restriction_operation.rb +13 -0
  165. data/app/models/has_helpers/role.rb +20 -0
  166. data/app/models/has_helpers/service_trust/audit_log.rb +20 -0
  167. data/app/models/has_helpers/service_trust/key.rb +56 -0
  168. data/app/models/has_helpers/stat.rb +13 -0
  169. data/app/models/has_helpers/user.rb +18 -0
  170. data/app/models/has_helpers/user_methods.rb +184 -0
  171. data/app/models/has_helpers/user_organization.rb +33 -0
  172. data/app/models/has_helpers/user_role.rb +27 -0
  173. data/app/models/has_helpers/user_session.rb +19 -0
  174. data/app/presenters/has_helpers/barcode_base_presenter.rb +113 -0
  175. data/app/presenters/has_helpers/base_presenter.rb +100 -0
  176. data/app/presenters/has_helpers/cacheable_item.rb +28 -0
  177. data/app/presenters/has_helpers/item_presenter.rb +52 -0
  178. data/app/presenters/has_helpers/items_presenter.rb +33 -0
  179. data/app/presenters/has_helpers/resource/action_presenter.rb +8 -0
  180. data/app/presenters/has_helpers/resource/cell_presenter.rb +52 -0
  181. data/app/presenters/has_helpers/resource/email_presenter.rb +34 -0
  182. data/app/presenters/has_helpers/resource/form_presenter.rb +76 -0
  183. data/app/presenters/has_helpers/resource/info_collection_presenter.rb +33 -0
  184. data/app/presenters/has_helpers/resource/info_presenter.rb +34 -0
  185. data/app/presenters/has_helpers/resource/list_presenter.rb +120 -0
  186. data/app/presenters/has_helpers/resource/note_presenter.rb +14 -0
  187. data/app/presenters/has_helpers/resource/row_presenter.rb +25 -0
  188. data/app/presenters/has_helpers/resource/tag_presenter.rb +31 -0
  189. data/app/presenters/has_helpers/search_presenter.rb +230 -0
  190. data/app/triggers/has_helpers/erase_denormalized_belongs_to_column_trigger.rb +85 -0
  191. data/app/triggers/has_helpers/limit_favorites.rb +97 -0
  192. data/app/utils/has_helpers/redis_configurable.rb +79 -0
  193. data/app/utils/has_helpers/sync_utils.rb +234 -0
  194. data/app/views/has_helpers/actions/_action.html.erb +31 -0
  195. data/app/views/has_helpers/alerts/_alert.html.erb +3 -0
  196. data/app/views/has_helpers/barcodes.html.erb +36 -0
  197. data/app/views/has_helpers/containers/_container.html.erb +3 -0
  198. data/app/views/has_helpers/email_notifier/system.html.erb +8 -0
  199. data/app/views/has_helpers/email_notifier/system.text.erb +7 -0
  200. data/app/views/has_helpers/enumerables/_enumerable.html.erb +1 -0
  201. data/app/views/has_helpers/icons/_icon.html.erb +1 -0
  202. data/app/views/has_helpers/render_objects/_render_object.html.erb +1 -0
  203. data/app/views/has_helpers/services/_service.html.erb +1 -0
  204. data/app/views/has_helpers/text_nodes/_text_node.html.erb +4 -0
  205. data/app/views/has_helpers/ui_attributes/_html_attrs.html.erb +1 -0
  206. data/app/workers/elasticsearch_process_queue.rb +11 -0
  207. data/app/workers/elasticsearch_reindex.rb +11 -0
  208. data/app/workers/elasticsearch_reindex_scheduler.rb +35 -0
  209. data/app/workers/good_job/configurable_backfill.rb +64 -0
  210. data/app/workers/good_job/cron_denormalization_stats_manager.rb +39 -0
  211. data/app/workers/good_job/denormalization_stats_worker.rb +57 -0
  212. data/app/workers/good_job/dn_update_worker.rb +30 -0
  213. data/app/workers/good_job/dn_worker.rb +47 -0
  214. data/app/workers/good_job/elasticsearch_old_index_cleaner_worker.rb +113 -0
  215. data/app/workers/good_job/elasticsearch_on_finish_reindex.rb +26 -0
  216. data/app/workers/good_job/elasticsearch_process_batch.rb +78 -0
  217. data/app/workers/good_job/elasticsearch_process_change_logs_master_worker.rb +27 -0
  218. data/app/workers/good_job/elasticsearch_process_change_logs_worker.rb +155 -0
  219. data/app/workers/good_job/elasticsearch_process_queue.rb +50 -0
  220. data/app/workers/good_job/elasticsearch_reindex.rb +31 -0
  221. data/app/workers/has_helpers/cards/orphan_card_sweeper.rb +28 -0
  222. data/app/workers/has_helpers/db_operations/clean_stats_worker.rb +42 -0
  223. data/app/workers/has_helpers/db_operations/helper_worker.rb +131 -0
  224. data/app/workers/has_helpers/db_operations/main_worker.rb +164 -0
  225. data/app/workers/has_helpers/db_operations/operations.rb +134 -0
  226. data/app/workers/has_helpers/db_operations/update_operations_stats_resume_worker.rb +35 -0
  227. data/app/workers/has_helpers/default_worker.rb +17 -0
  228. data/app/workers/has_helpers/good_job/notification_alert_cleanup_worker.rb +43 -0
  229. data/app/workers/has_helpers/service_trust/audit_log_cleanup_worker.rb +19 -0
  230. data/app/workers/sidekiq/elasticsearch_old_index_cleaner_worker.rb +112 -0
  231. data/app/workers/sidekiq/elasticsearch_process_batch.rb +87 -0
  232. data/app/workers/sidekiq/elasticsearch_process_queue.rb +40 -0
  233. data/app/workers/sidekiq/elasticsearch_reindex.rb +53 -0
  234. data/config/initializers/action_view.rb +7 -0
  235. data/config/initializers/inflections.rb +24 -0
  236. data/config/initializers/marginalia.rb +8 -0
  237. data/config/initializers/mime_types.rb +6 -0
  238. data/config/initializers/opentelemetry.rb +12 -0
  239. data/config/initializers/redis_conf.rb +40 -0
  240. data/config/initializers/searchkick.rb +9 -0
  241. data/config/initializers/will_paginate.rb +39 -0
  242. data/config/redis.yml +12 -0
  243. data/config/routes.rb +27 -0
  244. data/config/service_trust_routes.rb +5 -0
  245. data/config.ru +9 -0
  246. data/db/migrate/20230127194725_create_organization_table.rb +25 -0
  247. data/db/migrate/20230127194726_validate_organization_foreign_keys.rb +7 -0
  248. data/db/migrate/20230206141413_create_security_models.rb +42 -0
  249. data/db/migrate/20230206141513_create_restriction_model.rb +20 -0
  250. data/db/migrate/20230206142613_add_security_indexes.rb +14 -0
  251. data/db/migrate/20230206143513_security_model_constants_seed.rb +8 -0
  252. data/db/migrate/20230206161513_add_organization_to_security_models.rb +13 -0
  253. data/db/migrate/20230209121019_create_search_group_models.rb +36 -0
  254. data/db/migrate/20230209122919_add_search_group_indexes.rb +21 -0
  255. data/db/migrate/20230209181832_add_search_group_resources_type_constraint_trigger.rb +61 -0
  256. data/db/migrate/20230313220337_create_table_user_sessions.rb +31 -0
  257. data/db/migrate/20230517141106_update_resource_types.rb +12 -0
  258. data/db/migrate/20230518194611_add_resources_contraints.rb +17 -0
  259. data/db/migrate/20230518194642_create_nested_resource_model.rb +21 -0
  260. data/db/migrate/20230518194645_validate_security_models_constraints.rb +23 -0
  261. data/db/migrate/20230608125037_add_inactive_field_to_user_sessions.rb +7 -0
  262. data/db/migrate/20230919191525_add_parent_id_to_resources.rb +8 -0
  263. data/db/migrate/20230919191535_validate_parent_id_fk_resources.rb +7 -0
  264. data/db/migrate/20230919210456_drop_nested_resources.rb +7 -0
  265. data/db/migrate/20231222135620_add_user_role.rb +19 -0
  266. data/db/migrate/20240108172021_create_favorites_table.rb +20 -0
  267. data/db/migrate/20240108190209_create_organization_link_table_if_doesnt_exists.rb +31 -0
  268. data/db/migrate/20240109211445_validate_fks_org_links.rb +9 -0
  269. data/db/migrate/20240110135440_create_recently_vieweds.rb +20 -0
  270. data/db/migrate/20240112185312_link_type_options_seed.rb +7 -0
  271. data/db/migrate/20240116173201_organization_link_resource_tab_constraints.rb +19 -0
  272. data/db/migrate/20240131160949_add_user_organizations_table.rb +32 -0
  273. data/db/migrate/20240212132519_add_organization_in_user_sessions.rb +13 -0
  274. data/db/migrate/20240227135052_add_user_organization_composite_fks.rb +32 -0
  275. data/db/migrate/20240312193501_update_organization_links.rb +11 -0
  276. data/db/migrate/20240426185902_add_user_organizations_current_organization_column.rb +12 -0
  277. data/db/migrate/20240429214601_add_primary_trigger.rb +10 -0
  278. data/db/migrate/20241112131819_add_json_file_format_seed.rb +7 -0
  279. data/db/migrate/20250520133417_create_restriction_operations.rb +18 -0
  280. data/db/migrate/20250520133420_validate_create_restriction_operations.rb +8 -0
  281. data/db/migrate/20250520140642_add_indexes_to_restrictions.rb +9 -0
  282. data/db/migrate/20250529130741_create_notification_alerts_table.rb +28 -0
  283. data/db/migrate/20250530223332_create_data_migrations_table.rb +19 -0
  284. data/db/migrate/20250605121622_seed_notification_alert_status.rb +7 -0
  285. data/db/migrate/20250605131439_seed_notification_alert_types.rb +7 -0
  286. data/db/migrate/20250606173128_update_notification_alert_length_constraint.rb +18 -0
  287. data/db/migrate/20250606174043_validate_notification_alert_length_constraints.rb +8 -0
  288. data/db/migrate/20250624183000_add_data_import_alert_type.rb +11 -0
  289. data/db/migrate/20250722183935_create_organization_options_table.rb +38 -0
  290. data/db/migrate/20250722192724_validate_organization_options_fks_and_constraints.rb +32 -0
  291. data/db/migrate/20250722192936_add_indexes_to_organization_options_table.rb +15 -0
  292. data/db/migrate/20250915132448_add_column_restrictions_hash.rb +7 -0
  293. data/db/migrate/20250917143211_add_column_permissions_hash.rb +7 -0
  294. data/db/migrate/20251001145950_add_trust_this_device.rb +7 -0
  295. data/db/migrate/20251021130835_add_backend_urls_to_applications_table.rb +13 -0
  296. data/db/migrate/20251021172715_validate_backend_urls_constraints_in_applications.rb +9 -0
  297. data/db/migrate/20251030200020_create_card_definitions.rb +23 -0
  298. data/db/migrate/20251030201012_create_card_definition_resources.rb +24 -0
  299. data/db/migrate/20251030201236_create_card_fields.rb +34 -0
  300. data/db/migrate/20251103194317_create_role_resource_cards.rb +37 -0
  301. data/db/migrate/20251103194426_create_role_card_fields.rb +34 -0
  302. data/db/migrate/20251107173218_validate_columns_from_cards.rb +17 -0
  303. data/db/migrate/20251111173212_add_column_application_array.rb +7 -0
  304. data/db/migrate/20251112203326_add_card_types.rb +10 -0
  305. data/db/migrate/20251115120000_add_virtual_cards_support.rb +28 -0
  306. data/db/migrate/20251202231256_add_org_scoped_fk_role_resource_cards_to_roles.rb +14 -0
  307. data/db/migrate/20260105134504_add_accessor_field_resource_type.rb +7 -0
  308. data/db/migrate/20260115123000_add_default_visibility_to_card_definitions.rb +9 -0
  309. data/db/migrate/20260120175037_is_new_admin.rb +9 -0
  310. data/db/migrate/20260122392008_add_stats_table.rb +17 -0
  311. data/db/migrate/20260414204718_add_index_to_stats_table.rb +10 -0
  312. data/db/migrate/20260509120000_create_service_trust_keys.rb +25 -0
  313. data/db/migrate/20260509120001_create_service_trust_audit_logs.rb +26 -0
  314. data/db/migrate/20260511120000_add_direction_to_service_trust_audit_logs.rb +17 -0
  315. data/db/migrate/20260511121000_remove_role_fk_from_role_resource_cards.rb +19 -0
  316. data/db/migrate/20260511121001_add_disabled_at_to_role_resource_cards.rb +10 -0
  317. data/db/migrate/20260605120100_seed_hover_card_options.rb +8 -0
  318. data/db/migrate/20260608120000_seed_badge_list_card_data_type.rb +7 -0
  319. data/db/migrate/20260727000000_add_two_factor_trust_id_to_user_sessions.rb +11 -0
  320. data/db/seeds.rb +14 -0
  321. data/docs/Elasticsearch.md +23 -0
  322. data/docs/Search_API.md +126 -0
  323. data/docs/cards_role_proxy.md +107 -0
  324. data/docs/factory_api.md +135 -0
  325. data/has-helpers-pr-289-pipeline.yaml +16 -0
  326. data/has-helpers-pr-298-pipeline.yaml +15 -0
  327. data/has_helpers.gemspec +68 -0
  328. data/lib/active_record/migration/active_migration_patch.rb +123 -0
  329. data/lib/generators/has_helpers/install/USAGE +8 -0
  330. data/lib/generators/has_helpers/install/install_generator.rb +22 -0
  331. data/lib/generators/has_helpers/install/templates/migrate/has_helpers_initial_setup.rb +26 -0
  332. data/lib/has_helpers/active_record/base.rb +50 -0
  333. data/lib/has_helpers/active_record/date_range.rb +228 -0
  334. data/lib/has_helpers/active_record/nested_resource.rb +58 -0
  335. data/lib/has_helpers/active_record/validation.rb +63 -0
  336. data/lib/has_helpers/active_record.rb +520 -0
  337. data/lib/has_helpers/app/command.rb +107 -0
  338. data/lib/has_helpers/app.rb +10 -0
  339. data/lib/has_helpers/assets_precompile_helper.rb +20 -0
  340. data/lib/has_helpers/attributes.rb +196 -0
  341. data/lib/has_helpers/aws.rb +67 -0
  342. data/lib/has_helpers/cards/cache.rb +49 -0
  343. data/lib/has_helpers/cards/config.rb +42 -0
  344. data/lib/has_helpers/cards/remote_role.rb +27 -0
  345. data/lib/has_helpers/cards/remote_roles.rb +75 -0
  346. data/lib/has_helpers/cards/roles.rb +55 -0
  347. data/lib/has_helpers/cards.rb +34 -0
  348. data/lib/has_helpers/concerns/hydrate_concern.rb +76 -0
  349. data/lib/has_helpers/concerns/importable_accessors.rb +25 -0
  350. data/lib/has_helpers/concerns/restrictions_parseable.rb +51 -0
  351. data/lib/has_helpers/config.rb +11 -0
  352. data/lib/has_helpers/constant.rb +578 -0
  353. data/lib/has_helpers/constraints.rb +10 -0
  354. data/lib/has_helpers/core_ext/array.rb +28 -0
  355. data/lib/has_helpers/core_ext/date/infinity.rb +25 -0
  356. data/lib/has_helpers/core_ext/date.rb +39 -0
  357. data/lib/has_helpers/core_ext/enumerable.rb +20 -0
  358. data/lib/has_helpers/core_ext/false_class.rb +14 -0
  359. data/lib/has_helpers/core_ext/float.rb +18 -0
  360. data/lib/has_helpers/core_ext/hash.rb +71 -0
  361. data/lib/has_helpers/core_ext/integer.rb +18 -0
  362. data/lib/has_helpers/core_ext/nil_class.rb +30 -0
  363. data/lib/has_helpers/core_ext/object.rb +60 -0
  364. data/lib/has_helpers/core_ext/proc.rb +16 -0
  365. data/lib/has_helpers/core_ext/string.rb +81 -0
  366. data/lib/has_helpers/core_ext/symbol.rb +17 -0
  367. data/lib/has_helpers/core_ext/true_class.rb +14 -0
  368. data/lib/has_helpers/cursor.rb +46 -0
  369. data/lib/has_helpers/data_migration/base.rb +293 -0
  370. data/lib/has_helpers/data_migration/large_worker.rb +20 -0
  371. data/lib/has_helpers/data_migration/master_worker.rb +33 -0
  372. data/lib/has_helpers/data_migration/migrator.rb +83 -0
  373. data/lib/has_helpers/data_migration/model.rb +18 -0
  374. data/lib/has_helpers/data_migration/small_worker.rb +20 -0
  375. data/lib/has_helpers/data_migration.rb +8 -0
  376. data/lib/has_helpers/engine.rb +47 -0
  377. data/lib/has_helpers/extensions.rb +17 -0
  378. data/lib/has_helpers/factory_api.rb +47 -0
  379. data/lib/has_helpers/factory_scenario/definition.rb +33 -0
  380. data/lib/has_helpers/factory_scenario/dsl.rb +80 -0
  381. data/lib/has_helpers/factory_scenario/factory_bot_override.rb +53 -0
  382. data/lib/has_helpers/factory_scenario/registry.rb +31 -0
  383. data/lib/has_helpers/factory_scenario/runner.rb +285 -0
  384. data/lib/has_helpers/factory_scenario.rb +27 -0
  385. data/lib/has_helpers/fixed_expiration_time_cache_session_store.rb +20 -0
  386. data/lib/has_helpers/flattener/association.rb +140 -0
  387. data/lib/has_helpers/flattener/attribute.rb +42 -0
  388. data/lib/has_helpers/flattener/base.rb +428 -0
  389. data/lib/has_helpers/flattener/column/types.rb +71 -0
  390. data/lib/has_helpers/flattener/column.rb +97 -0
  391. data/lib/has_helpers/flattener/pivot.rb +49 -0
  392. data/lib/has_helpers/flattener/reset.rb +33 -0
  393. data/lib/has_helpers/flattener/resource.rb +114 -0
  394. data/lib/has_helpers/flattener/resource_generator.rb +21 -0
  395. data/lib/has_helpers/flattener/utils.rb +14 -0
  396. data/lib/has_helpers/flattener.rb +53 -0
  397. data/lib/has_helpers/hash_accessors.rb +62 -0
  398. data/lib/has_helpers/helpers/application.rb +291 -0
  399. data/lib/has_helpers/index/config.rb +15 -0
  400. data/lib/has_helpers/lazy_config.rb +61 -0
  401. data/lib/has_helpers/resource_importer.rb +260 -0
  402. data/lib/has_helpers/resources.rb +127 -0
  403. data/lib/has_helpers/rspec/constants.rb +61 -0
  404. data/lib/has_helpers/rspec/factories.rb +11 -0
  405. data/lib/has_helpers/rspec.rb +22 -0
  406. data/lib/has_helpers/sentry/graphql_trace.rb +37 -0
  407. data/lib/has_helpers/serializer.rb +41 -0
  408. data/lib/has_helpers/service_trust/audit.rb +45 -0
  409. data/lib/has_helpers/service_trust/authorization.rb +34 -0
  410. data/lib/has_helpers/service_trust/bearer_token.rb +23 -0
  411. data/lib/has_helpers/service_trust/capability.rb +32 -0
  412. data/lib/has_helpers/service_trust/client/response.rb +13 -0
  413. data/lib/has_helpers/service_trust/client/retry.rb +35 -0
  414. data/lib/has_helpers/service_trust/client.rb +128 -0
  415. data/lib/has_helpers/service_trust/configuration.rb +76 -0
  416. data/lib/has_helpers/service_trust/engine.rb +10 -0
  417. data/lib/has_helpers/service_trust/errors.rb +32 -0
  418. data/lib/has_helpers/service_trust/graphql/authorizable.rb +72 -0
  419. data/lib/has_helpers/service_trust/graphql_client.rb +54 -0
  420. data/lib/has_helpers/service_trust/jwks_client.rb +133 -0
  421. data/lib/has_helpers/service_trust/jwt_codec.rb +45 -0
  422. data/lib/has_helpers/service_trust/key_manager.rb +160 -0
  423. data/lib/has_helpers/service_trust/rate_limiter.rb +27 -0
  424. data/lib/has_helpers/service_trust/replay_cache.rb +26 -0
  425. data/lib/has_helpers/service_trust/signer.rb +47 -0
  426. data/lib/has_helpers/service_trust/test.rb +60 -0
  427. data/lib/has_helpers/service_trust/verifier.rb +85 -0
  428. data/lib/has_helpers/service_trust/verify_middleware.rb +55 -0
  429. data/lib/has_helpers/service_trust.rb +51 -0
  430. data/lib/has_helpers/test_helpers/factory_data/unit_addresses.rb +42 -0
  431. data/lib/has_helpers/test_helpers/factory_data/unit_advisors.rb +272 -0
  432. data/lib/has_helpers/test_helpers/factory_data/unit_emails.rb +37 -0
  433. data/lib/has_helpers/test_helpers/factory_data/unit_organizations.rb +48 -0
  434. data/lib/has_helpers/test_helpers/factory_data/unit_people.rb +34 -0
  435. data/lib/has_helpers/test_helpers/factory_data/unit_phones.rb +41 -0
  436. data/lib/has_helpers/test_helpers/factory_data/unit_states.rb +26 -0
  437. data/lib/has_helpers/test_helpers/factory_data/unit_webs.rb +31 -0
  438. data/lib/has_helpers/test_helpers/shoulda_helpers.rb +249 -0
  439. data/lib/has_helpers/ui_attributes.rb +39 -0
  440. data/lib/has_helpers/utils/action.rb +87 -0
  441. data/lib/has_helpers/utils/active_record_utils.rb +40 -0
  442. data/lib/has_helpers/utils/alert.rb +42 -0
  443. data/lib/has_helpers/utils/container.rb +46 -0
  444. data/lib/has_helpers/utils/dataset.rb +34 -0
  445. data/lib/has_helpers/utils/email_notifier.rb +15 -0
  446. data/lib/has_helpers/utils/icon.rb +66 -0
  447. data/lib/has_helpers/utils/input.rb +45 -0
  448. data/lib/has_helpers/utils/log_notifier.rb +79 -0
  449. data/lib/has_helpers/utils/render_object.rb +32 -0
  450. data/lib/has_helpers/utils/s3_utils.rb +37 -0
  451. data/lib/has_helpers/utils/service.rb +87 -0
  452. data/lib/has_helpers/utils/slack_conf.rb +31 -0
  453. data/lib/has_helpers/utils/slack_notifier.rb +42 -0
  454. data/lib/has_helpers/utils/text_node.rb +34 -0
  455. data/lib/has_helpers/utils/user_restrictions.rb +266 -0
  456. data/lib/has_helpers/utils.rb +19 -0
  457. data/lib/has_helpers/version.rb +6 -0
  458. data/lib/has_helpers/web_socket_publisher.rb +20 -0
  459. data/lib/has_helpers/webhook.rb +17 -0
  460. data/lib/has_helpers.rb +63 -0
  461. data/lib/hq/resource.rb +55 -0
  462. data/lib/hq/structure/inserts.rb +176 -0
  463. data/lib/hq/structure.rb +115 -0
  464. data/lib/tasks/has_helpers/service_trust.rake +39 -0
  465. data/script/rails +10 -0
  466. data/sorbet/config +5 -0
  467. data/sorbet/rbi/gems/actionpack.rbi +1361 -0
  468. data/sorbet/rbi/gems/activemodel.rbi +755 -0
  469. data/sorbet/rbi/gems/activerecord.rbi +4713 -0
  470. data/sorbet/rbi/gems/activesupport.rbi +1970 -0
  471. data/sorbet/rbi/gems/barby.rbi +129 -0
  472. data/sorbet/rbi/gems/better_errors.rbi +155 -0
  473. data/sorbet/rbi/gems/binding_of_caller.rbi +22 -0
  474. data/sorbet/rbi/gems/byebug.rbi +19 -0
  475. data/sorbet/rbi/gems/chronic.rbi +480 -0
  476. data/sorbet/rbi/gems/chunky_png.rbi +510 -0
  477. data/sorbet/rbi/gems/climate_control.rbi +45 -0
  478. data/sorbet/rbi/gems/coderay.rbi +91 -0
  479. data/sorbet/rbi/gems/concurrent-ruby.rbi +1587 -0
  480. data/sorbet/rbi/gems/debug_inspector.rbi +18 -0
  481. data/sorbet/rbi/gems/erubi.rbi +26 -0
  482. data/sorbet/rbi/gems/holidays.rbi +362 -0
  483. data/sorbet/rbi/gems/i18n.rbi +132 -0
  484. data/sorbet/rbi/gems/method_source.rbi +63 -0
  485. data/sorbet/rbi/gems/mime-types-data.rbi +16 -0
  486. data/sorbet/rbi/gems/mime-types.rbi +217 -0
  487. data/sorbet/rbi/gems/mimemagic.rbi +36 -0
  488. data/sorbet/rbi/gems/minitest.rbi +282 -0
  489. data/sorbet/rbi/gems/mustache.rbi +151 -0
  490. data/sorbet/rbi/gems/paperclip.rbi +644 -0
  491. data/sorbet/rbi/gems/parallel.rbi +81 -0
  492. data/sorbet/rbi/gems/parallel_tests.rbi +27 -0
  493. data/sorbet/rbi/gems/pry-rails.rbi +71 -0
  494. data/sorbet/rbi/gems/pry.rbi +1964 -0
  495. data/sorbet/rbi/gems/rack.rbi +228 -0
  496. data/sorbet/rbi/gems/railties.rbi +364 -0
  497. data/sorbet/rbi/gems/rspec-core.rbi +1704 -0
  498. data/sorbet/rbi/gems/rspec-expectations.rbi +389 -0
  499. data/sorbet/rbi/gems/rspec-support.rbi +206 -0
  500. data/sorbet/rbi/gems/rspec.rbi +14 -0
  501. data/sorbet/rbi/gems/spreadsheet_architect.rbi +10 -0
  502. data/sorbet/rbi/gems/sprockets.rbi +659 -0
  503. data/sorbet/rbi/gems/terrapin.rbi +115 -0
  504. data/sorbet/rbi/gems/testhq.rbi +14 -0
  505. data/sorbet/rbi/gems/thor.rbi +482 -0
  506. data/sorbet/rbi/gems/thread_safe.rbi +81 -0
  507. data/sorbet/rbi/gems/tzinfo.rbi +407 -0
  508. data/sorbet/rbi/gems/zeitwerk.rbi +131 -0
  509. data/sorbet/rbi/hidden-definitions/errors.txt +35111 -0
  510. data/sorbet/rbi/hidden-definitions/hidden.rbi +59974 -0
  511. data/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +13 -0
  512. data/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +855 -0
  513. data/sorbet/rbi/sorbet-typed/lib/actionview/all/actionview.rbi +314 -0
  514. data/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +423 -0
  515. data/sorbet/rbi/sorbet-typed/lib/activerecord/>=5.2/activerecord.rbi +17 -0
  516. data/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +1415 -0
  517. data/sorbet/rbi/sorbet-typed/lib/activerecord/~>6.0.0/activerecord.rbi +475 -0
  518. data/sorbet/rbi/sorbet-typed/lib/activestorage/>=6.0.0/activestorage.rbi +19 -0
  519. data/sorbet/rbi/sorbet-typed/lib/activestorage/all/activestorage.rbi +173 -0
  520. data/sorbet/rbi/sorbet-typed/lib/activesupport/>=6.0.0.rc1/activesupport.rbi +23 -0
  521. data/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +625 -0
  522. data/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +8684 -0
  523. data/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +99 -0
  524. data/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +25 -0
  525. data/sorbet/rbi/sorbet-typed/lib/rainbow/all/rainbow.rbi +254 -0
  526. data/sorbet/rbi/sorbet-typed/lib/ruby/all/gem.rbi +4222 -0
  527. data/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +111 -0
  528. data/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +543 -0
  529. data/sorbet/rbi/todo.rbi +244 -0
  530. data/spec/commands/cards/available_cards_command_spec.rb +90 -0
  531. data/spec/commands/cards/card_data_command_spec.rb +1048 -0
  532. data/spec/constructors/has_helpers/base_constructor_spec.rb +49 -0
  533. data/spec/controllers/has_helpers/controller_spec.rb +71 -0
  534. data/spec/controllers/has_helpers/xlsx_export_spec.rb +96 -0
  535. data/spec/factories/advisors.rb +20 -0
  536. data/spec/factories/anonymous_cowards.rb +5 -0
  537. data/spec/factories/applications.rb +5 -0
  538. data/spec/factories/appointments.rb +6 -0
  539. data/spec/factories/attachment.rb +15 -0
  540. data/spec/factories/audits.rb +5 -0
  541. data/spec/factories/basic_schedules.rb +12 -0
  542. data/spec/factories/cards/card_definition_resources.rb +7 -0
  543. data/spec/factories/cards/card_definitions.rb +11 -0
  544. data/spec/factories/cards/card_fields.rb +22 -0
  545. data/spec/factories/cards/role_card_fields.rb +17 -0
  546. data/spec/factories/cards/role_resource_cards.rb +12 -0
  547. data/spec/factories/constant_definition.rb +7 -0
  548. data/spec/factories/contracts.rb +10 -0
  549. data/spec/factories/data_migration_models.rb +9 -0
  550. data/spec/factories/demographics.rb +22 -0
  551. data/spec/factories/events.rb +21 -0
  552. data/spec/factories/firms.rb +21 -0
  553. data/spec/factories/imports.rb +9 -0
  554. data/spec/factories/meetups.rb +13 -0
  555. data/spec/factories/organizations.rb +13 -0
  556. data/spec/factories/policies.rb +7 -0
  557. data/spec/factories/policy_notes.rb +9 -0
  558. data/spec/factories/read_only_values.rb +7 -0
  559. data/spec/factories/resources.rb +7 -0
  560. data/spec/factories/roles.rb +11 -0
  561. data/spec/factories/schedules.rb +13 -0
  562. data/spec/factories/shared/flattener/attributes.rb +10 -0
  563. data/spec/factories/shared/flattener/columns.rb +6 -0
  564. data/spec/factories/shared/flattener/resources.rb +5 -0
  565. data/spec/factories/templates.rb +12 -0
  566. data/spec/factories/user_organizations.rb +23 -0
  567. data/spec/factories/user_session.rb +11 -0
  568. data/spec/factories/users.rb +55 -0
  569. data/spec/fixtures/sample_config.yml +3 -0
  570. data/spec/graphql/has_helpers/mutations/external_data_sync_spec.rb +101 -0
  571. data/spec/graphql/has_helpers/resolvers/cards/available_cards_spec.rb +36 -0
  572. data/spec/graphql/has_helpers/resolvers/cards/card_data_spec.rb +42 -0
  573. data/spec/graphql/has_helpers/resolvers/cards/hover_card_data_spec.rb +59 -0
  574. data/spec/has_helpers/cards/cache_spec.rb +58 -0
  575. data/spec/has_helpers/cards/config_spec.rb +68 -0
  576. data/spec/has_helpers/cards/orphan_card_sweeper_spec.rb +97 -0
  577. data/spec/has_helpers/cards/remote_role_spec.rb +17 -0
  578. data/spec/has_helpers/cards/remote_roles_spec.rb +97 -0
  579. data/spec/has_helpers/cards/roles_spec.rb +52 -0
  580. data/spec/has_helpers/cards/smoke_spec.rb +168 -0
  581. data/spec/has_helpers/cards/support.rb +52 -0
  582. data/spec/has_helpers/resolvers/internal/roles_spec.rb +73 -0
  583. data/spec/has_helpers/service_trust/audit_log_cleanup_worker_spec.rb +33 -0
  584. data/spec/has_helpers/service_trust/audit_spec.rb +70 -0
  585. data/spec/has_helpers/service_trust/authenticated_as_service_spec.rb +65 -0
  586. data/spec/has_helpers/service_trust/authorization_spec.rb +37 -0
  587. data/spec/has_helpers/service_trust/capability_spec.rb +35 -0
  588. data/spec/has_helpers/service_trust/client_spec.rb +129 -0
  589. data/spec/has_helpers/service_trust/configuration_spec.rb +35 -0
  590. data/spec/has_helpers/service_trust/engine_spec.rb +13 -0
  591. data/spec/has_helpers/service_trust/errors_spec.rb +23 -0
  592. data/spec/has_helpers/service_trust/graphql_authentication_spec.rb +59 -0
  593. data/spec/has_helpers/service_trust/graphql_authorizable_spec.rb +91 -0
  594. data/spec/has_helpers/service_trust/graphql_client_spec.rb +47 -0
  595. data/spec/has_helpers/service_trust/jwks_client_spec.rb +85 -0
  596. data/spec/has_helpers/service_trust/jwks_controller_spec.rb +47 -0
  597. data/spec/has_helpers/service_trust/jwt_codec_spec.rb +30 -0
  598. data/spec/has_helpers/service_trust/key_manager_spec.rb +80 -0
  599. data/spec/has_helpers/service_trust/key_spec.rb +52 -0
  600. data/spec/has_helpers/service_trust/rake_tasks_spec.rb +58 -0
  601. data/spec/has_helpers/service_trust/rate_limiter_spec.rb +31 -0
  602. data/spec/has_helpers/service_trust/replay_cache_spec.rb +29 -0
  603. data/spec/has_helpers/service_trust/signer_verifier_spec.rb +159 -0
  604. data/spec/has_helpers/service_trust/smoke_spec.rb +216 -0
  605. data/spec/has_helpers/service_trust/support.rb +121 -0
  606. data/spec/has_helpers/service_trust/test_module_spec.rb +39 -0
  607. data/spec/has_helpers/service_trust/verify_middleware_spec.rb +82 -0
  608. data/spec/helpers/application_spec.rb +155 -0
  609. data/spec/importers/cards/importer_spec.rb +861 -0
  610. data/spec/internal/app/assets/config/manifest.js +0 -0
  611. data/spec/internal/app/constants/cat_egory.rb +33 -0
  612. data/spec/internal/app/constants/color.rb +19 -0
  613. data/spec/internal/app/constants/exclude_group_nil_constant.rb +5 -0
  614. data/spec/internal/app/constants/foo.rb +6 -0
  615. data/spec/internal/app/constants/fruit.rb +3 -0
  616. data/spec/internal/app/constants/generic_group_example.rb +12 -0
  617. data/spec/internal/app/constants/my_constant.rb +4 -0
  618. data/spec/internal/app/constants/product.rb +3 -0
  619. data/spec/internal/app/constants/shirt_size.rb +18 -0
  620. data/spec/internal/app/constants/simple_option.rb +14 -0
  621. data/spec/internal/app/constants/status.rb +5 -0
  622. data/spec/internal/app/constructors/organization_constructor.rb +4 -0
  623. data/spec/internal/app/controllers/application_controller.rb +27 -0
  624. data/spec/internal/app/controllers/search_extensions.rb +3 -0
  625. data/spec/internal/app/indices/advisor_index.rb +35 -0
  626. data/spec/internal/app/indices/contract_index.rb +52 -0
  627. data/spec/internal/app/indices/firm_index.rb +16 -0
  628. data/spec/internal/app/indices/policy_index.rb +20 -0
  629. data/spec/internal/app/models/advisor.rb +24 -0
  630. data/spec/internal/app/models/agency.rb +3 -0
  631. data/spec/internal/app/models/anonymous_coward.rb +5 -0
  632. data/spec/internal/app/models/another_event.rb +2 -0
  633. data/spec/internal/app/models/appointment.rb +3 -0
  634. data/spec/internal/app/models/attachment.rb +10 -0
  635. data/spec/internal/app/models/basic_schedule.rb +6 -0
  636. data/spec/internal/app/models/beneficiary.rb +6 -0
  637. data/spec/internal/app/models/client.rb +5 -0
  638. data/spec/internal/app/models/contract.rb +9 -0
  639. data/spec/internal/app/models/demographic.rb +4 -0
  640. data/spec/internal/app/models/division.rb +3 -0
  641. data/spec/internal/app/models/event.rb +10 -0
  642. data/spec/internal/app/models/event_template.rb +1 -0
  643. data/spec/internal/app/models/firm.rb +18 -0
  644. data/spec/internal/app/models/has_audits/audit.rb +15 -0
  645. data/spec/internal/app/models/import.rb +7 -0
  646. data/spec/internal/app/models/meetup.rb +8 -0
  647. data/spec/internal/app/models/organization.rb +17 -0
  648. data/spec/internal/app/models/organization_event.rb +5 -0
  649. data/spec/internal/app/models/policy.rb +16 -0
  650. data/spec/internal/app/models/policy_holder.rb +7 -0
  651. data/spec/internal/app/models/policy_note.rb +8 -0
  652. data/spec/internal/app/models/project.rb +3 -0
  653. data/spec/internal/app/models/read_only_value.rb +8 -0
  654. data/spec/internal/app/models/schedule.rb +12 -0
  655. data/spec/internal/app/models/template.rb +9 -0
  656. data/spec/internal/app/models/user.rb +31 -0
  657. data/spec/internal/app/models/user_organization.rb +17 -0
  658. data/spec/internal/app/views/has_lists/lists/_table.html.erb +1 -0
  659. data/spec/internal/config/database-standard.yml +24 -0
  660. data/spec/internal/config/initializers/resources.rb +19 -0
  661. data/spec/internal/config/routes.rb +19 -0
  662. data/spec/internal/config/storage.yml +3 -0
  663. data/spec/internal/db/good_job_schema.rb +141 -0
  664. data/spec/internal/db/schema.rb +334 -0
  665. data/spec/internal/log/.gitignore +1 -0
  666. data/spec/internal/public/favicon.ico +0 -0
  667. data/spec/lib/flattener/base_spec.rb +93 -0
  668. data/spec/lib/flattener/column/types_spec.rb +65 -0
  669. data/spec/lib/has_helpers/active_record/base_spec.rb +53 -0
  670. data/spec/lib/has_helpers/active_record/date_range_spec.rb +498 -0
  671. data/spec/lib/has_helpers/active_record/lookup_model_spec.rb +408 -0
  672. data/spec/lib/has_helpers/active_record/nested_resource_spec.rb +43 -0
  673. data/spec/lib/has_helpers/app/command/reports/generator_specs.rb +887 -0
  674. data/spec/lib/has_helpers/app/command_spec.rb +117 -0
  675. data/spec/lib/has_helpers/app/support/mocks/graphql_reports_helpers.rb +96 -0
  676. data/spec/lib/has_helpers/app/support/mocks/reports_api_mock.rb +47 -0
  677. data/spec/lib/has_helpers/attributes_spec.rb +220 -0
  678. data/spec/lib/has_helpers/aws_spec.rb +126 -0
  679. data/spec/lib/has_helpers/concerns/hydrate_concern_spec.rb +473 -0
  680. data/spec/lib/has_helpers/constant/definition_spec.rb +128 -0
  681. data/spec/lib/has_helpers/constant_spec.rb +432 -0
  682. data/spec/lib/has_helpers/core_ext/array_spec.rb +22 -0
  683. data/spec/lib/has_helpers/core_ext/date/infinity_spec.rb +67 -0
  684. data/spec/lib/has_helpers/core_ext/date_spec.rb +27 -0
  685. data/spec/lib/has_helpers/core_ext/false_class_spec.rb +7 -0
  686. data/spec/lib/has_helpers/core_ext/float_spec.rb +9 -0
  687. data/spec/lib/has_helpers/core_ext/hash_spec.rb +48 -0
  688. data/spec/lib/has_helpers/core_ext/integer_spec.rb +9 -0
  689. data/spec/lib/has_helpers/core_ext/nil_class_spec.rb +17 -0
  690. data/spec/lib/has_helpers/core_ext/object_spec.rb +54 -0
  691. data/spec/lib/has_helpers/core_ext/proc_spec.rb +24 -0
  692. data/spec/lib/has_helpers/core_ext/string_spec.rb +154 -0
  693. data/spec/lib/has_helpers/core_ext/true_class_spec.rb +7 -0
  694. data/spec/lib/has_helpers/data_migration/base_spec.rb +470 -0
  695. data/spec/lib/has_helpers/data_migration/large_worker_spec.rb +34 -0
  696. data/spec/lib/has_helpers/data_migration/master_worker_spec.rb +51 -0
  697. data/spec/lib/has_helpers/data_migration/migrator_spec.rb +113 -0
  698. data/spec/lib/has_helpers/data_migration/model_spec.rb +52 -0
  699. data/spec/lib/has_helpers/data_migration/small_worker_spec.rb +34 -0
  700. data/spec/lib/has_helpers/good_job/notification_alert_cleanup_worker_spec.rb +89 -0
  701. data/spec/lib/has_helpers/hash_accessors_spec.rb +66 -0
  702. data/spec/lib/has_helpers/index_spec.rb +442 -0
  703. data/spec/lib/has_helpers/lazy_config_spec.rb +31 -0
  704. data/spec/lib/has_helpers/organization_merge_spec.rb +88 -0
  705. data/spec/lib/has_helpers/resource_importer_spec.rb +119 -0
  706. data/spec/lib/has_helpers/rspec_spec.rb +16 -0
  707. data/spec/lib/has_helpers/search/provider_spec.rb +26 -0
  708. data/spec/lib/has_helpers/search/search_utils_spec.rb +134 -0
  709. data/spec/lib/has_helpers/sentry/graphql_trace_spec.rb +140 -0
  710. data/spec/lib/has_helpers/ui_attributes_spec.rb +42 -0
  711. data/spec/lib/has_helpers/utils/action_spec.rb +49 -0
  712. data/spec/lib/has_helpers/utils/alert_spec.rb +33 -0
  713. data/spec/lib/has_helpers/utils/dataset_spec.rb +10 -0
  714. data/spec/lib/has_helpers/utils/icon_spec.rb +23 -0
  715. data/spec/lib/has_helpers/utils/input_spec.rb +40 -0
  716. data/spec/lib/has_helpers/utils/log_notifier_spec.rb +25 -0
  717. data/spec/lib/has_helpers/utils/render_object_spec.rb +17 -0
  718. data/spec/lib/has_helpers/utils/s3_utils_spec.rb +78 -0
  719. data/spec/lib/has_helpers/utils/service_spec.rb +79 -0
  720. data/spec/lib/has_helpers/utils/slack_notifier_spec.rb +70 -0
  721. data/spec/lib/has_helpers/utils/user_restrictions_spec.rb +343 -0
  722. data/spec/lib/hq/structure/inserts_spec.rb +152 -0
  723. data/spec/lib/hq/structure_spec.rb +12 -0
  724. data/spec/models/cards/base_spec.rb +149 -0
  725. data/spec/models/cards/card_definition_resource_spec.rb +103 -0
  726. data/spec/models/cards/card_definition_spec.rb +50 -0
  727. data/spec/models/cards/card_field_spec.rb +46 -0
  728. data/spec/models/cards/field_builder_spec.rb +318 -0
  729. data/spec/models/cards/registry_spec.rb +147 -0
  730. data/spec/models/cards/role_card_field_spec.rb +111 -0
  731. data/spec/models/cards/role_resource_card_spec.rb +112 -0
  732. data/spec/models/has_helpers/master_record_spec.rb +20 -0
  733. data/spec/models/has_helpers/user_organization_spec.rb +28 -0
  734. data/spec/models/has_helpers/user_session_spec.rb +16 -0
  735. data/spec/presenters/base_presenter_spec.rb +166 -0
  736. data/spec/rails_helper.rb +119 -0
  737. data/spec/requests/has_helpers/factory_controller_spec.rb +159 -0
  738. data/spec/requests/has_helpers/health_check_controller_spec.rb +37 -0
  739. data/spec/scenarios/empty_setup.rb +6 -0
  740. data/spec/spec_helper.rb +22 -0
  741. data/spec/support/has_helpers/database_helpers.rb +12 -0
  742. data/spec/utils/sync_utils_spec.rb +233 -0
  743. data/spec/workers/goodjob/elasticsearch_process_batch_spec.rb +94 -0
  744. data/spec/workers/goodjob/elasticsearch_process_change_logs_master_worker_spec.rb +40 -0
  745. data/spec/workers/goodjob/elasticsearch_process_change_logs_worker_spec.rb +82 -0
  746. data/spec/workers/goodjob/elasticsearch_process_queue_spec.rb +89 -0
  747. data/spec/workers/goodjob/elasticsearch_reindex_spec.rb +49 -0
  748. metadata +1593 -0
@@ -0,0 +1,1415 @@
1
+ # This file is autogenerated. Do not edit it by hand. Regenerate it with:
2
+ # srb rbi sorbet-typed
3
+ #
4
+ # If you would like to make changes to this file, great! Please upstream any changes you make here:
5
+ #
6
+ # https://github.com/sorbet/sorbet-typed/edit/master/lib/activerecord/all/activerecord.rbi
7
+ #
8
+ # typed: false
9
+
10
+ VariadicUntypedFunction = T.type_alias { Proc }
11
+
12
+ module ActiveRecord::Associations::ClassMethods
13
+ sig do
14
+ params(
15
+ name: Symbol,
16
+ scope: T.nilable(T.proc.void),
17
+ after_add: T.nilable(T.any(Symbol, String, T.proc.void)),
18
+ after_remove: T.nilable(T.any(Symbol, String, T.proc.void)),
19
+ anonymous_class: T.nilable(T.any(Symbol, String)),
20
+ as: T.nilable(T.any(Symbol, String)),
21
+ autosave: T.nilable(T::Boolean),
22
+ before_add: T.nilable(T.any(Symbol, String, T.proc.void)),
23
+ before_remove: T.nilable(T.any(Symbol, String, T.proc.void)),
24
+ class_name: T.nilable(T.any(Symbol, String)),
25
+ counter_cache: T.nilable(T.any(Symbol, String)),
26
+ dependent: T.nilable(T.any(Symbol, String)),
27
+ extend: T.nilable(T.any(Module, T::Array[Module])),
28
+ foreign_key: T.nilable(T.any(Symbol, String)),
29
+ foreign_type: T.nilable(T.any(Symbol, String)),
30
+ index_errors: T.nilable(T::Boolean),
31
+ inverse_of: T.nilable(T.any(Symbol, String)),
32
+ join_table: T.nilable(T.any(Symbol, String)),
33
+ primary_key: T.nilable(T.any(Symbol, String)),
34
+ source: T.nilable(T.any(Symbol, String)),
35
+ source_type: T.nilable(T.any(Symbol, String)),
36
+ table_name: T.nilable(T.any(Symbol, String)),
37
+ through: T.nilable(T.any(Symbol, String)),
38
+ validate: T.nilable(T::Boolean),
39
+ blk: T.nilable(T.proc.void)
40
+ ).void
41
+ end
42
+ def has_many(
43
+ name,
44
+ scope = nil,
45
+ after_add: nil,
46
+ after_remove: nil,
47
+ anonymous_class: nil,
48
+ as: nil,
49
+ autosave: nil,
50
+ before_add: nil,
51
+ before_remove: nil,
52
+ class_name: nil,
53
+ counter_cache: nil,
54
+ dependent: nil,
55
+ extend: nil,
56
+ foreign_key: nil,
57
+ foreign_type: nil,
58
+ index_errors: nil,
59
+ inverse_of: nil,
60
+ join_table: nil,
61
+ primary_key: nil,
62
+ source: nil,
63
+ source_type: nil,
64
+ table_name: nil,
65
+ through: nil,
66
+ validate: nil,
67
+ &blk
68
+ ); end
69
+
70
+ sig do
71
+ params(
72
+ name: Symbol,
73
+ scope: T.nilable(T.proc.void),
74
+ anonymous_class: T.nilable(T.any(Symbol, String)),
75
+ as: T.nilable(T.any(Symbol, String)),
76
+ autosave: T.nilable(T::Boolean),
77
+ class_name: T.nilable(T.any(Symbol, String)),
78
+ dependent: T.nilable(T.any(Symbol, String)),
79
+ foreign_key: T.nilable(T.any(Symbol, String)),
80
+ foreign_type: T.nilable(T.any(Symbol, String)),
81
+ inverse_of: T.nilable(T.any(Symbol, String)),
82
+ primary_key: T.nilable(T.any(Symbol, String)),
83
+ required: T.nilable(T::Boolean),
84
+ source: T.nilable(T.any(Symbol, String)),
85
+ source_type: T.nilable(T.any(Symbol, String)),
86
+ through: T.nilable(T.any(Symbol, String)),
87
+ validate: T.nilable(T::Boolean),
88
+ blk: T.nilable(T.proc.void)
89
+ ).void
90
+ end
91
+ def has_one(
92
+ name,
93
+ scope = nil,
94
+ anonymous_class: nil,
95
+ as: nil,
96
+ autosave: nil,
97
+ class_name: nil,
98
+ dependent: nil,
99
+ foreign_key: nil,
100
+ foreign_type: nil,
101
+ inverse_of: nil,
102
+ primary_key: nil,
103
+ required: nil,
104
+ source: nil,
105
+ source_type: nil,
106
+ through: nil,
107
+ validate: nil,
108
+ &blk
109
+ ); end
110
+
111
+ sig do
112
+ params(
113
+ name: T.nilable(T.any(Symbol, String)),
114
+ scope: T.nilable(T.proc.void),
115
+ autosave: T.nilable(T::Boolean),
116
+ class_name: T.nilable(T.any(Symbol, String)),
117
+ counter_cache: T.nilable(T::Boolean),
118
+ dependent: T.nilable(T.any(Symbol, String)),
119
+ foreign_key: T.nilable(T.any(Symbol, String)),
120
+ foreign_type: T.nilable(T.any(Symbol, String)),
121
+ inverse_of: T.nilable(T.any(Symbol, String)),
122
+ optional: T.nilable(T::Boolean),
123
+ polymorphic: T.nilable(T::Boolean),
124
+ primary_key: T.nilable(T.any(Symbol, String)),
125
+ required: T.nilable(T::Boolean),
126
+ touch: T.nilable(T.any(T::Boolean, Symbol)),
127
+ validate: T.nilable(T::Boolean),
128
+ default: T.nilable(T.proc.returns(T.untyped))
129
+ ).void
130
+ end
131
+ def belongs_to(
132
+ name,
133
+ scope = nil,
134
+ autosave: nil,
135
+ class_name: nil,
136
+ counter_cache: nil,
137
+ dependent: nil,
138
+ foreign_key: nil,
139
+ foreign_type: nil,
140
+ inverse_of: nil,
141
+ optional: nil,
142
+ polymorphic: nil,
143
+ primary_key: nil,
144
+ required: nil,
145
+ touch: nil,
146
+ validate: nil,
147
+ default: nil
148
+ ); end
149
+
150
+ sig do
151
+ params(
152
+ name: T.nilable(T.any(Symbol, String)),
153
+ scope: T.nilable(T.proc.void),
154
+ after_add: T.nilable(T.any(Symbol, String, T.proc.void)),
155
+ after_remove: T.nilable(T.any(Symbol, String, T.proc.void)),
156
+ association_foreign_key: T.nilable(T.any(Symbol, String)),
157
+ autosave: T.nilable(T::Boolean),
158
+ before_add: T.nilable(T.any(Symbol, String, T.proc.void)),
159
+ before_remove: T.nilable(T.any(Symbol, String, T.proc.void)),
160
+ class_name: T.nilable(T.any(Symbol, String)),
161
+ extend: T.nilable(T.any(Module, T::Array[Module])),
162
+ foreign_key: T.nilable(T.any(Symbol, String)),
163
+ join_table: T.nilable(T.any(Symbol, String)),
164
+ validate: T.nilable(T::Boolean),
165
+ blk: T.nilable(T.proc.void)
166
+ ).void
167
+ end
168
+ def has_and_belongs_to_many(
169
+ name,
170
+ scope = nil,
171
+ after_add: nil,
172
+ after_remove: nil,
173
+ association_foreign_key: nil,
174
+ autosave: nil,
175
+ before_add: nil,
176
+ before_remove: nil,
177
+ class_name: nil,
178
+ extend: nil,
179
+ foreign_key: nil,
180
+ join_table: nil,
181
+ validate: nil,
182
+ &blk
183
+ ); end
184
+ end
185
+
186
+ module ActiveRecord::AttributeMethods
187
+ include ActiveModel::AttributeMethods
188
+ end
189
+
190
+ module ActiveRecord::AttributeMethods::Serialization::ClassMethods
191
+ sig { params(attr_name: Symbol, class_name_or_coder: T.untyped).void }
192
+ def serialize(attr_name, class_name_or_coder = Object); end
193
+ end
194
+
195
+ module ActiveRecord::NestedAttributes::ClassMethods
196
+ sig do
197
+ params(
198
+ attr_names: T.any(T.any(Symbol, String), T::Array[T.any(Symbol, String)]),
199
+ allow_destroy: T.nilable(T::Boolean),
200
+ reject_if: T.any(Symbol, T.proc.returns(T::Boolean)),
201
+ limit: T.any(Integer, Symbol, T.proc.returns(Integer)),
202
+ update_only: T.nilable(T::Boolean),
203
+ ).void
204
+ end
205
+ def accepts_nested_attributes_for(
206
+ attr_names,
207
+ allow_destroy: nil,
208
+ reject_if: nil,
209
+ limit: nil,
210
+ update_only: nil
211
+ ); end
212
+ end
213
+
214
+ module ActiveRecord::Scoping::Named::ClassMethods
215
+ sig do
216
+ params(
217
+ name: T.nilable(T.any(Symbol, String)),
218
+ body: VariadicUntypedFunction,
219
+ blk: T.nilable(VariadicUntypedFunction)
220
+ ).void
221
+ end
222
+ def scope(
223
+ name,
224
+ body,
225
+ &blk
226
+ ); end
227
+ end
228
+
229
+ module ActiveRecord::Scoping::Default::ClassMethods
230
+ end
231
+
232
+ module ActiveRecord::Inheritance
233
+ mixes_in_class_methods(ActiveRecord::Inheritance::ClassMethods)
234
+ end
235
+
236
+ class ActiveRecord::Base
237
+ extend ActiveModel::Naming
238
+
239
+ extend ActiveSupport::Benchmarkable
240
+ extend ActiveSupport::DescendantsTracker
241
+
242
+ extend ActiveRecord::ConnectionHandling
243
+ extend ActiveRecord::QueryCache::ClassMethods
244
+ extend ActiveRecord::Querying
245
+ extend ActiveRecord::Translation
246
+ extend ActiveRecord::DynamicMatchers
247
+ extend ActiveRecord::Explain
248
+ extend ActiveRecord::Enum
249
+
250
+ include ActiveRecord::Core
251
+ include ActiveRecord::Persistence
252
+ include ActiveRecord::ReadonlyAttributes
253
+ include ActiveRecord::ModelSchema
254
+ include ActiveRecord::Inheritance
255
+ include ActiveRecord::Scoping
256
+ include ActiveRecord::Scoping::Default # via ActiveRecord::Scoping#included hook
257
+ extend ActiveRecord::Scoping::Default::ClassMethods # via ActiveRecord::Scoping::Default Concern inclusion
258
+ include ActiveRecord::Scoping::Named # via ActiveRecord::Scoping#included hook
259
+ extend ActiveRecord::Scoping::Named::ClassMethods # via ActiveRecord::Scoping::Named Concern inclusion
260
+ include ActiveRecord::Sanitization
261
+ include ActiveRecord::AttributeAssignment
262
+ include ActiveModel::Conversion
263
+ include ActiveRecord::Integration
264
+ include ActiveRecord::Validations
265
+ include ActiveRecord::CounterCache
266
+ include ActiveRecord::Attributes
267
+ include ActiveRecord::AttributeDecorators
268
+ include ActiveRecord::Locking::Optimistic
269
+ include ActiveRecord::Locking::Pessimistic
270
+ include ActiveRecord::AttributeMethods
271
+ include ActiveRecord::AttributeMethods::Read # via ActiveRecord::AttributeMethods#included hook
272
+ include ActiveRecord::AttributeMethods::Write # via ActiveRecord::AttributeMethods#included hook
273
+ include ActiveRecord::AttributeMethods::BeforeTypeCast # via ActiveRecord::AttributeMethods#included hook
274
+ include ActiveRecord::AttributeMethods::Query # via ActiveRecord::AttributeMethods#included hook
275
+ include ActiveRecord::AttributeMethods::PrimaryKey # via ActiveRecord::AttributeMethods#included hook
276
+ include ActiveRecord::AttributeMethods::TimeZoneConversion # via ActiveRecord::AttributeMethods#included hook
277
+ include ActiveRecord::AttributeMethods::Dirty # via ActiveRecord::AttributeMethods#included hook
278
+ include ActiveRecord::AttributeMethods::Serialization # via ActiveRecord::AttributeMethods#included hook
279
+ extend ActiveRecord::AttributeMethods::Serialization::ClassMethods # via ActiveRecord::AttributeMethods::Serialization Concern inclusion
280
+ include ActiveRecord::Callbacks
281
+ include ActiveRecord::Timestamp
282
+ include ActiveRecord::Associations
283
+ include ActiveModel::SecurePassword
284
+ include ActiveRecord::AutosaveAssociation
285
+ include ActiveRecord::NestedAttributes
286
+ extend ActiveRecord::NestedAttributes::ClassMethods # via ActiveRecord::NestedAttributes Concern inclusion
287
+ include ActiveRecord::Aggregations
288
+ include ActiveRecord::Transactions
289
+ include ActiveRecord::NoTouching
290
+ include ActiveRecord::Reflection
291
+ include ActiveRecord::Serialization
292
+ include ActiveRecord::Store
293
+
294
+ sig do
295
+ params(
296
+ arg: Symbol,
297
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
298
+ on: T.nilable(T.any(Symbol, T::Array[Symbol])),
299
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
300
+ ).void
301
+ end
302
+ def self.after_commit(
303
+ arg,
304
+ if: nil,
305
+ on: nil,
306
+ unless: nil
307
+ ); end
308
+
309
+ sig do
310
+ params(
311
+ arg: T.nilable(Symbol),
312
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
313
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
314
+ ).void
315
+ end
316
+ def self.after_create(
317
+ arg = nil,
318
+ if: nil,
319
+ unless: nil
320
+ ); end
321
+
322
+ sig do
323
+ params(
324
+ arg: T.nilable(Symbol),
325
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
326
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
327
+ ).void
328
+ end
329
+ def self.after_destroy(
330
+ arg = nil,
331
+ if: nil,
332
+ unless: nil
333
+ ); end
334
+
335
+ sig do
336
+ params(
337
+ arg: T.nilable(Symbol),
338
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
339
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
340
+ ).void
341
+ end
342
+ def self.after_rollback(
343
+ arg = nil,
344
+ if: nil,
345
+ unless: nil
346
+ ); end
347
+
348
+ sig do
349
+ params(
350
+ arg: T.nilable(Symbol),
351
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
352
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
353
+ ).void
354
+ end
355
+ def self.after_save(
356
+ arg = nil,
357
+ if: nil,
358
+ unless: nil
359
+ ); end
360
+
361
+ sig do
362
+ params(
363
+ arg: T.nilable(Symbol),
364
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
365
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
366
+ ).void
367
+ end
368
+ def self.after_update(
369
+ arg = nil,
370
+ if: nil,
371
+ unless: nil
372
+ ); end
373
+
374
+ sig do
375
+ params(
376
+ arg: T.nilable(Symbol),
377
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
378
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
379
+ on: T.nilable(T.any(Symbol, T::Array[Symbol]))
380
+ ).void
381
+ end
382
+ def self.after_validation(
383
+ arg = nil,
384
+ if: nil,
385
+ unless: nil,
386
+ on: nil
387
+ ); end
388
+
389
+ sig do
390
+ params(
391
+ arg: T.nilable(Symbol),
392
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
393
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
394
+ ).void
395
+ end
396
+ def self.around_create(
397
+ arg = nil,
398
+ if: nil,
399
+ unless: nil
400
+ ); end
401
+
402
+ sig do
403
+ params(
404
+ arg: T.nilable(Symbol),
405
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
406
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
407
+ ).void
408
+ end
409
+ def self.around_destroy(
410
+ arg = nil,
411
+ if: nil,
412
+ unless: nil
413
+ ); end
414
+
415
+ sig do
416
+ params(
417
+ arg: T.nilable(Symbol),
418
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
419
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
420
+ ).void
421
+ end
422
+ def self.around_save(
423
+ arg = nil,
424
+ if: nil,
425
+ unless: nil
426
+ ); end
427
+
428
+ sig do
429
+ params(
430
+ arg: T.nilable(Symbol),
431
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
432
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
433
+ ).void
434
+ end
435
+ def self.around_update(
436
+ arg = nil,
437
+ if: nil,
438
+ unless: nil
439
+ ); end
440
+
441
+ sig do
442
+ params(
443
+ arg: T.nilable(Symbol),
444
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
445
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
446
+ ).void
447
+ end
448
+ def self.before_create(
449
+ arg = nil,
450
+ if: nil,
451
+ unless: nil
452
+ ); end
453
+
454
+ sig do
455
+ params(
456
+ arg: T.nilable(Symbol),
457
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
458
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
459
+ ).void
460
+ end
461
+ def self.before_destroy(
462
+ arg = nil,
463
+ if: nil,
464
+ unless: nil
465
+ ); end
466
+
467
+ sig do
468
+ params(
469
+ arg: T.nilable(Symbol),
470
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
471
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
472
+ ).void
473
+ end
474
+ def self.before_save(
475
+ arg = nil,
476
+ if: nil,
477
+ unless: nil
478
+ ); end
479
+
480
+ sig do
481
+ params(
482
+ arg: T.nilable(Symbol),
483
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
484
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean))))
485
+ ).void
486
+ end
487
+ def self.before_update(
488
+ arg = nil,
489
+ if: nil,
490
+ unless: nil
491
+ ); end
492
+
493
+ sig do
494
+ params(
495
+ arg: T.nilable(Symbol),
496
+ if: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
497
+ unless: T.nilable(T.any(Symbol, Proc, T.proc.params(arg0: T.untyped).returns(T.nilable(T::Boolean)))),
498
+ on: T.nilable(T.any(Symbol, T::Array[Symbol]))
499
+ ).void
500
+ end
501
+ def self.before_validation(
502
+ arg = nil,
503
+ if: nil,
504
+ unless: nil,
505
+ on: nil
506
+ ); end
507
+
508
+ sig { params(comparison_object: T.untyped).returns(T::Boolean) }
509
+ def ==(comparison_object); end
510
+ end
511
+
512
+ module ActiveRecord::Inheritance::ClassMethods
513
+ sig { params(value: T::Boolean).void }
514
+ def abstract_class=(value); end
515
+
516
+ sig { returns(T::Boolean) }
517
+ def abstract_class; end
518
+ end
519
+
520
+ module ActiveRecord::Persistence
521
+ mixes_in_class_methods(ActiveRecord::Persistence::ClassMethods)
522
+
523
+ sig { params(klass: Class).returns(T.untyped) }
524
+ def becomes!(klass); end
525
+
526
+ sig { params(klass: Class).returns(T.untyped) }
527
+ def becomes(klass); end
528
+
529
+ sig do
530
+ params(
531
+ attribute: T.any(Symbol, String),
532
+ by: T.nilable(Integer),
533
+ touch: T.nilable(T::Boolean)
534
+ ).returns(T.self_type)
535
+ end
536
+ def decrement!(attribute, by = 1, touch: nil); end
537
+
538
+ sig do
539
+ params(
540
+ attribute: T.any(Symbol, String),
541
+ by: T.nilable(Integer)
542
+ ).returns(T.self_type)
543
+ end
544
+ def decrement(attribute, by = 1); end
545
+
546
+ sig { returns(T::Boolean) }
547
+ def destroyed?(); end
548
+
549
+ sig do
550
+ params(
551
+ attribute: T.any(Symbol, String),
552
+ by: T.nilable(Integer),
553
+ touch: T.nilable(T::Boolean)
554
+ ).returns(T.self_type)
555
+ end
556
+ def increment!(attribute, by = 1, touch: nil); end
557
+
558
+ sig do
559
+ params(
560
+ attribute: T.any(Symbol, String),
561
+ by: T.nilable(Integer)
562
+ ).returns(T.self_type)
563
+ end
564
+ def increment(attribute, by = 1); end
565
+
566
+ sig { returns(T::Boolean) }
567
+ def new_record?(); end
568
+
569
+ sig { returns(T::Boolean) }
570
+ def persisted?(); end
571
+
572
+ sig do
573
+ params(
574
+ options: T.nilable({ lock: T.nilable(T::Boolean) })
575
+ ).returns(T.self_type)
576
+ end
577
+ def reload(options = nil); end
578
+
579
+ sig do
580
+ params(
581
+ args: T.untyped,
582
+ blk: T.proc.void,
583
+ ).returns(TrueClass)
584
+ end
585
+ def save!(*args, &blk); end
586
+
587
+ sig do
588
+ params(
589
+ args: T.untyped,
590
+ blk: T.proc.void,
591
+ ).returns(T::Boolean)
592
+ end
593
+ def save(*args, &blk); end
594
+
595
+ sig { params(attribute: T.any(Symbol, String)).returns(TrueClass) }
596
+ def toggle!(attribute); end
597
+
598
+ sig { params(attribute: T.any(Symbol, String)).returns(T.self_type) }
599
+ def toggle(attribute); end
600
+
601
+ sig do
602
+ params(
603
+ names: T.any(
604
+ Symbol,
605
+ String,
606
+ T::Array[T.any(Symbol, String)]
607
+ ),
608
+ time: T.nilable(Time)
609
+ ).returns(T::Boolean)
610
+ end
611
+ def touch(*names, time: nil); end
612
+
613
+ sig do
614
+ params(
615
+ name: T.any(Symbol, String),
616
+ value: T.untyped,
617
+ ).returns(T::Boolean)
618
+ end
619
+ def update_attribute(name, value); end
620
+
621
+ sig do
622
+ params(
623
+ name: T.any(Symbol, String),
624
+ value: T.untyped,
625
+ ).returns(T::Boolean)
626
+ end
627
+ def update_column(name, value); end
628
+
629
+ sig do
630
+ params(
631
+ attributes: T::Hash[T.any(Symbol, String), T.untyped]
632
+ ).returns(T::Boolean)
633
+ end
634
+ def update_columns(attributes); end
635
+
636
+ sig do
637
+ params(
638
+ attributes: T.any(
639
+ T::Hash[T.any(Symbol, String), T.untyped],
640
+ ActionController::Parameters
641
+ )
642
+ ).returns(TrueClass)
643
+ end
644
+ def update!(attributes); end
645
+
646
+ # update_attributes! is an alias of update!
647
+ sig do
648
+ params(
649
+ attributes: T.any(
650
+ T::Hash[T.any(Symbol, String), T.untyped],
651
+ ActionController::Parameters
652
+ )
653
+ ).returns(TrueClass)
654
+ end
655
+ def update_attributes!(attributes); end
656
+
657
+ sig do
658
+ params(
659
+ attributes: T.any(
660
+ T::Hash[T.any(Symbol, String), T.untyped],
661
+ ActionController::Parameters
662
+ )
663
+ ).returns(T::Boolean)
664
+ end
665
+ def update(attributes); end
666
+
667
+ # update_attributes is an alias of update
668
+ sig do
669
+ params(
670
+ attributes: T.any(
671
+ T::Hash[T.any(Symbol, String), T.untyped],
672
+ ActionController::Parameters
673
+ )
674
+ ).returns(T::Boolean)
675
+ end
676
+ def update_attributes(attributes); end
677
+ end
678
+
679
+ module ActiveRecord::Persistence::ClassMethods
680
+ sig do
681
+ params(
682
+ attributes: T.nilable(T.any(
683
+ T::Hash[T.any(Symbol, String), T.untyped],
684
+ T::Array[T::Hash[T.any(Symbol, String), T.untyped]]
685
+ )),
686
+ blk: T.nilable(T.proc.params(arg0: T.untyped).returns(T.untyped))
687
+ ).returns(T.untyped)
688
+ end
689
+ def create!(attributes = nil, &blk); end
690
+
691
+ sig do
692
+ params(
693
+ attributes: T.nilable(T.any(
694
+ T::Hash[T.any(Symbol, String), T.untyped],
695
+ T::Array[T::Hash[T.any(Symbol, String), T.untyped]]
696
+ )),
697
+ blk: T.nilable(T.proc.params(arg0: T.untyped).returns(T.untyped))
698
+ ).returns(T.untyped)
699
+ end
700
+ def create(attributes = nil, &blk); end
701
+
702
+ sig do
703
+ params(
704
+ id_or_array: T.any(T.untyped, T::Array[T.untyped])
705
+ ).returns(T.untyped)
706
+ end
707
+ def delete(id_or_array); end
708
+
709
+ sig do
710
+ params(
711
+ id_or_array: T.any(T.untyped, T::Array[T.untyped])
712
+ ).returns(T.untyped)
713
+ end
714
+ def destroy!(id_or_array); end
715
+
716
+ sig do
717
+ params(
718
+ id_or_array: T.any(T.untyped, T::Array[T.untyped])
719
+ ).returns(T.untyped)
720
+ end
721
+ def destroy(id_or_array); end
722
+
723
+ sig do
724
+ params(
725
+ attributes: T::Array[T::Hash[T.any(Symbol, String), T.untyped]],
726
+ returning: T.nilable(T.any(FalseClass, T::Array[T.any(Symbol, String)]))
727
+ ).returns(ActiveRecord::Result)
728
+ end
729
+ def insert_all!(attributes, returning: nil); end
730
+
731
+ sig do
732
+ params(
733
+ attributes: T::Array[T::Hash[T.any(Symbol, String), T.untyped]],
734
+ returning: T.nilable(T.any(FalseClass, T::Array[T.any(Symbol, String)])),
735
+ unique_by: T.nilable(T.untyped)
736
+ ).returns(ActiveRecord::Result)
737
+ end
738
+ def insert_all(attributes, returning: nil, unique_by: nil); end
739
+
740
+ sig do
741
+ params(
742
+ attributes: T::Hash[T.any(Symbol, String), T.untyped],
743
+ returning: T.nilable(T.any(FalseClass, T::Array[T.any(Symbol, String)])),
744
+ unique_by: T.nilable(T.untyped)
745
+ ).returns(ActiveRecord::Result)
746
+ end
747
+ def insert!(attributes, returning: nil, unique_by: nil); end
748
+
749
+ sig do
750
+ params(
751
+ attributes: T::Hash[T.any(Symbol, String), T.untyped],
752
+ returning: T.nilable(T.any(FalseClass, T::Array[T.any(Symbol, String)])),
753
+ unique_by: T.nilable(T.untyped)
754
+ ).returns(ActiveRecord::Result)
755
+ end
756
+ def insert(attributes, returning: nil, unique_by: nil); end
757
+
758
+ sig { params(attributes: T.untyped, column_types: T::Hash[T.untyped, T.untyped], blk: T.proc.void).returns(T.untyped) }
759
+ def instantiate(attributes, column_types = {}, &blk); end
760
+
761
+ # The 'attributes' parameter can take either a hash or an array of hashes.
762
+ sig do
763
+ params(
764
+ id: T.any(T.untyped, T::Array[T.untyped], Symbol),
765
+ attributes: T.any(
766
+ T::Hash[T.any(Symbol, String), T.untyped],
767
+ T::Array[T::Hash[T.any(Symbol, String), T.untyped]]
768
+ )
769
+ ).returns(T.any(T::Array[T.untyped], T.untyped))
770
+ end
771
+ def update(id = :all, attributes); end
772
+
773
+ sig do
774
+ params(
775
+ attributes: T::Array[T::Hash[T.any(Symbol, String), T.untyped]],
776
+ returning: T.nilable(T.any(FalseClass, T::Array[T.any(Symbol, String)])),
777
+ unique_by: T.nilable(T.untyped)
778
+ ).returns(ActiveRecord::Result)
779
+ end
780
+ def upsert_all(attributes, returning: nil, unique_by: nil); end
781
+
782
+ sig do
783
+ params(
784
+ attributes: T::Hash[T.any(Symbol, String), T.untyped],
785
+ returning: T.nilable(T.any(FalseClass, T::Array[T.any(Symbol, String)])),
786
+ unique_by: T.nilable(T.untyped)
787
+ ).returns(ActiveRecord::Result)
788
+ end
789
+ def upsert(attributes, returning: nil, unique_by: nil); end
790
+ end
791
+
792
+ class ActiveRecord::Result; end
793
+
794
+ class ActiveRecord::Type::Value
795
+ extend T::Sig
796
+
797
+ sig { params(args: T.untyped).void }
798
+ def initialize(args); end
799
+
800
+ sig { params(value: T.untyped).returns(T.untyped) }
801
+ def cast(value); end
802
+ end
803
+
804
+ class ActiveRecord::Type::Boolean < ActiveRecord::Type::Value
805
+ extend T::Sig
806
+
807
+ sig { params(args: T.untyped).void }
808
+ def initialize(args = nil); end
809
+
810
+ sig { params(value: T.untyped).returns(T.nilable(T::Boolean)) }
811
+ def cast(value); end
812
+ end
813
+
814
+ module ActiveRecord
815
+ class ActiveRecordError < StandardError; end
816
+ class AdapterNotFound < ActiveRecordError; end
817
+ class AdapterNotSpecified < ActiveRecordError; end
818
+ class AmbiguousSourceReflectionForThroughAssociation < ActiveRecordError; end
819
+ class AssociationNotFoundError < ConfigurationError; end
820
+ class AssociationTypeMismatch < ActiveRecordError; end
821
+ class AttributeAssignmentError < ActiveRecordError; end
822
+ class ConcurrentMigrationError < MigrationError; end
823
+ class ConfigurationError < ActiveRecordError; end
824
+ class ConnectionNotEstablished < ActiveRecordError; end
825
+ class ConnectionTimeoutError < ConnectionNotEstablished; end
826
+ class DangerousAttributeError < ActiveRecordError; end
827
+ class Deadlocked < TransactionRollbackError; end
828
+ class DeleteRestrictionError < ActiveRecordError; end
829
+ class DuplicateMigrationNameError < MigrationError; end
830
+ class DuplicateMigrationVersionError < MigrationError; end
831
+ class EagerLoadPolymorphicError < ActiveRecordError; end
832
+ class EnvironmentMismatchError < ActiveRecordError; end
833
+ class ExclusiveConnectionTimeoutError < ConnectionTimeoutError; end
834
+ class FixtureClassNotFound < ActiveRecordError; end
835
+ class HasManyThroughAssociationNotFoundError < ActiveRecordError; end
836
+ class HasManyThroughAssociationPointlessSourceTypeError < ActiveRecordError; end
837
+ class HasManyThroughAssociationPolymorphicSourceError < ActiveRecordError; end
838
+ class HasManyThroughAssociationPolymorphicThroughError < ActiveRecordError; end
839
+ class HasManyThroughCantAssociateThroughHasOneOrManyReflection < ThroughCantAssociateThroughHasOneOrManyReflection; end
840
+ class HasManyThroughNestedAssociationsAreReadonly < ThroughNestedAssociationsAreReadonly; end
841
+ class HasManyThroughOrderError < ActiveRecordError; end
842
+ class HasManyThroughSourceAssociationNotFoundError < ActiveRecordError; end
843
+ class HasOneAssociationPolymorphicThroughError < ActiveRecordError; end
844
+ class HasOneThroughCantAssociateThroughCollection < ActiveRecordError; end
845
+ class HasOneThroughCantAssociateThroughHasOneOrManyReflection < ThroughCantAssociateThroughHasOneOrManyReflection; end
846
+ class HasOneThroughNestedAssociationsAreReadonly < ThroughNestedAssociationsAreReadonly; end
847
+ class IllegalMigrationNameError < MigrationError; end
848
+ class ImmutableRelation < ActiveRecordError; end
849
+ class InvalidForeignKey < WrappedDatabaseException; end
850
+ class InverseOfAssociationNotFoundError < ActiveRecordError; end
851
+ class IrreversibleMigration < MigrationError; end
852
+ class IrreversibleOrderError < ActiveRecordError; end
853
+ class LockWaitTimeout < StatementInvalid; end
854
+ class MigrationError < ActiveRecordError; end
855
+ class MismatchedForeignKey < StatementInvalid; end
856
+ class MultiparameterAssignmentErrors < ActiveRecordError; end
857
+ class NoDatabaseError < StatementInvalid; end
858
+ class NoEnvironmentInSchemaError < MigrationError; end
859
+ class NotNullViolation < StatementInvalid; end
860
+ class PendingMigrationError < MigrationError; end
861
+ class PreparedStatementCacheExpired < StatementInvalid; end
862
+ class PreparedStatementInvalid < ActiveRecordError; end
863
+ class ProtectedEnvironmentError < ActiveRecordError; end
864
+ class QueryCanceled < StatementInvalid; end
865
+ class RangeError < StatementInvalid; end
866
+ class ReadOnlyRecord < ActiveRecordError; end
867
+ class RecordInvalid < ActiveRecordError; end
868
+ class RecordNotDestroyed < ActiveRecordError; end
869
+ class RecordNotFound < ActiveRecordError; end
870
+ class RecordNotSaved < ActiveRecordError; end
871
+ class RecordNotUnique < WrappedDatabaseException; end
872
+ class Rollback < ActiveRecordError; end
873
+ class SerializationFailure < TransactionRollbackError; end
874
+ class SerializationTypeMismatch < ActiveRecordError; end
875
+ class StaleObjectError < ActiveRecordError; end
876
+ class StatementInvalid < ActiveRecordError; end
877
+ class StatementTimeout < StatementInvalid; end
878
+ class SubclassNotFound < ActiveRecordError; end
879
+ class ThroughCantAssociateThroughHasOneOrManyReflection < ActiveRecordError; end
880
+ class ThroughNestedAssociationsAreReadonly < ActiveRecordError; end
881
+ class TransactionIsolationError < ActiveRecordError; end
882
+ class TransactionRollbackError < StatementInvalid; end
883
+ class TypeConflictError < StandardError; end
884
+ class UnknownAttributeError < NoMethodError; end
885
+ class UnknownAttributeReference < ActiveRecordError; end
886
+ class UnknownMigrationVersionError < MigrationError; end
887
+ class UnknownPrimaryKey < ActiveRecordError; end
888
+ class ValueTooLong < StatementInvalid; end
889
+ class WrappedDatabaseException < StatementInvalid; end
890
+ end
891
+
892
+ class ActiveRecord::Schema < ActiveRecord::Migration::Current
893
+ sig {params(info: T::Hash[T.untyped, T.untyped], blk: T.proc.bind(ActiveRecord::Schema).void).void}
894
+ def self.define(info = nil, &blk); end
895
+ end
896
+
897
+ module ActiveRecord::AttributeMethods::Dirty
898
+ extend T::Sig
899
+ sig { params(attr_name: Symbol, options: T.untyped).returns(T::Boolean) }
900
+ def saved_change_to_attribute?(attr_name, **options); end
901
+ end
902
+
903
+ module ActiveRecord::Associations
904
+ mixes_in_class_methods(ActiveRecord::Associations::ClassMethods)
905
+ end
906
+
907
+ module ActiveRecord::Validations
908
+ include ActiveModel::Validations
909
+
910
+ mixes_in_class_methods(ActiveModel::Validations::ClassMethods)
911
+
912
+ sig { params(options: T.untyped).returns(T::Boolean) }
913
+ def save(options = nil); end
914
+
915
+ sig { params(options: T.untyped).returns(TrueClass) }
916
+ def save!(options = nil); end
917
+ end
918
+
919
+ # Represents the schema of an SQL table in an abstract way. This class
920
+ # provides methods for manipulating the schema representation.
921
+ #
922
+ # Inside migration files, the `t` object in `create_table`
923
+ # is actually of this type:
924
+ #
925
+ # ```ruby
926
+ # class SomeMigration < ActiveRecord::Migration[5.0]
927
+ # def up
928
+ # create_table :foo do |t|
929
+ # puts t.class # => "ActiveRecord::ConnectionAdapters::TableDefinition"
930
+ # end
931
+ # end
932
+ #
933
+ # def down
934
+ # # ...
935
+ # end
936
+ # end
937
+ # ```
938
+ class ActiveRecord::ConnectionAdapters::TableDefinition
939
+ include ActiveRecord::ConnectionAdapters::ColumnMethods
940
+
941
+ # Returns an array of ColumnDefinition objects for the columns of the table.
942
+ sig { returns(T::Array[ActiveRecord::ConnectionAdapters::ColumnDefinition]) }
943
+ def columns; end
944
+
945
+ # Returns a ColumnDefinition for the column with name `name`.
946
+ sig { params(name: T.any(String, Symbol)).returns(ActiveRecord::ConnectionAdapters::ColumnDefinition) }
947
+ def [](name); end
948
+
949
+ sig do
950
+ params(
951
+ name: T.any(String, Symbol),
952
+ type: T.untyped,
953
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
954
+ default: T.untyped,
955
+ options: T.untyped
956
+ ).returns(T.self_type)
957
+ end
958
+ def column(
959
+ name,
960
+ type,
961
+ index: nil,
962
+ default: nil,
963
+ **options
964
+ ); end
965
+
966
+ # Remove the column `name` from the table.
967
+ #
968
+ # ```ruby
969
+ # remove_column(:account_id)
970
+ # ```
971
+ sig { params(name: T.any(String, Symbol)).void }
972
+ def remove_column(name); end
973
+
974
+ # Adds index options to the indexes hash, keyed by column name
975
+ # This is primarily used to track indexes that need to be created after the table
976
+ #
977
+ # ```ruby
978
+ # index(:account_id, name: 'index_projects_on_account_id')
979
+ # ```
980
+ sig do
981
+ params(
982
+ column_name: T.any(String, Symbol, T::Array[T.any(String, Symbol)]),
983
+ options: T.untyped
984
+ ).void
985
+ end
986
+ def index(column_name, options = {}); end
987
+
988
+ # Appends `:datetime` columns `:created_at` and
989
+ # `:updated_at` to the table.
990
+ #
991
+ # ```ruby
992
+ # t.timestamps null: false
993
+ # ```
994
+ sig { params(options: T.untyped).void }
995
+ def timestamps(**options); end
996
+
997
+ # Adds a reference.
998
+ #
999
+ # ```ruby
1000
+ # t.references(:user)
1001
+ # t.belongs_to(:supplier, foreign_key: true)
1002
+ # t.belongs_to(:supplier, foreign_key: true, type: :integer)
1003
+ # ```
1004
+ sig { params(args: T.untyped, options: T.untyped).void }
1005
+ def references(*args, **options); end
1006
+
1007
+ # Adds a reference.
1008
+ #
1009
+ # ```ruby
1010
+ # t.references(:user)
1011
+ # t.belongs_to(:supplier, foreign_key: true)
1012
+ # t.belongs_to(:supplier, foreign_key: true, type: :integer)
1013
+ # ```
1014
+ sig { params(args: T.untyped, options: T.untyped).void }
1015
+ def belongs_to(*args, **options); end
1016
+ end
1017
+
1018
+ module ActiveRecord::ConnectionAdapters::ColumnMethods
1019
+ # Appends a primary key definition to the table definition.
1020
+ # Can be called multiple times, but this is probably not a good idea.
1021
+ sig do
1022
+ params(
1023
+ name: T.any(String, Symbol),
1024
+ type: T.any(String, Symbol),
1025
+ options: T.untyped
1026
+ ).void
1027
+ end
1028
+ def primary_key(name, type = :primary_key, **options); end
1029
+
1030
+ ########
1031
+ # NOTE: The following methods are all generated dynamically and have the same parameters.
1032
+ # See https://github.com/rails/rails/blob/v6.0.0/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L217
1033
+ ########
1034
+
1035
+ sig do
1036
+ params(
1037
+ names: T.any(String, Symbol),
1038
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1039
+ default: T.untyped,
1040
+ options: T.untyped
1041
+ ).void
1042
+ end
1043
+ def bigint(*names, index: nil, default: nil, **options); end
1044
+
1045
+ sig do
1046
+ params(
1047
+ names: T.any(String, Symbol),
1048
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1049
+ default: T.untyped,
1050
+ options: T.untyped
1051
+ ).void
1052
+ end
1053
+ def binary(*names, index: nil, default: nil, **options); end
1054
+
1055
+ sig do
1056
+ params(
1057
+ names: T.any(String, Symbol),
1058
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1059
+ default: T.untyped,
1060
+ options: T.untyped
1061
+ ).void
1062
+ end
1063
+ def boolean(*names, index: nil, default: nil, **options); end
1064
+
1065
+ sig do
1066
+ params(
1067
+ names: T.any(String, Symbol),
1068
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1069
+ default: T.untyped,
1070
+ options: T.untyped
1071
+ ).void
1072
+ end
1073
+ def date(*names, index: nil, default: nil, **options); end
1074
+
1075
+ sig do
1076
+ params(
1077
+ names: T.any(String, Symbol),
1078
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1079
+ default: T.untyped,
1080
+ options: T.untyped
1081
+ ).void
1082
+ end
1083
+ def datetime(*names, index: nil, default: nil, **options); end
1084
+
1085
+ sig do
1086
+ params(
1087
+ names: T.any(String, Symbol),
1088
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1089
+ default: T.untyped,
1090
+ options: T.untyped
1091
+ ).void
1092
+ end
1093
+ def decimal(*names, index: nil, default: nil, **options); end
1094
+
1095
+ sig do
1096
+ params(
1097
+ names: T.any(String, Symbol),
1098
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1099
+ default: T.untyped,
1100
+ options: T.untyped
1101
+ ).void
1102
+ end
1103
+ def numeric(*names, index: nil, default: nil, **options); end
1104
+
1105
+ sig do
1106
+ params(
1107
+ names: T.any(String, Symbol),
1108
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1109
+ default: T.untyped,
1110
+ options: T.untyped
1111
+ ).void
1112
+ end
1113
+ def float(*names, index: nil, default: nil, **options); end
1114
+
1115
+ sig do
1116
+ params(
1117
+ names: T.any(String, Symbol),
1118
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1119
+ default: T.untyped,
1120
+ options: T.untyped
1121
+ ).void
1122
+ end
1123
+ def integer(*names, index: nil, default: nil, **options); end
1124
+
1125
+ sig do
1126
+ params(
1127
+ names: T.any(String, Symbol),
1128
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1129
+ default: T.untyped,
1130
+ options: T.untyped
1131
+ ).void
1132
+ end
1133
+ def json(*names, index: nil, default: nil, **options); end
1134
+
1135
+ sig do
1136
+ params(
1137
+ names: T.any(String, Symbol),
1138
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1139
+ default: T.untyped,
1140
+ options: T.untyped
1141
+ ).void
1142
+ end
1143
+ def string(*names, index: nil, default: nil, **options); end
1144
+
1145
+ sig do
1146
+ params(
1147
+ names: T.any(String, Symbol),
1148
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1149
+ default: T.untyped,
1150
+ options: T.untyped
1151
+ ).void
1152
+ end
1153
+ def text(*names, index: nil, default: nil, **options); end
1154
+
1155
+ sig do
1156
+ params(
1157
+ names: T.any(String, Symbol),
1158
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1159
+ default: T.untyped,
1160
+ options: T.untyped
1161
+ ).void
1162
+ end
1163
+ def time(*names, index: nil, default: nil, **options); end
1164
+
1165
+ sig do
1166
+ params(
1167
+ names: T.any(String, Symbol),
1168
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1169
+ default: T.untyped,
1170
+ options: T.untyped
1171
+ ).void
1172
+ end
1173
+ def timestamp(*names, index: nil, default: nil, **options); end
1174
+
1175
+ sig do
1176
+ params(
1177
+ names: T.any(String, Symbol),
1178
+ index: T.any(T::Hash[T.untyped, T.untyped], T::Boolean),
1179
+ default: T.untyped,
1180
+ options: T.untyped
1181
+ ).void
1182
+ end
1183
+ def virtual(*names, index: nil, default: nil, **options); end
1184
+ end
1185
+
1186
+ # Represents an SQL table in an abstract way for updating a table.
1187
+ #
1188
+ # Available transformations are:
1189
+ #
1190
+ # ```ruby
1191
+ # change_table :table do |t|
1192
+ # t.primary_key
1193
+ # t.column
1194
+ # t.index
1195
+ # t.rename_index
1196
+ # t.timestamps
1197
+ # t.change
1198
+ # t.change_default
1199
+ # t.rename
1200
+ # t.references
1201
+ # t.belongs_to
1202
+ # t.string
1203
+ # t.text
1204
+ # t.integer
1205
+ # t.bigint
1206
+ # t.float
1207
+ # t.decimal
1208
+ # t.numeric
1209
+ # t.datetime
1210
+ # t.timestamp
1211
+ # t.time
1212
+ # t.date
1213
+ # t.binary
1214
+ # t.boolean
1215
+ # t.foreign_key
1216
+ # t.json
1217
+ # t.virtual
1218
+ # t.remove
1219
+ # t.remove_foreign_key
1220
+ # t.remove_references
1221
+ # t.remove_belongs_to
1222
+ # t.remove_index
1223
+ # t.remove_timestamps
1224
+ # end
1225
+ # ```
1226
+ class ActiveRecord::ConnectionAdapters::Table
1227
+ include ActiveRecord::ConnectionAdapters::ColumnMethods
1228
+
1229
+ # Adds a new column to the named table.
1230
+ #
1231
+ # ```ruby
1232
+ # t.column(:name, :string)
1233
+ # ```
1234
+ sig { params(column_name: T.any(String, Symbol), type: Symbol, options: T.untyped).void }
1235
+ def column(column_name, type, **options); end
1236
+
1237
+ # Checks to see if a column exists.
1238
+ #
1239
+ # ```ruby
1240
+ # t.string(:name) unless t.column_exists?(:name, :string)
1241
+ # ```
1242
+ sig { params(column_name: T.any(String, Symbol), type: Symbol, options: T.untyped).returns(T::Boolean) }
1243
+ def column_exists?(column_name, type = nil, options = {}); end
1244
+
1245
+ # Adds a new index to the table. `column_name` can be a single Symbol, or
1246
+ # an Array of Symbols.
1247
+ #
1248
+ # ```ruby
1249
+ # t.index(:name)
1250
+ # t.index([:branch_id, :party_id], unique: true)
1251
+ # t.index([:branch_id, :party_id], unique: true, name: 'by_branch_party')
1252
+ # ```
1253
+ sig do
1254
+ params(
1255
+ column_name: T.any(String, Symbol, T::Array[T.any(String, Symbol)]),
1256
+ options: T.untyped
1257
+ ).void
1258
+ end
1259
+ def index(column_name, options = {}); end
1260
+
1261
+ # Checks to see if an index exists.
1262
+ #
1263
+ # ```ruby
1264
+ # unless t.index_exists?(:branch_id)
1265
+ # t.index(:branch_id)
1266
+ # end
1267
+ # ```
1268
+ sig { params(column_name: T.any(String, Symbol), options: T.untyped).returns(T::Boolean) }
1269
+ def index_exists?(column_name, options = {}); end
1270
+
1271
+ # Renames the given index on the table.
1272
+ #
1273
+ # ```ruby
1274
+ # t.rename_index(:user_id, :account_id)
1275
+ # ```
1276
+ sig { params(index_name: T.any(String, Symbol), new_index_name: T.any(String, Symbol)).void }
1277
+ def rename_index(index_name, new_index_name); end
1278
+
1279
+ # Adds timestamps (`created_at` and `updated_at`) columns to the table.
1280
+ #
1281
+ # ```ruby
1282
+ # t.timestamps(null: false)
1283
+ # ```
1284
+ def timestamps(options = {}); end
1285
+
1286
+ # Changes the column's definition according to the new options.
1287
+ #
1288
+ # ```ruby
1289
+ # t.change(:name, :string, limit: 80)
1290
+ # t.change(:description, :text)
1291
+ # ```
1292
+ sig { params(column_name: T.any(String, Symbol), type: Symbol, options: T.untyped).void }
1293
+ def change(column_name, type, options = {}); end
1294
+
1295
+ # Sets a new default value for a column.
1296
+ #
1297
+ # ```ruby
1298
+ # t.change_default(:qualification, 'new')
1299
+ # t.change_default(:authorized, 1)
1300
+ # t.change_default(:status, from: nil, to: "draft")
1301
+ # ```
1302
+ sig { params(column_name: T.any(String, Symbol), default_or_changes: T.untyped).void }
1303
+ def change_default(column_name, default_or_changes); end
1304
+
1305
+ # Removes the column(s) from the table definition.
1306
+ #
1307
+ # ```ruby
1308
+ # t.remove(:qualification)
1309
+ # t.remove(:qualification, :experience)
1310
+ # ```
1311
+ sig { params(column_names: T.any(String, Symbol)).void }
1312
+ def remove(*column_names); end
1313
+
1314
+ # Removes the given index from the table.
1315
+ #
1316
+ # ```ruby
1317
+ # t.remove_index(:branch_id)
1318
+ # t.remove_index(column: [:branch_id, :party_id])
1319
+ # t.remove_index(name: :by_branch_party)
1320
+ # ```
1321
+ sig { params(options: T.untyped).void }
1322
+ def remove_index(options = {}); end
1323
+
1324
+ # Removes the timestamp columns (`created_at` and `updated_at`) from the table.
1325
+ #
1326
+ # ```ruby
1327
+ # t.remove_timestamps
1328
+ # ```
1329
+ sig { params(options: T.untyped).void }
1330
+ def remove_timestamps(options = {}); end
1331
+
1332
+ # Renames a column.
1333
+ #
1334
+ # ```ruby
1335
+ # t.rename(:description, :name)
1336
+ # ```
1337
+ sig { params(column_name: T.any(String, Symbol), new_column_name: T.any(String, Symbol)).void }
1338
+ def rename(column_name, new_column_name); end
1339
+
1340
+ # Adds a reference.
1341
+ #
1342
+ # ```ruby
1343
+ # t.references(:user)
1344
+ # t.belongs_to(:supplier, foreign_key: true)
1345
+ # ```
1346
+ sig { params(args: T.untyped, options: T.untyped).void }
1347
+ def references(*args, **options); end
1348
+
1349
+ # Adds a reference.
1350
+ #
1351
+ # ```ruby
1352
+ # t.references(:user)
1353
+ # t.belongs_to(:supplier, foreign_key: true)
1354
+ # ```
1355
+ sig { params(args: T.untyped, options: T.untyped).void }
1356
+ def belongs_to(*args, **options); end
1357
+
1358
+ # Removes a reference. Optionally removes a `type` column.
1359
+ #
1360
+ # ```ruby
1361
+ # t.remove_references(:user)
1362
+ # t.remove_belongs_to(:supplier, polymorphic: true)
1363
+ # ```
1364
+ sig { params(args: T.untyped, options: T.untyped).void }
1365
+ def remove_references(*args, **options); end
1366
+
1367
+ # Removes a reference. Optionally removes a `type` column.
1368
+ #
1369
+ # ```ruby
1370
+ # t.remove_references(:user)
1371
+ # t.remove_belongs_to(:supplier, polymorphic: true)
1372
+ # ```
1373
+ sig { params(args: T.untyped, options: T.untyped).void }
1374
+ def remove_belongs_to(*args, **options); end
1375
+
1376
+ # Adds a foreign key to the table using a supplied table name.
1377
+ #
1378
+ # ```ruby
1379
+ # t.foreign_key(:authors)
1380
+ # t.foreign_key(:authors, column: :author_id, primary_key: "id")
1381
+ # ```
1382
+ sig { params(args: T.untyped).void }
1383
+ def foreign_key(*args); end
1384
+
1385
+ # Removes the given foreign key from the table.
1386
+ #
1387
+ # ```ruby
1388
+ # t.remove_foreign_key(:authors)
1389
+ # t.remove_foreign_key(column: :author_id)
1390
+ # ```
1391
+ sig { params(args: T.untyped).void }
1392
+ def remove_foreign_key(*args); end
1393
+
1394
+ # Checks to see if a foreign key exists.
1395
+ #
1396
+ # ```ruby
1397
+ # t.foreign_key(:authors) unless t.foreign_key_exists?(:authors)
1398
+ # ```
1399
+ sig { params(args: T.untyped).returns(T::Boolean) }
1400
+ def foreign_key_exists?(*args); end
1401
+ end
1402
+
1403
+ module ActiveRecord::Locking::Pessimistic
1404
+ # Returns `nil` if `ActiveRecord::Rollback` is raised.
1405
+ sig do
1406
+ type_parameters(:U)
1407
+ .params(
1408
+ lock: T.any(String, TrueClass),
1409
+ blk: T.proc.returns(T.type_parameter(:U)),
1410
+ )
1411
+ .returns(T.nilable(T.type_parameter(:U)))
1412
+ end
1413
+ def with_lock(lock = nil, &blk); end
1414
+ end
1415
+