tdiary 5.2.2 → 5.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1533) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +5 -1
  3. data/Gemfile.lock +18 -18
  4. data/README.md +0 -2
  5. data/lib/tdiary/version.rb +1 -1
  6. data/misc/paas/heroku/Gemfile.local +1 -1
  7. data/misc/paas/heroku/Gemfile.lock +34 -32
  8. data/vendor/bundle/ruby/3.1.0/build_info/{nokogiri-1.13.6-x86_64-linux.info → nokogiri-1.13.8-x86_64-linux.info} +0 -0
  9. data/vendor/bundle/ruby/3.1.0/cache/addressable-2.8.1.gem +0 -0
  10. data/vendor/bundle/ruby/3.1.0/cache/debug-1.6.2.gem +0 -0
  11. data/vendor/bundle/ruby/3.1.0/cache/faraday-2.5.2.gem +0 -0
  12. data/vendor/bundle/ruby/3.1.0/cache/faraday-net_http-3.0.0.gem +0 -0
  13. data/vendor/bundle/ruby/3.1.0/cache/nokogiri-1.13.8-x86_64-linux.gem +0 -0
  14. data/vendor/bundle/ruby/3.1.0/cache/octokit-5.3.0.gem +0 -0
  15. data/vendor/bundle/ruby/3.1.0/cache/public_suffix-5.0.0.gem +0 -0
  16. data/vendor/bundle/ruby/3.1.0/cache/rack-2.2.4.gem +0 -0
  17. data/vendor/bundle/ruby/3.1.0/cache/rack-test-2.0.2.gem +0 -0
  18. data/vendor/bundle/ruby/3.1.0/cache/sawyer-0.9.2.gem +0 -0
  19. data/vendor/bundle/ruby/3.1.0/cache/selenium-webdriver-4.4.0.gem +0 -0
  20. data/vendor/bundle/ruby/3.1.0/cache/sequel-5.59.0.gem +0 -0
  21. data/vendor/bundle/ruby/3.1.0/cache/sqlite3-1.4.4.gem +0 -0
  22. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/debug-1.6.2/debug/debug.so +0 -0
  23. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/{debug-1.5.0 → debug-1.6.2}/gem.build_complete +0 -0
  24. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/debug-1.6.2/gem_make.out +16 -0
  25. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/json-2.6.2/gem_make.out +1 -1
  26. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/redcarpet-3.5.1/gem_make.out +2 -2
  27. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/{sqlite3-1.4.2 → sqlite3-1.4.4}/gem.build_complete +0 -0
  28. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/sqlite3-1.4.4/gem_make.out +90 -0
  29. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/{sqlite3-1.4.2 → sqlite3-1.4.4}/mkmf.log +0 -0
  30. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/sqlite3-1.4.4/sqlite3/sqlite3_native.so +0 -0
  31. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/CHANGELOG.md +262 -0
  32. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/Gemfile +30 -0
  33. data/vendor/bundle/ruby/3.1.0/gems/{addressable-2.8.0 → addressable-2.8.1}/LICENSE.txt +0 -0
  34. data/vendor/bundle/ruby/3.1.0/gems/{addressable-2.8.0 → addressable-2.8.1}/README.md +0 -0
  35. data/vendor/bundle/ruby/3.1.0/gems/{addressable-2.8.0 → addressable-2.8.1}/Rakefile +0 -0
  36. data/vendor/bundle/ruby/3.1.0/gems/{addressable-2.8.0 → addressable-2.8.1}/data/unicode.data +0 -0
  37. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/lib/addressable/idna/native.rb +60 -0
  38. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/lib/addressable/idna/pure.rb +677 -0
  39. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/lib/addressable/idna.rb +26 -0
  40. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/lib/addressable/template.rb +1030 -0
  41. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/lib/addressable/uri.rb +2560 -0
  42. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/lib/addressable/version.rb +31 -0
  43. data/vendor/bundle/ruby/3.1.0/gems/{addressable-2.8.0 → addressable-2.8.1}/lib/addressable.rb +0 -0
  44. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/spec/addressable/idna_spec.rb +301 -0
  45. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/spec/addressable/net_http_compat_spec.rb +29 -0
  46. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/spec/addressable/security_spec.rb +58 -0
  47. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/spec/addressable/template_spec.rb +1468 -0
  48. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/spec/addressable/uri_spec.rb +6745 -0
  49. data/vendor/bundle/ruby/3.1.0/gems/{addressable-2.8.0 → addressable-2.8.1}/spec/spec_helper.rb +0 -0
  50. data/vendor/bundle/ruby/3.1.0/gems/{addressable-2.8.0 → addressable-2.8.1}/tasks/clobber.rake +0 -0
  51. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.1/tasks/gem.rake +95 -0
  52. data/vendor/bundle/ruby/3.1.0/gems/{addressable-2.8.0 → addressable-2.8.1}/tasks/git.rake +0 -0
  53. data/vendor/bundle/ruby/3.1.0/gems/{addressable-2.8.0 → addressable-2.8.1}/tasks/metrics.rake +0 -0
  54. data/vendor/bundle/ruby/3.1.0/gems/{addressable-2.8.0 → addressable-2.8.1}/tasks/profile.rake +0 -0
  55. data/vendor/bundle/ruby/3.1.0/gems/{addressable-2.8.0 → addressable-2.8.1}/tasks/rspec.rake +0 -0
  56. data/vendor/bundle/ruby/3.1.0/gems/{addressable-2.8.0 → addressable-2.8.1}/tasks/yard.rake +0 -0
  57. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/CONTRIBUTING.md +561 -0
  58. data/vendor/bundle/ruby/3.1.0/gems/{debug-1.5.0 → debug-1.6.2}/Gemfile +0 -0
  59. data/vendor/bundle/ruby/3.1.0/gems/{debug-1.5.0 → debug-1.6.2}/LICENSE.txt +0 -0
  60. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/README.md +913 -0
  61. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/Rakefile +52 -0
  62. data/vendor/bundle/ruby/3.1.0/gems/{debug-1.5.0 → debug-1.6.2}/TODO.md +0 -0
  63. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/debug.gemspec +32 -0
  64. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/exe/rdbg +38 -0
  65. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/ext/debug/Makefile +267 -0
  66. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/ext/debug/debug.c +200 -0
  67. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/ext/debug/debug.o +0 -0
  68. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/ext/debug/debug.so +0 -0
  69. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/ext/debug/debug_version.h +1 -0
  70. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/ext/debug/extconf.rb +26 -0
  71. data/vendor/bundle/ruby/3.1.0/gems/{debug-1.5.0 → debug-1.6.2}/ext/debug/iseq_collector.c +0 -0
  72. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/ext/debug/iseq_collector.o +0 -0
  73. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/breakpoint.rb +552 -0
  74. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/client.rb +245 -0
  75. data/vendor/bundle/ruby/3.1.0/gems/{debug-1.5.0 → debug-1.6.2}/lib/debug/color.rb +0 -0
  76. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/config.rb +524 -0
  77. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/console.rb +234 -0
  78. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/debug.so +0 -0
  79. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/frame_info.rb +179 -0
  80. data/vendor/bundle/ruby/3.1.0/gems/{debug-1.5.0 → debug-1.6.2}/lib/debug/local.rb +0 -0
  81. data/vendor/bundle/ruby/3.1.0/gems/{debug-1.5.0 → debug-1.6.2}/lib/debug/open.rb +0 -0
  82. data/vendor/bundle/ruby/3.1.0/gems/{debug-1.5.0 → debug-1.6.2}/lib/debug/open_nonstop.rb +0 -0
  83. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/prelude.rb +50 -0
  84. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/server.rb +520 -0
  85. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/server_cdp.rb +1144 -0
  86. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/server_dap.rb +975 -0
  87. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/session.rb +2422 -0
  88. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/source_repository.rb +130 -0
  89. data/vendor/bundle/ruby/3.1.0/gems/{debug-1.5.0 → debug-1.6.2}/lib/debug/start.rb +0 -0
  90. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/thread_client.rb +1299 -0
  91. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/tracer.rb +242 -0
  92. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug/version.rb +5 -0
  93. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/lib/debug.rb +5 -0
  94. data/vendor/bundle/ruby/3.1.0/gems/debug-1.6.2/misc/README.md.erb +604 -0
  95. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/CHANGELOG.md +0 -0
  96. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/LICENSE.md +20 -0
  97. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/README.md +55 -0
  98. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/Rakefile +0 -0
  99. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/examples/client_spec.rb +119 -0
  100. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/examples/client_test.rb +144 -0
  101. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/lib/faraday/adapter/test.rb +298 -0
  102. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/lib/faraday/adapter.rb +102 -0
  103. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/adapter_registry.rb +0 -0
  104. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/lib/faraday/connection.rb +561 -0
  105. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/encoders/flat_params_encoder.rb +0 -0
  106. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/encoders/nested_params_encoder.rb +0 -0
  107. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/error.rb +0 -0
  108. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/logging/formatter.rb +0 -0
  109. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/methods.rb +0 -0
  110. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/middleware.rb +0 -0
  111. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/middleware_registry.rb +0 -0
  112. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/options/connection_options.rb +0 -0
  113. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/lib/faraday/options/env.rb +199 -0
  114. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/options/proxy_options.rb +0 -0
  115. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/options/request_options.rb +0 -0
  116. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/lib/faraday/options/ssl_options.rb +69 -0
  117. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/options.rb +0 -0
  118. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/parameters.rb +0 -0
  119. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/rack_builder.rb +0 -0
  120. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/request/authorization.rb +0 -0
  121. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/request/instrumentation.rb +0 -0
  122. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/request/json.rb +0 -0
  123. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/request/url_encoded.rb +0 -0
  124. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/request.rb +0 -0
  125. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/response/json.rb +0 -0
  126. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/response/logger.rb +0 -0
  127. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/response/raise_error.rb +0 -0
  128. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/response.rb +0 -0
  129. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/utils/headers.rb +0 -0
  130. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/utils/params_hash.rb +0 -0
  131. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday/utils.rb +0 -0
  132. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/lib/faraday/version.rb +5 -0
  133. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/lib/faraday.rb +0 -0
  134. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/external_adapters/faraday_specs_setup.rb +0 -0
  135. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/spec/faraday/adapter/test_spec.rb +413 -0
  136. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/adapter_registry_spec.rb +0 -0
  137. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/adapter_spec.rb +0 -0
  138. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/spec/faraday/connection_spec.rb +793 -0
  139. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/error_spec.rb +0 -0
  140. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/middleware_registry_spec.rb +0 -0
  141. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/middleware_spec.rb +0 -0
  142. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/spec/faraday/options/env_spec.rb +76 -0
  143. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/options/options_spec.rb +0 -0
  144. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/options/proxy_options_spec.rb +0 -0
  145. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/options/request_options_spec.rb +0 -0
  146. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/params_encoders/flat_spec.rb +0 -0
  147. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/params_encoders/nested_spec.rb +0 -0
  148. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/rack_builder_spec.rb +0 -0
  149. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/request/authorization_spec.rb +0 -0
  150. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/request/instrumentation_spec.rb +0 -0
  151. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/request/json_spec.rb +0 -0
  152. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/request/url_encoded_spec.rb +0 -0
  153. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/spec/faraday/request_spec.rb +110 -0
  154. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/response/json_spec.rb +0 -0
  155. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/response/logger_spec.rb +0 -0
  156. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/response/raise_error_spec.rb +0 -0
  157. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/response_spec.rb +0 -0
  158. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday/utils/headers_spec.rb +0 -0
  159. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/spec/faraday/utils_spec.rb +118 -0
  160. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/faraday_spec.rb +0 -0
  161. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/spec_helper.rb +0 -0
  162. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/support/disabling_stub.rb +0 -0
  163. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/support/fake_safe_buffer.rb +0 -0
  164. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/support/helper_methods.rb +0 -0
  165. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/spec/support/shared_examples/adapter.rb +105 -0
  166. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/support/shared_examples/params_encoder.rb +0 -0
  167. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.5.2/spec/support/shared_examples/request_method.rb +263 -0
  168. data/vendor/bundle/ruby/3.1.0/gems/{faraday-2.3.0 → faraday-2.5.2}/spec/support/streaming_response_checker.rb +0 -0
  169. data/vendor/bundle/ruby/3.1.0/gems/{faraday-net_http-2.0.3 → faraday-net_http-3.0.0}/LICENSE.md +0 -0
  170. data/vendor/bundle/ruby/3.1.0/gems/{faraday-net_http-2.0.3 → faraday-net_http-3.0.0}/README.md +0 -0
  171. data/vendor/bundle/ruby/3.1.0/gems/faraday-net_http-3.0.0/lib/faraday/adapter/net_http.rb +208 -0
  172. data/vendor/bundle/ruby/3.1.0/gems/faraday-net_http-3.0.0/lib/faraday/net_http/version.rb +7 -0
  173. data/vendor/bundle/ruby/3.1.0/gems/{faraday-net_http-2.0.3 → faraday-net_http-3.0.0}/lib/faraday/net_http.rb +0 -0
  174. data/vendor/bundle/ruby/3.1.0/gems/json-2.6.2/ext/json/Makefile +2 -2
  175. data/vendor/bundle/ruby/3.1.0/gems/json-2.6.2/ext/json/ext/generator/Makefile +2 -2
  176. data/vendor/bundle/ruby/3.1.0/gems/json-2.6.2/ext/json/ext/parser/Makefile +2 -2
  177. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/Gemfile +0 -0
  178. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/LICENSE-DEPENDENCIES.md +0 -0
  179. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/LICENSE.md +0 -0
  180. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/README.md +0 -0
  181. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/bin/nokogiri +0 -0
  182. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/dependencies.yml +0 -0
  183. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/depend +0 -0
  184. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/extconf.rb +1010 -0
  185. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/gumbo.c +584 -0
  186. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/html4_document.c +0 -0
  187. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/html4_element_description.c +0 -0
  188. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/html4_entity_lookup.c +0 -0
  189. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/html4_sax_parser_context.c +0 -0
  190. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/html4_sax_push_parser.c +0 -0
  191. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libexslt/exslt.h +0 -0
  192. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libexslt/exsltconfig.h +0 -0
  193. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libexslt/exsltexports.h +0 -0
  194. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/DOCBparser.h +0 -0
  195. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/HTMLparser.h +0 -0
  196. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/HTMLtree.h +0 -0
  197. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/SAX.h +0 -0
  198. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/SAX2.h +0 -0
  199. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/c14n.h +0 -0
  200. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/catalog.h +0 -0
  201. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/chvalid.h +0 -0
  202. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/debugXML.h +0 -0
  203. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/dict.h +0 -0
  204. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/encoding.h +0 -0
  205. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/entities.h +0 -0
  206. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/globals.h +0 -0
  207. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/hash.h +0 -0
  208. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/list.h +0 -0
  209. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/nanoftp.h +0 -0
  210. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/nanohttp.h +0 -0
  211. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/parser.h +0 -0
  212. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/parserInternals.h +0 -0
  213. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/pattern.h +0 -0
  214. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/relaxng.h +0 -0
  215. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/schemasInternals.h +0 -0
  216. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/schematron.h +0 -0
  217. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/threads.h +0 -0
  218. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/tree.h +0 -0
  219. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/uri.h +0 -0
  220. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/valid.h +0 -0
  221. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xinclude.h +0 -0
  222. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xlink.h +0 -0
  223. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlIO.h +0 -0
  224. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlautomata.h +0 -0
  225. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlerror.h +0 -0
  226. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlexports.h +0 -0
  227. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlmemory.h +0 -0
  228. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlmodule.h +0 -0
  229. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlreader.h +0 -0
  230. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlregexp.h +0 -0
  231. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlsave.h +0 -0
  232. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlschemas.h +0 -0
  233. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlschemastypes.h +0 -0
  234. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlstring.h +0 -0
  235. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlunicode.h +0 -0
  236. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlversion.h +0 -0
  237. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xmlwriter.h +0 -0
  238. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xpath.h +0 -0
  239. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xpathInternals.h +0 -0
  240. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxml2/libxml/xpointer.h +0 -0
  241. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/attributes.h +0 -0
  242. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/documents.h +0 -0
  243. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/extensions.h +0 -0
  244. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/extra.h +0 -0
  245. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/functions.h +0 -0
  246. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/imports.h +0 -0
  247. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/keys.h +0 -0
  248. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/namespaces.h +0 -0
  249. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/numbersInternals.h +0 -0
  250. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/pattern.h +0 -0
  251. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/preproc.h +0 -0
  252. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/security.h +0 -0
  253. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/templates.h +0 -0
  254. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/transform.h +0 -0
  255. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/variables.h +0 -0
  256. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/xslt.h +0 -0
  257. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/xsltInternals.h +0 -0
  258. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/include/libxslt/xsltconfig.h +180 -0
  259. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/xsltexports.h +0 -0
  260. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/xsltlocale.h +0 -0
  261. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/include/libxslt/xsltutils.h +0 -0
  262. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/libxml2_backwards_compat.c +0 -0
  263. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/nokogiri.c +0 -0
  264. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/nokogiri.h +231 -0
  265. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/test_global_handlers.c +0 -0
  266. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_attr.c +103 -0
  267. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_attribute_decl.c +70 -0
  268. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_cdata.c +57 -0
  269. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xml_comment.c +0 -0
  270. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_document.c +680 -0
  271. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xml_document_fragment.c +0 -0
  272. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_dtd.c +208 -0
  273. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xml_element_content.c +0 -0
  274. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_element_decl.c +69 -0
  275. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xml_encoding_handler.c +0 -0
  276. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_entity_decl.c +112 -0
  277. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xml_entity_reference.c +0 -0
  278. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xml_namespace.c +0 -0
  279. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_node.c +2165 -0
  280. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_node_set.c +498 -0
  281. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xml_processing_instruction.c +0 -0
  282. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_reader.c +770 -0
  283. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xml_relax_ng.c +0 -0
  284. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xml_sax_parser.c +0 -0
  285. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xml_sax_parser_context.c +0 -0
  286. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xml_sax_push_parser.c +0 -0
  287. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_schema.c +284 -0
  288. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xml_syntax_error.c +0 -0
  289. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_text.c +48 -0
  290. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/ext/nokogiri/xml_xpath_context.c +406 -0
  291. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/ext/nokogiri/xslt_stylesheet.c +0 -0
  292. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/gumbo-parser/CHANGES.md +0 -0
  293. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/gumbo-parser/Makefile +0 -0
  294. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/gumbo-parser/THANKS +0 -0
  295. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/lib/nokogiri/2.6/nokogiri.so +0 -0
  296. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/lib/nokogiri/2.7/nokogiri.so +0 -0
  297. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/lib/nokogiri/3.0/nokogiri.so +0 -0
  298. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/lib/nokogiri/3.1/nokogiri.so +0 -0
  299. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/class_resolver.rb +0 -0
  300. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/css/node.rb +0 -0
  301. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/css/parser.rb +0 -0
  302. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/css/parser.y +0 -0
  303. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/css/parser_extras.rb +0 -0
  304. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/css/syntax_error.rb +0 -0
  305. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/css/tokenizer.rb +0 -0
  306. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/css/tokenizer.rex +0 -0
  307. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/css/xpath_visitor.rb +0 -0
  308. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/css.rb +0 -0
  309. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/decorators/slop.rb +0 -0
  310. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/extension.rb +0 -0
  311. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/gumbo.rb +0 -0
  312. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html.rb +0 -0
  313. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html4/builder.rb +0 -0
  314. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html4/document.rb +0 -0
  315. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html4/document_fragment.rb +0 -0
  316. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html4/element_description.rb +0 -0
  317. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html4/element_description_defaults.rb +0 -0
  318. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html4/entity_lookup.rb +0 -0
  319. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html4/sax/parser.rb +0 -0
  320. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html4/sax/parser_context.rb +0 -0
  321. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html4/sax/push_parser.rb +0 -0
  322. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html4.rb +0 -0
  323. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html5/document.rb +0 -0
  324. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html5/document_fragment.rb +0 -0
  325. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html5/node.rb +0 -0
  326. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/html5.rb +0 -0
  327. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/jruby/dependencies.rb +0 -0
  328. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/syntax_error.rb +0 -0
  329. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/lib/nokogiri/version/constant.rb +6 -0
  330. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/version/info.rb +0 -0
  331. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/version.rb +0 -0
  332. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/attr.rb +0 -0
  333. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/attribute_decl.rb +0 -0
  334. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/builder.rb +0 -0
  335. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/cdata.rb +0 -0
  336. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/character_data.rb +0 -0
  337. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/document.rb +0 -0
  338. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/document_fragment.rb +0 -0
  339. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/dtd.rb +0 -0
  340. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/element_content.rb +0 -0
  341. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/element_decl.rb +0 -0
  342. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/entity_decl.rb +0 -0
  343. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/entity_reference.rb +0 -0
  344. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/namespace.rb +0 -0
  345. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/node/save_options.rb +0 -0
  346. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/node.rb +0 -0
  347. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/node_set.rb +0 -0
  348. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/notation.rb +0 -0
  349. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/parse_options.rb +0 -0
  350. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/pp/character_data.rb +0 -0
  351. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/pp/node.rb +0 -0
  352. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/pp.rb +0 -0
  353. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/processing_instruction.rb +0 -0
  354. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.8-x86_64-linux/lib/nokogiri/xml/reader.rb +105 -0
  355. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/relax_ng.rb +0 -0
  356. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/sax/document.rb +0 -0
  357. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/sax/parser.rb +0 -0
  358. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/sax/parser_context.rb +0 -0
  359. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/sax/push_parser.rb +0 -0
  360. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/sax.rb +0 -0
  361. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/schema.rb +0 -0
  362. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/searchable.rb +0 -0
  363. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/syntax_error.rb +0 -0
  364. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/text.rb +0 -0
  365. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/xpath/syntax_error.rb +0 -0
  366. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/xpath.rb +0 -0
  367. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml/xpath_context.rb +0 -0
  368. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xml.rb +0 -0
  369. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xslt/stylesheet.rb +0 -0
  370. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri/xslt.rb +0 -0
  371. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/nokogiri.rb +0 -0
  372. data/vendor/bundle/ruby/3.1.0/gems/{nokogiri-1.13.6-x86_64-linux → nokogiri-1.13.8-x86_64-linux}/lib/xsd/xmlparser/nokogiri.rb +0 -0
  373. data/vendor/bundle/ruby/3.1.0/gems/{octokit-4.23.0 → octokit-5.3.0}/CONTRIBUTING.md +0 -0
  374. data/vendor/bundle/ruby/3.1.0/gems/{octokit-4.23.0 → octokit-5.3.0}/LICENSE.md +0 -0
  375. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/README.md +821 -0
  376. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/Rakefile +24 -0
  377. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/ext/sawyer/relation.rb +12 -0
  378. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/arguments.rb +14 -0
  379. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/authentication.rb +80 -0
  380. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/actions_secrets.rb +57 -0
  381. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/actions_workflow_jobs.rb +61 -0
  382. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/actions_workflow_runs.rb +121 -0
  383. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/actions_workflows.rb +66 -0
  384. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/apps.rb +222 -0
  385. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/authorizations.rb +185 -0
  386. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/checks.rb +200 -0
  387. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/commit_branches.rb +20 -0
  388. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/commit_comments.rb +95 -0
  389. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/commit_pulls.rb +20 -0
  390. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/commits.rb +236 -0
  391. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/community_profile.rb +21 -0
  392. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/contents.rb +167 -0
  393. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/deployments.rb +82 -0
  394. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/downloads.rb +49 -0
  395. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/emojis.rb +18 -0
  396. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/events.rb +151 -0
  397. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/feeds.rb +32 -0
  398. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/gists.rb +234 -0
  399. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/gitignore.rb +43 -0
  400. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/hooks.rb +297 -0
  401. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/issues.rb +367 -0
  402. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/labels.rb +156 -0
  403. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/legacy_search.rb +42 -0
  404. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/licenses.rb +42 -0
  405. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/markdown.rb +27 -0
  406. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/marketplace.rb +56 -0
  407. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/meta.rb +20 -0
  408. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/milestones.rb +87 -0
  409. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/notifications.rb +167 -0
  410. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/oauth_applications.rb +116 -0
  411. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/objects.rb +141 -0
  412. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/organizations.rb +807 -0
  413. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/pages.rb +61 -0
  414. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/projects.rb +294 -0
  415. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/pub_sub_hubbub.rb +111 -0
  416. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/pull_requests.rb +313 -0
  417. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/rate_limit.rb +52 -0
  418. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/reactions.rb +153 -0
  419. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/refs.rb +133 -0
  420. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/releases.rb +164 -0
  421. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/repositories.rb +779 -0
  422. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/repository_invitations.rb +96 -0
  423. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/reviews.rb +227 -0
  424. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/say.rb +18 -0
  425. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/search.rb +104 -0
  426. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/service_status.rb +48 -0
  427. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/source_import.rb +156 -0
  428. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/stats.rb +108 -0
  429. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/statuses.rb +47 -0
  430. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/traffic.rb +64 -0
  431. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client/users.rb +435 -0
  432. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/client.rb +268 -0
  433. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/configurable.rb +155 -0
  434. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/connection.rb +210 -0
  435. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/default.rb +187 -0
  436. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/enterprise_admin_client/admin_stats.rb +119 -0
  437. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/enterprise_admin_client/license.rb +17 -0
  438. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/enterprise_admin_client/orgs.rb +26 -0
  439. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/enterprise_admin_client/search_indexing.rb +82 -0
  440. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/enterprise_admin_client/users.rb +129 -0
  441. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/enterprise_admin_client.rb +46 -0
  442. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/enterprise_management_console_client/management_console.rb +176 -0
  443. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/enterprise_management_console_client.rb +56 -0
  444. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/error.rb +363 -0
  445. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/gist.rb +35 -0
  446. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/middleware/follow_redirects.rb +135 -0
  447. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/organization.rb +19 -0
  448. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/rate_limit.rb +33 -0
  449. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/repo_arguments.rb +18 -0
  450. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/repository.rb +95 -0
  451. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/response/base_middleware.rb +10 -0
  452. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/response/feed_parser.rb +17 -0
  453. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/response/raise_error.rb +19 -0
  454. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/user.rb +21 -0
  455. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/version.rb +19 -0
  456. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit/warnable.rb +16 -0
  457. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/lib/octokit.rb +66 -0
  458. data/vendor/bundle/ruby/3.1.0/gems/octokit-5.3.0/octokit.gemspec +25 -0
  459. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/2.0-Upgrade.md +0 -0
  460. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/CHANGELOG.md +426 -0
  461. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/Gemfile +14 -0
  462. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/LICENSE.txt +0 -0
  463. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/README.md +217 -0
  464. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/Rakefile +52 -0
  465. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/SECURITY.md +0 -0
  466. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/bin/console +0 -0
  467. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/data/list.txt +14066 -0
  468. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/lib/public_suffix/domain.rb +0 -0
  469. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/lib/public_suffix/errors.rb +0 -0
  470. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/lib/public_suffix/list.rb +247 -0
  471. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/lib/public_suffix/rule.rb +350 -0
  472. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/lib/public_suffix/version.rb +15 -0
  473. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/lib/public_suffix.rb +177 -0
  474. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/public_suffix.gemspec +29 -0
  475. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/test/acceptance_test.rb +131 -0
  476. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/benchmarks/bm_find.rb +0 -0
  477. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/benchmarks/bm_find_all.rb +0 -0
  478. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/benchmarks/bm_names.rb +0 -0
  479. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/benchmarks/bm_select.rb +0 -0
  480. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/benchmarks/bm_select_incremental.rb +0 -0
  481. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/benchmarks/bm_valid.rb +0 -0
  482. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/profilers/domain_profiler.rb +0 -0
  483. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/profilers/find_profiler.rb +0 -0
  484. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/profilers/find_profiler_jp.rb +0 -0
  485. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/profilers/initialization_profiler.rb +0 -0
  486. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/profilers/list_profsize.rb +0 -0
  487. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/profilers/object_binsize.rb +0 -0
  488. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/test/psl_test.rb +52 -0
  489. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/test_helper.rb +0 -0
  490. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/tests.txt +0 -0
  491. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/test/unit/domain_test.rb +106 -0
  492. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/unit/errors_test.rb +0 -0
  493. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/test/unit/list_test.rb +241 -0
  494. data/vendor/bundle/ruby/3.1.0/gems/{public_suffix-4.0.7 → public_suffix-5.0.0}/test/unit/public_suffix_test.rb +0 -0
  495. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-5.0.0/test/unit/rule_test.rb +222 -0
  496. data/vendor/bundle/ruby/3.1.0/gems/rack-2.2.4/CHANGELOG.md +708 -0
  497. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/CONTRIBUTING.md +0 -0
  498. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/MIT-LICENSE +0 -0
  499. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/README.rdoc +0 -0
  500. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/Rakefile +0 -0
  501. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/SPEC.rdoc +0 -0
  502. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/bin/rackup +0 -0
  503. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/contrib/rack.png +0 -0
  504. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/contrib/rack.svg +0 -0
  505. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/contrib/rack_logo.svg +0 -0
  506. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/contrib/rdoc.css +0 -0
  507. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/example/lobster.ru +0 -0
  508. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/example/protectedlobster.rb +0 -0
  509. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/example/protectedlobster.ru +0 -0
  510. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/auth/abstract/handler.rb +0 -0
  511. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/auth/abstract/request.rb +0 -0
  512. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/auth/basic.rb +0 -0
  513. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/auth/digest/md5.rb +0 -0
  514. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/auth/digest/nonce.rb +0 -0
  515. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/auth/digest/params.rb +0 -0
  516. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/auth/digest/request.rb +0 -0
  517. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/body_proxy.rb +0 -0
  518. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/builder.rb +0 -0
  519. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/cascade.rb +0 -0
  520. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/chunked.rb +0 -0
  521. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/common_logger.rb +0 -0
  522. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/conditional_get.rb +0 -0
  523. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/config.rb +0 -0
  524. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/content_length.rb +0 -0
  525. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/content_type.rb +0 -0
  526. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/core_ext/regexp.rb +0 -0
  527. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/deflater.rb +0 -0
  528. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/directory.rb +0 -0
  529. data/vendor/bundle/ruby/3.1.0/gems/rack-2.2.4/lib/rack/etag.rb +77 -0
  530. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/events.rb +0 -0
  531. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/file.rb +0 -0
  532. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/files.rb +0 -0
  533. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/handler/cgi.rb +0 -0
  534. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/handler/fastcgi.rb +0 -0
  535. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/handler/lsws.rb +0 -0
  536. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/handler/scgi.rb +0 -0
  537. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/handler/thin.rb +0 -0
  538. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/handler/webrick.rb +0 -0
  539. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/handler.rb +0 -0
  540. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/head.rb +0 -0
  541. data/vendor/bundle/ruby/3.1.0/gems/rack-2.2.4/lib/rack/lint.rb +806 -0
  542. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/lobster.rb +0 -0
  543. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/lock.rb +0 -0
  544. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/logger.rb +0 -0
  545. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/media_type.rb +0 -0
  546. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/method_override.rb +0 -0
  547. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/mime.rb +0 -0
  548. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/mock.rb +0 -0
  549. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/multipart/generator.rb +0 -0
  550. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/multipart/parser.rb +0 -0
  551. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/multipart/uploaded_file.rb +0 -0
  552. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/multipart.rb +0 -0
  553. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/null_logger.rb +0 -0
  554. data/vendor/bundle/ruby/3.1.0/gems/rack-2.2.4/lib/rack/query_parser.rb +221 -0
  555. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/recursive.rb +0 -0
  556. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/reloader.rb +0 -0
  557. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/request.rb +0 -0
  558. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/response.rb +0 -0
  559. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/rewindable_input.rb +0 -0
  560. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/runtime.rb +0 -0
  561. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/sendfile.rb +0 -0
  562. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/server.rb +0 -0
  563. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/session/abstract/id.rb +0 -0
  564. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/session/cookie.rb +0 -0
  565. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/session/memcache.rb +0 -0
  566. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/session/pool.rb +0 -0
  567. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/show_exceptions.rb +0 -0
  568. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/show_status.rb +0 -0
  569. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/static.rb +0 -0
  570. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/tempfile_reaper.rb +0 -0
  571. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack/urlmap.rb +0 -0
  572. data/vendor/bundle/ruby/3.1.0/gems/rack-2.2.4/lib/rack/utils.rb +616 -0
  573. data/vendor/bundle/ruby/3.1.0/gems/rack-2.2.4/lib/rack/version.rb +29 -0
  574. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/lib/rack.rb +0 -0
  575. data/vendor/bundle/ruby/3.1.0/gems/{rack-2.2.3.1 → rack-2.2.4}/rack.gemspec +0 -0
  576. data/vendor/bundle/ruby/3.1.0/gems/rack-test-2.0.2/History.md +349 -0
  577. data/vendor/bundle/ruby/3.1.0/gems/rack-test-2.0.2/MIT-LICENSE.txt +20 -0
  578. data/vendor/bundle/ruby/3.1.0/gems/rack-test-2.0.2/README.md +139 -0
  579. data/vendor/bundle/ruby/3.1.0/gems/rack-test-2.0.2/lib/rack/mock_session.rb +2 -0
  580. data/vendor/bundle/ruby/3.1.0/gems/rack-test-2.0.2/lib/rack/test/cookie_jar.rb +246 -0
  581. data/vendor/bundle/ruby/3.1.0/gems/rack-test-2.0.2/lib/rack/test/methods.rb +95 -0
  582. data/vendor/bundle/ruby/3.1.0/gems/rack-test-2.0.2/lib/rack/test/mock_digest_request.rb +35 -0
  583. data/vendor/bundle/ruby/3.1.0/gems/rack-test-2.0.2/lib/rack/test/uploaded_file.rb +109 -0
  584. data/vendor/bundle/ruby/3.1.0/gems/rack-test-2.0.2/lib/rack/test/utils.rb +156 -0
  585. data/vendor/bundle/ruby/3.1.0/gems/rack-test-2.0.2/lib/rack/test/version.rb +5 -0
  586. data/vendor/bundle/ruby/3.1.0/gems/rack-test-2.0.2/lib/rack/test.rb +414 -0
  587. data/vendor/bundle/ruby/3.1.0/gems/redcarpet-3.5.1/ext/redcarpet/Makefile +2 -2
  588. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/Gemfile +0 -0
  589. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/LICENSE.md +0 -0
  590. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/README.md +0 -0
  591. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/Rakefile +0 -0
  592. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/lib/sawyer/agent.rb +0 -0
  593. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/lib/sawyer/link_parsers/hal.rb +0 -0
  594. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/lib/sawyer/link_parsers/simple.rb +0 -0
  595. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/lib/sawyer/relation.rb +0 -0
  596. data/vendor/bundle/ruby/3.1.0/gems/sawyer-0.9.2/lib/sawyer/resource.rb +160 -0
  597. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/lib/sawyer/response.rb +0 -0
  598. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/lib/sawyer/serializer.rb +0 -0
  599. data/vendor/bundle/ruby/3.1.0/gems/sawyer-0.9.2/lib/sawyer.rb +17 -0
  600. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/sawyer.gemspec +0 -0
  601. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/script/bootstrap +0 -0
  602. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/script/console +0 -0
  603. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/script/package +0 -0
  604. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/script/release +0 -0
  605. data/vendor/bundle/ruby/3.1.0/gems/{sawyer-0.9.1 → sawyer-0.9.2}/script/test +0 -0
  606. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/CHANGES +2089 -0
  607. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/Gemfile +0 -0
  608. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/LICENSE +0 -0
  609. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/NOTICE +0 -0
  610. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/README.md +0 -0
  611. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/server.rb +283 -0
  612. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/atoms/findElements.js +0 -0
  613. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/atoms/getAttribute.js +0 -0
  614. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/atoms/isDisplayed.js +0 -0
  615. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/atoms/mutationListener.js +0 -0
  616. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/atoms.rb +0 -0
  617. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/bidi/session.rb +0 -0
  618. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/bidi.rb +0 -0
  619. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/chrome/driver.rb +0 -0
  620. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/chrome/features.rb +0 -0
  621. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/chrome/options.rb +275 -0
  622. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/chrome/profile.rb +0 -0
  623. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/chrome/service.rb +0 -0
  624. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/chrome.rb +41 -0
  625. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/action_builder.rb +0 -0
  626. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/alert.rb +0 -0
  627. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/driver.rb +364 -0
  628. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/downloads_files.rb +0 -0
  629. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/full_page_screenshot.rb +0 -0
  630. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_addons.rb +0 -0
  631. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_apple_permissions.rb +0 -0
  632. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +0 -0
  633. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_bidi.rb +0 -0
  634. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_casting.rb +0 -0
  635. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_cdp.rb +0 -0
  636. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_context.rb +0 -0
  637. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_debugger.rb +0 -0
  638. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +0 -0
  639. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_launching.rb +0 -0
  640. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_location.rb +0 -0
  641. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +0 -0
  642. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_logs.rb +0 -0
  643. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_network_conditions.rb +0 -0
  644. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +0 -0
  645. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +71 -0
  646. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb +0 -0
  647. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_pinned_scripts.rb +0 -0
  648. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +0 -0
  649. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +0 -0
  650. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/prints_page.rb +0 -0
  651. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +0 -0
  652. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/element.rb +0 -0
  653. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/error.rb +0 -0
  654. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/file_reaper.rb +0 -0
  655. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/html5/local_storage.rb +0 -0
  656. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/html5/session_storage.rb +0 -0
  657. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/html5/shared_web_storage.rb +0 -0
  658. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/input_device.rb +0 -0
  659. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/interaction.rb +0 -0
  660. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/interactions.rb +0 -0
  661. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/key_actions.rb +0 -0
  662. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/key_input.rb +0 -0
  663. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/none_input.rb +0 -0
  664. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/pause.rb +0 -0
  665. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/interactions/pointer_actions.rb +352 -0
  666. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/pointer_cancel.rb +0 -0
  667. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/pointer_event_properties.rb +0 -0
  668. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/pointer_input.rb +0 -0
  669. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/pointer_move.rb +0 -0
  670. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/pointer_press.rb +0 -0
  671. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/scroll.rb +0 -0
  672. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/scroll_origin.rb +0 -0
  673. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/typing_interaction.rb +0 -0
  674. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/interactions/wheel_actions.rb +113 -0
  675. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/interactions/wheel_input.rb +0 -0
  676. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/keys.rb +0 -0
  677. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/log_entry.rb +0 -0
  678. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/logger.rb +0 -0
  679. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/logs.rb +0 -0
  680. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/manager.rb +150 -0
  681. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/navigation.rb +0 -0
  682. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/options.rb +177 -0
  683. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/platform.rb +0 -0
  684. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/port_prober.rb +0 -0
  685. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/profile_helper.rb +0 -0
  686. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/proxy.rb +0 -0
  687. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/search_context.rb +0 -0
  688. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/service.rb +0 -0
  689. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/service_manager.rb +0 -0
  690. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/shadow_root.rb +0 -0
  691. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/socket_lock.rb +0 -0
  692. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/socket_poller.rb +0 -0
  693. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/takes_screenshot.rb +66 -0
  694. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/target_locator.rb +0 -0
  695. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/timeouts.rb +0 -0
  696. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/virtual_authenticator/credential.rb +83 -0
  697. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator.rb +73 -0
  698. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/virtual_authenticator/virtual_authenticator_options.rb +62 -0
  699. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/common/wait.rb +0 -0
  700. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/websocket_connection.rb +156 -0
  701. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/window.rb +159 -0
  702. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common/zipper.rb +91 -0
  703. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/common.rb +97 -0
  704. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/devtools/console_event.rb +0 -0
  705. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/devtools/exception_event.rb +0 -0
  706. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/devtools/mutation_event.rb +0 -0
  707. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/devtools/network_interceptor.rb +176 -0
  708. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/devtools/pinned_script.rb +0 -0
  709. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/devtools/request.rb +0 -0
  710. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/devtools/response.rb +0 -0
  711. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/devtools.rb +87 -0
  712. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/edge/driver.rb +0 -0
  713. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/edge/features.rb +0 -0
  714. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/edge/options.rb +0 -0
  715. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/edge/profile.rb +0 -0
  716. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/edge/service.rb +0 -0
  717. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/edge.rb +0 -0
  718. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/firefox/driver.rb +0 -0
  719. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/firefox/extension.rb +0 -0
  720. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/firefox/features.rb +0 -0
  721. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/firefox/options.rb +0 -0
  722. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/firefox/profile.rb +0 -0
  723. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/firefox/profiles_ini.rb +0 -0
  724. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/firefox/service.rb +0 -0
  725. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/firefox/util.rb +0 -0
  726. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/firefox.rb +55 -0
  727. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/ie/driver.rb +0 -0
  728. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/ie/options.rb +0 -0
  729. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/ie/service.rb +0 -0
  730. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/ie.rb +28 -0
  731. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/remote/bridge.rb +705 -0
  732. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/remote/capabilities.rb +0 -0
  733. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/remote/commands.rb +172 -0
  734. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/remote/driver.rb +60 -0
  735. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/remote/http/common.rb +0 -0
  736. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/remote/http/curb.rb +0 -0
  737. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/remote/http/default.rb +0 -0
  738. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/remote/response.rb +0 -0
  739. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/remote/server_error.rb +0 -0
  740. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/remote.rb +0 -0
  741. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/safari/driver.rb +0 -0
  742. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/safari/features.rb +0 -0
  743. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/safari/options.rb +0 -0
  744. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/safari/service.rb +0 -0
  745. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/safari.rb +59 -0
  746. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support/abstract_event_listener.rb +0 -0
  747. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support/block_event_listener.rb +0 -0
  748. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support/cdp/domain.rb.erb +0 -0
  749. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support/cdp_client_generator.rb +0 -0
  750. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support/color.rb +0 -0
  751. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support/escaper.rb +0 -0
  752. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support/event_firing_bridge.rb +0 -0
  753. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support/guards/guard.rb +0 -0
  754. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support/guards/guard_condition.rb +0 -0
  755. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support/guards.rb +0 -0
  756. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support/relative_locator.rb +0 -0
  757. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support/select.rb +0 -0
  758. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver/support.rb +0 -0
  759. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/lib/selenium/webdriver/version.rb +24 -0
  760. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium/webdriver.rb +0 -0
  761. data/vendor/bundle/ruby/3.1.0/gems/{selenium-webdriver-4.2.0 → selenium-webdriver-4.4.0}/lib/selenium-webdriver.rb +0 -0
  762. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.4.0/selenium-webdriver.gemspec +66 -0
  763. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/CHANGELOG +1069 -0
  764. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/MIT-LICENSE +0 -0
  765. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/README.rdoc +933 -0
  766. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/bin/sequel +0 -0
  767. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/advanced_associations.rdoc +0 -0
  768. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/association_basics.rdoc +0 -0
  769. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/bin_sequel.rdoc +0 -0
  770. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/doc/cheat_sheet.rdoc +255 -0
  771. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/code_order.rdoc +0 -0
  772. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/core_extensions.rdoc +0 -0
  773. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/dataset_basics.rdoc +0 -0
  774. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/dataset_filtering.rdoc +0 -0
  775. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/extensions.rdoc +0 -0
  776. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/fork_safety.rdoc +0 -0
  777. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/mass_assignment.rdoc +0 -0
  778. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/migration.rdoc +0 -0
  779. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/model_dataset_method_design.rdoc +0 -0
  780. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/model_hooks.rdoc +0 -0
  781. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/model_plugins.rdoc +0 -0
  782. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/mssql_stored_procedures.rdoc +0 -0
  783. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/object_model.rdoc +0 -0
  784. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/doc/opening_databases.rdoc +425 -0
  785. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/postgresql.rdoc +0 -0
  786. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/prepared_statements.rdoc +0 -0
  787. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/querying.rdoc +0 -0
  788. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/reflection.rdoc +0 -0
  789. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.0.0.txt +0 -0
  790. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.1.0.txt +0 -0
  791. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.10.0.txt +0 -0
  792. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.11.0.txt +0 -0
  793. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.12.0.txt +0 -0
  794. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.13.0.txt +0 -0
  795. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.14.0.txt +0 -0
  796. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.15.0.txt +0 -0
  797. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.16.0.txt +0 -0
  798. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.17.0.txt +0 -0
  799. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.18.0.txt +0 -0
  800. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.19.0.txt +0 -0
  801. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.2.0.txt +0 -0
  802. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.20.0.txt +0 -0
  803. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.21.0.txt +0 -0
  804. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.22.0.txt +0 -0
  805. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.23.0.txt +0 -0
  806. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.24.0.txt +0 -0
  807. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.25.0.txt +0 -0
  808. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.26.0.txt +0 -0
  809. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.27.0.txt +0 -0
  810. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.28.0.txt +0 -0
  811. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.29.0.txt +0 -0
  812. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.3.0.txt +0 -0
  813. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.30.0.txt +0 -0
  814. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.31.0.txt +0 -0
  815. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.32.0.txt +0 -0
  816. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.33.0.txt +0 -0
  817. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.34.0.txt +0 -0
  818. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.35.0.txt +0 -0
  819. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.36.0.txt +0 -0
  820. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.37.0.txt +0 -0
  821. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.38.0.txt +0 -0
  822. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.39.0.txt +0 -0
  823. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.4.0.txt +0 -0
  824. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.40.0.txt +0 -0
  825. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.41.0.txt +0 -0
  826. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.42.0.txt +0 -0
  827. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.43.0.txt +0 -0
  828. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.44.0.txt +0 -0
  829. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.45.0.txt +0 -0
  830. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.46.0.txt +0 -0
  831. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.47.0.txt +0 -0
  832. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.48.0.txt +0 -0
  833. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.49.0.txt +0 -0
  834. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.5.0.txt +0 -0
  835. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.50.0.txt +0 -0
  836. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.51.0.txt +0 -0
  837. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.52.0.txt +0 -0
  838. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.53.0.txt +0 -0
  839. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.54.0.txt +0 -0
  840. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.55.0.txt +0 -0
  841. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.56.0.txt +0 -0
  842. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/doc/release_notes/5.57.0.txt +23 -0
  843. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/doc/release_notes/5.58.0.txt +31 -0
  844. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/doc/release_notes/5.59.0.txt +73 -0
  845. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.6.0.txt +0 -0
  846. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.7.0.txt +0 -0
  847. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.8.0.txt +0 -0
  848. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/release_notes/5.9.0.txt +0 -0
  849. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/schema_modification.rdoc +0 -0
  850. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/security.rdoc +0 -0
  851. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/sharding.rdoc +0 -0
  852. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/sql.rdoc +0 -0
  853. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/doc/testing.rdoc +186 -0
  854. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/thread_safety.rdoc +0 -0
  855. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/transactions.rdoc +0 -0
  856. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/validations.rdoc +0 -0
  857. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/doc/virtual_rows.rdoc +0 -0
  858. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/ado/access.rb +0 -0
  859. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/ado/mssql.rb +0 -0
  860. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/ado.rb +0 -0
  861. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/amalgalite.rb +0 -0
  862. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/ibmdb.rb +0 -0
  863. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/jdbc/db2.rb +0 -0
  864. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/adapters/jdbc/derby.rb +318 -0
  865. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/adapters/jdbc/h2.rb +287 -0
  866. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/adapters/jdbc/hsqldb.rb +226 -0
  867. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/jdbc/jtds.rb +0 -0
  868. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/jdbc/mssql.rb +0 -0
  869. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/jdbc/mysql.rb +0 -0
  870. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/jdbc/oracle.rb +0 -0
  871. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/jdbc/postgresql.rb +0 -0
  872. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/jdbc/sqlanywhere.rb +0 -0
  873. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/jdbc/sqlite.rb +0 -0
  874. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/jdbc/sqlserver.rb +0 -0
  875. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/jdbc/transactions.rb +0 -0
  876. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/jdbc.rb +0 -0
  877. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/mock.rb +0 -0
  878. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/mysql.rb +0 -0
  879. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/mysql2.rb +0 -0
  880. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/odbc/db2.rb +0 -0
  881. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/odbc/mssql.rb +0 -0
  882. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/odbc/oracle.rb +0 -0
  883. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/odbc.rb +0 -0
  884. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/oracle.rb +0 -0
  885. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/adapters/postgres.rb +822 -0
  886. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/postgresql.rb +0 -0
  887. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/shared/access.rb +0 -0
  888. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/adapters/shared/db2.rb +492 -0
  889. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/adapters/shared/mssql.rb +1163 -0
  890. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/adapters/shared/mysql.rb +1092 -0
  891. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/adapters/shared/oracle.rb +721 -0
  892. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/adapters/shared/postgres.rb +2298 -0
  893. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/shared/sqlanywhere.rb +0 -0
  894. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/shared/sqlite.rb +0 -0
  895. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/sqlanywhere.rb +0 -0
  896. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/sqlite.rb +0 -0
  897. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/tinytds.rb +0 -0
  898. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/utils/columns_limit_1.rb +0 -0
  899. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +0 -0
  900. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +0 -0
  901. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/utils/mysql_mysql2.rb +0 -0
  902. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/utils/mysql_prepared_statements.rb +0 -0
  903. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/utils/replace.rb +0 -0
  904. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/utils/split_alter_table.rb +0 -0
  905. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/utils/stored_procedures.rb +0 -0
  906. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/adapters/utils/unmodified_identifiers.rb +0 -0
  907. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/ast_transformer.rb +0 -0
  908. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/connection_pool/sharded_single.rb +0 -0
  909. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/connection_pool/sharded_threaded.rb +0 -0
  910. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/connection_pool/single.rb +0 -0
  911. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/connection_pool/threaded.rb +0 -0
  912. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/connection_pool.rb +0 -0
  913. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/core.rb +0 -0
  914. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/database/connecting.rb +0 -0
  915. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/database/dataset.rb +0 -0
  916. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/database/dataset_defaults.rb +0 -0
  917. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/database/features.rb +0 -0
  918. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/database/logging.rb +0 -0
  919. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/database/misc.rb +0 -0
  920. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/database/query.rb +0 -0
  921. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/database/schema_generator.rb +650 -0
  922. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/database/schema_methods.rb +1081 -0
  923. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/database/transactions.rb +0 -0
  924. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/database.rb +0 -0
  925. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/dataset/actions.rb +1293 -0
  926. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/dataset/dataset_module.rb +0 -0
  927. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/dataset/features.rb +270 -0
  928. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/dataset/graph.rb +0 -0
  929. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/dataset/misc.rb +0 -0
  930. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/dataset/placeholder_literalizer.rb +0 -0
  931. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/dataset/prepared_statements.rb +0 -0
  932. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/dataset/query.rb +1485 -0
  933. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/dataset/sql.rb +1811 -0
  934. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/dataset.rb +0 -0
  935. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/deprecated.rb +0 -0
  936. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/exceptions.rb +0 -0
  937. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/_model_constraint_validations.rb +0 -0
  938. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/_model_pg_row.rb +0 -0
  939. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/_pretty_table.rb +0 -0
  940. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/any_not_empty.rb +0 -0
  941. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/arbitrary_servers.rb +0 -0
  942. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/async_thread_pool.rb +0 -0
  943. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/auto_literal_strings.rb +0 -0
  944. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/blank.rb +0 -0
  945. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/caller_logging.rb +0 -0
  946. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/columns_introspection.rb +0 -0
  947. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/connection_expiration.rb +0 -0
  948. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/connection_validator.rb +0 -0
  949. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/constant_sql_override.rb +0 -0
  950. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/constraint_validations.rb +0 -0
  951. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/core_extensions.rb +0 -0
  952. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/core_refinements.rb +0 -0
  953. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/current_datetime_timestamp.rb +0 -0
  954. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/dataset_source_alias.rb +0 -0
  955. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/date_arithmetic.rb +0 -0
  956. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/date_parse_input_handler.rb +0 -0
  957. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/datetime_parse_to_time.rb +0 -0
  958. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/duplicate_columns_handler.rb +0 -0
  959. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/empty_array_consider_nulls.rb +0 -0
  960. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/error_sql.rb +0 -0
  961. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/escaped_like.rb +0 -0
  962. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/eval_inspect.rb +0 -0
  963. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/exclude_or_null.rb +0 -0
  964. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/fiber_concurrency.rb +0 -0
  965. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/freeze_datasets.rb +0 -0
  966. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/from_block.rb +0 -0
  967. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/graph_each.rb +0 -0
  968. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/identifier_mangling.rb +0 -0
  969. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/implicit_subquery.rb +0 -0
  970. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/index_caching.rb +0 -0
  971. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/inflector.rb +0 -0
  972. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/integer64.rb +0 -0
  973. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/extensions/is_distinct_from.rb +139 -0
  974. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/looser_typecasting.rb +0 -0
  975. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/migration.rb +0 -0
  976. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +0 -0
  977. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/named_timezones.rb +0 -0
  978. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/no_auto_literal_strings.rb +0 -0
  979. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/null_dataset.rb +0 -0
  980. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pagination.rb +0 -0
  981. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_array.rb +0 -0
  982. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_array_ops.rb +0 -0
  983. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_enum.rb +0 -0
  984. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_extended_date_support.rb +0 -0
  985. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/extensions/pg_hstore.rb +348 -0
  986. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_hstore_ops.rb +0 -0
  987. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_inet.rb +0 -0
  988. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_inet_ops.rb +0 -0
  989. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_interval.rb +0 -0
  990. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_json.rb +0 -0
  991. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/extensions/pg_json_ops.rb +804 -0
  992. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_loose_count.rb +0 -0
  993. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_multirange.rb +0 -0
  994. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_range.rb +0 -0
  995. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_range_ops.rb +0 -0
  996. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_row.rb +0 -0
  997. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_row_ops.rb +0 -0
  998. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_static_cache_updater.rb +0 -0
  999. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pg_timestamptz.rb +0 -0
  1000. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/pretty_table.rb +0 -0
  1001. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/query.rb +0 -0
  1002. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/round_timestamps.rb +0 -0
  1003. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/run_transaction_hooks.rb +0 -0
  1004. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/s.rb +0 -0
  1005. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/schema_caching.rb +0 -0
  1006. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/schema_dumper.rb +0 -0
  1007. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/select_remove.rb +0 -0
  1008. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/sequel_4_dataset_methods.rb +0 -0
  1009. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/server_block.rb +0 -0
  1010. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/server_logging.rb +0 -0
  1011. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/split_array_nil.rb +0 -0
  1012. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/sql_comments.rb +0 -0
  1013. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/sql_expr.rb +0 -0
  1014. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/sql_log_normalizer.rb +0 -0
  1015. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/sqlite_json_ops.rb +0 -0
  1016. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/string_agg.rb +0 -0
  1017. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/string_date_time.rb +0 -0
  1018. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/symbol_aref.rb +0 -0
  1019. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/symbol_aref_refinement.rb +0 -0
  1020. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/symbol_as.rb +0 -0
  1021. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/symbol_as_refinement.rb +0 -0
  1022. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/synchronize_sql.rb +0 -0
  1023. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/thread_local_timezones.rb +0 -0
  1024. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/to_dot.rb +0 -0
  1025. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/extensions/virtual_row_method_block.rb +0 -0
  1026. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/model/associations.rb +4014 -0
  1027. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/model/base.rb +2270 -0
  1028. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/model/dataset_module.rb +0 -0
  1029. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/model/default_inflections.rb +0 -0
  1030. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/model/errors.rb +0 -0
  1031. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/model/exceptions.rb +0 -0
  1032. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/model/inflections.rb +0 -0
  1033. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/model/plugins.rb +0 -0
  1034. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/model.rb +0 -0
  1035. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/accessed_columns.rb +0 -0
  1036. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/active_model.rb +0 -0
  1037. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/after_initialize.rb +0 -0
  1038. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/association_dependencies.rb +0 -0
  1039. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/association_lazy_eager_option.rb +0 -0
  1040. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/association_multi_add_remove.rb +0 -0
  1041. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/association_pks.rb +0 -0
  1042. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/association_proxies.rb +0 -0
  1043. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/async_thread_pool.rb +0 -0
  1044. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/auto_restrict_eager_graph.rb +0 -0
  1045. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/auto_validations.rb +0 -0
  1046. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/auto_validations_constraint_validations_presence_message.rb +0 -0
  1047. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/before_after_save.rb +0 -0
  1048. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/blacklist_security.rb +0 -0
  1049. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/boolean_readers.rb +0 -0
  1050. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/boolean_subsets.rb +0 -0
  1051. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/caching.rb +0 -0
  1052. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/class_table_inheritance.rb +0 -0
  1053. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/column_conflicts.rb +0 -0
  1054. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/column_encryption.rb +0 -0
  1055. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/column_select.rb +0 -0
  1056. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/columns_updated.rb +0 -0
  1057. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/composition.rb +0 -0
  1058. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/concurrent_eager_loading.rb +0 -0
  1059. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/constraint_validations.rb +0 -0
  1060. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/csv_serializer.rb +0 -0
  1061. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/dataset_associations.rb +0 -0
  1062. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/def_dataset_method.rb +0 -0
  1063. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/defaults_setter.rb +0 -0
  1064. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/delay_add_association.rb +0 -0
  1065. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/dirty.rb +0 -0
  1066. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/eager_each.rb +0 -0
  1067. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/eager_graph_eager.rb +0 -0
  1068. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/empty_failure_backtraces.rb +0 -0
  1069. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/enum.rb +0 -0
  1070. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/error_splitter.rb +0 -0
  1071. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/finder.rb +0 -0
  1072. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/forbid_lazy_load.rb +0 -0
  1073. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/force_encoding.rb +0 -0
  1074. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/hook_class_methods.rb +0 -0
  1075. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/input_transformer.rb +0 -0
  1076. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/plugins/insert_conflict.rb +76 -0
  1077. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/insert_returning_select.rb +0 -0
  1078. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/instance_filters.rb +0 -0
  1079. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/instance_hooks.rb +0 -0
  1080. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/instance_specific_default.rb +0 -0
  1081. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/inverted_subsets.rb +0 -0
  1082. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/json_serializer.rb +0 -0
  1083. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/lazy_attributes.rb +0 -0
  1084. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/plugins/list.rb +205 -0
  1085. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/many_through_many.rb +0 -0
  1086. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/modification_detection.rb +0 -0
  1087. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/mssql_optimistic_locking.rb +0 -0
  1088. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/nested_attributes.rb +0 -0
  1089. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/optimistic_locking.rb +0 -0
  1090. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/pg_array_associations.rb +0 -0
  1091. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/pg_auto_constraint_validations.rb +0 -0
  1092. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/pg_row.rb +0 -0
  1093. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/prepared_statements.rb +0 -0
  1094. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/prepared_statements_safe.rb +0 -0
  1095. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/rcte_tree.rb +0 -0
  1096. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/plugins/require_valid_schema.rb +67 -0
  1097. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/serialization.rb +0 -0
  1098. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/serialization_modification_detection.rb +0 -0
  1099. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/sharding.rb +0 -0
  1100. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/single_table_inheritance.rb +0 -0
  1101. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/singular_table_names.rb +0 -0
  1102. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/skip_create_refresh.rb +0 -0
  1103. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/skip_saving_columns.rb +0 -0
  1104. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/split_values.rb +0 -0
  1105. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/sql_comments.rb +0 -0
  1106. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/static_cache.rb +0 -0
  1107. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/static_cache_cache.rb +0 -0
  1108. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/string_stripper.rb +0 -0
  1109. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/subclasses.rb +0 -0
  1110. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/subset_conditions.rb +0 -0
  1111. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/table_select.rb +0 -0
  1112. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/plugins/tactical_eager_loading.rb +212 -0
  1113. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/throw_failures.rb +0 -0
  1114. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/timestamps.rb +0 -0
  1115. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/touch.rb +0 -0
  1116. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/tree.rb +0 -0
  1117. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/typecast_on_load.rb +0 -0
  1118. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/unlimited_update.rb +0 -0
  1119. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/unused_associations.rb +0 -0
  1120. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/update_or_create.rb +0 -0
  1121. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/update_primary_key.rb +0 -0
  1122. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/update_refresh.rb +0 -0
  1123. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/uuid.rb +0 -0
  1124. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/validate_associated.rb +0 -0
  1125. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/validation_class_methods.rb +0 -0
  1126. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/validation_contexts.rb +0 -0
  1127. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/validation_helpers.rb +0 -0
  1128. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/whitelist_security.rb +0 -0
  1129. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/plugins/xml_serializer.rb +0 -0
  1130. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/sql.rb +0 -0
  1131. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel/timezones.rb +0 -0
  1132. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.59.0/lib/sequel/version.rb +25 -0
  1133. data/vendor/bundle/ruby/3.1.0/gems/{sequel-5.56.0 → sequel-5.59.0}/lib/sequel.rb +0 -0
  1134. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/API_CHANGES.rdoc +0 -0
  1135. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/CHANGELOG.rdoc +333 -0
  1136. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/ChangeLog.cvs +0 -0
  1137. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/Gemfile +20 -0
  1138. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/LICENSE +0 -0
  1139. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/Manifest.txt +59 -0
  1140. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/README.rdoc +118 -0
  1141. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/Rakefile +0 -0
  1142. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/appveyor.yml +0 -0
  1143. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/ext/sqlite3/Makefile +267 -0
  1144. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/ext/sqlite3/aggregator.c +273 -0
  1145. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/ext/sqlite3/aggregator.h +0 -0
  1146. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/ext/sqlite3/aggregator.o +0 -0
  1147. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/ext/sqlite3/backup.c +0 -0
  1148. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/ext/sqlite3/backup.h +0 -0
  1149. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/ext/sqlite3/backup.o +0 -0
  1150. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/ext/sqlite3/database.c +854 -0
  1151. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/ext/sqlite3/database.h +0 -0
  1152. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/ext/sqlite3/database.o +0 -0
  1153. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/ext/sqlite3/exception.c +0 -0
  1154. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/ext/sqlite3/exception.h +0 -0
  1155. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/ext/sqlite3/exception.o +0 -0
  1156. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/ext/sqlite3/extconf.rb +0 -0
  1157. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/ext/sqlite3/sqlite3.c +0 -0
  1158. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/ext/sqlite3/sqlite3.o +0 -0
  1159. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/ext/sqlite3/sqlite3_native.so +0 -0
  1160. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/ext/sqlite3/sqlite3_ruby.h +0 -0
  1161. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/ext/sqlite3/statement.c +442 -0
  1162. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/ext/sqlite3/statement.h +0 -0
  1163. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/ext/sqlite3/statement.o +0 -0
  1164. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/faq/faq.rb +0 -0
  1165. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/faq/faq.yml +426 -0
  1166. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/lib/sqlite3/constants.rb +50 -0
  1167. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/lib/sqlite3/database.rb +741 -0
  1168. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/lib/sqlite3/errors.rb +0 -0
  1169. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/lib/sqlite3/pragmas.rb +595 -0
  1170. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/lib/sqlite3/resultset.rb +0 -0
  1171. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/lib/sqlite3/sqlite3_native.so +0 -0
  1172. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/lib/sqlite3/statement.rb +145 -0
  1173. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/lib/sqlite3/translator.rb +118 -0
  1174. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/lib/sqlite3/value.rb +0 -0
  1175. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/lib/sqlite3/version.rb +25 -0
  1176. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/lib/sqlite3.rb +0 -0
  1177. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/rakelib/faq.rake +0 -0
  1178. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/rakelib/gem.rake +40 -0
  1179. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/rakelib/native.rake +59 -0
  1180. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/rakelib/vendor_sqlite3.rake +108 -0
  1181. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/setup.rb +0 -0
  1182. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/test/helper.rb +25 -0
  1183. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_backup.rb +0 -0
  1184. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_collation.rb +0 -0
  1185. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/test/test_database.rb +531 -0
  1186. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_database_flags.rb +0 -0
  1187. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_database_readonly.rb +0 -0
  1188. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_database_readwrite.rb +0 -0
  1189. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_deprecated.rb +0 -0
  1190. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_encoding.rb +0 -0
  1191. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_integration.rb +0 -0
  1192. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_integration_aggregate.rb +0 -0
  1193. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_integration_open_close.rb +0 -0
  1194. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_integration_pending.rb +0 -0
  1195. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_integration_resultset.rb +0 -0
  1196. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_integration_statement.rb +0 -0
  1197. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_result_set.rb +0 -0
  1198. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_sqlite3.rb +0 -0
  1199. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.4/test/test_statement.rb +263 -0
  1200. data/vendor/bundle/ruby/3.1.0/gems/{sqlite3-1.4.2 → sqlite3-1.4.4}/test/test_statement_execute.rb +0 -0
  1201. data/vendor/bundle/ruby/3.1.0/specifications/addressable-2.8.1.gemspec +37 -0
  1202. data/vendor/bundle/ruby/3.1.0/specifications/debug-1.6.2.gemspec +39 -0
  1203. data/vendor/bundle/ruby/3.1.0/specifications/faraday-2.5.2.gemspec +0 -0
  1204. data/vendor/bundle/ruby/3.1.0/specifications/faraday-net_http-3.0.0.gemspec +32 -0
  1205. data/vendor/bundle/ruby/3.1.0/specifications/nokogiri-1.13.8-x86_64-linux.gemspec +69 -0
  1206. data/vendor/bundle/ruby/3.1.0/specifications/octokit-5.3.0.gemspec +36 -0
  1207. data/vendor/bundle/ruby/3.1.0/specifications/public_suffix-5.0.0.gemspec +24 -0
  1208. data/vendor/bundle/ruby/3.1.0/specifications/rack-2.2.4.gemspec +41 -0
  1209. data/vendor/bundle/ruby/3.1.0/specifications/rack-test-2.0.2.gemspec +38 -0
  1210. data/vendor/bundle/ruby/3.1.0/specifications/sawyer-0.9.2.gemspec +31 -0
  1211. data/vendor/bundle/ruby/3.1.0/specifications/selenium-webdriver-4.4.0.gemspec +62 -0
  1212. data/vendor/bundle/ruby/3.1.0/specifications/sequel-5.59.0.gemspec +46 -0
  1213. data/vendor/bundle/ruby/3.1.0/specifications/sqlite3-1.4.4.gemspec +51 -0
  1214. metadata +1202 -1198
  1215. data/vendor/bundle/ruby/3.1.0/cache/addressable-2.8.0.gem +0 -0
  1216. data/vendor/bundle/ruby/3.1.0/cache/debug-1.5.0.gem +0 -0
  1217. data/vendor/bundle/ruby/3.1.0/cache/faraday-2.3.0.gem +0 -0
  1218. data/vendor/bundle/ruby/3.1.0/cache/faraday-net_http-2.0.3.gem +0 -0
  1219. data/vendor/bundle/ruby/3.1.0/cache/nokogiri-1.13.6-x86_64-linux.gem +0 -0
  1220. data/vendor/bundle/ruby/3.1.0/cache/octokit-4.23.0.gem +0 -0
  1221. data/vendor/bundle/ruby/3.1.0/cache/public_suffix-4.0.7.gem +0 -0
  1222. data/vendor/bundle/ruby/3.1.0/cache/rack-2.2.3.1.gem +0 -0
  1223. data/vendor/bundle/ruby/3.1.0/cache/rack-test-1.1.0.gem +0 -0
  1224. data/vendor/bundle/ruby/3.1.0/cache/sawyer-0.9.1.gem +0 -0
  1225. data/vendor/bundle/ruby/3.1.0/cache/selenium-webdriver-4.2.0.gem +0 -0
  1226. data/vendor/bundle/ruby/3.1.0/cache/sequel-5.56.0.gem +0 -0
  1227. data/vendor/bundle/ruby/3.1.0/cache/sqlite3-1.4.2.gem +0 -0
  1228. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/debug-1.5.0/debug/debug.so +0 -0
  1229. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/debug-1.5.0/gem_make.out +0 -19
  1230. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/debug-1.5.0/mkmf.log +0 -86
  1231. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/sqlite3-1.4.2/gem_make.out +0 -84
  1232. data/vendor/bundle/ruby/3.1.0/extensions/x86_64-linux/3.1.0/sqlite3-1.4.2/sqlite3/sqlite3_native.so +0 -0
  1233. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/CHANGELOG.md +0 -246
  1234. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/Gemfile +0 -28
  1235. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/addressable.gemspec +0 -37
  1236. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/idna/native.rb +0 -61
  1237. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/idna/pure.rb +0 -678
  1238. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/idna.rb +0 -27
  1239. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/template.rb +0 -1031
  1240. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/uri.rb +0 -2556
  1241. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/lib/addressable/version.rb +0 -32
  1242. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/idna_spec.rb +0 -302
  1243. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/net_http_compat_spec.rb +0 -30
  1244. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/security_spec.rb +0 -59
  1245. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/template_spec.rb +0 -1460
  1246. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/spec/addressable/uri_spec.rb +0 -6665
  1247. data/vendor/bundle/ruby/3.1.0/gems/addressable-2.8.0/tasks/gem.rake +0 -92
  1248. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/CONTRIBUTING.md +0 -493
  1249. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/README.md +0 -890
  1250. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/Rakefile +0 -34
  1251. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/debug.gemspec +0 -32
  1252. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/exe/rdbg +0 -34
  1253. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/ext/debug/Makefile +0 -267
  1254. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/ext/debug/debug.c +0 -222
  1255. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/ext/debug/debug.o +0 -0
  1256. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/ext/debug/debug.so +0 -0
  1257. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/ext/debug/debug_version.h +0 -1
  1258. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/ext/debug/extconf.rb +0 -15
  1259. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/ext/debug/iseq_collector.o +0 -0
  1260. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/bp.vim +0 -68
  1261. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/breakpoint.rb +0 -517
  1262. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/client.rb +0 -235
  1263. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/config.rb +0 -493
  1264. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/console.rb +0 -228
  1265. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/debug.so +0 -0
  1266. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/frame_info.rb +0 -172
  1267. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/prelude.rb +0 -49
  1268. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/server.rb +0 -493
  1269. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/server_cdp.rb +0 -1144
  1270. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/server_dap.rb +0 -869
  1271. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/session.rb +0 -2312
  1272. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/source_repository.rb +0 -117
  1273. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/thread_client.rb +0 -1202
  1274. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/tracer.rb +0 -241
  1275. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug/version.rb +0 -5
  1276. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/lib/debug.rb +0 -4
  1277. data/vendor/bundle/ruby/3.1.0/gems/debug-1.5.0/misc/README.md.erb +0 -584
  1278. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/LICENSE.md +0 -20
  1279. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/README.md +0 -55
  1280. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/examples/client_spec.rb +0 -97
  1281. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/examples/client_test.rb +0 -118
  1282. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/lib/faraday/adapter/test.rb +0 -268
  1283. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/lib/faraday/adapter.rb +0 -102
  1284. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/lib/faraday/connection.rb +0 -561
  1285. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/lib/faraday/options/env.rb +0 -181
  1286. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/lib/faraday/options/ssl_options.rb +0 -59
  1287. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/lib/faraday/version.rb +0 -5
  1288. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/spec/faraday/adapter/test_spec.rb +0 -377
  1289. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/spec/faraday/connection_spec.rb +0 -787
  1290. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/spec/faraday/options/env_spec.rb +0 -70
  1291. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/spec/faraday/request_spec.rb +0 -109
  1292. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/spec/faraday/utils_spec.rb +0 -117
  1293. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/spec/support/shared_examples/adapter.rb +0 -104
  1294. data/vendor/bundle/ruby/3.1.0/gems/faraday-2.3.0/spec/support/shared_examples/request_method.rb +0 -249
  1295. data/vendor/bundle/ruby/3.1.0/gems/faraday-net_http-2.0.3/lib/faraday/adapter/net_http.rb +0 -224
  1296. data/vendor/bundle/ruby/3.1.0/gems/faraday-net_http-2.0.3/lib/faraday/net_http/version.rb +0 -7
  1297. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/extconf.rb +0 -1008
  1298. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/gumbo.c +0 -584
  1299. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/include/libxslt/xsltconfig.h +0 -180
  1300. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/nokogiri.h +0 -223
  1301. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_attr.c +0 -103
  1302. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_attribute_decl.c +0 -70
  1303. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_cdata.c +0 -57
  1304. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_document.c +0 -680
  1305. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_dtd.c +0 -208
  1306. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_element_decl.c +0 -69
  1307. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_entity_decl.c +0 -112
  1308. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_node.c +0 -2144
  1309. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_node_set.c +0 -498
  1310. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_reader.c +0 -719
  1311. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_schema.c +0 -284
  1312. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_text.c +0 -48
  1313. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/ext/nokogiri/xml_xpath_context.c +0 -406
  1314. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/lib/nokogiri/2.6/nokogiri.so +0 -0
  1315. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/lib/nokogiri/2.7/nokogiri.so +0 -0
  1316. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/lib/nokogiri/3.0/nokogiri.so +0 -0
  1317. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/lib/nokogiri/3.1/nokogiri.so +0 -0
  1318. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/lib/nokogiri/version/constant.rb +0 -6
  1319. data/vendor/bundle/ruby/3.1.0/gems/nokogiri-1.13.6-x86_64-linux/lib/nokogiri/xml/reader.rb +0 -107
  1320. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/README.md +0 -820
  1321. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/Rakefile +0 -22
  1322. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/ext/sawyer/relation.rb +0 -10
  1323. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/arguments.rb +0 -14
  1324. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/authentication.rb +0 -81
  1325. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/actions_secrets.rb +0 -58
  1326. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/actions_workflow_runs.rb +0 -105
  1327. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/actions_workflows.rb +0 -43
  1328. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/apps.rb +0 -222
  1329. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/authorizations.rb +0 -182
  1330. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/checks.rb +0 -200
  1331. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/commit_branches.rb +0 -20
  1332. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/commit_comments.rb +0 -95
  1333. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/commit_pulls.rb +0 -20
  1334. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/commits.rb +0 -244
  1335. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/community_profile.rb +0 -22
  1336. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/contents.rb +0 -168
  1337. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/deployments.rb +0 -82
  1338. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/downloads.rb +0 -50
  1339. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/emojis.rb +0 -18
  1340. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/events.rb +0 -152
  1341. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/feeds.rb +0 -33
  1342. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/gists.rb +0 -234
  1343. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/gitignore.rb +0 -43
  1344. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/hooks.rb +0 -297
  1345. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/issues.rb +0 -368
  1346. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/labels.rb +0 -156
  1347. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/legacy_search.rb +0 -42
  1348. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/licenses.rb +0 -45
  1349. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/markdown.rb +0 -27
  1350. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/marketplace.rb +0 -56
  1351. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/meta.rb +0 -21
  1352. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/milestones.rb +0 -87
  1353. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/notifications.rb +0 -167
  1354. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/oauth_applications.rb +0 -122
  1355. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/objects.rb +0 -141
  1356. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/organizations.rb +0 -820
  1357. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/pages.rb +0 -63
  1358. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/projects.rb +0 -314
  1359. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/pub_sub_hubbub.rb +0 -111
  1360. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/pull_requests.rb +0 -303
  1361. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/rate_limit.rb +0 -54
  1362. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/reactions.rb +0 -158
  1363. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/refs.rb +0 -134
  1364. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/releases.rb +0 -164
  1365. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/repositories.rb +0 -799
  1366. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/repository_invitations.rb +0 -96
  1367. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/reviews.rb +0 -227
  1368. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/say.rb +0 -19
  1369. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/search.rb +0 -91
  1370. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/service_status.rb +0 -48
  1371. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/source_import.rb +0 -161
  1372. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/stats.rb +0 -107
  1373. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/statuses.rb +0 -47
  1374. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/traffic.rb +0 -69
  1375. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client/users.rb +0 -441
  1376. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/client.rb +0 -253
  1377. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/configurable.rb +0 -151
  1378. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/connection.rb +0 -211
  1379. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/default.rb +0 -186
  1380. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/enterprise_admin_client/admin_stats.rb +0 -120
  1381. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/enterprise_admin_client/license.rb +0 -18
  1382. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/enterprise_admin_client/orgs.rb +0 -27
  1383. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/enterprise_admin_client/search_indexing.rb +0 -83
  1384. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/enterprise_admin_client/users.rb +0 -128
  1385. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/enterprise_admin_client.rb +0 -40
  1386. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/enterprise_management_console_client/management_console.rb +0 -176
  1387. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/enterprise_management_console_client.rb +0 -50
  1388. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/error.rb +0 -354
  1389. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/gist.rb +0 -36
  1390. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/middleware/follow_redirects.rb +0 -134
  1391. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/organization.rb +0 -17
  1392. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/preview.rb +0 -46
  1393. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/rate_limit.rb +0 -33
  1394. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/repo_arguments.rb +0 -19
  1395. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/repository.rb +0 -95
  1396. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/response/base_middleware.rb +0 -8
  1397. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/response/feed_parser.rb +0 -19
  1398. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/response/raise_error.rb +0 -19
  1399. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/user.rb +0 -19
  1400. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/version.rb +0 -17
  1401. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit/warnable.rb +0 -19
  1402. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/lib/octokit.rb +0 -60
  1403. data/vendor/bundle/ruby/3.1.0/gems/octokit-4.23.0/octokit.gemspec +0 -23
  1404. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/CHANGELOG.md +0 -417
  1405. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/Gemfile +0 -14
  1406. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/README.md +0 -217
  1407. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/Rakefile +0 -52
  1408. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/data/list.txt +0 -14035
  1409. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/lib/public_suffix/list.rb +0 -247
  1410. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/lib/public_suffix/rule.rb +0 -350
  1411. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/lib/public_suffix/version.rb +0 -15
  1412. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/lib/public_suffix.rb +0 -177
  1413. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/public_suffix.gemspec +0 -29
  1414. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/test/acceptance_test.rb +0 -131
  1415. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/test/psl_test.rb +0 -52
  1416. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/test/unit/domain_test.rb +0 -106
  1417. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/test/unit/list_test.rb +0 -241
  1418. data/vendor/bundle/ruby/3.1.0/gems/public_suffix-4.0.7/test/unit/rule_test.rb +0 -222
  1419. data/vendor/bundle/ruby/3.1.0/gems/rack-2.2.3.1/CHANGELOG.md +0 -699
  1420. data/vendor/bundle/ruby/3.1.0/gems/rack-2.2.3.1/lib/rack/etag.rb +0 -75
  1421. data/vendor/bundle/ruby/3.1.0/gems/rack-2.2.3.1/lib/rack/lint.rb +0 -806
  1422. data/vendor/bundle/ruby/3.1.0/gems/rack-2.2.3.1/lib/rack/query_parser.rb +0 -217
  1423. data/vendor/bundle/ruby/3.1.0/gems/rack-2.2.3.1/lib/rack/utils.rb +0 -613
  1424. data/vendor/bundle/ruby/3.1.0/gems/rack-2.2.3.1/lib/rack/version.rb +0 -29
  1425. data/vendor/bundle/ruby/3.1.0/gems/rack-test-1.1.0/History.md +0 -256
  1426. data/vendor/bundle/ruby/3.1.0/gems/rack-test-1.1.0/MIT-LICENSE.txt +0 -19
  1427. data/vendor/bundle/ruby/3.1.0/gems/rack-test-1.1.0/README.md +0 -150
  1428. data/vendor/bundle/ruby/3.1.0/gems/rack-test-1.1.0/lib/rack/mock_session.rb +0 -63
  1429. data/vendor/bundle/ruby/3.1.0/gems/rack-test-1.1.0/lib/rack/test/cookie_jar.rb +0 -194
  1430. data/vendor/bundle/ruby/3.1.0/gems/rack-test-1.1.0/lib/rack/test/methods.rb +0 -83
  1431. data/vendor/bundle/ruby/3.1.0/gems/rack-test-1.1.0/lib/rack/test/mock_digest_request.rb +0 -25
  1432. data/vendor/bundle/ruby/3.1.0/gems/rack-test-1.1.0/lib/rack/test/uploaded_file.rb +0 -85
  1433. data/vendor/bundle/ruby/3.1.0/gems/rack-test-1.1.0/lib/rack/test/utils.rb +0 -144
  1434. data/vendor/bundle/ruby/3.1.0/gems/rack-test-1.1.0/lib/rack/test/version.rb +0 -5
  1435. data/vendor/bundle/ruby/3.1.0/gems/rack-test-1.1.0/lib/rack/test.rb +0 -334
  1436. data/vendor/bundle/ruby/3.1.0/gems/sawyer-0.9.1/lib/sawyer/resource.rb +0 -155
  1437. data/vendor/bundle/ruby/3.1.0/gems/sawyer-0.9.1/lib/sawyer.rb +0 -17
  1438. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/CHANGES +0 -2050
  1439. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/server.rb +0 -283
  1440. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/chrome/options.rb +0 -261
  1441. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/chrome.rb +0 -55
  1442. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/common/driver.rb +0 -397
  1443. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/common/driver_extensions/has_network_interception.rb +0 -136
  1444. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +0 -31
  1445. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/common/interactions/pointer_actions.rb +0 -369
  1446. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/common/interactions/wheel_actions.rb +0 -113
  1447. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/common/manager.rb +0 -177
  1448. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/common/options.rb +0 -184
  1449. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/common/takes_screenshot.rb +0 -66
  1450. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/common/websocket_connection.rb +0 -149
  1451. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/common/window.rb +0 -159
  1452. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/common/zipper.rb +0 -91
  1453. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/common.rb +0 -95
  1454. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/devtools.rb +0 -86
  1455. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/firefox.rb +0 -69
  1456. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/ie.rb +0 -42
  1457. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/remote/bridge.rb +0 -672
  1458. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/remote/commands.rb +0 -158
  1459. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/remote/driver.rb +0 -61
  1460. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/remote/http/persistent.rb +0 -65
  1461. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/safari.rb +0 -73
  1462. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/lib/selenium/webdriver/version.rb +0 -24
  1463. data/vendor/bundle/ruby/3.1.0/gems/selenium-webdriver-4.2.0/selenium-webdriver.gemspec +0 -66
  1464. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/CHANGELOG +0 -1037
  1465. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/README.rdoc +0 -908
  1466. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/doc/cheat_sheet.rdoc +0 -247
  1467. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/doc/opening_databases.rdoc +0 -421
  1468. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/doc/testing.rdoc +0 -186
  1469. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/adapters/jdbc/derby.rb +0 -313
  1470. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/adapters/jdbc/h2.rb +0 -282
  1471. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/adapters/jdbc/hsqldb.rb +0 -220
  1472. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/adapters/postgres.rb +0 -816
  1473. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/adapters/shared/db2.rb +0 -464
  1474. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/adapters/shared/mssql.rb +0 -1129
  1475. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/adapters/shared/mysql.rb +0 -1080
  1476. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/adapters/shared/oracle.rb +0 -652
  1477. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/adapters/shared/postgres.rb +0 -2232
  1478. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/database/schema_generator.rb +0 -646
  1479. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/database/schema_methods.rb +0 -1078
  1480. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/dataset/actions.rb +0 -1244
  1481. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/dataset/features.rb +0 -265
  1482. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/dataset/query.rb +0 -1423
  1483. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/dataset/sql.rb +0 -1724
  1484. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/extensions/pg_hstore.rb +0 -348
  1485. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/extensions/pg_json_ops.rb +0 -752
  1486. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/model/associations.rb +0 -4002
  1487. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/model/base.rb +0 -2260
  1488. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/plugins/insert_conflict.rb +0 -72
  1489. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/plugins/list.rb +0 -203
  1490. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/plugins/tactical_eager_loading.rb +0 -205
  1491. data/vendor/bundle/ruby/3.1.0/gems/sequel-5.56.0/lib/sequel/version.rb +0 -25
  1492. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/CHANGELOG.rdoc +0 -318
  1493. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/Gemfile +0 -17
  1494. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/Manifest.txt +0 -60
  1495. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/README.rdoc +0 -118
  1496. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/ext/sqlite3/Makefile +0 -267
  1497. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/ext/sqlite3/aggregator.c +0 -273
  1498. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/ext/sqlite3/aggregator.o +0 -0
  1499. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/ext/sqlite3/backup.o +0 -0
  1500. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/ext/sqlite3/database.c +0 -827
  1501. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/ext/sqlite3/database.o +0 -0
  1502. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/ext/sqlite3/exception.o +0 -0
  1503. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/ext/sqlite3/sqlite3.o +0 -0
  1504. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/ext/sqlite3/sqlite3_native.so +0 -0
  1505. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/ext/sqlite3/statement.c +0 -442
  1506. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/ext/sqlite3/statement.o +0 -0
  1507. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/faq/faq.yml +0 -426
  1508. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/lib/sqlite3/constants.rb +0 -50
  1509. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/lib/sqlite3/database.rb +0 -736
  1510. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/lib/sqlite3/pragmas.rb +0 -588
  1511. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/lib/sqlite3/sqlite3_native.so +0 -0
  1512. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/lib/sqlite3/statement.rb +0 -144
  1513. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/lib/sqlite3/translator.rb +0 -118
  1514. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/lib/sqlite3/version.rb +0 -25
  1515. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/rakelib/gem.rake +0 -40
  1516. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/rakelib/native.rake +0 -56
  1517. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/rakelib/vendor_sqlite3.rake +0 -97
  1518. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/test/helper.rb +0 -18
  1519. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/test/test_database.rb +0 -503
  1520. data/vendor/bundle/ruby/3.1.0/gems/sqlite3-1.4.2/test/test_statement.rb +0 -263
  1521. data/vendor/bundle/ruby/3.1.0/specifications/addressable-2.8.0.gemspec +0 -36
  1522. data/vendor/bundle/ruby/3.1.0/specifications/debug-1.5.0.gemspec +0 -39
  1523. data/vendor/bundle/ruby/3.1.0/specifications/faraday-2.3.0.gemspec +0 -0
  1524. data/vendor/bundle/ruby/3.1.0/specifications/faraday-net_http-2.0.3.gemspec +0 -32
  1525. data/vendor/bundle/ruby/3.1.0/specifications/nokogiri-1.13.6-x86_64-linux.gemspec +0 -69
  1526. data/vendor/bundle/ruby/3.1.0/specifications/octokit-4.23.0.gemspec +0 -35
  1527. data/vendor/bundle/ruby/3.1.0/specifications/public_suffix-4.0.7.gemspec +0 -24
  1528. data/vendor/bundle/ruby/3.1.0/specifications/rack-2.2.3.1.gemspec +0 -41
  1529. data/vendor/bundle/ruby/3.1.0/specifications/rack-test-1.1.0.gemspec +0 -45
  1530. data/vendor/bundle/ruby/3.1.0/specifications/sawyer-0.9.1.gemspec +0 -31
  1531. data/vendor/bundle/ruby/3.1.0/specifications/selenium-webdriver-4.2.0.gemspec +0 -62
  1532. data/vendor/bundle/ruby/3.1.0/specifications/sequel-5.56.0.gemspec +0 -48
  1533. data/vendor/bundle/ruby/3.1.0/specifications/sqlite3-1.4.2.gemspec +0 -51
@@ -1,4002 +0,0 @@
1
- # frozen-string-literal: true
2
-
3
- module Sequel
4
- class Model
5
- # Associations are used in order to specify relationships between model classes
6
- # that reflect relations between tables in the database using foreign keys.
7
- module Associations
8
- # Map of association type symbols to association reflection classes.
9
- ASSOCIATION_TYPES = {}
10
-
11
- # Set an empty association reflection hash in the model
12
- def self.apply(model)
13
- model.instance_exec do
14
- @association_reflections = {}
15
- @autoreloading_associations = {}
16
- @cache_associations = true
17
- @default_eager_limit_strategy = true
18
- @default_association_options = {}
19
- @default_association_type_options = {}
20
- @dataset_module_class = DatasetModule
21
- end
22
- end
23
-
24
- # The dataset module to use for classes using the associations plugin.
25
- class DatasetModule < Model::DatasetModule
26
- def_dataset_caching_method(self, :eager)
27
- end
28
-
29
- # AssociationReflection is a Hash subclass that keeps information on Sequel::Model associations. It
30
- # provides methods to reduce internal code duplication. It should not
31
- # be instantiated by the user.
32
- class AssociationReflection < Hash
33
- include Sequel::Inflections
34
-
35
- # Name symbol for the _add internal association method
36
- def _add_method
37
- self[:_add_method]
38
- end
39
-
40
- # Name symbol for the _remove_all internal association method
41
- def _remove_all_method
42
- self[:_remove_all_method]
43
- end
44
-
45
- # Name symbol for the _remove internal association method
46
- def _remove_method
47
- self[:_remove_method]
48
- end
49
-
50
- # Name symbol for the _setter association method
51
- def _setter_method
52
- self[:_setter_method]
53
- end
54
-
55
- # Name symbol for the add association method
56
- def add_method
57
- self[:add_method]
58
- end
59
-
60
- # Name symbol for association method, the same as the name of the association.
61
- def association_method
62
- self[:name]
63
- end
64
-
65
- # The class associated to the current model class via this association
66
- def associated_class
67
- cached_fetch(:class) do
68
- begin
69
- constantize(self[:class_name])
70
- rescue NameError => e
71
- raise NameError, "#{e.message} (this happened when attempting to find the associated class for #{inspect})", e.backtrace
72
- end
73
- end
74
- end
75
-
76
- # The dataset associated via this association, with the non-instance specific
77
- # changes already applied. This will be a joined dataset if the association
78
- # requires joining tables.
79
- def associated_dataset
80
- cached_fetch(:_dataset){apply_dataset_changes(_associated_dataset)}
81
- end
82
-
83
- # Apply all non-instance specific changes to the given dataset and return it.
84
- def apply_dataset_changes(ds)
85
- ds = ds.with_extend(AssociationDatasetMethods).clone(:association_reflection => self)
86
- if exts = self[:reverse_extend]
87
- ds = ds.with_extend(*exts)
88
- end
89
- ds = ds.select(*select) if select
90
- if c = self[:conditions]
91
- ds = (c.is_a?(Array) && !Sequel.condition_specifier?(c)) ? ds.where(*c) : ds.where(c)
92
- end
93
- ds = ds.order(*self[:order]) if self[:order]
94
- ds = ds.limit(*self[:limit]) if self[:limit]
95
- ds = ds.limit(1).skip_limit_check if limit_to_single_row?
96
- ds = ds.eager(self[:eager]) if self[:eager]
97
- ds = ds.distinct if self[:distinct]
98
- ds
99
- end
100
-
101
- # Apply all non-instance specific changes and the eager_block option to the given
102
- # dataset and return it.
103
- def apply_eager_dataset_changes(ds)
104
- ds = apply_dataset_changes(ds)
105
- if block = self[:eager_block]
106
- ds = block.call(ds)
107
- end
108
- ds
109
- end
110
-
111
- # Apply the eager graph limit strategy to the dataset to graph into the current dataset, or return
112
- # the dataset unmodified if no SQL limit strategy is needed.
113
- def apply_eager_graph_limit_strategy(strategy, ds)
114
- case strategy
115
- when :distinct_on
116
- apply_distinct_on_eager_limit_strategy(ds.order_prepend(*self[:order]))
117
- when :window_function
118
- apply_window_function_eager_limit_strategy(ds.order_prepend(*self[:order])).select(*ds.columns)
119
- else
120
- ds
121
- end
122
- end
123
-
124
- # Apply an eager limit strategy to the dataset, or return the dataset
125
- # unmodified if it doesn't need an eager limit strategy.
126
- def apply_eager_limit_strategy(ds, strategy=eager_limit_strategy, limit_and_offset=limit_and_offset())
127
- case strategy
128
- when :distinct_on
129
- apply_distinct_on_eager_limit_strategy(ds)
130
- when :window_function
131
- apply_window_function_eager_limit_strategy(ds, limit_and_offset)
132
- else
133
- ds
134
- end
135
- end
136
-
137
- # Use DISTINCT ON and ORDER BY clauses to limit the results to the first record with matching keys.
138
- def apply_distinct_on_eager_limit_strategy(ds)
139
- keys = predicate_key
140
- ds.distinct(*keys).order_prepend(*keys)
141
- end
142
-
143
- # Use a window function to limit the results of the eager loading dataset.
144
- def apply_window_function_eager_limit_strategy(ds, limit_and_offset=limit_and_offset())
145
- rn = ds.row_number_column
146
- limit, offset = limit_and_offset
147
- ds = ds.unordered.select_append{|o| o.row_number.function.over(:partition=>predicate_key, :order=>ds.opts[:order]).as(rn)}.from_self
148
- ds = ds.order(rn) if ds.db.database_type == :mysql
149
- ds = if !returns_array?
150
- ds.where(rn => offset ? offset+1 : 1)
151
- elsif offset
152
- offset += 1
153
- if limit
154
- ds.where(rn => (offset...(offset+limit)))
155
- else
156
- ds.where{SQL::Identifier.new(rn) >= offset}
157
- end
158
- else
159
- ds.where{SQL::Identifier.new(rn) <= limit}
160
- end
161
- end
162
-
163
- # If the ruby eager limit strategy is being used, slice the array using the slice
164
- # range to return the object(s) at the correct offset/limit.
165
- def apply_ruby_eager_limit_strategy(rows, limit_and_offset = limit_and_offset())
166
- name = self[:name]
167
- return unless range = slice_range(limit_and_offset)
168
- if returns_array?
169
- rows.each{|o| o.associations[name] = o.associations[name][range] || []}
170
- else
171
- offset = range.begin
172
- rows.each{|o| o.associations[name] = o.associations[name][offset]}
173
- end
174
- end
175
-
176
- # Whether the associations cache should use an array when storing the
177
- # associated records during eager loading.
178
- def assign_singular?
179
- !returns_array?
180
- end
181
-
182
- # Whether this association can have associated objects, given the current
183
- # object. Should be false if obj cannot have associated objects because
184
- # the necessary key columns are NULL.
185
- def can_have_associated_objects?(obj)
186
- true
187
- end
188
-
189
- # Whether you are able to clone from the given association type to the current
190
- # association type, true by default only if the types match.
191
- def cloneable?(ref)
192
- ref[:type] == self[:type]
193
- end
194
-
195
- # Name symbol for the dataset association method
196
- def dataset_method
197
- self[:dataset_method]
198
- end
199
-
200
- # Whether the dataset needs a primary key to function, true by default.
201
- def dataset_need_primary_key?
202
- true
203
- end
204
-
205
- # Return the symbol used for the row number column if the window function
206
- # eager limit strategy is being used, or nil otherwise.
207
- def delete_row_number_column(ds=associated_dataset)
208
- if eager_limit_strategy == :window_function
209
- ds.row_number_column
210
- end
211
- end
212
-
213
- # Return an dataset that will load the appropriate associated objects for
214
- # the given object using this association.
215
- def association_dataset_for(object)
216
- condition = if can_have_associated_objects?(object)
217
- predicate_keys.zip(predicate_key_values(object))
218
- else
219
- false
220
- end
221
-
222
- associated_dataset.where(condition)
223
- end
224
-
225
- ASSOCIATION_DATASET_PROC = proc{|r| r.association_dataset_for(self)}
226
- # Proc used to create the association dataset method.
227
- def association_dataset_proc
228
- ASSOCIATION_DATASET_PROC
229
- end
230
-
231
- # The eager_graph limit strategy to use for this dataset
232
- def eager_graph_limit_strategy(strategy)
233
- if self[:limit] || !returns_array?
234
- strategy = strategy[self[:name]] if strategy.is_a?(Hash)
235
- case strategy
236
- when true
237
- true_eager_graph_limit_strategy
238
- when Symbol
239
- strategy
240
- else
241
- if returns_array? || offset
242
- :ruby
243
- end
244
- end
245
- end
246
- end
247
-
248
- # The eager limit strategy to use for this dataset.
249
- def eager_limit_strategy
250
- cached_fetch(:_eager_limit_strategy) do
251
- if self[:limit] || !returns_array?
252
- case s = cached_fetch(:eager_limit_strategy){default_eager_limit_strategy}
253
- when true
254
- true_eager_limit_strategy
255
- else
256
- s
257
- end
258
- end
259
- end
260
- end
261
-
262
- # Eager load the associated objects using the hash of eager options,
263
- # yielding each row to the block.
264
- def eager_load_results(eo, &block)
265
- rows = eo[:rows]
266
- unless eo[:initialize_rows] == false
267
- Sequel.synchronize_with(eo[:mutex]){initialize_association_cache(rows)}
268
- end
269
- if eo[:id_map]
270
- ids = eo[:id_map].keys
271
- return ids if ids.empty?
272
- end
273
- strategy = eager_limit_strategy
274
- cascade = eo[:associations]
275
- eager_limit = nil
276
-
277
- if eo[:no_results]
278
- no_results = true
279
- elsif eo[:eager_block] || eo[:loader] == false
280
- ds = eager_loading_dataset(eo)
281
-
282
- strategy = ds.opts[:eager_limit_strategy] || strategy
283
-
284
- eager_limit =
285
- if el = ds.opts[:eager_limit]
286
- raise Error, "The :eager_limit dataset option is not supported for associations returning a single record" unless returns_array?
287
- strategy ||= true_eager_graph_limit_strategy
288
- if el.is_a?(Array)
289
- el
290
- else
291
- [el, nil]
292
- end
293
- else
294
- limit_and_offset
295
- end
296
-
297
- strategy = true_eager_graph_limit_strategy if strategy == :union
298
- # Correlated subqueries are not supported for regular eager loading
299
- strategy = :ruby if strategy == :correlated_subquery
300
- strategy = nil if strategy == :ruby && assign_singular?
301
- objects = apply_eager_limit_strategy(ds, strategy, eager_limit).all
302
- elsif strategy == :union
303
- objects = []
304
- ds = associated_dataset
305
- loader = union_eager_loader
306
- joiner = " UNION ALL "
307
- ids.each_slice(subqueries_per_union).each do |slice|
308
- objects.concat(ds.with_sql(slice.map{|k| loader.sql(*k)}.join(joiner)).to_a)
309
- end
310
- ds = ds.eager(cascade) if cascade
311
- ds.send(:post_load, objects)
312
- else
313
- loader = placeholder_eager_loader
314
- loader = loader.with_dataset{|dataset| dataset.eager(cascade)} if cascade
315
- objects = loader.all(ids)
316
- end
317
-
318
- Sequel.synchronize_with(eo[:mutex]){objects.each(&block)} unless no_results
319
-
320
- if strategy == :ruby
321
- apply_ruby_eager_limit_strategy(rows, eager_limit || limit_and_offset)
322
- end
323
- end
324
-
325
- # The key to use for the key hash when eager loading
326
- def eager_loader_key
327
- self[:eager_loader_key]
328
- end
329
-
330
- # By default associations do not need to select a key in an associated table
331
- # to eagerly load.
332
- def eager_loading_use_associated_key?
333
- false
334
- end
335
-
336
- # Whether to eagerly graph a lazy dataset, true by default. If this
337
- # is false, the association won't respect the :eager_graph option
338
- # when loading the association for a single record.
339
- def eager_graph_lazy_dataset?
340
- true
341
- end
342
-
343
- # Whether additional conditions should be added when using the filter
344
- # by associations support.
345
- def filter_by_associations_add_conditions?
346
- self[:conditions] || self[:eager_block] || self[:limit]
347
- end
348
-
349
- # The expression to use for the additional conditions to be added for
350
- # the filter by association support, when the association itself is
351
- # filtered. Works by using a subquery to test that the objects passed
352
- # also meet the association filter criteria.
353
- def filter_by_associations_conditions_expression(obj)
354
- ds = filter_by_associations_conditions_dataset.where(filter_by_associations_conditions_subquery_conditions(obj))
355
- {filter_by_associations_conditions_key=>ds}
356
- end
357
-
358
- # Finalize the association by first attempting to populate the thread-safe cache,
359
- # and then transfering the thread-safe cache value to the association itself,
360
- # so that a mutex is not needed to get the value.
361
- def finalize
362
- return unless cache = self[:cache]
363
-
364
- finalizer = proc do |meth, key|
365
- next if has_key?(key)
366
-
367
- # Allow calling private methods to make sure caching is done appropriately
368
- send(meth)
369
- self[key] = cache.delete(key) if cache.has_key?(key)
370
- end
371
-
372
- finalize_settings.each(&finalizer)
373
-
374
- unless self[:instance_specific]
375
- finalizer.call(:associated_eager_dataset, :associated_eager_dataset)
376
- finalizer.call(:filter_by_associations_conditions_dataset, :filter_by_associations_conditions_dataset)
377
- end
378
-
379
- nil
380
- end
381
-
382
- # Map of methods to cache keys used for finalizing associations.
383
- FINALIZE_SETTINGS = {
384
- :associated_class=>:class,
385
- :associated_dataset=>:_dataset,
386
- :eager_limit_strategy=>:_eager_limit_strategy,
387
- :placeholder_loader=>:placeholder_loader,
388
- :predicate_key=>:predicate_key,
389
- :predicate_keys=>:predicate_keys,
390
- :reciprocal=>:reciprocal,
391
- }.freeze
392
- def finalize_settings
393
- FINALIZE_SETTINGS
394
- end
395
-
396
- # Whether to handle silent modification failure when adding/removing
397
- # associated records, false by default.
398
- def handle_silent_modification_failure?
399
- false
400
- end
401
-
402
- # Initialize the associations cache for the current association for the given objects.
403
- def initialize_association_cache(objects)
404
- name = self[:name]
405
- if assign_singular?
406
- objects.each{|object| object.associations[name] = nil}
407
- else
408
- objects.each{|object| object.associations[name] = []}
409
- end
410
- end
411
-
412
- # Show which type of reflection this is, and a guess at what code was used to create the
413
- # association.
414
- def inspect
415
- o = self[:orig_opts].dup
416
- o.delete(:class)
417
- o.delete(:class_name)
418
- o.delete(:block) unless o[:block]
419
- o[:class] = self[:orig_class] if self[:orig_class]
420
-
421
- "#<#{self.class} #{self[:model]}.#{self[:type]} #{self[:name].inspect}#{", #{o.inspect[1...-1]}" unless o.empty?}>"
422
- end
423
-
424
- # The limit and offset for this association (returned as a two element array).
425
- def limit_and_offset
426
- if (v = self[:limit]).is_a?(Array)
427
- v
428
- else
429
- [v, nil]
430
- end
431
- end
432
-
433
- # Whether the associated object needs a primary key to be added/removed,
434
- # false by default.
435
- def need_associated_primary_key?
436
- false
437
- end
438
-
439
- # A placeholder literalizer that can be used to lazily load the association. If
440
- # one can't be used, returns nil.
441
- def placeholder_loader
442
- if use_placeholder_loader?
443
- cached_fetch(:placeholder_loader) do
444
- Sequel::Dataset::PlaceholderLiteralizer.loader(associated_dataset) do |pl, ds|
445
- ds = ds.where(Sequel.&(*predicate_keys.map{|k| SQL::BooleanExpression.new(:'=', k, pl.arg)}))
446
- if self[:block]
447
- ds = self[:block].call(ds)
448
- end
449
- ds
450
- end
451
- end
452
- end
453
- end
454
-
455
- # The keys to use for loading of the regular dataset, as an array.
456
- def predicate_keys
457
- cached_fetch(:predicate_keys){Array(predicate_key)}
458
- end
459
-
460
- # The values that predicate_keys should match for objects to be associated.
461
- def predicate_key_values(object)
462
- predicate_key_methods.map{|k| object.get_column_value(k)}
463
- end
464
-
465
- # Qualify +col+ with the given table name.
466
- def qualify(table, col)
467
- transform(col) do |k|
468
- case k
469
- when Symbol, SQL::Identifier
470
- SQL::QualifiedIdentifier.new(table, k)
471
- else
472
- Sequel::Qualifier.new(table).transform(k)
473
- end
474
- end
475
- end
476
-
477
- # Qualify col with the associated model's table name.
478
- def qualify_assoc(col)
479
- qualify(associated_class.table_name, col)
480
- end
481
-
482
- # Qualify col with the current model's table name.
483
- def qualify_cur(col)
484
- qualify(self[:model].table_name, col)
485
- end
486
-
487
- # Returns the reciprocal association variable, if one exists. The reciprocal
488
- # association is the association in the associated class that is the opposite
489
- # of the current association. For example, Album.many_to_one :artist and
490
- # Artist.one_to_many :albums are reciprocal associations. This information is
491
- # to populate reciprocal associations. For example, when you do this_artist.add_album(album)
492
- # it sets album.artist to this_artist.
493
- def reciprocal
494
- cached_fetch(:reciprocal) do
495
- possible_recips = []
496
-
497
- associated_class.all_association_reflections.each do |assoc_reflect|
498
- if reciprocal_association?(assoc_reflect)
499
- possible_recips << assoc_reflect
500
- end
501
- end
502
-
503
- if possible_recips.length == 1
504
- cached_set(:reciprocal_type, possible_recips.first[:type]) if ambiguous_reciprocal_type?
505
- possible_recips.first[:name]
506
- end
507
- end
508
- end
509
-
510
- # Whether the reciprocal of this association returns an array of objects instead of a single object,
511
- # true by default.
512
- def reciprocal_array?
513
- true
514
- end
515
-
516
- # Name symbol for the remove_all_ association method
517
- def remove_all_method
518
- self[:remove_all_method]
519
- end
520
-
521
- # Whether associated objects need to be removed from the association before
522
- # being destroyed in order to preserve referential integrity.
523
- def remove_before_destroy?
524
- true
525
- end
526
-
527
- # Name symbol for the remove_ association method
528
- def remove_method
529
- self[:remove_method]
530
- end
531
-
532
- # Whether to check that an object to be disassociated is already associated to this object, false by default.
533
- def remove_should_check_existing?
534
- false
535
- end
536
-
537
- # Whether this association returns an array of objects instead of a single object,
538
- # true by default.
539
- def returns_array?
540
- true
541
- end
542
-
543
- # The columns to select when loading the association.
544
- def select
545
- self[:select]
546
- end
547
-
548
- # Whether to set the reciprocal association to self when loading associated
549
- # records, false by default.
550
- def set_reciprocal_to_self?
551
- false
552
- end
553
-
554
- # Name symbol for the setter association method
555
- def setter_method
556
- self[:setter_method]
557
- end
558
-
559
- # The range used for slicing when using the :ruby eager limit strategy.
560
- def slice_range(limit_and_offset = limit_and_offset())
561
- limit, offset = limit_and_offset
562
- if limit || offset
563
- (offset||0)..(limit ? (offset||0)+limit-1 : -1)
564
- end
565
- end
566
-
567
- private
568
-
569
- # If the key exists in the reflection hash, return it.
570
- # If the key doesn't exist and association reflections are uncached, then yield to get the value.
571
- # If the key doesn't exist and association reflection are cached, check the cache and return
572
- # the value if present, or yield to get the value, cache the value, and return it.
573
- def cached_fetch(key)
574
- fetch(key) do
575
- return yield unless h = self[:cache]
576
- Sequel.synchronize{return h[key] if h.has_key?(key)}
577
- value = yield
578
- Sequel.synchronize{h[key] = value}
579
- end
580
- end
581
-
582
- # Cache the value at the given key if caching.
583
- def cached_set(key, value)
584
- return unless h = self[:cache]
585
- Sequel.synchronize{h[key] = value}
586
- end
587
-
588
- # The base dataset used for the association, before any order/conditions
589
- # options have been applied.
590
- def _associated_dataset
591
- associated_class.dataset
592
- end
593
-
594
- # Whether for the reciprocal type for the given association cannot be
595
- # known in advantage, false by default.
596
- def ambiguous_reciprocal_type?
597
- false
598
- end
599
-
600
- # Apply a limit strategy to the given dataset so that filter by
601
- # associations works with a limited dataset.
602
- def apply_filter_by_associations_limit_strategy(ds)
603
- case filter_by_associations_limit_strategy
604
- when :distinct_on
605
- apply_filter_by_associations_distinct_on_limit_strategy(ds)
606
- when :window_function
607
- apply_filter_by_associations_window_function_limit_strategy(ds)
608
- else
609
- ds
610
- end
611
- end
612
-
613
- # Apply a distinct on eager limit strategy using IN with a subquery
614
- # that uses DISTINCT ON to ensure only the first matching record for
615
- # each key is included.
616
- def apply_filter_by_associations_distinct_on_limit_strategy(ds)
617
- k = filter_by_associations_limit_key
618
- ds.where(k=>apply_distinct_on_eager_limit_strategy(associated_eager_dataset.select(*k)))
619
- end
620
-
621
- # Apply a distinct on eager limit strategy using IN with a subquery
622
- # that uses a filter on the row_number window function to ensure
623
- # that only rows inside the limit are returned.
624
- def apply_filter_by_associations_window_function_limit_strategy(ds)
625
- ds.where(filter_by_associations_limit_key=>apply_window_function_eager_limit_strategy(associated_eager_dataset.select(*filter_by_associations_limit_alias_key)).select(*filter_by_associations_limit_aliases))
626
- end
627
-
628
- # The associated_dataset with the eager_block callback already applied.
629
- def associated_eager_dataset
630
- cached_fetch(:associated_eager_dataset) do
631
- ds = associated_dataset.unlimited
632
- if block = self[:eager_block]
633
- ds = block.call(ds)
634
- end
635
- ds
636
- end
637
- end
638
-
639
- # The dataset to use for eager loading associated objects for multiple current objects,
640
- # given the hash passed to the eager loader.
641
- def eager_loading_dataset(eo=OPTS)
642
- ds = eo[:dataset] || associated_eager_dataset
643
- ds = eager_loading_set_predicate_condition(ds, eo)
644
- if associations = eo[:associations]
645
- ds = ds.eager(associations)
646
- end
647
- if block = eo[:eager_block]
648
- orig_ds = ds
649
- ds = block.call(ds)
650
- end
651
- if eager_loading_use_associated_key?
652
- ds = if ds.opts[:eager_graph] && !orig_ds.opts[:eager_graph]
653
- block.call(orig_ds.select_append(*associated_key_array))
654
- else
655
- ds.select_append(*associated_key_array)
656
- end
657
- end
658
- if self[:eager_graph]
659
- raise(Error, "cannot eagerly load a #{self[:type]} association that uses :eager_graph") if eager_loading_use_associated_key?
660
- ds = ds.eager_graph(self[:eager_graph])
661
- end
662
- ds
663
- end
664
-
665
- # The default eager limit strategy to use for this association
666
- def default_eager_limit_strategy
667
- self[:model].default_eager_limit_strategy || :ruby
668
- end
669
-
670
- # Set the predicate condition for the eager loading dataset based on the id map
671
- # in the eager loading options.
672
- def eager_loading_set_predicate_condition(ds, eo)
673
- if id_map = eo[:id_map]
674
- ds = ds.where(eager_loading_predicate_condition(id_map.keys))
675
- end
676
- ds
677
- end
678
-
679
- # The predicate condition to use for the eager_loader.
680
- def eager_loading_predicate_condition(keys)
681
- {predicate_key=>keys}
682
- end
683
-
684
- # Add conditions to the dataset to not include NULL values for
685
- # the associated keys, and select those keys.
686
- def filter_by_associations_add_conditions_dataset_filter(ds)
687
- k = filter_by_associations_conditions_associated_keys
688
- ds.select(*k).where(Sequel.negate(k.zip([])))
689
- end
690
-
691
- # The conditions to add to the filter by associations conditions
692
- # subquery to restrict it to to the object(s) that was used as the
693
- # filter value.
694
- def filter_by_associations_conditions_subquery_conditions(obj)
695
- key = qualify(associated_class.table_name, associated_class.primary_key)
696
- case obj
697
- when Array
698
- {key=>obj.map(&:pk)}
699
- when Sequel::Dataset
700
- {key=>obj.select(*Array(qualify(associated_class.table_name, associated_class.primary_key)))}
701
- else
702
- Array(key).zip(Array(obj.pk))
703
- end
704
- end
705
-
706
- # The base dataset to use for the filter by associations conditions
707
- # subquery, regardless of the objects that are passed in as filter
708
- # values.
709
- def filter_by_associations_conditions_dataset
710
- cached_fetch(:filter_by_associations_conditions_dataset) do
711
- ds = associated_eager_dataset.unordered
712
- ds = filter_by_associations_add_conditions_dataset_filter(ds)
713
- ds = apply_filter_by_associations_limit_strategy(ds)
714
- ds
715
- end
716
- end
717
-
718
- # The strategy to use to filter by a limited association
719
- def filter_by_associations_limit_strategy
720
- v = fetch(:filter_limit_strategy, self[:eager_limit_strategy])
721
- if v || self[:limit] || !returns_array?
722
- case v ||= self[:model].default_eager_limit_strategy
723
- when true, :union, :ruby
724
- # Can't use a union or ruby-based strategy for filtering by associations, switch to default eager graph limit
725
- # strategy.
726
- true_eager_graph_limit_strategy
727
- when Symbol
728
- v
729
- end
730
- end
731
- end
732
-
733
- # Whether to limit the associated dataset to a single row.
734
- def limit_to_single_row?
735
- !returns_array?
736
- end
737
-
738
- # Any offset to use for this association (or nil if there is no offset).
739
- def offset
740
- limit_and_offset.last
741
- end
742
-
743
- # A placeholder literalizer used to speed up eager loading.
744
- def placeholder_eager_loader
745
- cached_fetch(:placeholder_eager_loader) do
746
- Sequel::Dataset::PlaceholderLiteralizer.loader(associated_dataset) do |pl, ds|
747
- apply_eager_limit_strategy(eager_loading_dataset.where(predicate_key=>pl.arg), eager_limit_strategy)
748
- end
749
- end
750
- end
751
-
752
- # The reciprocal type as an array, should be overridden in reflection subclasses that
753
- # have ambiguous reciprocal types.
754
- def possible_reciprocal_types
755
- [reciprocal_type]
756
- end
757
-
758
- # Whether the given association reflection is possible reciprocal
759
- # association for the current association reflection.
760
- def reciprocal_association?(assoc_reflect)
761
- possible_reciprocal_types.include?(assoc_reflect[:type]) &&
762
- (begin; assoc_reflect.associated_class; rescue NameError; end) == self[:model] &&
763
- assoc_reflect[:conditions].nil? &&
764
- assoc_reflect[:block].nil?
765
- end
766
-
767
- # The number of subqueries to use in each union query, used to eagerly load
768
- # limited associations. Defaults to 40, the optimal number depends on the
769
- # latency between the database and the application.
770
- def subqueries_per_union
771
- self[:subqueries_per_union] || 40
772
- end
773
-
774
- # If +s+ is an array, map +s+ over the block. Otherwise, just call the
775
- # block with +s+.
776
- def transform(s, &block)
777
- s.is_a?(Array) ? s.map(&block) : (yield s)
778
- end
779
-
780
- # What eager limit strategy should be used when true is given as the value,
781
- # defaults to UNION as that is the fastest strategy if the appropriate keys are indexed.
782
- def true_eager_limit_strategy
783
- if self[:eager_graph] || (offset && !associated_dataset.supports_offsets_in_correlated_subqueries?)
784
- # An SQL-based approach won't work if you are also eager graphing,
785
- # so use a ruby based approach in that case.
786
- :ruby
787
- else
788
- :union
789
- end
790
- end
791
-
792
- # The eager_graph limit strategy used when true is given as the value, choosing the
793
- # best strategy based on what the database supports.
794
- def true_eager_graph_limit_strategy
795
- if associated_class.dataset.supports_window_functions?
796
- :window_function
797
- else
798
- :ruby
799
- end
800
- end
801
-
802
- # A placeholder literalizer used to speed up the creation of union queries when eager
803
- # loading a limited association.
804
- def union_eager_loader
805
- cached_fetch(:union_eager_loader) do
806
- Sequel::Dataset::PlaceholderLiteralizer.loader(associated_dataset) do |pl, ds|
807
- ds = self[:eager_block].call(ds) if self[:eager_block]
808
- keys = predicate_keys
809
- ds = ds.where(keys.map{pl.arg}.zip(keys))
810
- if eager_loading_use_associated_key?
811
- ds = ds.select_append(*associated_key_array)
812
- end
813
- ds.from_self
814
- end
815
- end
816
- end
817
-
818
- # Whether the placeholder loader can be used to load the association.
819
- def use_placeholder_loader?
820
- self[:use_placeholder_loader]
821
- end
822
- end
823
-
824
- class ManyToOneAssociationReflection < AssociationReflection
825
- ASSOCIATION_TYPES[:many_to_one] = self
826
-
827
- # many_to_one associations can only have associated objects if none of
828
- # the :keys options have a nil value.
829
- def can_have_associated_objects?(obj)
830
- !self[:keys].any?{|k| obj.get_column_value(k).nil?}
831
- end
832
-
833
- # Whether the dataset needs a primary key to function, false for many_to_one associations.
834
- def dataset_need_primary_key?
835
- false
836
- end
837
-
838
- # Default foreign key name symbol for foreign key in current model's table that points to
839
- # the given association's table's primary key.
840
- def default_key
841
- :"#{self[:name]}_id"
842
- end
843
-
844
- # Whether to eagerly graph a lazy dataset, true for many_to_one associations
845
- # only if the key is nil.
846
- def eager_graph_lazy_dataset?
847
- self[:key].nil?
848
- end
849
-
850
- # many_to_one associations don't need an eager_graph limit strategy
851
- def eager_graph_limit_strategy(_)
852
- nil
853
- end
854
-
855
- # many_to_one associations don't need an eager limit strategy
856
- def eager_limit_strategy
857
- nil
858
- end
859
-
860
- # many_to_one associations don't need a filter by associations limit strategy
861
- def filter_by_associations_limit_strategy
862
- nil
863
- end
864
-
865
- FINALIZE_SETTINGS = superclass::FINALIZE_SETTINGS.merge(
866
- :primary_key=>:primary_key,
867
- :primary_keys=>:primary_keys,
868
- :primary_key_method=>:primary_key_method,
869
- :primary_key_methods=>:primary_key_methods,
870
- :qualified_primary_key=>:qualified_primary_key,
871
- :reciprocal_type=>:reciprocal_type
872
- ).freeze
873
- def finalize_settings
874
- FINALIZE_SETTINGS
875
- end
876
-
877
- # The expression to use on the left hand side of the IN lookup when eager loading
878
- def predicate_key
879
- cached_fetch(:predicate_key){qualified_primary_key}
880
- end
881
-
882
- # The column(s) in the associated table that the key in the current table references (either a symbol or an array).
883
- def primary_key
884
- cached_fetch(:primary_key){associated_class.primary_key || raise(Error, "no primary key specified for #{associated_class.inspect}")}
885
- end
886
-
887
- # The columns in the associated table that the key in the current table references (always an array).
888
- def primary_keys
889
- cached_fetch(:primary_keys){Array(primary_key)}
890
- end
891
- alias associated_object_keys primary_keys
892
-
893
- # The method symbol or array of method symbols to call on the associated object
894
- # to get the value to use for the foreign keys.
895
- def primary_key_method
896
- cached_fetch(:primary_key_method){primary_key}
897
- end
898
-
899
- # The array of method symbols to call on the associated object
900
- # to get the value to use for the foreign keys.
901
- def primary_key_methods
902
- cached_fetch(:primary_key_methods){Array(primary_key_method)}
903
- end
904
-
905
- # #primary_key qualified by the associated table
906
- def qualified_primary_key
907
- cached_fetch(:qualified_primary_key){self[:qualify] == false ? primary_key : qualify_assoc(primary_key)}
908
- end
909
-
910
- # True only if the reciprocal is a one_to_many association.
911
- def reciprocal_array?
912
- !set_reciprocal_to_self?
913
- end
914
-
915
- # Whether this association returns an array of objects instead of a single object,
916
- # false for a many_to_one association.
917
- def returns_array?
918
- false
919
- end
920
-
921
- # True only if the reciprocal is a one_to_one association.
922
- def set_reciprocal_to_self?
923
- reciprocal
924
- reciprocal_type == :one_to_one
925
- end
926
-
927
- private
928
-
929
- # Reciprocals of many_to_one associations could be either one_to_many or one_to_one,
930
- # and which is not known in advance.
931
- def ambiguous_reciprocal_type?
932
- true
933
- end
934
-
935
- def filter_by_associations_conditions_associated_keys
936
- qualify(associated_class.table_name, primary_keys)
937
- end
938
-
939
- def filter_by_associations_conditions_key
940
- qualify(self[:model].table_name, self[:key_column])
941
- end
942
-
943
- # many_to_one associations do not need to be limited to a single row if they
944
- # explicitly do not have a key.
945
- def limit_to_single_row?
946
- super && self[:key]
947
- end
948
-
949
- def predicate_key_methods
950
- self[:keys]
951
- end
952
-
953
- # The reciprocal type of a many_to_one association is either
954
- # a one_to_many or a one_to_one association.
955
- def possible_reciprocal_types
956
- [:one_to_many, :one_to_one]
957
- end
958
-
959
- # Whether the given association reflection is possible reciprocal
960
- def reciprocal_association?(assoc_reflect)
961
- super && self[:keys] == assoc_reflect[:keys] && primary_key == assoc_reflect.primary_key
962
- end
963
-
964
- # The reciprocal type of a many_to_one association is either
965
- # a one_to_many or a one_to_one association, look in the associated class
966
- # to try to figure out which.
967
- def reciprocal_type
968
- cached_fetch(:reciprocal_type) do
969
- possible_recips = []
970
-
971
- associated_class.all_association_reflections.each do |assoc_reflect|
972
- if reciprocal_association?(assoc_reflect)
973
- possible_recips << assoc_reflect
974
- end
975
- end
976
-
977
- if possible_recips.length == 1
978
- possible_recips.first[:type]
979
- else
980
- possible_reciprocal_types
981
- end
982
- end
983
- end
984
- end
985
-
986
- class OneToManyAssociationReflection < AssociationReflection
987
- ASSOCIATION_TYPES[:one_to_many] = self
988
-
989
- # Support a correlated subquery limit strategy when using eager_graph.
990
- def apply_eager_graph_limit_strategy(strategy, ds)
991
- case strategy
992
- when :correlated_subquery
993
- apply_correlated_subquery_limit_strategy(ds)
994
- else
995
- super
996
- end
997
- end
998
-
999
- # The keys in the associated model's table related to this association
1000
- def associated_object_keys
1001
- self[:keys]
1002
- end
1003
-
1004
- # one_to_many associations can only have associated objects if none of
1005
- # the :keys options have a nil value.
1006
- def can_have_associated_objects?(obj)
1007
- !self[:primary_keys].any?{|k| obj.get_column_value(k).nil?}
1008
- end
1009
-
1010
- # one_to_many and one_to_one associations can be clones
1011
- def cloneable?(ref)
1012
- ref[:type] == :one_to_many || ref[:type] == :one_to_one
1013
- end
1014
-
1015
- # Default foreign key name symbol for key in associated table that points to
1016
- # current table's primary key.
1017
- def default_key
1018
- :"#{underscore(demodulize(self[:model].name))}_id"
1019
- end
1020
-
1021
- FINALIZE_SETTINGS = superclass::FINALIZE_SETTINGS.merge(
1022
- :qualified_primary_key=>:qualified_primary_key
1023
- ).freeze
1024
- def finalize_settings
1025
- FINALIZE_SETTINGS
1026
- end
1027
-
1028
- # Handle silent failure of add/remove methods if raise_on_save_failure is false.
1029
- def handle_silent_modification_failure?
1030
- self[:raise_on_save_failure] == false
1031
- end
1032
-
1033
- # The hash key to use for the eager loading predicate (left side of IN (1, 2, 3))
1034
- def predicate_key
1035
- cached_fetch(:predicate_key){qualify_assoc(self[:key])}
1036
- end
1037
- alias qualified_key predicate_key
1038
-
1039
- # The column in the current table that the key in the associated table references.
1040
- def primary_key
1041
- self[:primary_key]
1042
- end
1043
-
1044
- # #primary_key qualified by the current table
1045
- def qualified_primary_key
1046
- cached_fetch(:qualified_primary_key){qualify_cur(primary_key)}
1047
- end
1048
-
1049
- # Whether the reciprocal of this association returns an array of objects instead of a single object,
1050
- # false for a one_to_many association.
1051
- def reciprocal_array?
1052
- false
1053
- end
1054
-
1055
- # Destroying one_to_many associated objects automatically deletes the foreign key.
1056
- def remove_before_destroy?
1057
- false
1058
- end
1059
-
1060
- # The one_to_many association needs to check that an object to be removed already is associated.
1061
- def remove_should_check_existing?
1062
- true
1063
- end
1064
-
1065
- # One to many associations set the reciprocal to self when loading associated records.
1066
- def set_reciprocal_to_self?
1067
- true
1068
- end
1069
-
1070
- private
1071
-
1072
- # Use a correlated subquery to limit the dataset. Note that this will not
1073
- # work correctly if the associated dataset uses qualified identifers in the WHERE clause,
1074
- # as they would reference the containing query instead of the subquery.
1075
- def apply_correlated_subquery_limit_strategy(ds)
1076
- table = ds.first_source_table
1077
- table_alias = ds.first_source_alias
1078
- primary_key = associated_class.primary_key
1079
- key = self[:key]
1080
- cs_alias = :t1
1081
- cs = associated_dataset.
1082
- from(Sequel.as(table, :t1)).
1083
- select(*qualify(cs_alias, primary_key)).
1084
- where(Array(qualify(cs_alias, key)).zip(Array(qualify(table_alias, key)))).
1085
- limit(*limit_and_offset)
1086
- ds.where(qualify(table_alias, primary_key)=>cs)
1087
- end
1088
-
1089
- # Support correlated subquery strategy when filtering by limited associations.
1090
- def apply_filter_by_associations_limit_strategy(ds)
1091
- case filter_by_associations_limit_strategy
1092
- when :correlated_subquery
1093
- apply_correlated_subquery_limit_strategy(ds)
1094
- else
1095
- super
1096
- end
1097
- end
1098
-
1099
- def filter_by_associations_conditions_associated_keys
1100
- qualify(associated_class.table_name, self[:keys])
1101
- end
1102
-
1103
- def filter_by_associations_conditions_key
1104
- qualify(self[:model].table_name, self[:primary_key_column])
1105
- end
1106
-
1107
- def filter_by_associations_limit_alias_key
1108
- Array(filter_by_associations_limit_key)
1109
- end
1110
-
1111
- def filter_by_associations_limit_aliases
1112
- filter_by_associations_limit_alias_key.map(&:column)
1113
- end
1114
-
1115
- def filter_by_associations_limit_key
1116
- qualify(associated_class.table_name, associated_class.primary_key)
1117
- end
1118
-
1119
- def predicate_key_methods
1120
- self[:primary_keys]
1121
- end
1122
-
1123
- def reciprocal_association?(assoc_reflect)
1124
- super && self[:keys] == assoc_reflect[:keys] && primary_key == assoc_reflect.primary_key
1125
- end
1126
-
1127
- # The reciprocal type of a one_to_many association is a many_to_one association.
1128
- def reciprocal_type
1129
- :many_to_one
1130
- end
1131
-
1132
- # Support automatic use of correlated subqueries if :ruby option is best available option,
1133
- # the database supports them, and either the associated class has a non-composite primary key
1134
- # or the database supports multiple columns in IN.
1135
- def true_eager_graph_limit_strategy
1136
- r = super
1137
- ds = associated_dataset
1138
- if r == :ruby && ds.supports_limits_in_correlated_subqueries? && (Array(associated_class.primary_key).length == 1 || ds.supports_multiple_column_in?) && (!offset || ds.supports_offsets_in_correlated_subqueries?)
1139
- :correlated_subquery
1140
- else
1141
- r
1142
- end
1143
- end
1144
- end
1145
-
1146
- # Methods that turn an association that returns multiple objects into an association that
1147
- # returns a single object.
1148
- module SingularAssociationReflection
1149
- # Singular associations do not assign singular if they are using the ruby eager limit strategy
1150
- # and have a slice range, since they need to store the array of associated objects in order to
1151
- # pick the correct one with an offset.
1152
- def assign_singular?
1153
- super && (eager_limit_strategy != :ruby || !slice_range)
1154
- end
1155
-
1156
- # Add conditions when filtering by singular associations with orders, since the
1157
- # underlying relationship is probably not one-to-one.
1158
- def filter_by_associations_add_conditions?
1159
- super || self[:order] || self[:eager_limit_strategy] || self[:filter_limit_strategy]
1160
- end
1161
-
1162
- # Make sure singular associations always have 1 as the limit
1163
- def limit_and_offset
1164
- r = super
1165
- if r.first == 1
1166
- r
1167
- else
1168
- [1, r[1]]
1169
- end
1170
- end
1171
-
1172
- # Singular associations always return a single object, not an array.
1173
- def returns_array?
1174
- false
1175
- end
1176
-
1177
- private
1178
-
1179
- # Only use a eager limit strategy by default if there is an offset or an order.
1180
- def default_eager_limit_strategy
1181
- super if self[:order] || offset
1182
- end
1183
-
1184
- # Use a strategy for filtering by associations if there is an order or an offset,
1185
- # or a specific limiting strategy has been specified.
1186
- def filter_by_associations_limit_strategy
1187
- super if self[:order] || offset || self[:eager_limit_strategy] || self[:filter_limit_strategy]
1188
- end
1189
-
1190
- # Use the DISTINCT ON eager limit strategy for true if the database supports it.
1191
- def true_eager_graph_limit_strategy
1192
- if associated_class.dataset.supports_ordered_distinct_on? && !offset
1193
- :distinct_on
1194
- else
1195
- super
1196
- end
1197
- end
1198
- end
1199
-
1200
- class OneToOneAssociationReflection < OneToManyAssociationReflection
1201
- ASSOCIATION_TYPES[:one_to_one] = self
1202
- include SingularAssociationReflection
1203
- end
1204
-
1205
- class ManyToManyAssociationReflection < AssociationReflection
1206
- ASSOCIATION_TYPES[:many_to_many] = self
1207
-
1208
- # The alias to use for the associated key when eagerly loading
1209
- def associated_key_alias
1210
- self[:left_key_alias]
1211
- end
1212
-
1213
- # Array of associated keys used when eagerly loading.
1214
- def associated_key_array
1215
- cached_fetch(:associated_key_array) do
1216
- if self[:uses_left_composite_keys]
1217
- associated_key_alias.zip(predicate_keys).map{|a, k| SQL::AliasedExpression.new(k, a)}
1218
- else
1219
- [SQL::AliasedExpression.new(predicate_key, associated_key_alias)]
1220
- end
1221
- end
1222
- end
1223
-
1224
- # The column to use for the associated key when eagerly loading
1225
- def associated_key_column
1226
- self[:left_key]
1227
- end
1228
-
1229
- # Alias of right_primary_keys
1230
- def associated_object_keys
1231
- right_primary_keys
1232
- end
1233
-
1234
- # many_to_many associations can only have associated objects if none of
1235
- # the :left_primary_keys options have a nil value.
1236
- def can_have_associated_objects?(obj)
1237
- !self[:left_primary_keys].any?{|k| obj.get_column_value(k).nil?}
1238
- end
1239
-
1240
- # one_through_one and many_to_many associations can be clones
1241
- def cloneable?(ref)
1242
- ref[:type] == :many_to_many || ref[:type] == :one_through_one
1243
- end
1244
-
1245
- # The default associated key alias(es) to use when eager loading
1246
- # associations via eager.
1247
- def default_associated_key_alias
1248
- self[:uses_left_composite_keys] ? (0...self[:left_keys].length).map{|i| :"x_foreign_key_#{i}_x"} : :x_foreign_key_x
1249
- end
1250
-
1251
- # The default eager loader used if the user doesn't override it. Extracted
1252
- # to a method so the code can be shared with the many_through_many plugin.
1253
- def default_eager_loader(eo)
1254
- h = eo[:id_map]
1255
- assign_singular = assign_singular?
1256
- delete_rn = delete_row_number_column
1257
- uses_lcks = self[:uses_left_composite_keys]
1258
- left_key_alias = self[:left_key_alias]
1259
- name = self[:name]
1260
-
1261
- self[:model].eager_load_results(self, eo) do |assoc_record|
1262
- assoc_record.values.delete(delete_rn) if delete_rn
1263
- hash_key = if uses_lcks
1264
- left_key_alias.map{|k| assoc_record.values.delete(k)}
1265
- else
1266
- assoc_record.values.delete(left_key_alias)
1267
- end
1268
-
1269
- objects = h[hash_key]
1270
-
1271
- if assign_singular
1272
- objects.each do |object|
1273
- object.associations[name] ||= assoc_record
1274
- end
1275
- else
1276
- objects.each do |object|
1277
- object.associations[name].push(assoc_record)
1278
- end
1279
- end
1280
- end
1281
- end
1282
-
1283
- # Default name symbol for the join table.
1284
- def default_join_table
1285
- [self[:class_name], self[:model].name].map{|i| underscore(pluralize(demodulize(i)))}.sort.join('_').to_sym
1286
- end
1287
-
1288
- # Default foreign key name symbol for key in join table that points to
1289
- # current table's primary key (or :left_primary_key column).
1290
- def default_left_key
1291
- :"#{underscore(demodulize(self[:model].name))}_id"
1292
- end
1293
-
1294
- # Default foreign key name symbol for foreign key in join table that points to
1295
- # the association's table's primary key (or :right_primary_key column).
1296
- def default_right_key
1297
- :"#{singularize(self[:name])}_id"
1298
- end
1299
-
1300
- FINALIZE_SETTINGS = superclass::FINALIZE_SETTINGS.merge(
1301
- :associated_key_array=>:associated_key_array,
1302
- :qualified_right_key=>:qualified_right_key,
1303
- :join_table_source=>:join_table_source,
1304
- :join_table_alias=>:join_table_alias,
1305
- :qualified_right_primary_key=>:qualified_right_primary_key,
1306
- :right_primary_key=>:right_primary_key,
1307
- :right_primary_keys=>:right_primary_keys,
1308
- :right_primary_key_method=>:right_primary_key_method,
1309
- :right_primary_key_methods=>:right_primary_key_methods,
1310
- :select=>:select
1311
- ).freeze
1312
- def finalize_settings
1313
- FINALIZE_SETTINGS
1314
- end
1315
-
1316
- # The hash key to use for the eager loading predicate (left side of IN (1, 2, 3)).
1317
- # The left key qualified by the join table.
1318
- def predicate_key
1319
- cached_fetch(:predicate_key){qualify(join_table_alias, self[:left_key])}
1320
- end
1321
- alias qualified_left_key predicate_key
1322
-
1323
- # The right key qualified by the join table.
1324
- def qualified_right_key
1325
- cached_fetch(:qualified_right_key){qualify(join_table_alias, self[:right_key])}
1326
- end
1327
-
1328
- # many_to_many associations need to select a key in an associated table to eagerly load
1329
- def eager_loading_use_associated_key?
1330
- !separate_query_per_table?
1331
- end
1332
-
1333
- # The source of the join table. This is the join table itself, unless it
1334
- # is aliased, in which case it is the unaliased part.
1335
- def join_table_source
1336
- cached_fetch(:join_table_source){split_join_table_alias[0]}
1337
- end
1338
-
1339
- # The join table itself, unless it is aliased, in which case this
1340
- # is the alias.
1341
- def join_table_alias
1342
- cached_fetch(:join_table_alias) do
1343
- s, a = split_join_table_alias
1344
- a || s
1345
- end
1346
- end
1347
- alias associated_key_table join_table_alias
1348
-
1349
- # Whether the associated object needs a primary key to be added/removed,
1350
- # true for many_to_many associations.
1351
- def need_associated_primary_key?
1352
- true
1353
- end
1354
-
1355
- # #right_primary_key qualified by the associated table
1356
- def qualified_right_primary_key
1357
- cached_fetch(:qualified_right_primary_key){qualify_assoc(right_primary_key)}
1358
- end
1359
-
1360
- # The primary key column(s) to use in the associated table (can be symbol or array).
1361
- def right_primary_key
1362
- cached_fetch(:right_primary_key){associated_class.primary_key || raise(Error, "no primary key specified for #{associated_class.inspect}")}
1363
- end
1364
-
1365
- # The primary key columns to use in the associated table (always array).
1366
- def right_primary_keys
1367
- cached_fetch(:right_primary_keys){Array(right_primary_key)}
1368
- end
1369
-
1370
- # The method symbol or array of method symbols to call on the associated objects
1371
- # to get the foreign key values for the join table.
1372
- def right_primary_key_method
1373
- cached_fetch(:right_primary_key_method){right_primary_key}
1374
- end
1375
-
1376
- # The array of method symbols to call on the associated objects
1377
- # to get the foreign key values for the join table.
1378
- def right_primary_key_methods
1379
- cached_fetch(:right_primary_key_methods){Array(right_primary_key_method)}
1380
- end
1381
-
1382
- # The columns to select when loading the association, associated_class.table_name.* by default.
1383
- def select
1384
- cached_fetch(:select){default_select}
1385
- end
1386
-
1387
- # Whether a separate query should be used for the join table.
1388
- def separate_query_per_table?
1389
- self[:join_table_db]
1390
- end
1391
-
1392
- private
1393
-
1394
- # Join to the the join table, unless using a separate query per table.
1395
- def _associated_dataset
1396
- if separate_query_per_table?
1397
- super
1398
- else
1399
- super.inner_join(self[:join_table], self[:right_keys].zip(right_primary_keys), :qualify=>:deep)
1400
- end
1401
- end
1402
-
1403
- # Use the right_keys from the eager loading options if
1404
- # using a separate query per table.
1405
- def eager_loading_set_predicate_condition(ds, eo)
1406
- if separate_query_per_table?
1407
- ds.where(right_primary_key=>eo[:right_keys])
1408
- else
1409
- super
1410
- end
1411
- end
1412
-
1413
- # The default selection for associations that require joins. These do not use the default
1414
- # model selection unless all entries in the select are explicitly qualified identifiers, as
1415
- # other it can include unqualified columns which would be made ambiguous by joining.
1416
- def default_select
1417
- if (sel = associated_class.dataset.opts[:select]) && sel.all?{|c| selection_is_qualified?(c)}
1418
- sel
1419
- else
1420
- Sequel::SQL::ColumnAll.new(associated_class.table_name)
1421
- end
1422
- end
1423
-
1424
- def filter_by_associations_conditions_associated_keys
1425
- qualify(join_table_alias, self[:left_keys])
1426
- end
1427
-
1428
- def filter_by_associations_conditions_key
1429
- qualify(self[:model].table_name, self[:left_primary_key_column])
1430
- end
1431
-
1432
- def filter_by_associations_limit_alias_key
1433
- aliaz = 'a'
1434
- filter_by_associations_limit_key.map{|c| c.as(Sequel.identifier(aliaz = aliaz.next))}
1435
- end
1436
-
1437
- def filter_by_associations_limit_aliases
1438
- filter_by_associations_limit_alias_key.map(&:alias)
1439
- end
1440
-
1441
- def filter_by_associations_limit_key
1442
- qualify(join_table_alias, self[:left_keys]) + Array(qualify(associated_class.table_name, associated_class.primary_key))
1443
- end
1444
-
1445
- def predicate_key_methods
1446
- self[:left_primary_keys]
1447
- end
1448
-
1449
- def reciprocal_association?(assoc_reflect)
1450
- super && assoc_reflect[:left_keys] == self[:right_keys] &&
1451
- assoc_reflect[:right_keys] == self[:left_keys] &&
1452
- assoc_reflect[:join_table] == self[:join_table] &&
1453
- right_primary_keys == assoc_reflect[:left_primary_key_columns] &&
1454
- self[:left_primary_key_columns] == assoc_reflect.right_primary_keys
1455
- end
1456
-
1457
- def reciprocal_type
1458
- :many_to_many
1459
- end
1460
-
1461
- # Whether the given expression represents a qualified identifier. Used to determine if it is
1462
- # OK to use directly when joining.
1463
- def selection_is_qualified?(c)
1464
- case c
1465
- when Symbol
1466
- Sequel.split_symbol(c)[0]
1467
- when Sequel::SQL::QualifiedIdentifier
1468
- true
1469
- when Sequel::SQL::AliasedExpression
1470
- selection_is_qualified?(c.expression)
1471
- else
1472
- false
1473
- end
1474
- end
1475
-
1476
- # Split the join table into source and alias parts.
1477
- def split_join_table_alias
1478
- associated_class.dataset.split_alias(self[:join_table])
1479
- end
1480
- end
1481
-
1482
- class OneThroughOneAssociationReflection < ManyToManyAssociationReflection
1483
- ASSOCIATION_TYPES[:one_through_one] = self
1484
- include SingularAssociationReflection
1485
-
1486
- # one_through_one associations should not singularize the association name when
1487
- # creating the foreign key.
1488
- def default_right_key
1489
- :"#{self[:name]}_id"
1490
- end
1491
-
1492
- # one_through_one associations have no reciprocals
1493
- def reciprocal
1494
- nil
1495
- end
1496
- end
1497
-
1498
- # This module contains methods added to all association datasets
1499
- module AssociationDatasetMethods
1500
- # The model object that created the association dataset
1501
- def model_object
1502
- @opts[:model_object]
1503
- end
1504
-
1505
- # The association reflection related to the association dataset
1506
- def association_reflection
1507
- @opts[:association_reflection]
1508
- end
1509
-
1510
- private
1511
-
1512
- def non_sql_option?(key)
1513
- super || key == :model_object || key == :association_reflection
1514
- end
1515
- end
1516
-
1517
- # Each kind of association adds a number of instance methods to the model class which
1518
- # are specialized according to the association type and optional parameters
1519
- # given in the definition. Example:
1520
- #
1521
- # class Project < Sequel::Model
1522
- # many_to_one :portfolio
1523
- # # or: one_to_one :portfolio
1524
- # one_to_many :milestones
1525
- # # or: many_to_many :milestones
1526
- # end
1527
- #
1528
- # The project class now has the following instance methods:
1529
- # portfolio :: Returns the associated portfolio.
1530
- # portfolio=(obj) :: Sets the associated portfolio to the object,
1531
- # but the change is not persisted until you save the record (for many_to_one associations).
1532
- # portfolio_dataset :: Returns a dataset that would return the associated
1533
- # portfolio, only useful in fairly specific circumstances.
1534
- # milestones :: Returns an array of associated milestones
1535
- # add_milestone(obj) :: Associates the passed milestone with this object.
1536
- # remove_milestone(obj) :: Removes the association with the passed milestone.
1537
- # remove_all_milestones :: Removes associations with all associated milestones.
1538
- # milestones_dataset :: Returns a dataset that would return the associated
1539
- # milestones, allowing for further filtering/limiting/etc.
1540
- #
1541
- # If you want to override the behavior of the add_/remove_/remove_all_/ methods
1542
- # or the association setter method, use the :adder, :remover, :clearer, and/or :setter
1543
- # options. These options override the default behavior.
1544
- #
1545
- # By default the classes for the associations are inferred from the association
1546
- # name, so for example the Project#portfolio will return an instance of
1547
- # Portfolio, and Project#milestones will return an array of Milestone
1548
- # instances. You can use the :class option to change which class is used.
1549
- #
1550
- # Association definitions are also reflected by the class, e.g.:
1551
- #
1552
- # Project.associations
1553
- # => [:portfolio, :milestones]
1554
- # Project.association_reflection(:portfolio)
1555
- # => #<Sequel::Model::Associations::ManyToOneAssociationReflection Project.many_to_one :portfolio>
1556
- #
1557
- # Associations should not have the same names as any of the columns in the
1558
- # model's current table they reference. If you are dealing with an existing schema that
1559
- # has a column named status, you can't name the association status, you'd
1560
- # have to name it foo_status or something else. If you give an association the same name
1561
- # as a column, you will probably end up with an association that doesn't work, or a SystemStackError.
1562
- #
1563
- # For a more in depth general overview, as well as a reference guide,
1564
- # see the {Association Basics guide}[rdoc-ref:doc/association_basics.rdoc].
1565
- # For examples of advanced usage, see the {Advanced Associations guide}[rdoc-ref:doc/advanced_associations.rdoc].
1566
- module ClassMethods
1567
- # All association reflections defined for this model (default: {}).
1568
- attr_reader :association_reflections
1569
-
1570
- # Hash with column symbol keys and arrays of many_to_one
1571
- # association symbols that should be cleared when the column
1572
- # value changes.
1573
- attr_reader :autoreloading_associations
1574
-
1575
- # Whether association metadata should be cached in the association reflection. If not cached, it will be computed
1576
- # on demand. In general you only want to set this to false when using code reloading. When using code reloading,
1577
- # setting this will make sure that if an associated class is removed or modified, this class will not have a reference to
1578
- # the previous class.
1579
- attr_accessor :cache_associations
1580
-
1581
- # The default options to use for all associations. This hash is merged into the association reflection hash for
1582
- # all association reflections.
1583
- attr_accessor :default_association_options
1584
-
1585
- # The default options to use for all associations of a given type. This is a hash keyed by association type
1586
- # symbol. If there is a value for the association type symbol key, the resulting hash will be merged into the
1587
- # association reflection hash for all association reflections of that type.
1588
- attr_accessor :default_association_type_options
1589
-
1590
- # The default :eager_limit_strategy option to use for limited or offset associations (default: true, causing Sequel
1591
- # to use what it considers the most appropriate strategy).
1592
- attr_accessor :default_eager_limit_strategy
1593
-
1594
- # Array of all association reflections for this model class
1595
- def all_association_reflections
1596
- association_reflections.values
1597
- end
1598
-
1599
- # Associates a related model with the current model. The following types are
1600
- # supported:
1601
- #
1602
- # :many_to_one :: Foreign key in current model's table points to
1603
- # associated model's primary key. Each associated model object can
1604
- # be associated with more than one current model objects. Each current
1605
- # model object can be associated with only one associated model object.
1606
- # :one_to_many :: Foreign key in associated model's table points to this
1607
- # model's primary key. Each current model object can be associated with
1608
- # more than one associated model objects. Each associated model object
1609
- # can be associated with only one current model object.
1610
- # :one_through_one :: Similar to many_to_many in terms of foreign keys, but only one object
1611
- # is associated to the current object through the association.
1612
- # Provides only getter methods, no setter or modification methods.
1613
- # :one_to_one :: Similar to one_to_many in terms of foreign keys, but
1614
- # only one object is associated to the current object through the
1615
- # association. The methods created are similar to many_to_one, except
1616
- # that the one_to_one setter method saves the passed object.
1617
- # :many_to_many :: A join table is used that has a foreign key that points
1618
- # to this model's primary key and a foreign key that points to the
1619
- # associated model's primary key. Each current model object can be
1620
- # associated with many associated model objects, and each associated
1621
- # model object can be associated with many current model objects.
1622
- #
1623
- # The following options can be supplied:
1624
- # === Multiple Types
1625
- # :adder :: Proc used to define the private _add_* method for doing the database work
1626
- # to associate the given object to the current object (*_to_many assocations).
1627
- # Set to nil to not define a add_* method for the association.
1628
- # :after_add :: Symbol, Proc, or array of both/either specifying a callback to call
1629
- # after a new item is added to the association.
1630
- # :after_load :: Symbol, Proc, or array of both/either specifying a callback to call
1631
- # after the associated record(s) have been retrieved from the database.
1632
- # :after_remove :: Symbol, Proc, or array of both/either specifying a callback to call
1633
- # after an item is removed from the association.
1634
- # :after_set :: Symbol, Proc, or array of both/either specifying a callback to call
1635
- # after an item is set using the association setter method.
1636
- # :allow_eager :: If set to false, you cannot load the association eagerly
1637
- # via eager or eager_graph
1638
- # :allow_eager_graph :: If set to false, you cannot load the association eagerly via eager_graph.
1639
- # :allow_filtering_by :: If set to false, you cannot use the association when filtering
1640
- # :before_add :: Symbol, Proc, or array of both/either specifying a callback to call
1641
- # before a new item is added to the association.
1642
- # :before_remove :: Symbol, Proc, or array of both/either specifying a callback to call
1643
- # before an item is removed from the association.
1644
- # :before_set :: Symbol, Proc, or array of both/either specifying a callback to call
1645
- # before an item is set using the association setter method.
1646
- # :cartesian_product_number :: the number of joins completed by this association that could cause more
1647
- # than one row for each row in the current table (default: 0 for
1648
- # many_to_one, one_to_one, and one_through_one associations, 1
1649
- # for one_to_many and many_to_many associations).
1650
- # :class :: The associated class or its name as a string or symbol. If not
1651
- # given, uses the association's name, which is camelized (and
1652
- # singularized unless the type is :many_to_one, :one_to_one, or one_through_one). If this is specified
1653
- # as a string or symbol, you must specify the full class name (e.g. "::SomeModule::MyModel").
1654
- # :class_namespace :: If :class is given as a string or symbol, sets the default namespace in which to look for
1655
- # the class. <tt>class: 'Foo', class_namespace: 'Bar'</tt> looks for <tt>::Bar::Foo</tt>.)
1656
- # :clearer :: Proc used to define the private _remove_all_* method for doing the database work
1657
- # to remove all objects associated to the current object (*_to_many assocations).
1658
- # Set to nil to not define a remove_all_* method for the association.
1659
- # :clone :: Merge the current options and block into the options and block used in defining
1660
- # the given association. Can be used to DRY up a bunch of similar associations that
1661
- # all share the same options such as :class and :key, while changing the order and block used.
1662
- # :conditions :: The conditions to use to filter the association, can be any argument passed to where.
1663
- # This option is not respected when using eager_graph or association_join, unless it
1664
- # is hash or array of two element arrays. Consider also specifying the :graph_block
1665
- # option if the value for this option is not a hash or array of two element arrays
1666
- # and you plan to use this association in eager_graph or association_join.
1667
- # :dataset :: A proc that is used to define the method to get the base dataset to use (before the other
1668
- # options are applied). If the proc accepts an argument, it is passed the related
1669
- # association reflection. It is a best practice to always have the dataset accept an argument
1670
- # and use the argument to return the appropriate dataset.
1671
- # :distinct :: Use the DISTINCT clause when selecting associating object, both when
1672
- # lazy loading and eager loading via .eager (but not when using .eager_graph).
1673
- # :eager :: The associations to eagerly load via +eager+ when loading the associated object(s).
1674
- # :eager_block :: If given, use the block instead of the default block when
1675
- # eagerly loading. To not use a block when eager loading (when one is used normally),
1676
- # set to nil.
1677
- # :eager_graph :: The associations to eagerly load via +eager_graph+ when loading the associated object(s).
1678
- # many_to_many associations with this option cannot be eagerly loaded via +eager+.
1679
- # :eager_grapher :: A proc to use to implement eager loading via +eager_graph+, overriding the default.
1680
- # Takes an options hash with at least the entries :self (the receiver of the eager_graph call),
1681
- # :table_alias (the alias to use for table to graph into the association), and :implicit_qualifier
1682
- # (the alias that was used for the current table).
1683
- # Should return a copy of the dataset with the association graphed into it.
1684
- # :eager_limit_strategy :: Determines the strategy used for enforcing limits and offsets when eager loading
1685
- # associations via the +eager+ method.
1686
- # :eager_loader :: A proc to use to implement eager loading, overriding the default. Takes a single hash argument,
1687
- # with at least the keys: :rows, which is an array of current model instances, :associations,
1688
- # which is a hash of dependent associations, :self, which is the dataset doing the eager loading,
1689
- # :eager_block, which is a dynamic callback that should be called with the dataset, and :id_map,
1690
- # which is a mapping of key values to arrays of current model instances. In the proc, the
1691
- # associated records should be queried from the database and the associations cache for each
1692
- # record should be populated.
1693
- # :eager_loader_key :: A symbol for the key column to use to populate the key_hash
1694
- # for the eager loader. Can be set to nil to not populate the key_hash.
1695
- # :extend :: A module or array of modules to extend the dataset with.
1696
- # :filter_limit_strategy :: Determines the strategy used for enforcing limits and offsets when filtering by
1697
- # limited associations. Possible options are :window_function, :distinct_on, or
1698
- # :correlated_subquery depending on association type and database type.
1699
- # :graph_alias_base :: The base name to use for the table alias when eager graphing. Defaults to the name
1700
- # of the association. If the alias name has already been used in the query, Sequel will create
1701
- # a unique alias by appending a numeric suffix (e.g. alias_0, alias_1, ...) until the alias is
1702
- # unique.
1703
- # :graph_block :: The block to pass to join_table when eagerly loading
1704
- # the association via +eager_graph+.
1705
- # :graph_conditions :: The additional conditions to use on the SQL join when eagerly loading
1706
- # the association via +eager_graph+. Should be a hash or an array of two element arrays. If not
1707
- # specified, the :conditions option is used if it is a hash or array of two element arrays.
1708
- # :graph_join_type :: The type of SQL join to use when eagerly loading the association via
1709
- # eager_graph. Defaults to :left_outer.
1710
- # :graph_only_conditions :: The conditions to use on the SQL join when eagerly loading
1711
- # the association via +eager_graph+, instead of the default conditions specified by the
1712
- # foreign/primary keys. This option causes the :graph_conditions option to be ignored.
1713
- # :graph_order :: the order to use when using eager_graph, instead of the default order. This should be used
1714
- # in the case where :order contains an identifier qualified by the table's name, which may not match
1715
- # the alias used when eager graphing. By setting this to the unqualified identifier, it will be
1716
- # automatically qualified when using eager_graph.
1717
- # :graph_select :: A column or array of columns to select from the associated table
1718
- # when eagerly loading the association via +eager_graph+. Defaults to all
1719
- # columns in the associated table.
1720
- # :limit :: Limit the number of records to the provided value. Use
1721
- # an array with two elements for the value to specify a
1722
- # limit (first element) and an offset (second element).
1723
- # :methods_module :: The module that methods the association creates will be placed into. Defaults
1724
- # to the module containing the model's columns.
1725
- # :no_association_method :: Do not add a method for the association. This can save memory if the association
1726
- # method is never used.
1727
- # :no_dataset_method :: Do not add a method for the association dataset. This can save memory if the dataset
1728
- # method is never used.
1729
- # :order :: the column(s) by which to order the association dataset. Can be a
1730
- # singular column symbol or an array of column symbols.
1731
- # :order_eager_graph :: Whether to add the association's order to the graphed dataset's order when graphing
1732
- # via +eager_graph+. Defaults to true, so set to false to disable.
1733
- # :read_only :: Do not add a setter method (for many_to_one or one_to_one associations),
1734
- # or add_/remove_/remove_all_ methods (for one_to_many and many_to_many associations).
1735
- # :reciprocal :: the symbol name of the reciprocal association,
1736
- # if it exists. By default, Sequel will try to determine it by looking at the
1737
- # associated model's assocations for a association that matches
1738
- # the current association's key(s). Set to nil to not use a reciprocal.
1739
- # :remover :: Proc used to define the private _remove_* method for doing the database work
1740
- # to remove the association between the given object and the current object (*_to_many assocations).
1741
- # Set to nil to not define a remove_* method for the association.
1742
- # :select :: the columns to select. Defaults to the associated class's table_name.* in an association
1743
- # that uses joins, which means it doesn't include the attributes from the
1744
- # join table. If you want to include the join table attributes, you can
1745
- # use this option, but beware that the join table attributes can clash with
1746
- # attributes from the model table, so you should alias any attributes that have
1747
- # the same name in both the join table and the associated table.
1748
- # :setter :: Proc used to define the private _*= method for doing the work to setup the assocation
1749
- # between the given object and the current object (*_to_one associations).
1750
- # Set to nil to not define a setter method for the association.
1751
- # :subqueries_per_union :: The number of subqueries to use in each UNION query, for eager
1752
- # loading limited associations using the default :union strategy.
1753
- # :validate :: Set to false to not validate when implicitly saving any associated object.
1754
- # === :many_to_one
1755
- # :key :: foreign key in current model's table that references
1756
- # associated model's primary key, as a symbol. Defaults to :"#{name}_id". Can use an
1757
- # array of symbols for a composite key association.
1758
- # :key_column :: Similar to, and usually identical to, :key, but :key refers to the model method
1759
- # to call, where :key_column refers to the underlying column. Should only be
1760
- # used if the model method differs from the foreign key column, in conjunction
1761
- # with defining a model alias method for the key column.
1762
- # :primary_key :: column in the associated table that :key option references, as a symbol.
1763
- # Defaults to the primary key of the associated table. Can use an
1764
- # array of symbols for a composite key association.
1765
- # :primary_key_method :: the method symbol or array of method symbols to call on the associated
1766
- # object to get the foreign key values. Defaults to :primary_key option.
1767
- # :qualify :: Whether to use qualified primary keys when loading the association. The default
1768
- # is true, so you must set to false to not qualify. Qualification rarely causes
1769
- # problems, but it's necessary to disable in some cases, such as when you are doing
1770
- # a JOIN USING operation on the column on Oracle.
1771
- # === :one_to_many and :one_to_one
1772
- # :key :: foreign key in associated model's table that references
1773
- # current model's primary key, as a symbol. Defaults to
1774
- # :"#{self.name.underscore}_id". Can use an
1775
- # array of symbols for a composite key association.
1776
- # :key_method :: the method symbol or array of method symbols to call on the associated
1777
- # object to get the foreign key values. Defaults to :key option.
1778
- # :primary_key :: column in the current table that :key option references, as a symbol.
1779
- # Defaults to primary key of the current table. Can use an
1780
- # array of symbols for a composite key association.
1781
- # :primary_key_column :: Similar to, and usually identical to, :primary_key, but :primary_key refers
1782
- # to the model method call, where :primary_key_column refers to the underlying column.
1783
- # Should only be used if the model method differs from the primary key column, in
1784
- # conjunction with defining a model alias method for the primary key column.
1785
- # :raise_on_save_failure :: Do not raise exceptions for hook or validation failures when saving associated
1786
- # objects in the add/remove methods (return nil instead) [one_to_many only].
1787
- # === :many_to_many and :one_through_one
1788
- # :graph_join_table_block :: The block to pass to +join_table+ for
1789
- # the join table when eagerly loading the association via +eager_graph+.
1790
- # :graph_join_table_conditions :: The additional conditions to use on the SQL join for
1791
- # the join table when eagerly loading the association via +eager_graph+.
1792
- # Should be a hash or an array of two element arrays.
1793
- # :graph_join_table_join_type :: The type of SQL join to use for the join table when eagerly
1794
- # loading the association via +eager_graph+. Defaults to the
1795
- # :graph_join_type option or :left_outer.
1796
- # :graph_join_table_only_conditions :: The conditions to use on the SQL join for the join
1797
- # table when eagerly loading the association via +eager_graph+,
1798
- # instead of the default conditions specified by the
1799
- # foreign/primary keys. This option causes the
1800
- # :graph_join_table_conditions option to be ignored.
1801
- # :join_table :: name of table that includes the foreign keys to both
1802
- # the current model and the associated model, as a symbol. Defaults to the name
1803
- # of current model and name of associated model, pluralized,
1804
- # underscored, sorted, and joined with '_'.
1805
- # :join_table_block :: proc that can be used to modify the dataset used in the add/remove/remove_all
1806
- # methods. Should accept a dataset argument and return a modified dataset if present.
1807
- # :join_table_db :: When retrieving records when using lazy loading or eager loading via +eager+, instead of
1808
- # a join between to the join table and the associated table, use a separate query for the
1809
- # join table using the given Database object.
1810
- # :left_key :: foreign key in join table that points to current model's
1811
- # primary key, as a symbol. Defaults to :"#{self.name.underscore}_id".
1812
- # Can use an array of symbols for a composite key association.
1813
- # :left_primary_key :: column in current table that :left_key points to, as a symbol.
1814
- # Defaults to primary key of current table. Can use an
1815
- # array of symbols for a composite key association.
1816
- # :left_primary_key_column :: Similar to, and usually identical to, :left_primary_key, but :left_primary_key refers to
1817
- # the model method to call, where :left_primary_key_column refers to the underlying column. Should only
1818
- # be used if the model method differs from the left primary key column, in conjunction
1819
- # with defining a model alias method for the left primary key column.
1820
- # :right_key :: foreign key in join table that points to associated
1821
- # model's primary key, as a symbol. Defaults to :"#{name.to_s.singularize}_id".
1822
- # Can use an array of symbols for a composite key association.
1823
- # :right_primary_key :: column in associated table that :right_key points to, as a symbol.
1824
- # Defaults to primary key of the associated table. Can use an
1825
- # array of symbols for a composite key association.
1826
- # :right_primary_key_method :: the method symbol or array of method symbols to call on the associated
1827
- # object to get the foreign key values for the join table.
1828
- # Defaults to :right_primary_key option.
1829
- # :uniq :: Adds a after_load callback that makes the array of objects unique.
1830
- def associate(type, name, opts = OPTS, &block)
1831
- raise(Error, 'invalid association type') unless assoc_class = Sequel.synchronize{ASSOCIATION_TYPES[type]}
1832
- raise(Error, 'Model.associate name argument must be a symbol') unless name.is_a?(Symbol)
1833
-
1834
- # dup early so we don't modify opts
1835
- orig_opts = opts.dup
1836
-
1837
- if opts[:clone]
1838
- cloned_assoc = association_reflection(opts[:clone])
1839
- remove_class_name = orig_opts[:class] && !orig_opts[:class_name]
1840
- orig_opts = cloned_assoc[:orig_opts].merge(orig_opts)
1841
- orig_opts.delete(:class_name) if remove_class_name
1842
- end
1843
-
1844
- opts = Hash[default_association_options]
1845
- if type_options = default_association_type_options[type]
1846
- opts.merge!(type_options)
1847
- end
1848
- opts.merge!(orig_opts)
1849
- opts.merge!(:type => type, :name => name, :cache=>({} if cache_associations), :model => self)
1850
-
1851
- opts[:block] = block if block
1852
- opts[:instance_specific] = true if orig_opts[:dataset]
1853
- if !opts.has_key?(:instance_specific) && (block || orig_opts[:block])
1854
- # It's possible the association is instance specific, in that it depends on
1855
- # values other than the foreign key value. This needs to be checked for
1856
- # in certain places to disable optimizations.
1857
- opts[:instance_specific] = _association_instance_specific_default(name)
1858
- end
1859
- opts = assoc_class.new.merge!(opts)
1860
-
1861
- if opts[:clone] && !opts.cloneable?(cloned_assoc)
1862
- raise(Error, "cannot clone an association to an association of different type (association #{name} with type #{type} cloning #{opts[:clone]} with type #{cloned_assoc[:type]})")
1863
- end
1864
-
1865
- opts[:use_placeholder_loader] = !opts[:instance_specific] && !opts[:eager_graph]
1866
- opts[:eager_block] = opts[:block] unless opts.include?(:eager_block)
1867
- opts[:graph_join_type] ||= :left_outer
1868
- opts[:order_eager_graph] = true unless opts.include?(:order_eager_graph)
1869
- conds = opts[:conditions]
1870
- opts[:graph_alias_base] ||= name
1871
- opts[:graph_conditions] = conds if !opts.include?(:graph_conditions) and Sequel.condition_specifier?(conds)
1872
- opts[:graph_conditions] = opts.fetch(:graph_conditions, []).to_a
1873
- opts[:graph_select] = Array(opts[:graph_select]) if opts[:graph_select]
1874
- [:before_add, :before_remove, :after_add, :after_remove, :after_load, :before_set, :after_set].each do |cb_type|
1875
- opts[cb_type] = Array(opts[cb_type]) if opts[cb_type]
1876
- end
1877
-
1878
- if opts[:extend]
1879
- opts[:extend] = Array(opts[:extend])
1880
- opts[:reverse_extend] = opts[:extend].reverse
1881
- end
1882
-
1883
- late_binding_class_option(opts, opts.returns_array? ? singularize(name) : name)
1884
-
1885
- # Remove :class entry if it exists and is nil, to work with cached_fetch
1886
- opts.delete(:class) unless opts[:class]
1887
-
1888
- def_association(opts)
1889
-
1890
- orig_opts.delete(:clone)
1891
- opts[:orig_class] = orig_opts[:class] || orig_opts[:class_name]
1892
- orig_opts.merge!(:class_name=>opts[:class_name], :class=>opts[:class], :block=>opts[:block])
1893
- opts[:orig_opts] = orig_opts
1894
- # don't add to association_reflections until we are sure there are no errors
1895
- association_reflections[name] = opts
1896
- end
1897
-
1898
- # The association reflection hash for the association of the given name.
1899
- def association_reflection(name)
1900
- association_reflections[name]
1901
- end
1902
-
1903
- # Array of association name symbols
1904
- def associations
1905
- association_reflections.keys
1906
- end
1907
-
1908
- # Eager load the association with the given eager loader options.
1909
- def eager_load_results(opts, eo, &block)
1910
- opts.eager_load_results(eo, &block)
1911
- end
1912
-
1913
- # Freeze association related metadata when freezing model class.
1914
- def freeze
1915
- @association_reflections.freeze.each_value(&:freeze)
1916
- @autoreloading_associations.freeze.each_value(&:freeze)
1917
- @default_association_options.freeze
1918
- @default_association_type_options.freeze
1919
- @default_association_type_options.each_value(&:freeze)
1920
-
1921
- super
1922
- end
1923
-
1924
- # Finalize all associations such that values that are looked up
1925
- # dynamically in associated classes are set statically.
1926
- # As this modifies the associations, it must be done before
1927
- # calling freeze.
1928
- def finalize_associations
1929
- @association_reflections.each_value(&:finalize)
1930
- end
1931
-
1932
- # Shortcut for adding a many_to_many association, see #associate
1933
- def many_to_many(name, opts=OPTS, &block)
1934
- associate(:many_to_many, name, opts, &block)
1935
- end
1936
-
1937
- # Shortcut for adding a many_to_one association, see #associate
1938
- def many_to_one(name, opts=OPTS, &block)
1939
- associate(:many_to_one, name, opts, &block)
1940
- end
1941
-
1942
- # Shortcut for adding a one_through_one association, see #associate
1943
- def one_through_one(name, opts=OPTS, &block)
1944
- associate(:one_through_one, name, opts, &block)
1945
- end
1946
-
1947
- # Shortcut for adding a one_to_many association, see #associate
1948
- def one_to_many(name, opts=OPTS, &block)
1949
- associate(:one_to_many, name, opts, &block)
1950
- end
1951
-
1952
- # Shortcut for adding a one_to_one association, see #associate
1953
- def one_to_one(name, opts=OPTS, &block)
1954
- associate(:one_to_one, name, opts, &block)
1955
- end
1956
-
1957
- Plugins.inherited_instance_variables(self, :@association_reflections=>:dup, :@autoreloading_associations=>:hash_dup, :@default_association_options=>:dup, :@default_association_type_options=>:hash_dup, :@cache_associations=>nil, :@default_eager_limit_strategy=>nil)
1958
- Plugins.def_dataset_methods(self, [:eager, :eager_graph, :eager_graph_with_options, :association_join, :association_full_join, :association_inner_join, :association_left_join, :association_right_join])
1959
-
1960
- private
1961
-
1962
- # The default value for the instance_specific option, if the association
1963
- # could be instance specific and the :instance_specific option is not specified.
1964
- def _association_instance_specific_default(_)
1965
- true
1966
- end
1967
-
1968
- # The module to use for the association's methods. Defaults to
1969
- # the overridable_methods_module.
1970
- def association_module(opts=OPTS)
1971
- opts.fetch(:methods_module, overridable_methods_module)
1972
- end
1973
-
1974
- # Add a method to the module included in the class, so the method
1975
- # can be easily overridden in the class itself while allowing for
1976
- # super to be called.
1977
- def association_module_def(name, opts=OPTS, &block)
1978
- mod = association_module(opts)
1979
- mod.send(:define_method, name, &block)
1980
- mod.send(:alias_method, name, name)
1981
- end
1982
-
1983
- # Add a method to the module included in the class, so the method
1984
- # can be easily overridden in the class itself while allowing for
1985
- # super to be called. This method allows passing keywords through
1986
- # the defined methods.
1987
- def association_module_delegate_def(name, opts, &block)
1988
- mod = association_module(opts)
1989
- mod.send(:define_method, name, &block)
1990
- # :nocov:
1991
- mod.send(:ruby2_keywords, name) if mod.respond_to?(:ruby2_keywords, true)
1992
- # :nocov:
1993
- mod.send(:alias_method, name, name)
1994
- end
1995
-
1996
- # Add a private method to the module included in the class.
1997
- def association_module_private_def(name, opts=OPTS, &block)
1998
- association_module_def(name, opts, &block)
1999
- association_module(opts).send(:private, name)
2000
- end
2001
-
2002
- # Delegate to the type-specific association method to setup the
2003
- # association, and define the association instance methods.
2004
- def def_association(opts)
2005
- send(:"def_#{opts[:type]}", opts)
2006
- def_association_instance_methods(opts)
2007
- end
2008
-
2009
- # Adds the association method to the association methods module.
2010
- def def_association_method(opts)
2011
- association_module_def(opts.association_method, opts) do |dynamic_opts=OPTS, &block|
2012
- load_associated_objects(opts, dynamic_opts, &block)
2013
- end
2014
- end
2015
-
2016
- # Define all of the association instance methods for this association.
2017
- def def_association_instance_methods(opts)
2018
- # Always set the method names in the association reflection, even if they
2019
- # are not used, for backwards compatibility.
2020
- opts[:dataset_method] = :"#{opts[:name]}_dataset"
2021
- if opts.returns_array?
2022
- sname = singularize(opts[:name])
2023
- opts[:_add_method] = :"_add_#{sname}"
2024
- opts[:add_method] = :"add_#{sname}"
2025
- opts[:_remove_method] = :"_remove_#{sname}"
2026
- opts[:remove_method] = :"remove_#{sname}"
2027
- opts[:_remove_all_method] = :"_remove_all_#{opts[:name]}"
2028
- opts[:remove_all_method] = :"remove_all_#{opts[:name]}"
2029
- else
2030
- opts[:_setter_method] = :"_#{opts[:name]}="
2031
- opts[:setter_method] = :"#{opts[:name]}="
2032
- end
2033
-
2034
- association_module_def(opts.dataset_method, opts){_dataset(opts)} unless opts[:no_dataset_method]
2035
- if opts[:block]
2036
- opts[:block_method] = Plugins.def_sequel_method(association_module(opts), "#{opts[:name]}_block", 1, &opts[:block])
2037
- end
2038
- opts[:dataset_opt_arity] = opts[:dataset].arity == 0 ? 0 : 1
2039
- opts[:dataset_opt_method] = Plugins.def_sequel_method(association_module(opts), "#{opts[:name]}_dataset_opt", opts[:dataset_opt_arity], &opts[:dataset])
2040
- def_association_method(opts) unless opts[:no_association_method]
2041
-
2042
- return if opts[:read_only]
2043
-
2044
- if opts[:setter] && opts[:_setter]
2045
- # This is backwards due to backwards compatibility
2046
- association_module_private_def(opts[:_setter_method], opts, &opts[:setter])
2047
- association_module_def(opts[:setter_method], opts, &opts[:_setter])
2048
- end
2049
-
2050
- if adder = opts[:adder]
2051
- association_module_private_def(opts[:_add_method], opts, &adder)
2052
- association_module_delegate_def(opts[:add_method], opts){|o,*args| add_associated_object(opts, o, *args)}
2053
- end
2054
-
2055
- if remover = opts[:remover]
2056
- association_module_private_def(opts[:_remove_method], opts, &remover)
2057
- association_module_delegate_def(opts[:remove_method], opts){|o,*args| remove_associated_object(opts, o, *args)}
2058
- end
2059
-
2060
- if clearer = opts[:clearer]
2061
- association_module_private_def(opts[:_remove_all_method], opts, &clearer)
2062
- association_module_delegate_def(opts[:remove_all_method], opts){|*args| remove_all_associated_objects(opts, *args)}
2063
- end
2064
- end
2065
-
2066
- # Configures many_to_many and one_through_one association reflection and adds the related association methods
2067
- def def_many_to_many(opts)
2068
- one_through_one = opts[:type] == :one_through_one
2069
- left = (opts[:left_key] ||= opts.default_left_key)
2070
- lcks = opts[:left_keys] = Array(left)
2071
- right = (opts[:right_key] ||= opts.default_right_key)
2072
- rcks = opts[:right_keys] = Array(right)
2073
- left_pk = (opts[:left_primary_key] ||= self.primary_key)
2074
- opts[:eager_loader_key] = left_pk unless opts.has_key?(:eager_loader_key)
2075
- lcpks = opts[:left_primary_keys] = Array(left_pk)
2076
- lpkc = opts[:left_primary_key_column] ||= left_pk
2077
- lpkcs = opts[:left_primary_key_columns] ||= Array(lpkc)
2078
- raise(Error, "mismatched number of left keys: #{lcks.inspect} vs #{lcpks.inspect}") unless lcks.length == lcpks.length
2079
- if opts[:right_primary_key]
2080
- rcpks = Array(opts[:right_primary_key])
2081
- raise(Error, "mismatched number of right keys: #{rcks.inspect} vs #{rcpks.inspect}") unless rcks.length == rcpks.length
2082
- end
2083
- opts[:uses_left_composite_keys] = lcks.length > 1
2084
- uses_rcks = opts[:uses_right_composite_keys] = rcks.length > 1
2085
- opts[:cartesian_product_number] ||= one_through_one ? 0 : 1
2086
- join_table = (opts[:join_table] ||= opts.default_join_table)
2087
- opts[:left_key_alias] ||= opts.default_associated_key_alias
2088
- opts[:graph_join_table_join_type] ||= opts[:graph_join_type]
2089
- if opts[:uniq]
2090
- opts[:after_load] ||= []
2091
- opts[:after_load].unshift(:array_uniq!)
2092
- end
2093
- if join_table_db = opts[:join_table_db]
2094
- opts[:use_placeholder_loader] = false
2095
- opts[:allow_eager_graph] = false
2096
- opts[:allow_filtering_by] = false
2097
- opts[:eager_limit_strategy] = nil
2098
- join_table_ds = join_table_db.from(join_table)
2099
- opts[:dataset] ||= proc do |r|
2100
- vals = join_table_ds.where(lcks.zip(lcpks.map{|k| get_column_value(k)})).select_map(right)
2101
- ds = r.associated_dataset.where(opts.right_primary_key => vals)
2102
- if uses_rcks
2103
- vals.delete_if{|v| v.any?(&:nil?)}
2104
- else
2105
- vals.delete(nil)
2106
- end
2107
- ds = ds.clone(:no_results=>true) if vals.empty?
2108
- ds
2109
- end
2110
- opts[:eager_loader] ||= proc do |eo|
2111
- h = eo[:id_map]
2112
- assign_singular = opts.assign_singular?
2113
- rpk = opts.right_primary_key
2114
- name = opts[:name]
2115
-
2116
- join_map = join_table_ds.where(left=>h.keys).select_hash_groups(right, left)
2117
-
2118
- if uses_rcks
2119
- join_map.delete_if{|v,| v.any?(&:nil?)}
2120
- else
2121
- join_map.delete(nil)
2122
- end
2123
-
2124
- eo = Hash[eo]
2125
-
2126
- if join_map.empty?
2127
- eo[:no_results] = true
2128
- else
2129
- join_map.each_value do |vs|
2130
- vs.replace(vs.flat_map{|v| h[v]})
2131
- vs.uniq!
2132
- end
2133
-
2134
- eo[:loader] = false
2135
- eo[:right_keys] = join_map.keys
2136
- end
2137
-
2138
- opts[:model].eager_load_results(opts, eo) do |assoc_record|
2139
- rpkv = if uses_rcks
2140
- assoc_record.values.values_at(*rpk)
2141
- else
2142
- assoc_record.values[rpk]
2143
- end
2144
-
2145
- objects = join_map[rpkv]
2146
-
2147
- if assign_singular
2148
- objects.each do |object|
2149
- object.associations[name] ||= assoc_record
2150
- end
2151
- else
2152
- objects.each do |object|
2153
- object.associations[name].push(assoc_record)
2154
- end
2155
- end
2156
- end
2157
- end
2158
- else
2159
- opts[:dataset] ||= opts.association_dataset_proc
2160
- opts[:eager_loader] ||= opts.method(:default_eager_loader)
2161
- end
2162
-
2163
- join_type = opts[:graph_join_type]
2164
- select = opts[:graph_select]
2165
- use_only_conditions = opts.include?(:graph_only_conditions)
2166
- only_conditions = opts[:graph_only_conditions]
2167
- conditions = opts[:graph_conditions]
2168
- graph_block = opts[:graph_block]
2169
- graph_jt_conds = opts[:graph_join_table_conditions] = opts.fetch(:graph_join_table_conditions, []).to_a
2170
- use_jt_only_conditions = opts.include?(:graph_join_table_only_conditions)
2171
- jt_only_conditions = opts[:graph_join_table_only_conditions]
2172
- jt_join_type = opts[:graph_join_table_join_type]
2173
- jt_graph_block = opts[:graph_join_table_block]
2174
- opts[:eager_grapher] ||= proc do |eo|
2175
- ds = eo[:self]
2176
- egls = eo[:limit_strategy]
2177
- if egls && egls != :ruby
2178
- associated_key_array = opts.associated_key_array
2179
- orig_egds = egds = eager_graph_dataset(opts, eo)
2180
- egds = egds.
2181
- inner_join(join_table, rcks.zip(opts.right_primary_keys) + graph_jt_conds, :qualify=>:deep).
2182
- select_all(egds.first_source).
2183
- select_append(*associated_key_array)
2184
- egds = opts.apply_eager_graph_limit_strategy(egls, egds)
2185
- ds.graph(egds, associated_key_array.map(&:alias).zip(lpkcs) + conditions, :qualify=>:deep, :table_alias=>eo[:table_alias], :implicit_qualifier=>eo[:implicit_qualifier], :join_type=>eo[:join_type]||join_type, :from_self_alias=>eo[:from_self_alias], :join_only=>eo[:join_only], :select=>select||orig_egds.columns, &graph_block)
2186
- else
2187
- ds = ds.graph(join_table, use_jt_only_conditions ? jt_only_conditions : lcks.zip(lpkcs) + graph_jt_conds, :select=>false, :table_alias=>ds.unused_table_alias(join_table, [eo[:table_alias]]), :join_type=>eo[:join_type]||jt_join_type, :join_only=>eo[:join_only], :implicit_qualifier=>eo[:implicit_qualifier], :qualify=>:deep, :from_self_alias=>eo[:from_self_alias], &jt_graph_block)
2188
- ds.graph(eager_graph_dataset(opts, eo), use_only_conditions ? only_conditions : opts.right_primary_keys.zip(rcks) + conditions, :select=>select, :table_alias=>eo[:table_alias], :qualify=>:deep, :join_type=>eo[:join_type]||join_type, :join_only=>eo[:join_only], &graph_block)
2189
- end
2190
- end
2191
-
2192
- return if opts[:read_only]
2193
-
2194
- if one_through_one
2195
- unless opts.has_key?(:setter)
2196
- opts[:setter] = proc do |o|
2197
- h = {}
2198
- lh = lcks.zip(lcpks.map{|k| get_column_value(k)})
2199
- jtds = _join_table_dataset(opts).where(lh)
2200
-
2201
- checked_transaction do
2202
- current = jtds.first
2203
-
2204
- if o
2205
- new_values = []
2206
- rcks.zip(opts.right_primary_key_methods).each{|k, pk| new_values << (h[k] = o.get_column_value(pk))}
2207
- end
2208
-
2209
- if current
2210
- current_values = rcks.map{|k| current[k]}
2211
- jtds = jtds.where(rcks.zip(current_values))
2212
- if o
2213
- if current_values != new_values
2214
- jtds.update(h)
2215
- end
2216
- else
2217
- jtds.delete
2218
- end
2219
- elsif o
2220
- lh.each{|k,v| h[k] = v}
2221
- jtds.insert(h)
2222
- end
2223
- end
2224
- end
2225
- end
2226
- if opts.fetch(:setter, true)
2227
- opts[:_setter] = proc{|o| set_one_through_one_associated_object(opts, o)}
2228
- end
2229
- else
2230
- unless opts.has_key?(:adder)
2231
- opts[:adder] = proc do |o|
2232
- h = {}
2233
- lcks.zip(lcpks).each{|k, pk| h[k] = get_column_value(pk)}
2234
- rcks.zip(opts.right_primary_key_methods).each{|k, pk| h[k] = o.get_column_value(pk)}
2235
- _join_table_dataset(opts).insert(h)
2236
- end
2237
- end
2238
-
2239
- unless opts.has_key?(:remover)
2240
- opts[:remover] = proc do |o|
2241
- _join_table_dataset(opts).where(lcks.zip(lcpks.map{|k| get_column_value(k)}) + rcks.zip(opts.right_primary_key_methods.map{|k| o.get_column_value(k)})).delete
2242
- end
2243
- end
2244
-
2245
- unless opts.has_key?(:clearer)
2246
- opts[:clearer] = proc do
2247
- _join_table_dataset(opts).where(lcks.zip(lcpks.map{|k| get_column_value(k)})).delete
2248
- end
2249
- end
2250
- end
2251
- end
2252
-
2253
- # Configures many_to_one association reflection and adds the related association methods
2254
- def def_many_to_one(opts)
2255
- name = opts[:name]
2256
- opts[:key] = opts.default_key unless opts.has_key?(:key)
2257
- key = opts[:key]
2258
- opts[:eager_loader_key] = key unless opts.has_key?(:eager_loader_key)
2259
- cks = opts[:graph_keys] = opts[:keys] = Array(key)
2260
- opts[:key_column] ||= key
2261
- opts[:graph_keys] = opts[:key_columns] = Array(opts[:key_column])
2262
- opts[:qualified_key] = opts.qualify_cur(key)
2263
- if opts[:primary_key]
2264
- cpks = Array(opts[:primary_key])
2265
- raise(Error, "mismatched number of keys: #{cks.inspect} vs #{cpks.inspect}") unless cks.length == cpks.length
2266
- end
2267
- uses_cks = opts[:uses_composite_keys] = cks.length > 1
2268
- opts[:cartesian_product_number] ||= 0
2269
-
2270
- if !opts.has_key?(:many_to_one_pk_lookup) &&
2271
- (opts[:dataset] || opts[:conditions] || opts[:block] || opts[:select] ||
2272
- (opts.has_key?(:key) && opts[:key] == nil))
2273
- opts[:many_to_one_pk_lookup] = false
2274
- end
2275
- auto_assocs = @autoreloading_associations
2276
- cks.each do |k|
2277
- (auto_assocs[k] ||= []) << name
2278
- end
2279
-
2280
- opts[:dataset] ||= opts.association_dataset_proc
2281
- opts[:eager_loader] ||= proc do |eo|
2282
- h = eo[:id_map]
2283
- pk_meths = opts.primary_key_methods
2284
-
2285
- eager_load_results(opts, eo) do |assoc_record|
2286
- hash_key = uses_cks ? pk_meths.map{|k| assoc_record.get_column_value(k)} : assoc_record.get_column_value(opts.primary_key_method)
2287
- h[hash_key].each{|object| object.associations[name] = assoc_record}
2288
- end
2289
- end
2290
-
2291
- join_type = opts[:graph_join_type]
2292
- select = opts[:graph_select]
2293
- use_only_conditions = opts.include?(:graph_only_conditions)
2294
- only_conditions = opts[:graph_only_conditions]
2295
- conditions = opts[:graph_conditions]
2296
- graph_block = opts[:graph_block]
2297
- graph_cks = opts[:graph_keys]
2298
- opts[:eager_grapher] ||= proc do |eo|
2299
- ds = eo[:self]
2300
- ds.graph(eager_graph_dataset(opts, eo), use_only_conditions ? only_conditions : opts.primary_keys.zip(graph_cks) + conditions, eo.merge(:select=>select, :join_type=>eo[:join_type]||join_type, :qualify=>:deep), &graph_block)
2301
- end
2302
-
2303
- return if opts[:read_only]
2304
-
2305
- unless opts.has_key?(:setter)
2306
- opts[:setter] = proc{|o| cks.zip(opts.primary_key_methods).each{|k, pk| set_column_value(:"#{k}=", (o.get_column_value(pk) if o))}}
2307
- end
2308
- if opts.fetch(:setter, true)
2309
- opts[:_setter] = proc{|o| set_associated_object(opts, o)}
2310
- end
2311
- end
2312
-
2313
- # Configures one_to_many and one_to_one association reflections and adds the related association methods
2314
- def def_one_to_many(opts)
2315
- one_to_one = opts[:type] == :one_to_one
2316
- name = opts[:name]
2317
- key = (opts[:key] ||= opts.default_key)
2318
- km = opts[:key_method] ||= opts[:key]
2319
- cks = opts[:keys] = Array(key)
2320
- opts[:key_methods] = Array(opts[:key_method])
2321
- primary_key = (opts[:primary_key] ||= self.primary_key)
2322
- opts[:eager_loader_key] = primary_key unless opts.has_key?(:eager_loader_key)
2323
- cpks = opts[:primary_keys] = Array(primary_key)
2324
- pkc = opts[:primary_key_column] ||= primary_key
2325
- pkcs = opts[:primary_key_columns] ||= Array(pkc)
2326
- raise(Error, "mismatched number of keys: #{cks.inspect} vs #{cpks.inspect}") unless cks.length == cpks.length
2327
- uses_cks = opts[:uses_composite_keys] = cks.length > 1
2328
- opts[:dataset] ||= opts.association_dataset_proc
2329
- opts[:eager_loader] ||= proc do |eo|
2330
- h = eo[:id_map]
2331
- reciprocal = opts.reciprocal
2332
- assign_singular = opts.assign_singular?
2333
- delete_rn = opts.delete_row_number_column
2334
-
2335
- eager_load_results(opts, eo) do |assoc_record|
2336
- assoc_record.values.delete(delete_rn) if delete_rn
2337
- hash_key = uses_cks ? km.map{|k| assoc_record.get_column_value(k)} : assoc_record.get_column_value(km)
2338
- objects = h[hash_key]
2339
- if assign_singular
2340
- objects.each do |object|
2341
- unless object.associations[name]
2342
- object.associations[name] = assoc_record
2343
- assoc_record.associations[reciprocal] = object if reciprocal
2344
- end
2345
- end
2346
- else
2347
- objects.each do |object|
2348
- object.associations[name].push(assoc_record)
2349
- assoc_record.associations[reciprocal] = object if reciprocal
2350
- end
2351
- end
2352
- end
2353
- end
2354
-
2355
- join_type = opts[:graph_join_type]
2356
- select = opts[:graph_select]
2357
- use_only_conditions = opts.include?(:graph_only_conditions)
2358
- only_conditions = opts[:graph_only_conditions]
2359
- conditions = opts[:graph_conditions]
2360
- opts[:cartesian_product_number] ||= one_to_one ? 0 : 1
2361
- graph_block = opts[:graph_block]
2362
- opts[:eager_grapher] ||= proc do |eo|
2363
- ds = eo[:self]
2364
- ds = ds.graph(opts.apply_eager_graph_limit_strategy(eo[:limit_strategy], eager_graph_dataset(opts, eo)), use_only_conditions ? only_conditions : cks.zip(pkcs) + conditions, eo.merge(:select=>select, :join_type=>eo[:join_type]||join_type, :qualify=>:deep), &graph_block)
2365
- # We only load reciprocals for one_to_many associations, as other reciprocals don't make sense
2366
- ds.opts[:eager_graph][:reciprocals][eo[:table_alias]] = opts.reciprocal
2367
- ds
2368
- end
2369
-
2370
- return if opts[:read_only]
2371
-
2372
- save_opts = {:validate=>opts[:validate]}
2373
- ck_nil_hash ={}
2374
- cks.each{|k| ck_nil_hash[k] = nil}
2375
-
2376
- if one_to_one
2377
- unless opts.has_key?(:setter)
2378
- opts[:setter] = proc do |o|
2379
- up_ds = _apply_association_options(opts, opts.associated_dataset.where(cks.zip(cpks.map{|k| get_column_value(k)})))
2380
-
2381
- if (froms = up_ds.opts[:from]) && (from = froms[0]) && (from.is_a?(Sequel::Dataset) || (from.is_a?(Sequel::SQL::AliasedExpression) && from.expression.is_a?(Sequel::Dataset)))
2382
- if old = up_ds.first
2383
- cks.each{|k| old.set_column_value(:"#{k}=", nil)}
2384
- end
2385
- save_old = true
2386
- end
2387
-
2388
- if o
2389
- if !o.new? && !save_old
2390
- up_ds = up_ds.exclude(o.pk_hash)
2391
- end
2392
- cks.zip(cpks).each{|k, pk| o.set_column_value(:"#{k}=", get_column_value(pk))}
2393
- end
2394
-
2395
- checked_transaction do
2396
- if save_old
2397
- old.save(save_opts) || raise(Sequel::Error, "invalid previously associated object, cannot save") if old
2398
- else
2399
- up_ds.skip_limit_check.update(ck_nil_hash)
2400
- end
2401
-
2402
- o.save(save_opts) || raise(Sequel::Error, "invalid associated object, cannot save") if o
2403
- end
2404
- end
2405
- end
2406
- if opts.fetch(:setter, true)
2407
- opts[:_setter] = proc{|o| set_one_to_one_associated_object(opts, o)}
2408
- end
2409
- else
2410
- save_opts[:raise_on_failure] = opts[:raise_on_save_failure] != false
2411
-
2412
- unless opts.has_key?(:adder)
2413
- opts[:adder] = proc do |o|
2414
- cks.zip(cpks).each{|k, pk| o.set_column_value(:"#{k}=", get_column_value(pk))}
2415
- o.save(save_opts)
2416
- end
2417
- end
2418
-
2419
- unless opts.has_key?(:remover)
2420
- opts[:remover] = proc do |o|
2421
- cks.each{|k| o.set_column_value(:"#{k}=", nil)}
2422
- o.save(save_opts)
2423
- end
2424
- end
2425
-
2426
- unless opts.has_key?(:clearer)
2427
- opts[:clearer] = proc do
2428
- _apply_association_options(opts, opts.associated_dataset.where(cks.zip(cpks.map{|k| get_column_value(k)}))).update(ck_nil_hash)
2429
- end
2430
- end
2431
- end
2432
- end
2433
-
2434
- # Alias of def_many_to_many, since they share pretty much the same code.
2435
- def def_one_through_one(opts)
2436
- def_many_to_many(opts)
2437
- end
2438
-
2439
- # Alias of def_one_to_many, since they share pretty much the same code.
2440
- def def_one_to_one(opts)
2441
- def_one_to_many(opts)
2442
- end
2443
-
2444
- # Return dataset to graph into given the association reflection, applying the :callback option if set.
2445
- def eager_graph_dataset(opts, eager_options)
2446
- ds = opts.associated_class.dataset
2447
- if cb = eager_options[:callback]
2448
- ds = cb.call(ds)
2449
- end
2450
- ds
2451
- end
2452
-
2453
- # If not caching associations, reload the database schema by default,
2454
- # ignoring any cached values.
2455
- def reload_db_schema?
2456
- !@cache_associations
2457
- end
2458
- end
2459
-
2460
- # Instance methods used to implement the associations support.
2461
- module InstanceMethods
2462
- # The currently cached associations. A hash with the keys being the
2463
- # association name symbols and the values being the associated object
2464
- # or nil (many_to_one), or the array of associated objects (*_to_many).
2465
- def associations
2466
- @associations ||= {}
2467
- end
2468
-
2469
- # Freeze the associations cache when freezing the object. Note that
2470
- # retrieving associations after freezing will still work in most cases,
2471
- # but the associations will not be cached in the association cache.
2472
- def freeze
2473
- associations
2474
- super
2475
- associations.freeze
2476
- self
2477
- end
2478
-
2479
- private
2480
-
2481
- # Apply the association options such as :order and :limit to the given dataset, returning a modified dataset.
2482
- def _apply_association_options(opts, ds)
2483
- unless ds.kind_of?(AssociationDatasetMethods)
2484
- ds = opts.apply_dataset_changes(ds)
2485
- end
2486
- ds = ds.clone(:model_object => self)
2487
- ds = ds.eager_graph(opts[:eager_graph]) if opts[:eager_graph] && opts.eager_graph_lazy_dataset?
2488
- # block method is private
2489
- ds = send(opts[:block_method], ds) if opts[:block_method]
2490
- ds
2491
- end
2492
-
2493
- # Return a dataset for the association after applying any dynamic callback.
2494
- def _associated_dataset(opts, dynamic_opts)
2495
- ds = public_send(opts.dataset_method)
2496
- if callback = dynamic_opts[:callback]
2497
- ds = callback.call(ds)
2498
- end
2499
- ds
2500
- end
2501
-
2502
- # A placeholder literalizer that can be used to load the association, or nil to not use one.
2503
- def _associated_object_loader(opts, dynamic_opts)
2504
- if !dynamic_opts[:callback] && (loader = opts.placeholder_loader)
2505
- loader
2506
- end
2507
- end
2508
-
2509
- # Return an association dataset for the given association reflection
2510
- def _dataset(opts)
2511
- raise(Sequel::Error, "model object #{inspect} does not have a primary key") if opts.dataset_need_primary_key? && !pk
2512
- ds = if opts[:dataset_opt_arity] == 1
2513
- # dataset_opt_method is private
2514
- send(opts[:dataset_opt_method], opts)
2515
- else
2516
- send(opts[:dataset_opt_method])
2517
- end
2518
- _apply_association_options(opts, ds)
2519
- end
2520
-
2521
- # Dataset for the join table of the given many to many association reflection
2522
- def _join_table_dataset(opts)
2523
- ds = (opts[:join_table_db] || model.db).from(opts.join_table_source)
2524
- opts[:join_table_block] ? opts[:join_table_block].call(ds) : ds
2525
- end
2526
-
2527
- # Return the associated single object for the given association reflection and dynamic options
2528
- # (or nil if no associated object).
2529
- def _load_associated_object(opts, dynamic_opts)
2530
- _load_associated_object_array(opts, dynamic_opts).first
2531
- end
2532
-
2533
- # Return the associated single object using a primary key lookup on the associated class.
2534
- def _load_associated_object_via_primary_key(opts)
2535
- opts.associated_class.send(:primary_key_lookup, ((fk = opts[:key]).is_a?(Array) ? fk.map{|c| get_column_value(c)} : get_column_value(fk)))
2536
- end
2537
-
2538
- # Load the associated objects for the given association reflection and dynamic options
2539
- # as an array.
2540
- def _load_associated_object_array(opts, dynamic_opts)
2541
- if loader = _associated_object_loader(opts, dynamic_opts)
2542
- loader.all(*opts.predicate_key_values(self))
2543
- else
2544
- ds = _associated_dataset(opts, dynamic_opts)
2545
- if ds.opts[:no_results]
2546
- []
2547
- else
2548
- ds.all
2549
- end
2550
- end
2551
- end
2552
-
2553
- # Return the associated objects from the dataset, without association callbacks, reciprocals, and caching.
2554
- # Still apply the dynamic callback if present.
2555
- def _load_associated_objects(opts, dynamic_opts=OPTS)
2556
- if opts.can_have_associated_objects?(self)
2557
- if opts.returns_array?
2558
- _load_associated_object_array(opts, dynamic_opts)
2559
- elsif load_with_primary_key_lookup?(opts, dynamic_opts)
2560
- _load_associated_object_via_primary_key(opts)
2561
- else
2562
- _load_associated_object(opts, dynamic_opts)
2563
- end
2564
- elsif opts.returns_array?
2565
- []
2566
- end
2567
- end
2568
-
2569
- # Clear the associations cache when refreshing
2570
- def _refresh_set_values(hash)
2571
- @associations.clear if @associations
2572
- super
2573
- end
2574
-
2575
- # Add the given associated object to the given association
2576
- def add_associated_object(opts, o, *args)
2577
- o = make_add_associated_object(opts, o)
2578
- raise(Sequel::Error, "model object #{inspect} does not have a primary key") if opts.dataset_need_primary_key? && !pk
2579
- ensure_associated_primary_key(opts, o, *args)
2580
- return if run_association_callbacks(opts, :before_add, o) == false
2581
- # Allow calling private _add method
2582
- return if !send(opts[:_add_method], o, *args) && opts.handle_silent_modification_failure?
2583
- if array = associations[opts[:name]] and !array.include?(o)
2584
- array.push(o)
2585
- end
2586
- add_reciprocal_object(opts, o)
2587
- run_association_callbacks(opts, :after_add, o)
2588
- o
2589
- end
2590
- # :nocov:
2591
- ruby2_keywords(:add_associated_object) if respond_to?(:ruby2_keywords, true)
2592
- # :nocov:
2593
-
2594
- # Add/Set the current object to/as the given object's reciprocal association.
2595
- def add_reciprocal_object(opts, o)
2596
- return if o.frozen?
2597
- return unless reciprocal = opts.reciprocal
2598
- if opts.reciprocal_array?
2599
- if array = o.associations[reciprocal] and !array.include?(self)
2600
- array.push(self)
2601
- end
2602
- else
2603
- o.associations[reciprocal] = self
2604
- end
2605
- end
2606
-
2607
- # Call uniq! on the given array. This is used by the :uniq option,
2608
- # and is an actual method for memory reasons.
2609
- def array_uniq!(a)
2610
- a.uniq!
2611
- end
2612
-
2613
- # If a foreign key column value changes, clear the related
2614
- # cached associations.
2615
- def change_column_value(column, value)
2616
- if assocs = model.autoreloading_associations[column]
2617
- vals = @values
2618
- if new?
2619
- # Do deeper checking for new objects, so that associations are
2620
- # not deleted when values do not change. This code is run at
2621
- # a higher level for existing objects.
2622
- if value == (c = vals[column]) && value.class == c.class
2623
- # If the value is the same, there is no reason to delete
2624
- # the related associations, so exit early in that case.
2625
- return super
2626
- end
2627
-
2628
- only_delete_nil = c.nil?
2629
- elsif vals[column].nil?
2630
- only_delete_nil = true
2631
- end
2632
-
2633
- if only_delete_nil
2634
- # If the current foreign key value is nil, but the association
2635
- # is already present in the cache, it was probably added to the
2636
- # cache for a reason, and we do not want to delete it in that case.
2637
- # However, we still want to delete associations with nil values
2638
- # to remove the cached false negative.
2639
- assocs.each{|a| associations.delete(a) if associations[a].nil?}
2640
- else
2641
- assocs.each{|a| associations.delete(a)}
2642
- end
2643
- end
2644
- super
2645
- end
2646
-
2647
- # Save the associated object if the associated object needs a primary key
2648
- # and the associated object is new and does not have one. Raise an error if
2649
- # the object still does not have a primary key
2650
- def ensure_associated_primary_key(opts, o, *args)
2651
- if opts.need_associated_primary_key?
2652
- o.save(:validate=>opts[:validate]) if o.new?
2653
- raise(Sequel::Error, "associated object #{o.inspect} does not have a primary key") unless o.pk
2654
- end
2655
- end
2656
-
2657
- # Duplicate the associations hash when duplicating the object.
2658
- def initialize_copy(other)
2659
- super
2660
- @associations = Hash[@associations] if @associations
2661
- self
2662
- end
2663
-
2664
- # If a block is given, assign it as the :callback option in the hash, and return the hash.
2665
- def load_association_objects_options(dynamic_opts, &block)
2666
- if block
2667
- dynamic_opts = Hash[dynamic_opts]
2668
- dynamic_opts[:callback] = block
2669
- end
2670
-
2671
- dynamic_opts
2672
- end
2673
-
2674
- # Load the associated objects using the dataset, handling callbacks, reciprocals, and caching.
2675
- def load_associated_objects(opts, dynamic_opts, &block)
2676
- dynamic_opts = load_association_objects_options(dynamic_opts, &block)
2677
- name = opts[:name]
2678
- if associations.include?(name) && !dynamic_opts[:callback] && !dynamic_opts[:reload]
2679
- associations[name]
2680
- else
2681
- objs = _load_associated_objects(opts, dynamic_opts)
2682
- if opts.set_reciprocal_to_self?
2683
- if opts.returns_array?
2684
- objs.each{|o| add_reciprocal_object(opts, o)}
2685
- elsif objs
2686
- add_reciprocal_object(opts, objs)
2687
- end
2688
- end
2689
-
2690
- # If the current object is frozen, you can't update the associations
2691
- # cache. This can cause issues for after_load procs that expect
2692
- # the objects to be already cached in the associations, but
2693
- # unfortunately that case cannot be handled.
2694
- associations[name] = objs unless frozen?
2695
- run_association_callbacks(opts, :after_load, objs)
2696
- frozen? ? objs : associations[name]
2697
- end
2698
- end
2699
-
2700
- # Whether to use a simple primary key lookup on the associated class when loading.
2701
- def load_with_primary_key_lookup?(opts, dynamic_opts)
2702
- opts[:type] == :many_to_one &&
2703
- !dynamic_opts[:callback] &&
2704
- opts.send(:cached_fetch, :many_to_one_pk_lookup){opts.primary_key == opts.associated_class.primary_key}
2705
- end
2706
-
2707
- # Convert the input of the add_* association method into an associated object. For
2708
- # hashes, this creates a new object using the hash. For integers, strings, and arrays,
2709
- # assume the value specifies a primary key, and lookup an existing object with that primary key.
2710
- # Otherwise, if the object is not already an instance of the class, raise an exception.
2711
- def make_add_associated_object(opts, o)
2712
- klass = opts.associated_class
2713
-
2714
- case o
2715
- when Hash
2716
- klass.new(o)
2717
- when Integer, String, Array
2718
- klass.with_pk!(o)
2719
- when klass
2720
- o
2721
- else
2722
- raise(Sequel::Error, "associated object #{o.inspect} not of correct type #{klass}")
2723
- end
2724
- end
2725
-
2726
- # Remove all associated objects from the given association
2727
- def remove_all_associated_objects(opts, *args)
2728
- raise(Sequel::Error, "model object #{inspect} does not have a primary key") if opts.dataset_need_primary_key? && !pk
2729
- # Allow calling private _remove_all method
2730
- send(opts[:_remove_all_method], *args)
2731
- ret = associations[opts[:name]].each{|o| remove_reciprocal_object(opts, o)} if associations.include?(opts[:name])
2732
- associations[opts[:name]] = []
2733
- ret
2734
- end
2735
- # :nocov:
2736
- ruby2_keywords(:remove_all_associated_objects) if respond_to?(:ruby2_keywords, true)
2737
- # :nocov:
2738
-
2739
- # Remove the given associated object from the given association
2740
- def remove_associated_object(opts, o, *args)
2741
- klass = opts.associated_class
2742
- if o.is_a?(Integer) || o.is_a?(String) || o.is_a?(Array)
2743
- o = remove_check_existing_object_from_pk(opts, o, *args)
2744
- elsif !o.is_a?(klass)
2745
- raise(Sequel::Error, "associated object #{o.inspect} not of correct type #{klass}")
2746
- elsif opts.remove_should_check_existing? && public_send(opts.dataset_method).where(o.pk_hash).empty?
2747
- raise(Sequel::Error, "associated object #{o.inspect} is not currently associated to #{inspect}")
2748
- end
2749
- raise(Sequel::Error, "model object #{inspect} does not have a primary key") if opts.dataset_need_primary_key? && !pk
2750
- raise(Sequel::Error, "associated object #{o.inspect} does not have a primary key") if opts.need_associated_primary_key? && !o.pk
2751
- return if run_association_callbacks(opts, :before_remove, o) == false
2752
- # Allow calling private _remove method
2753
- return if !send(opts[:_remove_method], o, *args) && opts.handle_silent_modification_failure?
2754
- associations[opts[:name]].delete_if{|x| o === x} if associations.include?(opts[:name])
2755
- remove_reciprocal_object(opts, o)
2756
- run_association_callbacks(opts, :after_remove, o)
2757
- o
2758
- end
2759
- # :nocov:
2760
- ruby2_keywords(:remove_associated_object) if respond_to?(:ruby2_keywords, true)
2761
- # :nocov:
2762
-
2763
- # Check that the object from the associated table specified by the primary key
2764
- # is currently associated to the receiver. If it is associated, return the object, otherwise
2765
- # raise an error.
2766
- def remove_check_existing_object_from_pk(opts, o, *args)
2767
- key = o
2768
- pkh = opts.associated_class.qualified_primary_key_hash(key)
2769
- raise(Sequel::Error, "no object with key(s) #{key.inspect} is currently associated to #{inspect}") unless o = public_send(opts.dataset_method).first(pkh)
2770
- o
2771
- end
2772
-
2773
- # Remove/unset the current object from/as the given object's reciprocal association.
2774
- def remove_reciprocal_object(opts, o)
2775
- return unless reciprocal = opts.reciprocal
2776
- if opts.reciprocal_array?
2777
- if array = o.associations[reciprocal]
2778
- array.delete_if{|x| self === x}
2779
- end
2780
- else
2781
- o.associations[reciprocal] = nil
2782
- end
2783
- end
2784
-
2785
- # Run the callback for the association with the object.
2786
- def run_association_callbacks(reflection, callback_type, object)
2787
- return unless cbs = reflection[callback_type]
2788
-
2789
- begin
2790
- cbs.each do |cb|
2791
- case cb
2792
- when Symbol
2793
- # Allow calling private methods in association callbacks
2794
- send(cb, object)
2795
- when Proc
2796
- cb.call(self, object)
2797
- else
2798
- raise Error, "callbacks should either be Procs or Symbols"
2799
- end
2800
- end
2801
- rescue HookFailed
2802
- # The reason we automatically set raise_error for singular associations is that
2803
- # assignment in ruby always returns the argument instead of the result of the
2804
- # method, so we can't return nil to signal that the association callback prevented
2805
- # the modification
2806
- return false unless raise_on_save_failure || !reflection.returns_array?
2807
- raise
2808
- end
2809
- end
2810
-
2811
- # Set the given object as the associated object for the given *_to_one association reflection
2812
- def _set_associated_object(opts, o)
2813
- a = associations[opts[:name]]
2814
- reciprocal = opts.reciprocal
2815
- if set_associated_object_if_same?
2816
- if reciprocal
2817
- remove_reciprocal = a && (a != o || a.associations[reciprocal] != self)
2818
- add_reciprocal = o && o.associations[reciprocal] != self
2819
- end
2820
- else
2821
- return if a && a == o
2822
- if reciprocal
2823
- remove_reciprocal = a
2824
- add_reciprocal = o
2825
- end
2826
- end
2827
- run_association_callbacks(opts, :before_set, o)
2828
- remove_reciprocal_object(opts, a) if remove_reciprocal
2829
- # Allow calling private _setter method
2830
- send(opts[:_setter_method], o)
2831
- associations[opts[:name]] = o
2832
- add_reciprocal_object(opts, o) if add_reciprocal
2833
- run_association_callbacks(opts, :after_set, o)
2834
- o
2835
- end
2836
-
2837
- # Whether run the associated object setter code if passed the same object as the one already
2838
- # cached in the association. Usually not set (so nil), can be set on a per-object basis
2839
- # if necessary.
2840
- def set_associated_object_if_same?
2841
- @set_associated_object_if_same
2842
- end
2843
-
2844
- # Set the given object as the associated object for the given many_to_one association reflection
2845
- def set_associated_object(opts, o)
2846
- raise(Error, "associated object #{o.inspect} does not have a primary key") if o && !o.pk
2847
- _set_associated_object(opts, o)
2848
- end
2849
-
2850
- # Set the given object as the associated object for the given one_through_one association reflection
2851
- def set_one_through_one_associated_object(opts, o)
2852
- raise(Error, "object #{inspect} does not have a primary key") unless pk
2853
- raise(Error, "associated object #{o.inspect} does not have a primary key") if o && !o.pk
2854
- _set_associated_object(opts, o)
2855
- end
2856
-
2857
- # Set the given object as the associated object for the given one_to_one association reflection
2858
- def set_one_to_one_associated_object(opts, o)
2859
- raise(Error, "object #{inspect} does not have a primary key") unless pk
2860
- _set_associated_object(opts, o)
2861
- end
2862
- end
2863
-
2864
- # Eager loading makes it so that you can load all associated records for a
2865
- # set of objects in a single query, instead of a separate query for each object.
2866
- #
2867
- # Two separate implementations are provided. +eager+ should be used most of the
2868
- # time, as it loads associated records using one query per association. However,
2869
- # it does not allow you the ability to filter or order based on columns in associated tables. +eager_graph+ loads
2870
- # all records in a single query using JOINs, allowing you to filter or order based on columns in associated
2871
- # tables. However, +eager_graph+ is usually slower than +eager+, especially if multiple
2872
- # one_to_many or many_to_many associations are joined.
2873
- #
2874
- # You can cascade the eager loading (loading associations on associated objects)
2875
- # with no limit to the depth of the cascades. You do this by passing a hash to +eager+ or +eager_graph+
2876
- # with the keys being associations of the current model and values being
2877
- # associations of the model associated with the current model via the key.
2878
- #
2879
- # The arguments can be symbols or hashes with symbol keys (for cascaded
2880
- # eager loading). Examples:
2881
- #
2882
- # Album.eager(:artist).all
2883
- # Album.eager_graph(:artist).all
2884
- # Album.eager(:artist, :genre).all
2885
- # Album.eager_graph(:artist, :genre).all
2886
- # Album.eager(:artist).eager(:genre).all
2887
- # Album.eager_graph(:artist).eager_graph(:genre).all
2888
- # Artist.eager(albums: :tracks).all
2889
- # Artist.eager_graph(albums: :tracks).all
2890
- # Artist.eager(albums: {tracks: :genre}).all
2891
- # Artist.eager_graph(albums: {tracks: :genre}).all
2892
- #
2893
- # You can also pass a callback as a hash value in order to customize the dataset being
2894
- # eager loaded at query time, analogous to the way the :eager_block association option
2895
- # allows you to customize it at association definition time. For example,
2896
- # if you wanted artists with their albums since 1990:
2897
- #
2898
- # Artist.eager(albums: proc{|ds| ds.where{year > 1990}})
2899
- #
2900
- # Or if you needed albums and their artist's name only, using a single query:
2901
- #
2902
- # Albums.eager_graph(artist: proc{|ds| ds.select(:name)})
2903
- #
2904
- # To cascade eager loading while using a callback, you substitute the cascaded
2905
- # associations with a single entry hash that has the proc callback as the key and
2906
- # the cascaded associations as the value. This will load artists with their albums
2907
- # since 1990, and also the tracks on those albums and the genre for those tracks:
2908
- #
2909
- # Artist.eager(albums: {proc{|ds| ds.where{year > 1990}}=>{tracks: :genre}})
2910
- module DatasetMethods
2911
- %w'inner left right full'.each do |type|
2912
- class_eval(<<-END, __FILE__, __LINE__+1)
2913
- def association_#{type}_join(*associations)
2914
- _association_join(:#{type}, associations)
2915
- end
2916
- END
2917
- end
2918
-
2919
- # Adds one or more INNER JOINs to the existing dataset using the keys and conditions
2920
- # specified by the given association(s). Take the same arguments as eager_graph, and
2921
- # operates similarly, but only adds the joins as opposed to making the other changes
2922
- # (such as adding selected columns and setting up eager loading).
2923
- #
2924
- # The following methods also exist for specifying a different type of JOIN:
2925
- #
2926
- # association_full_join :: FULL JOIN
2927
- # association_inner_join :: INNER JOIN
2928
- # association_left_join :: LEFT JOIN
2929
- # association_right_join :: RIGHT JOIN
2930
- #
2931
- # Examples:
2932
- #
2933
- # # For each album, association_join load the artist
2934
- # Album.association_join(:artist).all
2935
- # # SELECT *
2936
- # # FROM albums
2937
- # # INNER JOIN artists AS artist ON (artists.id = albums.artist_id)
2938
- #
2939
- # # For each album, association_join load the artist, using a specified alias
2940
- # Album.association_join(Sequel[:artist].as(:a)).all
2941
- # # SELECT *
2942
- # # FROM albums
2943
- # # INNER JOIN artists AS a ON (a.id = albums.artist_id)
2944
- #
2945
- # # For each album, association_join load the artist and genre
2946
- # Album.association_join(:artist, :genre).all
2947
- # Album.association_join(:artist).association_join(:genre).all
2948
- # # SELECT *
2949
- # # FROM albums
2950
- # # INNER JOIN artists AS artist ON (artist.id = albums.artist_id)
2951
- # # INNER JOIN genres AS genre ON (genre.id = albums.genre_id)
2952
- #
2953
- # # For each artist, association_join load albums and tracks for each album
2954
- # Artist.association_join(albums: :tracks).all
2955
- # # SELECT *
2956
- # # FROM artists
2957
- # # INNER JOIN albums ON (albums.artist_id = artists.id)
2958
- # # INNER JOIN tracks ON (tracks.album_id = albums.id)
2959
- #
2960
- # # For each artist, association_join load albums, tracks for each album, and genre for each track
2961
- # Artist.association_join(albums: {tracks: :genre}).all
2962
- # # SELECT *
2963
- # # FROM artists
2964
- # # INNER JOIN albums ON (albums.artist_id = artists.id)
2965
- # # INNER JOIN tracks ON (tracks.album_id = albums.id)
2966
- # # INNER JOIN genres AS genre ON (genre.id = tracks.genre_id)
2967
- #
2968
- # # For each artist, association_join load albums with year > 1990
2969
- # Artist.association_join(albums: proc{|ds| ds.where{year > 1990}}).all
2970
- # # SELECT *
2971
- # # FROM artists
2972
- # # INNER JOIN (
2973
- # # SELECT * FROM albums WHERE (year > 1990)
2974
- # # ) AS albums ON (albums.artist_id = artists.id)
2975
- #
2976
- # # For each artist, association_join load albums and tracks 1-10 for each album
2977
- # Artist.association_join(albums: {tracks: proc{|ds| ds.where(number: 1..10)}}).all
2978
- # # SELECT *
2979
- # # FROM artists
2980
- # # INNER JOIN albums ON (albums.artist_id = artists.id)
2981
- # # INNER JOIN (
2982
- # # SELECT * FROM tracks WHERE ((number >= 1) AND (number <= 10))
2983
- # # ) AS tracks ON (tracks.albums_id = albums.id)
2984
- #
2985
- # # For each artist, association_join load albums with year > 1990, and tracks for those albums
2986
- # Artist.association_join(albums: {proc{|ds| ds.where{year > 1990}}=>:tracks}).all
2987
- # # SELECT *
2988
- # # FROM artists
2989
- # # INNER JOIN (
2990
- # # SELECT * FROM albums WHERE (year > 1990)
2991
- # # ) AS albums ON (albums.artist_id = artists.id)
2992
- # # INNER JOIN tracks ON (tracks.album_id = albums.id)
2993
- def association_join(*associations)
2994
- association_inner_join(*associations)
2995
- end
2996
-
2997
- # If the expression is in the form <tt>x = y</tt> where +y+ is a <tt>Sequel::Model</tt>
2998
- # instance, array of <tt>Sequel::Model</tt> instances, or a <tt>Sequel::Model</tt> dataset,
2999
- # assume +x+ is an association symbol and look up the association reflection
3000
- # via the dataset's model. From there, return the appropriate SQL based on the type of
3001
- # association and the values of the foreign/primary keys of +y+. For most association
3002
- # types, this is a simple transformation, but for +many_to_many+ associations this
3003
- # creates a subquery to the join table.
3004
- def complex_expression_sql_append(sql, op, args)
3005
- r = args[1]
3006
- if (((op == :'=' || op == :'!=') && r.is_a?(Sequel::Model)) ||
3007
- (multiple = ((op == :IN || op == :'NOT IN') && ((is_ds = r.is_a?(Sequel::Dataset)) || (r.respond_to?(:all?) && r.all?{|x| x.is_a?(Sequel::Model)})))))
3008
- l = args[0]
3009
- if ar = model.association_reflections[l]
3010
- raise Error, "filtering by associations is not allowed for #{ar.inspect}" if ar[:allow_filtering_by] == false
3011
-
3012
- if multiple
3013
- klass = ar.associated_class
3014
- if is_ds
3015
- if r.respond_to?(:model)
3016
- unless r.model <= klass
3017
- # A dataset for a different model class, could be a valid regular query
3018
- return super
3019
- end
3020
- else
3021
- # Not a model dataset, could be a valid regular query
3022
- return super
3023
- end
3024
- else
3025
- unless r.all?{|x| x.is_a?(klass)}
3026
- raise Sequel::Error, "invalid association class for one object for association #{l.inspect} used in dataset filter for model #{model.inspect}, expected class #{klass.inspect}"
3027
- end
3028
- end
3029
- elsif !r.is_a?(ar.associated_class)
3030
- raise Sequel::Error, "invalid association class #{r.class.inspect} for association #{l.inspect} used in dataset filter for model #{model.inspect}, expected class #{ar.associated_class.inspect}"
3031
- end
3032
-
3033
- if exp = association_filter_expression(op, ar, r)
3034
- literal_append(sql, exp)
3035
- else
3036
- raise Sequel::Error, "invalid association type #{ar[:type].inspect} for association #{l.inspect} used in dataset filter for model #{model.inspect}"
3037
- end
3038
- elsif multiple && (is_ds || r.empty?)
3039
- # Not a query designed for this support, could be a valid regular query
3040
- super
3041
- else
3042
- raise Sequel::Error, "invalid association #{l.inspect} used in dataset filter for model #{model.inspect}"
3043
- end
3044
- else
3045
- super
3046
- end
3047
- end
3048
-
3049
- # The preferred eager loading method. Loads all associated records using one
3050
- # query for each association.
3051
- #
3052
- # The basic idea for how it works is that the dataset is first loaded normally.
3053
- # Then it goes through all associations that have been specified via +eager+.
3054
- # It loads each of those associations separately, then associates them back
3055
- # to the original dataset via primary/foreign keys. Due to the necessity of
3056
- # all objects being present, you need to use +all+ to use eager loading, as it
3057
- # can't work with +each+.
3058
- #
3059
- # This implementation avoids the complexity of extracting an object graph out
3060
- # of a single dataset, by building the object graph out of multiple datasets,
3061
- # one for each association. By using a separate dataset for each association,
3062
- # it avoids problems such as aliasing conflicts and creating cartesian product
3063
- # result sets if multiple one_to_many or many_to_many eager associations are requested.
3064
- #
3065
- # One limitation of using this method is that you cannot filter the current dataset
3066
- # based on values of columns in an associated table, since the associations are loaded
3067
- # in separate queries. To do that you need to load all associations in the
3068
- # same query, and extract an object graph from the results of that query. If you
3069
- # need to filter based on columns in associated tables, look at +eager_graph+
3070
- # or join the tables you need to filter on manually.
3071
- #
3072
- # Each association's order, if defined, is respected.
3073
- # If the association uses a block or has an :eager_block argument, it is used.
3074
- #
3075
- # To modify the associated dataset that will be used for the eager load, you should use a
3076
- # hash for the association, with the key being the association name symbol, and the value being
3077
- # a callable object that is called with the associated dataset and should return a modified
3078
- # dataset. If that association also has dependent associations, instead of a callable object,
3079
- # use a hash with the callable object being the key, and the dependent association(s) as the value.
3080
- #
3081
- # Examples:
3082
- #
3083
- # # For each album, eager load the artist
3084
- # Album.eager(:artist).all
3085
- # # SELECT * FROM albums
3086
- # # SELECT * FROM artists WHERE (id IN (...))
3087
- #
3088
- # # For each album, eager load the artist and genre
3089
- # Album.eager(:artist, :genre).all
3090
- # Album.eager(:artist).eager(:genre).all
3091
- # # SELECT * FROM albums
3092
- # # SELECT * FROM artists WHERE (id IN (...))
3093
- # # SELECT * FROM genres WHERE (id IN (...))
3094
- #
3095
- # # For each artist, eager load albums and tracks for each album
3096
- # Artist.eager(albums: :tracks).all
3097
- # # SELECT * FROM artists
3098
- # # SELECT * FROM albums WHERE (artist_id IN (...))
3099
- # # SELECT * FROM tracks WHERE (album_id IN (...))
3100
- #
3101
- # # For each artist, eager load albums, tracks for each album, and genre for each track
3102
- # Artist.eager(albums: {tracks: :genre}).all
3103
- # # SELECT * FROM artists
3104
- # # SELECT * FROM albums WHERE (artist_id IN (...))
3105
- # # SELECT * FROM tracks WHERE (album_id IN (...))
3106
- # # SELECT * FROM genre WHERE (id IN (...))
3107
- #
3108
- # # For each artist, eager load albums with year > 1990
3109
- # Artist.eager(albums: proc{|ds| ds.where{year > 1990}}).all
3110
- # # SELECT * FROM artists
3111
- # # SELECT * FROM albums WHERE ((year > 1990) AND (artist_id IN (...)))
3112
- #
3113
- # # For each artist, eager load albums and tracks 1-10 for each album
3114
- # Artist.eager(albums: {tracks: proc{|ds| ds.where(number: 1..10)}}).all
3115
- # # SELECT * FROM artists
3116
- # # SELECT * FROM albums WHERE (artist_id IN (...))
3117
- # # SELECT * FROM tracks WHERE ((number >= 1) AND (number <= 10) AND (album_id IN (...)))
3118
- #
3119
- # # For each artist, eager load albums with year > 1990, and tracks for those albums
3120
- # Artist.eager(albums: {proc{|ds| ds.where{year > 1990}}=>:tracks}).all
3121
- # # SELECT * FROM artists
3122
- # # SELECT * FROM albums WHERE ((year > 1990) AND (artist_id IN (...)))
3123
- # # SELECT * FROM albums WHERE (artist_id IN (...))
3124
- def eager(*associations)
3125
- opts = @opts[:eager]
3126
- association_opts = eager_options_for_associations(associations)
3127
- opts = opts ? opts.merge(association_opts) : association_opts
3128
- clone(:eager=>opts.freeze)
3129
- end
3130
-
3131
- # The secondary eager loading method. Loads all associations in a single query. This
3132
- # method should only be used if you need to filter or order based on columns in associated tables,
3133
- # or if you have done comparative benchmarking and determined it is faster.
3134
- #
3135
- # This method uses <tt>Dataset#graph</tt> to create appropriate aliases for columns in all the
3136
- # tables. Then it uses the graph's metadata to build the associations from the single hash, and
3137
- # finally replaces the array of hashes with an array model objects inside all.
3138
- #
3139
- # Be very careful when using this with multiple one_to_many or many_to_many associations, as you can
3140
- # create large cartesian products. If you must graph multiple one_to_many and many_to_many associations,
3141
- # make sure your filters are narrow if the datasets are large.
3142
- #
3143
- # Each association's order, if defined, is respected. +eager_graph+ probably
3144
- # won't work correctly on a limited dataset, unless you are
3145
- # only graphing many_to_one, one_to_one, and one_through_one associations.
3146
- #
3147
- # Does not use the block defined for the association, since it does a single query for
3148
- # all objects. You can use the :graph_* association options to modify the SQL query.
3149
- #
3150
- # Like +eager+, you need to call +all+ on the dataset for the eager loading to work. If you just
3151
- # call +each+, it will yield plain hashes, each containing all columns from all the tables.
3152
- #
3153
- # To modify the associated dataset that will be joined to the current dataset, you should use a
3154
- # hash for the association, with the key being the association name symbol, and the value being
3155
- # a callable object that is called with the associated dataset and should return a modified
3156
- # dataset. If that association also has dependent associations, instead of a callable object,
3157
- # use a hash with the callable object being the key, and the dependent association(s) as the value.
3158
- #
3159
- # You can specify an custom alias and/or join type on a per-association basis by providing an
3160
- # Sequel::SQL::AliasedExpression object instead of an a Symbol for the association name.
3161
- #
3162
- # You cannot mix calls to +eager_graph+ and +graph+ on the same dataset.
3163
- #
3164
- # Examples:
3165
- #
3166
- # # For each album, eager_graph load the artist
3167
- # Album.eager_graph(:artist).all
3168
- # # SELECT ...
3169
- # # FROM albums
3170
- # # LEFT OUTER JOIN artists AS artist ON (artists.id = albums.artist_id)
3171
- #
3172
- # # For each album, eager_graph load the artist, using a specified alias
3173
- # Album.eager_graph(Sequel[:artist].as(:a)).all
3174
- # # SELECT ...
3175
- # # FROM albums
3176
- # # LEFT OUTER JOIN artists AS a ON (a.id = albums.artist_id)
3177
- #
3178
- # # For each album, eager_graph load the artist, using a specified alias
3179
- # # and custom join type
3180
- #
3181
- # Album.eager_graph(Sequel[:artist].as(:a, join_type: :inner)).all
3182
- # # SELECT ...
3183
- # # FROM albums
3184
- # # INNER JOIN artists AS a ON (a.id = albums.artist_id)
3185
- #
3186
- # # For each album, eager_graph load the artist and genre
3187
- # Album.eager_graph(:artist, :genre).all
3188
- # Album.eager_graph(:artist).eager_graph(:genre).all
3189
- # # SELECT ...
3190
- # # FROM albums
3191
- # # LEFT OUTER JOIN artists AS artist ON (artist.id = albums.artist_id)
3192
- # # LEFT OUTER JOIN genres AS genre ON (genre.id = albums.genre_id)
3193
- #
3194
- # # For each artist, eager_graph load albums and tracks for each album
3195
- # Artist.eager_graph(albums: :tracks).all
3196
- # # SELECT ...
3197
- # # FROM artists
3198
- # # LEFT OUTER JOIN albums ON (albums.artist_id = artists.id)
3199
- # # LEFT OUTER JOIN tracks ON (tracks.album_id = albums.id)
3200
- #
3201
- # # For each artist, eager_graph load albums, tracks for each album, and genre for each track
3202
- # Artist.eager_graph(albums: {tracks: :genre}).all
3203
- # # SELECT ...
3204
- # # FROM artists
3205
- # # LEFT OUTER JOIN albums ON (albums.artist_id = artists.id)
3206
- # # LEFT OUTER JOIN tracks ON (tracks.album_id = albums.id)
3207
- # # LEFT OUTER JOIN genres AS genre ON (genre.id = tracks.genre_id)
3208
- #
3209
- # # For each artist, eager_graph load albums with year > 1990
3210
- # Artist.eager_graph(albums: proc{|ds| ds.where{year > 1990}}).all
3211
- # # SELECT ...
3212
- # # FROM artists
3213
- # # LEFT OUTER JOIN (
3214
- # # SELECT * FROM albums WHERE (year > 1990)
3215
- # # ) AS albums ON (albums.artist_id = artists.id)
3216
- #
3217
- # # For each artist, eager_graph load albums and tracks 1-10 for each album
3218
- # Artist.eager_graph(albums: {tracks: proc{|ds| ds.where(number: 1..10)}}).all
3219
- # # SELECT ...
3220
- # # FROM artists
3221
- # # LEFT OUTER JOIN albums ON (albums.artist_id = artists.id)
3222
- # # LEFT OUTER JOIN (
3223
- # # SELECT * FROM tracks WHERE ((number >= 1) AND (number <= 10))
3224
- # # ) AS tracks ON (tracks.albums_id = albums.id)
3225
- #
3226
- # # For each artist, eager_graph load albums with year > 1990, and tracks for those albums
3227
- # Artist.eager_graph(albums: {proc{|ds| ds.where{year > 1990}}=>:tracks}).all
3228
- # # SELECT ...
3229
- # # FROM artists
3230
- # # LEFT OUTER JOIN (
3231
- # # SELECT * FROM albums WHERE (year > 1990)
3232
- # # ) AS albums ON (albums.artist_id = artists.id)
3233
- # # LEFT OUTER JOIN tracks ON (tracks.album_id = albums.id)
3234
- def eager_graph(*associations)
3235
- eager_graph_with_options(associations)
3236
- end
3237
-
3238
- # Run eager_graph with some options specific to just this call. Unlike eager_graph, this takes
3239
- # the associations as a single argument instead of multiple arguments.
3240
- #
3241
- # Options:
3242
- #
3243
- # :join_type :: Override the join type specified in the association
3244
- # :limit_strategy :: Use a strategy for handling limits on associations.
3245
- # Appropriate :limit_strategy values are:
3246
- # true :: Pick the most appropriate based on what the database supports
3247
- # :distinct_on :: Force use of DISTINCT ON stategy (*_one associations only)
3248
- # :correlated_subquery :: Force use of correlated subquery strategy (one_to_* associations only)
3249
- # :window_function :: Force use of window function strategy
3250
- # :ruby :: Don't modify the SQL, implement limits/offsets with array slicing
3251
- #
3252
- # This can also be a hash with association name symbol keys and one of the above values,
3253
- # to use different strategies per association.
3254
- #
3255
- # The default is the :ruby strategy. Choosing a different strategy can make your code
3256
- # significantly slower in some cases (perhaps even the majority of cases), so you should
3257
- # only use this if you have benchmarked that it is faster for your use cases.
3258
- def eager_graph_with_options(associations, opts=OPTS)
3259
- return self if associations.empty?
3260
-
3261
- opts = opts.dup unless opts.frozen?
3262
- associations = [associations] unless associations.is_a?(Array)
3263
- ds = if eg = @opts[:eager_graph]
3264
- eg = eg.dup
3265
- [:requirements, :reflections, :reciprocals, :limits].each{|k| eg[k] = eg[k].dup}
3266
- eg[:local] = opts
3267
- ds = clone(:eager_graph=>eg)
3268
- ds.eager_graph_associations(ds, model, ds.opts[:eager_graph][:master], [], *associations)
3269
- else
3270
- # Each of the following have a symbol key for the table alias, with the following values:
3271
- # :reciprocals :: the reciprocal value to use for this association
3272
- # :reflections :: AssociationReflection instance related to this association
3273
- # :requirements :: array of requirements for this association
3274
- # :limits :: Any limit/offset array slicing that need to be handled in ruby land after loading
3275
- opts = {:requirements=>{}, :master=>alias_symbol(first_source), :reflections=>{}, :reciprocals=>{}, :limits=>{}, :local=>opts, :cartesian_product_number=>0, :row_proc=>row_proc}
3276
- ds = clone(:eager_graph=>opts)
3277
- ds = ds.eager_graph_associations(ds, model, ds.opts[:eager_graph][:master], [], *associations).naked
3278
- end
3279
-
3280
- ds.opts[:eager_graph].freeze
3281
- ds.opts[:eager_graph].each_value{|v| v.freeze if v.is_a?(Hash)}
3282
- ds
3283
- end
3284
-
3285
- # If the dataset is being eagerly loaded, default to calling all
3286
- # instead of each.
3287
- def as_hash(key_column=nil, value_column=nil, opts=OPTS)
3288
- if (@opts[:eager_graph] || @opts[:eager]) && !opts.has_key?(:all)
3289
- opts = Hash[opts]
3290
- opts[:all] = true
3291
- end
3292
- super
3293
- end
3294
-
3295
- # If the dataset is being eagerly loaded, default to calling all
3296
- # instead of each.
3297
- def to_hash_groups(key_column, value_column=nil, opts=OPTS)
3298
- if (@opts[:eager_graph] || @opts[:eager]) && !opts.has_key?(:all)
3299
- opts = Hash[opts]
3300
- opts[:all] = true
3301
- end
3302
- super
3303
- end
3304
-
3305
- # Do not attempt to split the result set into associations,
3306
- # just return results as simple objects. This is useful if you
3307
- # want to use eager_graph as a shortcut to have all of the joins
3308
- # and aliasing set up, but want to do something else with the dataset.
3309
- def ungraphed
3310
- ds = super.clone(:eager_graph=>nil)
3311
- if (eg = @opts[:eager_graph]) && (rp = eg[:row_proc])
3312
- ds = ds.with_row_proc(rp)
3313
- end
3314
- ds
3315
- end
3316
-
3317
- protected
3318
-
3319
- # Call graph on the association with the correct arguments,
3320
- # update the eager_graph data structure, and recurse into
3321
- # eager_graph_associations if there are any passed in associations
3322
- # (which would be dependencies of the current association)
3323
- #
3324
- # Arguments:
3325
- # ds :: Current dataset
3326
- # model :: Current Model
3327
- # ta :: table_alias used for the parent association
3328
- # requirements :: an array, used as a stack for requirements
3329
- # r :: association reflection for the current association, or an SQL::AliasedExpression
3330
- # with the reflection as the expression, the alias base as the alias (or nil to
3331
- # use the default alias), and an optional hash with a :join_type entry as the columns
3332
- # to use a custom join type.
3333
- # *associations :: any associations dependent on this one
3334
- def eager_graph_association(ds, model, ta, requirements, r, *associations)
3335
- if r.is_a?(SQL::AliasedExpression)
3336
- alias_base = r.alias
3337
- if r.columns.is_a?(Hash)
3338
- join_type = r.columns[:join_type]
3339
- end
3340
- r = r.expression
3341
- else
3342
- alias_base = r[:graph_alias_base]
3343
- end
3344
- assoc_table_alias = ds.unused_table_alias(alias_base)
3345
- loader = r[:eager_grapher]
3346
- if !associations.empty?
3347
- if associations.first.respond_to?(:call)
3348
- callback = associations.first
3349
- associations = {}
3350
- elsif associations.length == 1 && (assocs = associations.first).is_a?(Hash) && assocs.length == 1 && (pr_assoc = assocs.to_a.first) && pr_assoc.first.respond_to?(:call)
3351
- callback, assoc = pr_assoc
3352
- associations = assoc.is_a?(Array) ? assoc : [assoc]
3353
- end
3354
- end
3355
- local_opts = ds.opts[:eager_graph][:local]
3356
- limit_strategy = r.eager_graph_limit_strategy(local_opts[:limit_strategy])
3357
-
3358
- if r[:conditions] && !Sequel.condition_specifier?(r[:conditions]) && !r[:orig_opts].has_key?(:graph_conditions) && !r[:orig_opts].has_key?(:graph_only_conditions) && !r.has_key?(:graph_block)
3359
- raise Error, "Cannot eager_graph association when :conditions specified and not a hash or an array of pairs. Specify :graph_conditions, :graph_only_conditions, or :graph_block for the association. Model: #{r[:model]}, association: #{r[:name]}"
3360
- end
3361
-
3362
- ds = loader.call(:self=>ds, :table_alias=>assoc_table_alias, :implicit_qualifier=>(ta == ds.opts[:eager_graph][:master]) ? first_source : qualifier_from_alias_symbol(ta, first_source), :callback=>callback, :join_type=>join_type || local_opts[:join_type], :join_only=>local_opts[:join_only], :limit_strategy=>limit_strategy, :from_self_alias=>ds.opts[:eager_graph][:master])
3363
- if r[:order_eager_graph] && (order = r.fetch(:graph_order, r[:order]))
3364
- ds = ds.order_append(*qualified_expression(order, assoc_table_alias))
3365
- end
3366
- eager_graph = ds.opts[:eager_graph]
3367
- eager_graph[:requirements][assoc_table_alias] = requirements.dup
3368
- eager_graph[:reflections][assoc_table_alias] = r
3369
- if limit_strategy == :ruby
3370
- eager_graph[:limits][assoc_table_alias] = r.limit_and_offset
3371
- end
3372
- eager_graph[:cartesian_product_number] += r[:cartesian_product_number] || 2
3373
- ds = ds.eager_graph_associations(ds, r.associated_class, assoc_table_alias, requirements + [assoc_table_alias], *associations) unless associations.empty?
3374
- ds
3375
- end
3376
-
3377
- # Check the associations are valid for the given model.
3378
- # Call eager_graph_association on each association.
3379
- #
3380
- # Arguments:
3381
- # ds :: Current dataset
3382
- # model :: Current Model
3383
- # ta :: table_alias used for the parent association
3384
- # requirements :: an array, used as a stack for requirements
3385
- # *associations :: the associations to add to the graph
3386
- def eager_graph_associations(ds, model, ta, requirements, *associations)
3387
- associations.flatten.each do |association|
3388
- ds = case association
3389
- when Symbol, SQL::AliasedExpression
3390
- ds.eager_graph_association(ds, model, ta, requirements, eager_graph_check_association(model, association))
3391
- when Hash
3392
- association.each do |assoc, assoc_assocs|
3393
- ds = ds.eager_graph_association(ds, model, ta, requirements, eager_graph_check_association(model, assoc), assoc_assocs)
3394
- end
3395
- ds
3396
- else
3397
- raise(Sequel::Error, 'Associations must be in the form of a symbol or hash')
3398
- end
3399
- end
3400
- ds
3401
- end
3402
-
3403
- # Replace the array of plain hashes with an array of model objects will all eager_graphed
3404
- # associations set in the associations cache for each object.
3405
- def eager_graph_build_associations(hashes)
3406
- hashes.replace(_eager_graph_build_associations(hashes, eager_graph_loader))
3407
- end
3408
-
3409
- private
3410
-
3411
- # Return a new dataset with JOINs of the given type added, using the tables and
3412
- # conditions specified by the associations.
3413
- def _association_join(type, associations)
3414
- clone(:join=>clone(:graph_from_self=>false).eager_graph_with_options(associations, :join_type=>type, :join_only=>true).opts[:join])
3415
- end
3416
-
3417
- # Process the array of hashes using the eager graph loader to return an array
3418
- # of model objects with the associations set.
3419
- def _eager_graph_build_associations(hashes, egl)
3420
- egl.load(hashes)
3421
- end
3422
-
3423
- # If the association has conditions itself, then it requires additional filters be
3424
- # added to the current dataset to ensure that the passed in object would also be
3425
- # included by the association's conditions.
3426
- def add_association_filter_conditions(ref, obj, expr)
3427
- if expr != SQL::Constants::FALSE && ref.filter_by_associations_add_conditions?
3428
- Sequel[ref.filter_by_associations_conditions_expression(obj)]
3429
- else
3430
- expr
3431
- end
3432
- end
3433
-
3434
- # Process the array of associations arguments (Symbols, Arrays, and Hashes),
3435
- # and return a hash of options suitable for cascading.
3436
- def eager_options_for_associations(associations)
3437
- opts = {}
3438
- associations.flatten.each do |association|
3439
- case association
3440
- when Symbol
3441
- check_association(model, association)
3442
- opts[association] = nil
3443
- when Hash
3444
- association.keys.each{|assoc| check_association(model, assoc)}
3445
- opts.merge!(association)
3446
- else
3447
- raise(Sequel::Error, 'Associations must be in the form of a symbol or hash')
3448
- end
3449
- end
3450
- opts
3451
- end
3452
-
3453
- # Return an expression for filtering by the given association reflection and associated object.
3454
- def association_filter_expression(op, ref, obj)
3455
- meth = :"#{ref[:type]}_association_filter_expression"
3456
- # Allow calling private association specific method to get filter expression
3457
- send(meth, op, ref, obj) if respond_to?(meth, true)
3458
- end
3459
-
3460
- # Handle inversion for association filters by returning an inverted expression,
3461
- # plus also handling cases where the referenced columns are NULL.
3462
- def association_filter_handle_inversion(op, exp, cols)
3463
- if op == :'!=' || op == :'NOT IN'
3464
- if exp == SQL::Constants::FALSE
3465
- ~exp
3466
- else
3467
- ~exp | Sequel::SQL::BooleanExpression.from_value_pairs(cols.zip([]), :OR)
3468
- end
3469
- else
3470
- exp
3471
- end
3472
- end
3473
-
3474
- # Return an expression for making sure that the given keys match the value of
3475
- # the given methods for either the single object given or for any of the objects
3476
- # given if +obj+ is an array.
3477
- def association_filter_key_expression(keys, meths, obj)
3478
- vals = if obj.is_a?(Sequel::Dataset)
3479
- {(keys.length == 1 ? keys.first : keys)=>obj.select(*meths).exclude(Sequel::SQL::BooleanExpression.from_value_pairs(meths.zip([]), :OR))}
3480
- else
3481
- vals = Array(obj).reject{|o| !meths.all?{|m| o.get_column_value(m)}}
3482
- return SQL::Constants::FALSE if vals.empty?
3483
- if obj.is_a?(Array)
3484
- if keys.length == 1
3485
- meth = meths.first
3486
- {keys.first=>vals.map{|o| o.get_column_value(meth)}}
3487
- else
3488
- {keys=>vals.map{|o| meths.map{|m| o.get_column_value(m)}}}
3489
- end
3490
- else
3491
- keys.zip(meths.map{|k| obj.get_column_value(k)})
3492
- end
3493
- end
3494
- SQL::BooleanExpression.from_value_pairs(vals)
3495
- end
3496
-
3497
- # Make sure the association is valid for this model, and return the related AssociationReflection.
3498
- def check_association(model, association)
3499
- raise(Sequel::UndefinedAssociation, "Invalid association #{association} for #{model.name}") unless reflection = model.association_reflection(association)
3500
- raise(Sequel::Error, "Eager loading is not allowed for #{model.name} association #{association}") if reflection[:allow_eager] == false
3501
- reflection
3502
- end
3503
-
3504
- # Allow associations that are eagerly graphed to be specified as an SQL::AliasedExpression, for
3505
- # per-call determining of the alias base.
3506
- def eager_graph_check_association(model, association)
3507
- reflection = if association.is_a?(SQL::AliasedExpression)
3508
- expr = association.expression
3509
- if expr.is_a?(SQL::Identifier)
3510
- expr = expr.value
3511
- if expr.is_a?(String)
3512
- expr = expr.to_sym
3513
- end
3514
- end
3515
-
3516
- check_reflection = check_association(model, expr)
3517
- SQL::AliasedExpression.new(check_reflection, association.alias || expr, association.columns)
3518
- else
3519
- check_reflection = check_association(model, association)
3520
- end
3521
-
3522
- if check_reflection && check_reflection[:allow_eager_graph] == false
3523
- raise Error, "eager_graph not allowed for #{reflection.inspect}"
3524
- end
3525
-
3526
- reflection
3527
- end
3528
-
3529
- # The EagerGraphLoader instance used for converting eager_graph results.
3530
- def eager_graph_loader
3531
- unless egl = cache_get(:_model_eager_graph_loader)
3532
- egl = cache_set(:_model_eager_graph_loader, EagerGraphLoader.new(self))
3533
- end
3534
- egl.dup
3535
- end
3536
-
3537
- # Eagerly load all specified associations.
3538
- def eager_load(a, eager_assoc=@opts[:eager])
3539
- return if a.empty?
3540
-
3541
- # Reflections for all associations to eager load
3542
- reflections = eager_assoc.keys.map{|assoc| model.association_reflection(assoc) || (raise Sequel::UndefinedAssociation, "Model: #{self}, Association: #{assoc}")}
3543
-
3544
- perform_eager_loads(prepare_eager_load(a, reflections, eager_assoc))
3545
-
3546
- reflections.each do |r|
3547
- a.each{|object| object.send(:run_association_callbacks, r, :after_load, object.associations[r[:name]])} if r[:after_load]
3548
- end
3549
-
3550
- nil
3551
- end
3552
-
3553
- # Prepare a hash loaders and eager options which will be used to implement the eager loading.
3554
- def prepare_eager_load(a, reflections, eager_assoc)
3555
- eager_load_data = {}
3556
-
3557
- # Key is foreign/primary key name symbol.
3558
- # Value is hash with keys being foreign/primary key values (generally integers)
3559
- # and values being an array of current model objects with that specific foreign/primary key
3560
- key_hash = {}
3561
-
3562
- # Populate the key_hash entry for each association being eagerly loaded
3563
- reflections.each do |r|
3564
- if key = r.eager_loader_key
3565
- # key_hash for this key has already been populated,
3566
- # skip populating again so that duplicate values
3567
- # aren't added.
3568
- unless id_map = key_hash[key]
3569
- id_map = key_hash[key] = Hash.new{|h,k| h[k] = []}
3570
-
3571
- # Supporting both single (Symbol) and composite (Array) keys.
3572
- a.each do |rec|
3573
- case key
3574
- when Array
3575
- if (k = key.map{|k2| rec.get_column_value(k2)}) && k.all?
3576
- id_map[k] << rec
3577
- end
3578
- when Symbol
3579
- if k = rec.get_column_value(key)
3580
- id_map[k] << rec
3581
- end
3582
- else
3583
- raise Error, "unhandled eager_loader_key #{key.inspect} for association #{r[:name]}"
3584
- end
3585
- end
3586
- end
3587
- else
3588
- id_map = nil
3589
- end
3590
-
3591
- associations = eager_assoc[r[:name]]
3592
- if associations.respond_to?(:call)
3593
- eager_block = associations
3594
- associations = OPTS
3595
- elsif associations.is_a?(Hash) && associations.length == 1 && (pr_assoc = associations.to_a.first) && pr_assoc.first.respond_to?(:call)
3596
- eager_block, associations = pr_assoc
3597
- end
3598
-
3599
- eager_load_data[r[:eager_loader]] = {:key_hash=>key_hash, :rows=>a, :associations=>associations, :self=>self, :eager_block=>eager_block, :id_map=>id_map}
3600
- end
3601
-
3602
- eager_load_data
3603
- end
3604
-
3605
- # Using the hash of loaders and eager options, perform the eager loading.
3606
- def perform_eager_loads(eager_load_data)
3607
- eager_load_data.map do |loader, eo|
3608
- perform_eager_load(loader, eo)
3609
- end
3610
- end
3611
-
3612
- # Perform eager loading for a single association using the loader and eager options.
3613
- def perform_eager_load(loader, eo)
3614
- loader.call(eo)
3615
- end
3616
-
3617
- # Return a subquery expression for filering by a many_to_many association
3618
- def many_to_many_association_filter_expression(op, ref, obj)
3619
- lpks, lks, rks = ref.values_at(:left_primary_key_columns, :left_keys, :right_keys)
3620
- jt = ref.join_table_alias
3621
- lpks = lpks.first if lpks.length == 1
3622
- lpks = ref.qualify(model.table_name, lpks)
3623
-
3624
- meths = if obj.is_a?(Sequel::Dataset)
3625
- ref.qualify(obj.model.table_name, ref.right_primary_keys)
3626
- else
3627
- ref.right_primary_key_methods
3628
- end
3629
-
3630
- expr = association_filter_key_expression(ref.qualify(jt, rks), meths, obj)
3631
- unless expr == SQL::Constants::FALSE
3632
- expr = SQL::BooleanExpression.from_value_pairs(lpks=>model.db.from(ref[:join_table]).select(*ref.qualify(jt, lks)).where(expr).exclude(SQL::BooleanExpression.from_value_pairs(ref.qualify(jt, lks).zip([]), :OR)))
3633
- expr = add_association_filter_conditions(ref, obj, expr)
3634
- end
3635
-
3636
- association_filter_handle_inversion(op, expr, Array(lpks))
3637
- end
3638
- alias one_through_one_association_filter_expression many_to_many_association_filter_expression
3639
-
3640
- # Return a simple equality expression for filering by a many_to_one association
3641
- def many_to_one_association_filter_expression(op, ref, obj)
3642
- keys = ref.qualify(model.table_name, ref[:key_columns])
3643
- meths = if obj.is_a?(Sequel::Dataset)
3644
- ref.qualify(obj.model.table_name, ref.primary_keys)
3645
- else
3646
- ref.primary_key_methods
3647
- end
3648
-
3649
- expr = association_filter_key_expression(keys, meths, obj)
3650
- expr = add_association_filter_conditions(ref, obj, expr)
3651
- association_filter_handle_inversion(op, expr, keys)
3652
- end
3653
-
3654
- # Return a simple equality expression for filering by a one_to_* association
3655
- def one_to_many_association_filter_expression(op, ref, obj)
3656
- keys = ref.qualify(model.table_name, ref[:primary_key_columns])
3657
- meths = if obj.is_a?(Sequel::Dataset)
3658
- ref.qualify(obj.model.table_name, ref[:keys])
3659
- else
3660
- ref[:key_methods]
3661
- end
3662
-
3663
- expr = association_filter_key_expression(keys, meths, obj)
3664
- expr = add_association_filter_conditions(ref, obj, expr)
3665
- association_filter_handle_inversion(op, expr, keys)
3666
- end
3667
- alias one_to_one_association_filter_expression one_to_many_association_filter_expression
3668
-
3669
- def non_sql_option?(key)
3670
- super || key == :eager || key == :eager_graph
3671
- end
3672
-
3673
- # Build associations from the graph if #eager_graph was used,
3674
- # and/or load other associations if #eager was used.
3675
- def post_load(all_records)
3676
- eager_graph_build_associations(all_records) if @opts[:eager_graph]
3677
- eager_load(all_records) if @opts[:eager] && (row_proc || @opts[:eager_graph])
3678
- super
3679
- end
3680
- end
3681
-
3682
- # This class is the internal implementation of eager_graph. It is responsible for taking an array of plain
3683
- # hashes and returning an array of model objects with all eager_graphed associations already set in the
3684
- # association cache.
3685
- class EagerGraphLoader
3686
- # Hash with table alias symbol keys and after_load hook values
3687
- attr_reader :after_load_map
3688
-
3689
- # Hash with table alias symbol keys and association name values
3690
- attr_reader :alias_map
3691
-
3692
- # Hash with table alias symbol keys and subhash values mapping column_alias symbols to the
3693
- # symbol of the real name of the column
3694
- attr_reader :column_maps
3695
-
3696
- # Recursive hash with table alias symbol keys mapping to hashes with dependent table alias symbol keys.
3697
- attr_reader :dependency_map
3698
-
3699
- # Hash with table alias symbol keys and [limit, offset] values
3700
- attr_reader :limit_map
3701
-
3702
- # The table alias symbol for the primary model
3703
- attr_reader :master
3704
-
3705
- # Hash with table alias symbol keys and primary key symbol values (or arrays of primary key symbols for
3706
- # composite key tables)
3707
- attr_reader :primary_keys
3708
-
3709
- # Hash with table alias symbol keys and reciprocal association symbol values,
3710
- # used for setting reciprocals for one_to_many associations.
3711
- attr_reader :reciprocal_map
3712
-
3713
- # Hash with table alias symbol keys and subhash values mapping primary key symbols (or array of symbols)
3714
- # to model instances. Used so that only a single model instance is created for each object.
3715
- attr_reader :records_map
3716
-
3717
- # Hash with table alias symbol keys and AssociationReflection values
3718
- attr_reader :reflection_map
3719
-
3720
- # Hash with table alias symbol keys and callable values used to create model instances
3721
- attr_reader :row_procs
3722
-
3723
- # Hash with table alias symbol keys and true/false values, where true means the
3724
- # association represented by the table alias uses an array of values instead of
3725
- # a single value (i.e. true => *_many, false => *_to_one).
3726
- attr_reader :type_map
3727
-
3728
- # Initialize all of the data structures used during loading.
3729
- def initialize(dataset)
3730
- opts = dataset.opts
3731
- eager_graph = opts[:eager_graph]
3732
- @master = eager_graph[:master]
3733
- requirements = eager_graph[:requirements]
3734
- reflection_map = @reflection_map = eager_graph[:reflections]
3735
- reciprocal_map = @reciprocal_map = eager_graph[:reciprocals]
3736
- limit_map = @limit_map = eager_graph[:limits]
3737
- @unique = eager_graph[:cartesian_product_number] > 1
3738
-
3739
- alias_map = @alias_map = {}
3740
- type_map = @type_map = {}
3741
- after_load_map = @after_load_map = {}
3742
- reflection_map.each do |k, v|
3743
- alias_map[k] = v[:name]
3744
- after_load_map[k] = v[:after_load] if v[:after_load]
3745
- type_map[k] = if v.returns_array?
3746
- true
3747
- elsif (limit_and_offset = limit_map[k]) && !limit_and_offset.last.nil?
3748
- :offset
3749
- end
3750
- end
3751
- after_load_map.freeze
3752
- alias_map.freeze
3753
- type_map.freeze
3754
-
3755
- # Make dependency map hash out of requirements array for each association.
3756
- # This builds a tree of dependencies that will be used for recursion
3757
- # to ensure that all parts of the object graph are loaded into the
3758
- # appropriate subordinate association.
3759
- dependency_map = @dependency_map = {}
3760
- # Sort the associations by requirements length, so that
3761
- # requirements are added to the dependency hash before their
3762
- # dependencies.
3763
- requirements.sort_by{|a| a[1].length}.each do |ta, deps|
3764
- if deps.empty?
3765
- dependency_map[ta] = {}
3766
- else
3767
- deps = deps.dup
3768
- hash = dependency_map[deps.shift]
3769
- deps.each do |dep|
3770
- hash = hash[dep]
3771
- end
3772
- hash[ta] = {}
3773
- end
3774
- end
3775
- freezer = lambda do |h|
3776
- h.freeze
3777
- h.each_value(&freezer)
3778
- end
3779
- freezer.call(dependency_map)
3780
-
3781
- datasets = opts[:graph][:table_aliases].to_a.reject{|ta,ds| ds.nil?}
3782
- column_aliases = opts[:graph][:column_aliases]
3783
- primary_keys = {}
3784
- column_maps = {}
3785
- models = {}
3786
- row_procs = {}
3787
- datasets.each do |ta, ds|
3788
- models[ta] = ds.model
3789
- primary_keys[ta] = []
3790
- column_maps[ta] = {}
3791
- row_procs[ta] = ds.row_proc
3792
- end
3793
- column_aliases.each do |col_alias, tc|
3794
- ta, column = tc
3795
- column_maps[ta][col_alias] = column
3796
- end
3797
- column_maps.each do |ta, h|
3798
- pk = models[ta].primary_key
3799
- if pk.is_a?(Array)
3800
- primary_keys[ta] = []
3801
- h.select{|ca, c| primary_keys[ta] << ca if pk.include?(c)}
3802
- else
3803
- h.select{|ca, c| primary_keys[ta] = ca if pk == c}
3804
- end
3805
- end
3806
- @column_maps = column_maps.freeze
3807
- @primary_keys = primary_keys.freeze
3808
- @row_procs = row_procs.freeze
3809
-
3810
- # For performance, create two special maps for the master table,
3811
- # so you can skip a hash lookup.
3812
- @master_column_map = column_maps[master]
3813
- @master_primary_keys = primary_keys[master]
3814
-
3815
- # Add a special hash mapping table alias symbols to 5 element arrays that just
3816
- # contain the data in other data structures for that table alias. This is
3817
- # used for performance, to get all values in one hash lookup instead of
3818
- # separate hash lookups for each data structure.
3819
- ta_map = {}
3820
- alias_map.each_key do |ta|
3821
- ta_map[ta] = [row_procs[ta], alias_map[ta], type_map[ta], reciprocal_map[ta]].freeze
3822
- end
3823
- @ta_map = ta_map.freeze
3824
- freeze
3825
- end
3826
-
3827
- # Return an array of primary model instances with the associations cache prepopulated
3828
- # for all model objects (both primary and associated).
3829
- def load(hashes)
3830
- # This mapping is used to make sure that duplicate entries in the
3831
- # result set are mapped to a single record. For example, using a
3832
- # single one_to_many association with 10 associated records,
3833
- # the main object column values appear in the object graph 10 times.
3834
- # We map by primary key, if available, or by the object's entire values,
3835
- # if not. The mapping must be per table, so create sub maps for each table
3836
- # alias.
3837
- @records_map = records_map = {}
3838
- alias_map.keys.each{|ta| records_map[ta] = {}}
3839
-
3840
- master = master()
3841
-
3842
- # Assign to local variables for speed increase
3843
- rp = row_procs[master]
3844
- rm = records_map[master] = {}
3845
- dm = dependency_map
3846
-
3847
- records_map.freeze
3848
-
3849
- # This will hold the final record set that we will be replacing the object graph with.
3850
- records = []
3851
-
3852
- hashes.each do |h|
3853
- unless key = master_pk(h)
3854
- key = hkey(master_hfor(h))
3855
- end
3856
- unless primary_record = rm[key]
3857
- primary_record = rm[key] = rp.call(master_hfor(h))
3858
- # Only add it to the list of records to return if it is a new record
3859
- records.push(primary_record)
3860
- end
3861
- # Build all associations for the current object and it's dependencies
3862
- _load(dm, primary_record, h)
3863
- end
3864
-
3865
- # Remove duplicate records from all associations if this graph could possibly be a cartesian product
3866
- # Run after_load procs if there are any
3867
- post_process(records, dm) if @unique || !after_load_map.empty? || !limit_map.empty?
3868
-
3869
- records_map.each_value(&:freeze)
3870
- freeze
3871
-
3872
- records
3873
- end
3874
-
3875
- private
3876
-
3877
- # Recursive method that creates associated model objects and associates them to the current model object.
3878
- def _load(dependency_map, current, h)
3879
- dependency_map.each do |ta, deps|
3880
- unless key = pk(ta, h)
3881
- ta_h = hfor(ta, h)
3882
- unless ta_h.values.any?
3883
- assoc_name = alias_map[ta]
3884
- unless (assoc = current.associations).has_key?(assoc_name)
3885
- assoc[assoc_name] = type_map[ta] ? [] : nil
3886
- end
3887
- next
3888
- end
3889
- key = hkey(ta_h)
3890
- end
3891
- rp, assoc_name, tm, rcm = @ta_map[ta]
3892
- rm = records_map[ta]
3893
-
3894
- # Check type map for all dependencies, and use a unique
3895
- # object if any are dependencies for multiple objects,
3896
- # to prevent duplicate objects from showing up in the case
3897
- # the normal duplicate removal code is not being used.
3898
- if !@unique && !deps.empty? && deps.any?{|dep_key,_| @ta_map[dep_key][2]}
3899
- key = [current.object_id, key]
3900
- end
3901
-
3902
- unless rec = rm[key]
3903
- rec = rm[key] = rp.call(hfor(ta, h))
3904
- end
3905
-
3906
- if tm
3907
- unless (assoc = current.associations).has_key?(assoc_name)
3908
- assoc[assoc_name] = []
3909
- end
3910
- assoc[assoc_name].push(rec)
3911
- rec.associations[rcm] = current if rcm
3912
- else
3913
- current.associations[assoc_name] ||= rec
3914
- end
3915
- # Recurse into dependencies of the current object
3916
- _load(deps, rec, h) unless deps.empty?
3917
- end
3918
- end
3919
-
3920
- # Return the subhash for the specific table alias +ta+ by parsing the values out of the main hash +h+
3921
- def hfor(ta, h)
3922
- out = {}
3923
- @column_maps[ta].each{|ca, c| out[c] = h[ca]}
3924
- out
3925
- end
3926
-
3927
- # Return a suitable hash key for any subhash +h+, which is an array of values by column order.
3928
- # This is only used if the primary key cannot be used.
3929
- def hkey(h)
3930
- h.sort_by{|x| x[0]}
3931
- end
3932
-
3933
- # Return the subhash for the master table by parsing the values out of the main hash +h+
3934
- def master_hfor(h)
3935
- out = {}
3936
- @master_column_map.each{|ca, c| out[c] = h[ca]}
3937
- out
3938
- end
3939
-
3940
- # Return a primary key value for the master table by parsing it out of the main hash +h+.
3941
- def master_pk(h)
3942
- x = @master_primary_keys
3943
- if x.is_a?(Array)
3944
- unless x == []
3945
- x = x.map{|ca| h[ca]}
3946
- x if x.all?
3947
- end
3948
- else
3949
- h[x]
3950
- end
3951
- end
3952
-
3953
- # Return a primary key value for the given table alias by parsing it out of the main hash +h+.
3954
- def pk(ta, h)
3955
- x = primary_keys[ta]
3956
- if x.is_a?(Array)
3957
- unless x == []
3958
- x = x.map{|ca| h[ca]}
3959
- x if x.all?
3960
- end
3961
- else
3962
- h[x]
3963
- end
3964
- end
3965
-
3966
- # If the result set is the result of a cartesian product, then it is possible that
3967
- # there are multiple records for each association when there should only be one.
3968
- # In that case, for each object in all associations loaded via +eager_graph+, run
3969
- # uniq! on the association to make sure no duplicate records show up.
3970
- # Note that this can cause legitimate duplicate records to be removed.
3971
- def post_process(records, dependency_map)
3972
- records.each do |record|
3973
- dependency_map.each do |ta, deps|
3974
- assoc_name = alias_map[ta]
3975
- list = record.public_send(assoc_name)
3976
- rec_list = if type_map[ta]
3977
- list.uniq!
3978
- if lo = limit_map[ta]
3979
- limit, offset = lo
3980
- offset ||= 0
3981
- if type_map[ta] == :offset
3982
- [record.associations[assoc_name] = list[offset]]
3983
- else
3984
- list.replace(list[(offset)..(limit ? (offset)+limit-1 : -1)] || [])
3985
- end
3986
- else
3987
- list
3988
- end
3989
- elsif list
3990
- [list]
3991
- else
3992
- []
3993
- end
3994
- record.send(:run_association_callbacks, reflection_map[ta], :after_load, list) if after_load_map[ta]
3995
- post_process(rec_list, deps) if !rec_list.empty? && !deps.empty?
3996
- end
3997
- end
3998
- end
3999
- end
4000
- end
4001
- end
4002
- end