code_ownership 2.1.0 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. checksums.yaml +4 -4
  2. data/.cargo/config +2 -2
  3. data/Cargo.lock +10 -16
  4. data/README.md +8 -8
  5. data/ext/cargo-vendor/codeowners-0.3.2/.cargo-checksum.json +1 -0
  6. data/ext/cargo-vendor/codeowners-0.3.2/.github/CODEOWNERS +1 -0
  7. data/ext/cargo-vendor/codeowners-0.3.2/AGENTS.md +38 -0
  8. data/ext/cargo-vendor/codeowners-0.3.2/CLAUDE.md +1 -0
  9. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/Cargo.lock +1 -1
  10. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/Cargo.toml +17 -1
  11. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/README.md +11 -1
  12. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cli.rs +9 -5
  13. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/config.rs +81 -1
  14. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/crosscheck.rs +5 -8
  15. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/codeowners_file_parser.rs +3 -3
  16. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_owner_resolver.rs +3 -1
  17. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/package_mapper.rs +2 -2
  18. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper.rs +2 -2
  19. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/validator.rs +15 -10
  20. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership.rs +1 -0
  21. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project.rs +3 -0
  22. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project_builder.rs +111 -44
  23. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/runner/api.rs +7 -6
  24. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/runner/types.rs +2 -1
  25. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/runner.rs +67 -16
  26. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/tracked_files.rs +29 -1
  27. data/ext/cargo-vendor/codeowners-0.3.2/tests/codeowners_path_test.rs +92 -0
  28. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/common/mod.rs +2 -1
  29. data/ext/cargo-vendor/codeowners-0.3.2/tests/executable_name_config_test.rs +67 -0
  30. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/config/code_ownership.yml +11 -0
  31. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/config/teams/test_team.yml +6 -0
  32. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/docs/CODEOWNERS +14 -0
  33. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/expected/CODEOWNERS +14 -0
  34. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/ruby/app/models/test.rb +3 -0
  35. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/.github/CODEOWNERS +10 -0
  36. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/app/foo.rb +3 -0
  37. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/config/code_ownership.yml +4 -0
  38. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/config/teams/foo.yml +5 -0
  39. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/config/teams/payments.yml +6 -0
  40. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/ruby/app/payments/foo.rb +4 -0
  41. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/.github/CODEOWNERS +11 -0
  42. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/app/bar.rb +3 -0
  43. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/config/code_ownership.yml +5 -0
  44. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/config/teams/bar.yml +5 -0
  45. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/.github/CODEOWNERS +10 -0
  46. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/config/code_ownership.yml +10 -0
  47. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/config/teams/bad_team.yml +1 -0
  48. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/config/teams/good.yml +3 -0
  49. data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/valid_project/gems/pets/dog.rb +5 -0
  50. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/git_stage_test.rs +4 -1
  51. data/ext/cargo-vendor/codeowners-0.3.2/tests/missing_github_team_test.rs +23 -0
  52. data/ext/cargo-vendor/codeowners-0.3.2/tests/run_config_executable_override_test.rs +98 -0
  53. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/runner_api.rs +8 -4
  54. data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/valid_project_test.rs +3 -3
  55. data/ext/cargo-vendor/codeowners-0.3.2/tests/validate_files_test.rs +378 -0
  56. data/ext/cargo-vendor/magnus-0.8.2/.cargo-checksum.json +1 -0
  57. data/ext/cargo-vendor/magnus-0.8.2/.cargo_vcs_info.json +6 -0
  58. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/CHANGELOG.md +66 -1
  59. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/Cargo.lock +243 -9
  60. data/ext/cargo-vendor/magnus-0.8.2/Cargo.toml +277 -0
  61. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/Cargo.toml.orig +11 -6
  62. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/README.md +75 -23
  63. data/ext/cargo-vendor/magnus-0.8.2/build.rs +15 -0
  64. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/complete_object/test/temperature_test.rb +4 -4
  65. data/ext/cargo-vendor/magnus-0.8.2/examples/inheritance.rs +66 -0
  66. data/ext/cargo-vendor/magnus-0.8.2/examples/mut_point.rs +116 -0
  67. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/api.rs +4 -3
  68. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/class.rs +9 -7
  69. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/encoding.rs +5 -5
  70. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/error.rs +12 -3
  71. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/fiber.rs +5 -5
  72. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/gc.rs +3 -3
  73. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/integer.rs +134 -0
  74. data/ext/cargo-vendor/magnus-0.8.2/src/io.rs +230 -0
  75. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/lib.rs +53 -54
  76. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/macros.rs +2 -2
  77. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/method.rs +14 -100
  78. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/module.rs +1 -1
  79. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/mutex.rs +1 -1
  80. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_array.rs +2 -2
  81. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_bignum.rs +100 -3
  82. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_hash.rs +63 -1
  83. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_string.rs +31 -231
  84. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_typed_data.rs +6 -9
  85. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/rb_sys.rs +4 -4
  86. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/scan_args.rs +3 -3
  87. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/thread.rs +16 -10
  88. data/ext/cargo-vendor/magnus-0.8.2/src/time.rs +462 -0
  89. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/try_convert.rs +64 -2
  90. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/typed_data.rs +113 -11
  91. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/value/flonum.rs +1 -1
  92. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/value.rs +83 -6
  93. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/test +1 -1
  94. data/ext/cargo-vendor/magnus-0.8.2/tests/hash.rs +44 -0
  95. data/ext/cargo-vendor/magnus-0.8.2/tests/io.rs +62 -0
  96. data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/return_iter.rs +1 -1
  97. data/ext/cargo-vendor/magnus-0.8.2/tests/string.rs +23 -0
  98. data/ext/cargo-vendor/magnus-0.8.2/tests/time.rs +71 -0
  99. data/ext/cargo-vendor/magnus-macros-0.8.0/.cargo-checksum.json +1 -0
  100. data/ext/cargo-vendor/magnus-macros-0.8.0/.cargo_vcs_info.json +6 -0
  101. data/ext/cargo-vendor/magnus-macros-0.8.0/Cargo.lock +47 -0
  102. data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/Cargo.toml +10 -1
  103. data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/Cargo.toml.orig +1 -1
  104. data/ext/cargo-vendor/magnus-macros-0.8.0/src/lib.rs +545 -0
  105. data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/src/typed_data.rs +3 -3
  106. data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/src/util.rs +1 -1
  107. data/ext/cargo-vendor/serde_magnus-0.10.0/.cargo-checksum.json +1 -0
  108. data/ext/cargo-vendor/serde_magnus-0.10.0/.cargo_vcs_info.json +6 -0
  109. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/Cargo.lock +77 -75
  110. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/Cargo.toml +3 -3
  111. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/Cargo.toml.orig +7 -4
  112. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/README.md +8 -5
  113. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/array_deserializer.rs +12 -8
  114. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/array_enumerator.rs +12 -7
  115. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/deserializer.rs +21 -18
  116. data/ext/cargo-vendor/serde_magnus-0.10.0/src/de/enum_deserializer.rs +35 -0
  117. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/hash_deserializer.rs +18 -11
  118. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/mod.rs +76 -76
  119. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/variant_deserializer.rs +10 -9
  120. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/error.rs +10 -4
  121. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/lib.rs +6 -5
  122. data/ext/cargo-vendor/serde_magnus-0.10.0/src/ser/enums.rs +11 -0
  123. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/ser/map_serializer.rs +11 -12
  124. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/ser/mod.rs +53 -50
  125. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/ser/seq_serializer.rs +11 -10
  126. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/ser/serializer.rs +50 -34
  127. data/ext/cargo-vendor/serde_magnus-0.10.0/src/ser/struct_serializer.rs +40 -0
  128. data/ext/cargo-vendor/serde_magnus-0.10.0/src/ser/struct_variant_serializer.rs +45 -0
  129. data/ext/cargo-vendor/serde_magnus-0.10.0/src/ser/tuple_variant_serializer.rs +38 -0
  130. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_arrays.rs +3 -3
  131. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_booleans.rs +15 -0
  132. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_enums.rs +39 -0
  133. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_floats.rs +12 -0
  134. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_integers.rs +18 -0
  135. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_maps.rs +3 -2
  136. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_options.rs +15 -0
  137. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_results.rs +17 -0
  138. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_strings.rs +7 -7
  139. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_structs.rs +9 -9
  140. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_tuples.rs +27 -0
  141. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_vecs.rs +3 -3
  142. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_arrays.rs +3 -3
  143. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/serializing_booleans.rs +15 -0
  144. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_enums.rs +9 -7
  145. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_floats.rs +2 -2
  146. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_integers.rs +4 -4
  147. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_maps.rs +3 -2
  148. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_options.rs +3 -3
  149. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_results.rs +5 -4
  150. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/serializing_strings.rs +30 -0
  151. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_structs.rs +15 -7
  152. data/ext/cargo-vendor/serde_magnus-0.10.0/tests/serializing_tuples.rs +35 -0
  153. data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_vecs.rs +3 -3
  154. data/ext/cargo-vendor/unicode-ident-1.0.19/.cargo-checksum.json +1 -1
  155. data/ext/code_ownership/Cargo.toml +3 -3
  156. data/ext/code_ownership/extconf.rb +2 -1
  157. data/ext/code_ownership/src/lib.rs +18 -18
  158. data/lib/code_ownership/cli.rb +1 -0
  159. data/lib/code_ownership/private/file_path_finder.rb +22 -10
  160. data/lib/code_ownership/private/file_path_team_cache.rb +5 -9
  161. data/lib/code_ownership/private/for_file_output_builder.rb +0 -1
  162. data/lib/code_ownership/private/team_finder.rb +9 -16
  163. data/lib/code_ownership/version.rb +2 -2
  164. data/lib/code_ownership.rb +14 -17
  165. metadata +359 -337
  166. data/ext/cargo-vendor/codeowners-0.3.0/.cargo-checksum.json +0 -1
  167. data/ext/cargo-vendor/codeowners-0.3.0/tests/validate_files_test.rs +0 -144
  168. data/ext/cargo-vendor/magnus-0.7.1/.cargo-checksum.json +0 -1
  169. data/ext/cargo-vendor/magnus-0.7.1/.cargo_vcs_info.json +0 -6
  170. data/ext/cargo-vendor/magnus-0.7.1/Cargo.toml +0 -95
  171. data/ext/cargo-vendor/magnus-0.7.1/build.rs +0 -5
  172. data/ext/cargo-vendor/magnus-0.7.1/examples/mut_point.rs +0 -60
  173. data/ext/cargo-vendor/magnus-0.7.1/src/time.rs +0 -190
  174. data/ext/cargo-vendor/magnus-0.7.1/tests/hash.rs +0 -25
  175. data/ext/cargo-vendor/magnus-0.7.1/tests/string.rs +0 -13
  176. data/ext/cargo-vendor/magnus-macros-0.6.0/.cargo-checksum.json +0 -1
  177. data/ext/cargo-vendor/magnus-macros-0.6.0/.cargo_vcs_info.json +0 -6
  178. data/ext/cargo-vendor/magnus-macros-0.6.0/src/lib.rs +0 -401
  179. data/ext/cargo-vendor/rb-sys-env-0.1.2/.cargo-checksum.json +0 -1
  180. data/ext/cargo-vendor/rb-sys-env-0.1.2/.cargo_vcs_info.json +0 -6
  181. data/ext/cargo-vendor/rb-sys-env-0.1.2/Cargo.toml +0 -25
  182. data/ext/cargo-vendor/rb-sys-env-0.1.2/Cargo.toml.orig +0 -14
  183. data/ext/cargo-vendor/rb-sys-env-0.1.2/LICENSE-APACHE +0 -190
  184. data/ext/cargo-vendor/rb-sys-env-0.1.2/LICENSE-MIT +0 -21
  185. data/ext/cargo-vendor/rb-sys-env-0.1.2/readme.md +0 -119
  186. data/ext/cargo-vendor/rb-sys-env-0.1.2/src/defines.rs +0 -37
  187. data/ext/cargo-vendor/rb-sys-env-0.1.2/src/lib.rs +0 -180
  188. data/ext/cargo-vendor/rb-sys-env-0.1.2/src/rb_env.rs +0 -110
  189. data/ext/cargo-vendor/rb-sys-env-0.1.2/src/ruby_version.rs +0 -163
  190. data/ext/cargo-vendor/rb-sys-env-0.1.2/src/utils.rs +0 -6
  191. data/ext/cargo-vendor/serde_magnus-0.9.0/.cargo-checksum.json +0 -1
  192. data/ext/cargo-vendor/serde_magnus-0.9.0/.cargo_vcs_info.json +0 -6
  193. data/ext/cargo-vendor/serde_magnus-0.9.0/src/de/enum_deserializer.rs +0 -30
  194. data/ext/cargo-vendor/serde_magnus-0.9.0/src/ser/enums.rs +0 -11
  195. data/ext/cargo-vendor/serde_magnus-0.9.0/src/ser/struct_serializer.rs +0 -36
  196. data/ext/cargo-vendor/serde_magnus-0.9.0/src/ser/struct_variant_serializer.rs +0 -37
  197. data/ext/cargo-vendor/serde_magnus-0.9.0/src/ser/tuple_variant_serializer.rs +0 -33
  198. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_booleans.rs +0 -18
  199. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_enums.rs +0 -39
  200. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_floats.rs +0 -12
  201. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_integers.rs +0 -18
  202. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_options.rs +0 -15
  203. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_results.rs +0 -17
  204. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_tuples.rs +0 -31
  205. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/serializing_booleans.rs +0 -15
  206. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/serializing_strings.rs +0 -30
  207. data/ext/cargo-vendor/serde_magnus-0.9.0/tests/serializing_tuples.rs +0 -27
  208. data/ext/cargo-vendor/unicode-ident-1.0.19/tests/fst/.gitignore +0 -1
  209. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/audit.yml +0 -0
  210. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/ci.yml +0 -0
  211. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/dotslash-config.json +0 -0
  212. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.rustfmt.toml +0 -0
  213. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.rusty-hook.toml +0 -0
  214. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/dev/run_benchmarks_for_file.sh +0 -0
  215. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/dev/run_benchmarks_for_gv.sh +0 -0
  216. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/rust-toolchain.toml +0 -0
  217. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/file.rs +0 -0
  218. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/mod.rs +0 -0
  219. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/noop.rs +0 -0
  220. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/common_test.rs +0 -0
  221. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/lib.rs +0 -0
  222. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/main.rs +0 -0
  223. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/codeowners_query.rs +0 -0
  224. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_generator.rs +0 -0
  225. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_owner_finder.rs +0 -0
  226. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/annotated_file_mapper.rs +0 -0
  227. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/directory_mapper.rs +0 -0
  228. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/escaper.rs +0 -0
  229. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_gem_mapper.rs +0 -0
  230. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_glob_mapper.rs +0 -0
  231. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_yml_mapper.rs +0 -0
  232. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/path_utils.rs +0 -0
  233. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project_file_builder.rs +0 -0
  234. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/cache_test.rs +0 -0
  235. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/crosscheck_owners_test.rs +0 -0
  236. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/.github/CODEOWNERS +0 -0
  237. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/code_ownership.yml +0 -0
  238. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/teams/payments.yml +0 -0
  239. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/teams/payroll.yml +0 -0
  240. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/gems/payroll_calculator/calculator.rb +0 -0
  241. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/bank_account.rb +0 -0
  242. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/blockchain.rb +0 -0
  243. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/payroll.rb +0 -0
  244. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/payments/nacha.rb +0 -0
  245. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/services/.codeowner +0 -0
  246. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/services/multi_owned.rb +0 -0
  247. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/unowned.rb +0 -0
  248. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/packages/payroll_flow/package.yml +0 -0
  249. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/.github/CODEOWNERS +0 -0
  250. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/.keep +0 -0
  251. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/code_ownership.yml +0 -0
  252. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/teams/design.yml +0 -0
  253. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/teams/frontend.yml +0 -0
  254. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/apps/public/index.tsx +0 -0
  255. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/package.json +0 -0
  256. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/src/index.tsx +0 -0
  257. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/.codeowner +0 -0
  258. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/src/button.tsx +0 -0
  259. /data/ext/cargo-vendor/{codeowners-0.3.0/tests/fixtures/valid_project → codeowners-0.3.2/tests/fixtures/missing_github_team}/gems/pets/dog.rb +0 -0
  260. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/.github/CODEOWNERS +0 -0
  261. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/consumers/.codeowner +0 -0
  262. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/consumers/deep/nesting/nestdir/deep_file.rb +0 -0
  263. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/consumers/one_owner.rb +0 -0
  264. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/services/.codeowner +0 -0
  265. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/services/exciting/.codeowner +0 -0
  266. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/services/exciting/some_other_file.rb +0 -0
  267. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +0 -0
  268. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/teams/bar.yml +0 -0
  269. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/teams/foo.yml +0 -0
  270. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/.github/CODEOWNERS +0 -0
  271. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/.ignore +0 -0
  272. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/code_ownership.yml +0 -0
  273. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/payments.yml +0 -0
  274. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/payroll.yml +0 -0
  275. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/ux.yml +0 -0
  276. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/gems/payroll_calculator/calculator.rb +0 -0
  277. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/index.tsx +0 -0
  278. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/package.json +0 -0
  279. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/(special)/.codeowner +0 -0
  280. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/(special)/pay.ts +0 -0
  281. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/.codeowner +0 -0
  282. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/item.ts +0 -0
  283. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/list/page-admin.tsx +0 -0
  284. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/models/bank_account.rb +0 -0
  285. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/models/payroll.rb +0 -0
  286. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payments/foo/.codeowner +0 -0
  287. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payments/foo/ownedby_payroll.rb +0 -0
  288. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payments/nacha.rb +0 -0
  289. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payroll/.codeowner +0 -0
  290. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payroll/payroll.rb +0 -0
  291. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/views/foos/edit.erb +0 -0
  292. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/views/foos/index.html.erb +0 -0
  293. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/views/foos/new.html.erb +0 -0
  294. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/ignored_files/git_ignored.rb +0 -0
  295. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/packages/payroll_flow/package.yml +0 -0
  296. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/should_be_ignored/an_ignored_file.rb +0 -0
  297. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/.github/CODEOWNERS +0 -0
  298. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/code_ownership.yml +0 -0
  299. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/brewers.yml +0 -0
  300. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/cubs.yml +0 -0
  301. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/giants.yml +0 -0
  302. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/rockies.yml +0 -0
  303. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/package.json +0 -0
  304. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/src/picks/dp.tsx +0 -0
  305. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/package.json +0 -0
  306. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/src/item.tsx +0 -0
  307. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/package.json +0 -0
  308. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/field.tsx +0 -0
  309. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/fields/small.tsx +0 -0
  310. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/gems/apollo/lib/apollo.rb +0 -0
  311. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/gems/ivy/lib/ivy.rb +0 -0
  312. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/gems/lager/lib/lager.rb +0 -0
  313. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/gems/summit/lib/summit.rb +0 -0
  314. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/games/app/services/stats.rb +0 -0
  315. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/games/package.yml +0 -0
  316. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/locations/app/services/capacity.rb +0 -0
  317. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/locations/package.yml +0 -0
  318. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/schedule/app/services/date.rb +0 -0
  319. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/schedule/package.yml +0 -0
  320. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/lib/util.rb +0 -0
  321. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/services/play.rb +0 -0
  322. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/.codeowner +0 -0
  323. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/.codeowner +0 -0
  324. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/db/price.rb +0 -0
  325. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/entertainment.rb +0 -0
  326. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/play.rb +0 -0
  327. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/giants/services/play.rb +0 -0
  328. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/rockies/services/play.rb +0 -0
  329. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/invalid_project_structure_test.rs +0 -0
  330. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/invalid_project_test.rs +0 -0
  331. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/multiple_directory_owners_test.rs +0 -0
  332. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/untracked_files_test.rs +0 -0
  333. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/valid_project_with_overrides_test.rs +0 -0
  334. /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tmp/.gitkeep +0 -0
  335. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/.cargo/config.toml +0 -0
  336. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/Gemfile +0 -0
  337. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/LICENSE +0 -0
  338. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/complete_object/Rakefile +0 -0
  339. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/complete_object/lib/temperature.rb +0 -0
  340. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_ruby/Rakefile +0 -0
  341. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_ruby/lib/ahriman/error.rb +0 -0
  342. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_ruby/lib/ahriman.rb +0 -0
  343. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_ruby/test/error_test.rb +0 -0
  344. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_rust/Rakefile +0 -0
  345. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_rust/lib/ahriman.rb +0 -0
  346. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_rust/test/error_test.rb +0 -0
  347. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/fibonacci.rs +0 -0
  348. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/hello_world.rs +0 -0
  349. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/point.rs +0 -0
  350. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/rust_blank/Rakefile +0 -0
  351. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/rust_blank/lib/rust_blank.rb +0 -0
  352. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/rust_blank/test/bench.rb +0 -0
  353. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/rust_blank/test/blank_test.rb +0 -0
  354. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/block.rs +0 -0
  355. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/embed.rs +0 -0
  356. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/enumerator.rs +0 -0
  357. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/exception.rs +0 -0
  358. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/float.rs +0 -0
  359. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/into_value.rs +0 -0
  360. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/numeric.rs +0 -0
  361. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/object.rs +0 -0
  362. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/process.rs +0 -0
  363. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_complex.rs +0 -0
  364. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_file.rs +0 -0
  365. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_float.rs +0 -0
  366. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_match.rs +0 -0
  367. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_object.rs +0 -0
  368. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_rational.rs +0 -0
  369. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_regexp.rs +0 -0
  370. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_struct.rs +0 -0
  371. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/range.rs +0 -0
  372. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/symbol.rs +0 -0
  373. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/allocate_before_init.rs +0 -0
  374. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/array_slice.rs +0 -0
  375. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/block_call.rs +0 -0
  376. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/bytes.rs +0 -0
  377. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/call_proc.rs +0 -0
  378. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/classname.rs +0 -0
  379. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/clone.rs +0 -0
  380. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/codepoints.rs +0 -0
  381. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/debug_exception.rs +0 -0
  382. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/encoding_capable.rs +0 -0
  383. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/enumerator.rs +0 -0
  384. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/enumeratorize.rs +0 -0
  385. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/float_convert_from_value.rs +0 -0
  386. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/float_convert_to_value.rs +0 -0
  387. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/fmt.rs +0 -0
  388. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/freeze.rs +0 -0
  389. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/integer_convert_to_value.rs +0 -0
  390. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/integer_traits.rs +0 -0
  391. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/ivar.rs +0 -0
  392. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/lazy_id.rs +0 -0
  393. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/make_proc.rs +0 -0
  394. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/proc_new.rs +0 -0
  395. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/range.rs +0 -0
  396. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/return_custom_error.rs +0 -0
  397. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/scan_args.rs +0 -0
  398. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/str.rs +0 -0
  399. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/struct.rs +0 -0
  400. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/symbol.rs +0 -0
  401. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/try_convert_array.rs +0 -0
  402. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/tuple_to_array.rs +0 -0
  403. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/typed_data.rs +0 -0
  404. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/typed_data_obj.rs +0 -0
  405. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/typed_data_subclass.rs +0 -0
  406. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/typed_data_subclass_from_ruby.rs +0 -0
  407. /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/yield.rs +0 -0
  408. /data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/LICENSE +0 -0
  409. /data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/src/init.rs +0 -0
  410. /data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/LICENSE +0 -0
@@ -82,13 +82,24 @@ make sure the return type is `magnus::Value`.
82
82
 
83
83
  ### Wrapping Rust Types in Ruby Objects
84
84
 
85
- Rust structs and enums can be wrapped in Ruby objects so they can be returned
86
- to Ruby.
85
+ Magnus allows you to wrap Rust structs and enums as Ruby objects, enabling seamless interaction between Rust and Ruby. This functionality is ideal for exposing Rust logic to Ruby modules.
87
86
 
88
- Types can opt-in to this with the `magnus::wrap` macro (or by implementing
89
- `magnus::TypedData`). Whenever a compatible type is returned to Ruby it will be
90
- wrapped in the specified class, and whenever it is passed back to Rust it will
91
- be unwrapped to a reference.
87
+ Use one of the following approaches to expose a Rust type to Ruby:
88
+
89
+ * A convenience macro [`#[magnus::wrap]`][magnus-wrap].
90
+ * More customised approach by implementing the [`magnus::TypedData`] trait.
91
+
92
+ [magnus-wrap]: https://docs.rs/magnus/latest/magnus/attr.wrap.html
93
+ [`magnus::TypedData`]: https://docs.rs/magnus/latest/magnus/derive.TypedData.html
94
+
95
+ Then this Rust type can be:
96
+
97
+ * Returned to Ruby as a wrapped object.
98
+ * Passed back to Rust and automatically unwrapped to a native Rust reference.
99
+
100
+ #### Basic Usage
101
+
102
+ Here’s how you can wrap a simple Rust struct and expose its methods to Ruby:
92
103
 
93
104
  ```rust
94
105
  use magnus::{function, method, prelude::*, Error, Ruby};
@@ -128,16 +139,20 @@ fn init(ruby: &Ruby) -> Result<(), Error> {
128
139
  }
129
140
  ```
130
141
 
131
- The newtype pattern and `RefCell` can be used if mutability is required:
142
+ #### Handling Mutability
143
+
144
+ Because Ruby's GC manages the memory where your Rust type is stored, Magnus can't bind functions with mutable references. To allow mutable fields in wrapped Rust structs, you can use the newtype pattern with `RefCell`:
132
145
 
133
146
  ```rust
147
+ use std::cell::RefCell;
148
+
134
149
  struct Point {
135
150
  x: isize,
136
151
  y: isize,
137
152
  }
138
153
 
139
154
  #[magnus::wrap(class = "Point")]
140
- struct MutPoint(std::cell::RefCell<Point>);
155
+ struct MutPoint(RefCell<Point>);
141
156
 
142
157
  impl MutPoint {
143
158
  fn set_x(&self, i: isize) {
@@ -146,8 +161,17 @@ impl MutPoint {
146
161
  }
147
162
  ```
148
163
 
149
- To allow wrapped types to be subclassed they must implement `Default`, and
150
- define and alloc func and an initialize method:
164
+ See [`examples/mut_point.rs`] for the complete example.
165
+
166
+ [`examples/mut_point.rs`]: https://github.com/matsadler/magnus/blob/main/examples/mut_point.rs
167
+
168
+ #### Supporting Subclassing
169
+
170
+ To enable Ruby subclassing for wrapped Rust types, the type must:
171
+
172
+ * Implement the `Default` trait.
173
+ * Define an allocator.
174
+ * Define an initialiser.
151
175
 
152
176
  ``` rust
153
177
  #[derive(Default)]
@@ -177,6 +201,26 @@ fn init(ruby: &Ruby) -> Result<(), Error> {
177
201
  }
178
202
  ```
179
203
 
204
+ #### Error Handling
205
+
206
+ Use `magnus::Error` to propagate errors to Ruby from Rust:
207
+
208
+ ```rust
209
+ #[magnus::wrap(class = "Point")]
210
+ struct MutPoint(RefCell<Point>);
211
+
212
+ impl MutPoint {
213
+ fn add_x(ruby: &Ruby, rb_self: &Self, val: isize) -> Result<isize, Error> {
214
+ if let Some(sum) = rb_self.0.borrow().x.checked_add(val) {
215
+ rb_self.0.borrow_mut().x = sum;
216
+ Ok(sum)
217
+ } else {
218
+ return Err(Error::new(ruby.exception_range_error(), "result out of range"));
219
+ }
220
+ }
221
+ }
222
+ ```
223
+
180
224
  ## Getting Started
181
225
 
182
226
  ### Writing an extension gem (calling Rust from Ruby)
@@ -191,7 +235,7 @@ setting the `crate-type` attribute in your `Cargo.toml`.
191
235
  crate-type = ["cdylib"]
192
236
 
193
237
  [dependencies]
194
- magnus = "0.7"
238
+ magnus = "0.8"
195
239
  ```
196
240
 
197
241
  When Ruby loads your extension it calls an 'init' function defined in your
@@ -246,7 +290,7 @@ require "rb_sys/mkmf"
246
290
  create_rust_makefile("my_example_gem/my_example_gem")
247
291
  ```
248
292
 
249
- See the [`rust_blank`] example for examples if `extconf.rb` and `Rakefile`.
293
+ See the [`rust_blank`] example for examples of `extconf.rb` and `Rakefile`.
250
294
  Running `rake compile` will place the extension at
251
295
  `lib/my_example_gem/my_example_gem.so` (or `.bundle` on macOS), which you'd
252
296
  load from Ruby like so:
@@ -274,7 +318,7 @@ To call Ruby from a Rust program, enable the `embed` feature:
274
318
 
275
319
  ```toml
276
320
  [dependencies]
277
- magnus = { version = "0.7", features = ["embed"] }
321
+ magnus = { version = "0.8", features = ["embed"] }
278
322
  ```
279
323
 
280
324
  This enables linking to Ruby and gives access to the `embed` module.
@@ -319,7 +363,7 @@ See `magnus::TryConvert` for more details.
319
363
  | `i8`,`i16`,`i32`,`i64`,`isize`, `magnus::Integer` | `Integer`, `#to_int` |
320
364
  | `u8`,`u16`,`u32`,`u64`,`usize` | `Integer`, `#to_int` |
321
365
  | `f32`,`f64`, `magnus::Float` | `Float`, `Numeric` |
322
- | `String`, `PathBuf`, `char`, `magnus::RString`, `bytes::Bytes`\*\*\* | `String`, `#to_str` |
366
+ | `String`, `PathBuf`, `char`, `magnus::RString`, `bytes::Bytes`‡ | `String`, `#to_str` |
323
367
  | `magnus::Symbol` | `Symbol`, `#to_sym` |
324
368
  | `bool` | any object |
325
369
  | `magnus::Range` | `Range` |
@@ -329,17 +373,19 @@ See `magnus::TryConvert` for more details.
329
373
  | `[T; N]` | `[T]`, `#to_ary` |
330
374
  | `magnus::RArray` | `Array`, `#to_ary` |
331
375
  | `magnus::RHash` | `Hash`, `#to_hash` |
332
- | `std::time::SystemTime`, `magnus::Time` | `Time` |
376
+ | `std::time::SystemTime`, `magnus::Time`, `chrono::DateTime<T>`§ | `Time` |
333
377
  | `magnus::Value` | any object |
334
378
  | `Vec<T>`\* | `[T]`, `#to_ary` |
335
379
  | `HashMap<K, V>`\* | `{K => V}`, `#to_hash` |
336
- | `&T`, `typed_data::Obj<T>` where `T: TypedData`\*\* | instance of `<T as TypedData>::class()` |
380
+ | `&T`, `typed_data::Obj<T>` where `T: TypedData`† | instance of `<T as TypedData>::class()` |
337
381
 
338
382
  \* when converting to `Vec` and `HashMap` the types of `T`/`K`,`V` must be native Rust types.
339
383
 
340
- \*\* see the `wrap` macro.
384
+ see the `wrap` macro.
385
+
386
+ ‡ when the `bytes` feature is enabled
341
387
 
342
- \*\*\* when the `bytes` feature is enabled
388
+ § when the `chrono` feature is enabled; `T` can be `Utc` or `FixedOffset`.
343
389
 
344
390
  ### Rust returning / passing values to Ruby
345
391
 
@@ -360,9 +406,9 @@ and `magnus::ArgList` for some additional details.
360
406
  | `(T, U)`, `(T, U, V)`, etc, `[T; N]`, `Vec<T>` | `Array` |
361
407
  | `HashMap<K, V>` | `Hash` |
362
408
  | `std::time::SystemTime` | `Time` |
363
- | `T`, `typed_data::Obj<T>` where `T: TypedData`\*\* | instance of `<T as TypedData>::class()` |
409
+ | `T`, `typed_data::Obj<T>` where `T: TypedData`\* | instance of `<T as TypedData>::class()` |
364
410
 
365
- \*\* see the `wrap` macro.
411
+ \* see the `wrap` macro.
366
412
 
367
413
  ### Conversions via Serde
368
414
 
@@ -432,7 +478,7 @@ use `unsafe`.
432
478
 
433
479
  ## Compatibility
434
480
 
435
- Ruby versions 3.0, 3.1, 3.2, and 3.3 are fully supported.
481
+ Ruby versions 3.0, 3.1, 3.2, 3.3 and 3.4 are fully supported.
436
482
 
437
483
  Magnus currently works with, and is still tested against, Ruby 2.7, but as this
438
484
  version of the language is no longer supported by the Ruby developers it is not
@@ -441,7 +487,7 @@ recommended and future support in Magnus is not guaranteed.
441
487
  Ruby bindings will be generated at compile time, this may require libclang to
442
488
  be installed.
443
489
 
444
- The Minimum supported Rust version is currently Rust 1.61.
490
+ The minimum supported Rust version is currently Rust 1.65.
445
491
 
446
492
  Support for statically linking Ruby is provided via the lower-level [rb-sys]
447
493
  crate, and can be enabled by adding the following to your `Cargo.toml`:
@@ -479,6 +525,10 @@ deserialisation of Rust to Ruby data structures and vice versa.
479
525
 
480
526
  * [`halton`](https://github.com/matsadler/halton-rb) a Ruby gem providing a
481
527
  highly optimised method for generating Halton sequences.
528
+ * [`optify`](https://github.com/juharris/optify) a Ruby gem to
529
+ simplify using configuration files to manage options for experiments.
530
+ It has a GitHub action to publish the gem for different architectures to RubyGems
531
+ with a RBI file for type hints.
482
532
 
483
533
  Please open a [pull request](https://github.com/matsadler/magnus/pulls) if
484
534
  you'd like your project listed here.
@@ -512,4 +562,6 @@ library turns out better for you.
512
562
 
513
563
  ## License
514
564
 
515
- This project is licensed under the MIT license, see LICENSE.
565
+ This project is licensed under the MIT license, see [LICENSE].
566
+
567
+ [LICENSE]: https://github.com/matsadler/magnus/blob/main/LICENSE
@@ -0,0 +1,15 @@
1
+ fn main() -> Result<(), Box<dyn std::error::Error>> {
2
+ // add these here to silence warnings until rb_sys_env is updated
3
+ println!("cargo:rustc-check-cfg=cfg(ruby_use_flonum)");
4
+ println!("cargo:rustc-check-cfg=cfg(ruby_lt_3_0)");
5
+ println!("cargo:rustc-check-cfg=cfg(ruby_gte_3_0)");
6
+ println!("cargo:rustc-check-cfg=cfg(ruby_gte_3_1)");
7
+ println!("cargo:rustc-check-cfg=cfg(ruby_lt_3_2)");
8
+ println!("cargo:rustc-check-cfg=cfg(ruby_gte_3_2)");
9
+ println!("cargo:rustc-check-cfg=cfg(ruby_lt_3_3)");
10
+ println!("cargo:rustc-check-cfg=cfg(ruby_gte_3_3)");
11
+
12
+ let _ = rb_sys_env::activate()?;
13
+
14
+ Ok(())
15
+ }
@@ -31,14 +31,14 @@ class TemperatureTest < Test::Unit::TestCase
31
31
 
32
32
  def test_dup
33
33
  temp = Temperature.new(celsius: 19.5)
34
- def temp.singlton_method_example
34
+ def temp.singleton_method_example
35
35
  end
36
36
  copy = temp.dup
37
37
 
38
38
  assert { temp.object_id != copy.object_id }
39
39
  assert { temp == copy }
40
40
  assert { !copy.frozen? }
41
- assert { !copy.respond_to?(:singlton_method_example)}
41
+ assert { !copy.respond_to?(:singleton_method_example)}
42
42
 
43
43
  temp2 = Temperature.new(celsius: 19.5)
44
44
  temp2.freeze
@@ -48,14 +48,14 @@ class TemperatureTest < Test::Unit::TestCase
48
48
 
49
49
  def test_clone
50
50
  temp = Temperature.new(celsius: 19.5)
51
- def temp.singlton_method_example
51
+ def temp.singleton_method_example
52
52
  end
53
53
  copy = temp.clone
54
54
 
55
55
  assert { temp.object_id != copy.object_id }
56
56
  assert { temp == copy }
57
57
  assert { !copy.frozen? }
58
- assert { copy.respond_to?(:singlton_method_example)}
58
+ assert { copy.respond_to?(:singleton_method_example)}
59
59
 
60
60
  temp2 = Temperature.new(celsius: 19.5)
61
61
  temp2.freeze
@@ -0,0 +1,66 @@
1
+ use magnus::{function, method, prelude::*};
2
+
3
+ /// Building on top of `wrap`, we can rely on Rust's enum to dispatch based on enum variants.
4
+ /// Magnus will transform the types between Ruby and Rust.
5
+ #[magnus::wrap(class = "Shape")]
6
+ enum Shape {
7
+ #[magnus(class = "Circle")]
8
+ Circle { radius: f64 },
9
+ #[magnus(class = "Rectangle")]
10
+ Rectangle { x: f64, y: f64 },
11
+ }
12
+
13
+ impl Shape {
14
+ fn new_circle(radius: f64) -> Self {
15
+ Self::Circle { radius }
16
+ }
17
+
18
+ fn new_rectangle(x: f64, y: f64) -> Self {
19
+ Self::Rectangle { x, y }
20
+ }
21
+
22
+ fn area(&self) -> f64 {
23
+ match self {
24
+ Shape::Circle { radius } => std::f64::consts::PI * radius * radius,
25
+ Shape::Rectangle { x, y } => x * y,
26
+ }
27
+ }
28
+ }
29
+
30
+ fn print_area(s: &Shape) {
31
+ println!("{}", s.area());
32
+ }
33
+
34
+ fn main() -> Result<(), String> {
35
+ // Normal Rust code
36
+ let a = Shape::Circle { radius: 10.0 };
37
+ let b = Shape::Rectangle { x: 10.0, y: 2.0 };
38
+ print_area(&a);
39
+ print_area(&b);
40
+
41
+ // magnus binding running in Ruby
42
+ magnus::Ruby::init(|ruby| {
43
+ let shape_class = ruby.define_class("Shape", ruby.class_object())?;
44
+ shape_class.undef_default_alloc_func();
45
+
46
+ // inherit from Shape
47
+ let circle_class = ruby.define_class("Circle", shape_class)?;
48
+ circle_class.define_singleton_method("new", function!(Shape::new_circle, 1))?;
49
+ circle_class.define_method("area", method!(Shape::area, 0))?;
50
+
51
+ let rectangle_class = ruby.define_class("Rectangle", shape_class)?;
52
+ rectangle_class.define_singleton_method("new", function!(Shape::new_rectangle, 2))?;
53
+ rectangle_class.define_method("area", method!(Shape::area, 0))?;
54
+
55
+ let d: f64 = ruby.eval(
56
+ "a = Circle.new(10.0)
57
+ b = Rectangle.new(10.0, 2.0)
58
+ difference = a.area - b.area
59
+ puts \"The difference of the area between the circle and the rectangle is #{difference}.\"
60
+ difference",
61
+ )?;
62
+
63
+ println!("{}", d);
64
+ Ok(())
65
+ })
66
+ }
@@ -0,0 +1,116 @@
1
+ use std::cell::RefCell;
2
+
3
+ use magnus::{function, method, prelude::*, wrap, Error, Ruby};
4
+
5
+ struct Point {
6
+ x: isize,
7
+ y: isize,
8
+ }
9
+
10
+ // The `wrap` macro wraps a Rust type in a Ruby object, enabling seamless
11
+ // integration.
12
+ //
13
+ // Magnus uses two Ruby API functions to manage the struct:
14
+ // * `rb_data_typed_object_wrap`
15
+ // * `rb_check_typeddata`
16
+ //
17
+ // # Mutability
18
+ //
19
+ // Ruby's garbage collector (GC) manages memory for wrapped objects. This
20
+ // prevents using `&mut` references because Rust requires them to be unique,
21
+ // while Ruby GC may move objects unpredictably. To address this, you can use
22
+ // [`RefCell`](https://doc.rust-lang.org/std/cell/struct.RefCell.html) to
23
+ // enable interior mutability.
24
+ //
25
+ // # Error Handling
26
+ //
27
+ // Use [`magnus::Error`](https://docs.rs/magnus/latest/magnus/struct.Error.html)
28
+ // to propagate errors to Ruby.
29
+ // For example, you can raise a Ruby exception from Rust using Ruby's
30
+ // predefined exception classes.
31
+ //
32
+ // The syntax for methods like `add_x` differs slightly from typical Rust
33
+ // struct methods because it uses the
34
+ // [`method!` macro](https://docs.rs/magnus/latest/magnus/macro.method.html):
35
+ // * The first parameter, `ruby`, gives access to Ruby's runtime.
36
+ // * The second parameter, `rb_self`, is the Ruby object being called.
37
+ //
38
+ // See [`DataTypeFunctions`](https://docs.rs/magnus/latest/magnus/derive.DataTypeFunctions.html)
39
+ // and [`TypedData`](https://docs.rs/magnus/latest/magnus/derive.TypedData.html)
40
+ #[wrap(class = "Point")]
41
+ struct MutPoint(RefCell<Point>);
42
+
43
+ impl MutPoint {
44
+ fn new(x: isize, y: isize) -> Self {
45
+ Self(RefCell::new(Point { x, y }))
46
+ }
47
+
48
+ fn x(&self) -> isize {
49
+ self.0.borrow().x
50
+ }
51
+
52
+ fn set_x(&self, val: isize) {
53
+ self.0.borrow_mut().x = val;
54
+ }
55
+
56
+ fn add_x(ruby: &Ruby, rb_self: &Self, val: isize) -> Result<isize, Error> {
57
+ if let Some(sum) = rb_self.0.borrow().x.checked_add(val) {
58
+ rb_self.0.borrow_mut().x = sum;
59
+ Ok(sum)
60
+ } else {
61
+ Err(Error::new(
62
+ ruby.exception_range_error(),
63
+ "result out of range",
64
+ ))
65
+ }
66
+ }
67
+
68
+ fn y(&self) -> isize {
69
+ self.0.borrow().y
70
+ }
71
+
72
+ fn set_y(&self, val: isize) {
73
+ self.0.borrow_mut().y = val;
74
+ }
75
+
76
+ fn add_y(ruby: &Ruby, rb_self: &Self, val: isize) -> Result<isize, Error> {
77
+ if let Some(sum) = rb_self.0.borrow().y.checked_add(val) {
78
+ rb_self.0.borrow_mut().y = sum;
79
+ Ok(sum)
80
+ } else {
81
+ Err(Error::new(
82
+ ruby.exception_range_error(),
83
+ "result out of range",
84
+ ))
85
+ }
86
+ }
87
+
88
+ fn distance(&self, other: &MutPoint) -> f64 {
89
+ (((other.x() - self.x()).pow(2) + (other.y() - self.y()).pow(2)) as f64).sqrt()
90
+ }
91
+ }
92
+
93
+ fn main() -> Result<(), String> {
94
+ magnus::Ruby::init(|ruby| {
95
+ let class = ruby.define_class("Point", ruby.class_object())?;
96
+ class.define_singleton_method("new", function!(MutPoint::new, 2))?;
97
+ class.define_method("x", method!(MutPoint::x, 0))?;
98
+ class.define_method("x=", method!(MutPoint::set_x, 1))?;
99
+ class.define_method("add_x", method!(MutPoint::add_x, 1))?;
100
+ class.define_method("y", method!(MutPoint::y, 0))?;
101
+ class.define_method("y=", method!(MutPoint::set_y, 1))?;
102
+ class.define_method("add_y", method!(MutPoint::add_y, 1))?;
103
+ class.define_method("distance", method!(MutPoint::distance, 1))?;
104
+
105
+ let d: f64 = ruby.eval(
106
+ "a = Point.new(0, 0)
107
+ b = Point.new(0, 0)
108
+ b.x = 5
109
+ b.y = 10
110
+ a.distance(b)",
111
+ )?;
112
+
113
+ println!("{}", d);
114
+ Ok(())
115
+ })
116
+ }
@@ -23,7 +23,7 @@ enum RubyGvlState {
23
23
  }
24
24
 
25
25
  thread_local! {
26
- static RUBY_GVL_STATE: RefCell<Option<RubyGvlState>> = RefCell::new(None);
26
+ static RUBY_GVL_STATE: RefCell<Option<RubyGvlState>> = const { RefCell::new(None) };
27
27
  }
28
28
 
29
29
  impl RubyGvlState {
@@ -68,11 +68,11 @@ impl RubyGvlState {
68
68
 
69
69
  /// A handle to access Ruby's API.
70
70
  ///
71
- /// Using Ruby's API requires the Ruby VM to be initalised and all access to be
71
+ /// Using Ruby's API requires the Ruby VM to be initialised and all access to be
72
72
  /// from a Ruby-created thread.
73
73
  ///
74
74
  /// This structure allows safe access to Ruby's API as it should only be
75
- /// possible to aquire an instance in situations where Ruby's API is known to
75
+ /// possible to acquire an instance in situations where Ruby's API is known to
76
76
  /// be available.
77
77
  ///
78
78
  /// Many functions that take Ruby values as arguments are available directly
@@ -107,6 +107,7 @@ impl RubyGvlState {
107
107
  /// * [Globals](#globals) - global variables, etc, plus current VM state such
108
108
  /// as calling the current `super` method.
109
109
  /// * [`Id`](#id) - low-level Symbol representation
110
+ /// * [`Io`](#io-helper-functions) - IO helper functions
110
111
  /// * [`Integer`](#integer)
111
112
  /// * [`Mutex`](#mutex)
112
113
  /// * [`nil`](#nil)
@@ -36,7 +36,7 @@ use crate::{
36
36
  /// See the [`Class`] trait for methods available on classes.
37
37
  /// See the [`Module`] trait for defining instance methods and nested
38
38
  /// classes/modules.
39
- /// See the [`Object`] trait for defining singlton methods (aka class methods).
39
+ /// See the [`Object`] trait for defining singleton methods (aka class methods).
40
40
  ///
41
41
  /// See the [`ReprValue`] trait for additional methods available on this type.
42
42
  #[derive(Clone, Copy)]
@@ -315,7 +315,7 @@ pub trait Class: Module {
315
315
  ///
316
316
  /// fn example(ruby: &Ruby) -> Result<(), Error> {
317
317
  /// let value = ruby.class_hash();
318
- /// // safe as we neve give Ruby a chance to free the string.
318
+ /// // safe as we never give Ruby a chance to free the string.
319
319
  /// let s = unsafe { value.name() }.into_owned();
320
320
  /// assert_eq!(s, "Hash");
321
321
  ///
@@ -329,7 +329,7 @@ pub trait Class: Module {
329
329
  ///
330
330
  /// fn example(ruby: &Ruby) -> Result<(), Error> {
331
331
  /// let value = ruby.exception_standard_error();
332
- /// // safe as we neve give Ruby a chance to free the string.
332
+ /// // safe as we never give Ruby a chance to free the string.
333
333
  /// let s = unsafe { value.name() }.into_owned();
334
334
  /// assert_eq!(s, "StandardError");
335
335
  ///
@@ -337,7 +337,7 @@ pub trait Class: Module {
337
337
  /// }
338
338
  /// # Ruby::init(example).unwrap()
339
339
  /// ```
340
- unsafe fn name(&self) -> Cow<str> {
340
+ unsafe fn name(&self) -> Cow<'_, str> {
341
341
  let ptr = rb_class2name(self.as_rb_value());
342
342
  let cstr = CStr::from_ptr(ptr);
343
343
  cstr.to_string_lossy()
@@ -504,10 +504,12 @@ pub trait Class: Module {
504
504
  });
505
505
  RB_CLASS_ALLOCATE_INSTANCE
506
506
  };
507
-
508
507
  unsafe {
509
- if rb_get_alloc_func(self.as_rb_value()) == rb_class_allocate_instance {
510
- rb_undef_alloc_func(self.as_rb_value())
508
+ let current_alloc = rb_get_alloc_func(self.as_rb_value());
509
+ if let (Some(actual), Some(default)) = (current_alloc, rb_class_allocate_instance) {
510
+ if std::ptr::eq(actual as *const (), default as *const ()) {
511
+ rb_undef_alloc_func(self.as_rb_value());
512
+ }
511
513
  }
512
514
  }
513
515
  }
@@ -6,10 +6,10 @@
6
6
  //! Encoding <-> RbEncoding <-> Index
7
7
  //! |______________________^
8
8
  //! ```
9
- //! Many functions that require an encoding take thier arguments as
9
+ //! Many functions that require an encoding take their arguments as
10
10
  //! `Into<RbEncoding>` or `Into<Index>` to ease working with the different
11
11
  //! types. The type specified for the `Into` conversion hints at the type the
12
- //! function nativly works with, and thus will avoid any conversion cost.
12
+ //! function natively works with, and thus will avoid any conversion cost.
13
13
  //!
14
14
  //! [`Encoding`] and [`RbEncoding`] both implement [`TryConvert`] and
15
15
  //! [`IntoValue`] so can be used as parameters and return values in functions
@@ -314,7 +314,7 @@ impl Ruby {
314
314
  pub struct RbEncoding(NonNull<rb_encoding>);
315
315
 
316
316
  impl RbEncoding {
317
- fn new(inner: *mut rb_encoding) -> Option<Self> {
317
+ pub(crate) fn new(inner: *mut rb_encoding) -> Option<Self> {
318
318
  NonNull::new(inner).map(Self)
319
319
  }
320
320
 
@@ -586,7 +586,7 @@ impl RbEncoding {
586
586
  /// Returns the number of bytes of the first character in `slice`.
587
587
  ///
588
588
  /// If the first byte of `slice` is mid way through a character this will
589
- /// return the number of bytes until the next character boundry.
589
+ /// return the number of bytes until the next character boundary.
590
590
  ///
591
591
  /// If the slice ends before the last byte of the character this will
592
592
  /// return the theoretical number of bytes until the end of the character,
@@ -739,7 +739,7 @@ impl RbEncoding {
739
739
  if len == 0 {
740
740
  panic!("{:?}", slice);
741
741
  }
742
- (c > -1).then(|| (c as u8, len as usize))
742
+ (c > -1).then_some((c as u8, len as usize))
743
743
  }
744
744
 
745
745
  /// Returns the codepoint and length in bytes of the first character in
@@ -5,8 +5,8 @@
5
5
  use std::{any::Any, borrow::Cow, ffi::CString, fmt, mem::transmute, os::raw::c_int};
6
6
 
7
7
  use rb_sys::{
8
- rb_bug, rb_ensure, rb_errinfo, rb_exc_raise, rb_iter_break_value, rb_jump_tag, rb_protect,
9
- rb_set_errinfo, rb_warning, ruby_special_consts, VALUE,
8
+ rb_bug, rb_ensure, rb_errinfo, rb_exc_fatal, rb_exc_raise, rb_iter_break_value, rb_jump_tag,
9
+ rb_protect, rb_set_errinfo, rb_warning, ruby_special_consts, VALUE,
10
10
  };
11
11
 
12
12
  use crate::{
@@ -19,7 +19,7 @@ use crate::{
19
19
  };
20
20
 
21
21
  /// An error returned to indicate an attempt to interact with the Ruby API from
22
- /// a non-Ruby thread or without aquiring the GVL.
22
+ /// a non-Ruby thread or without acquiring the GVL.
23
23
  #[derive(Debug)]
24
24
  pub enum RubyUnavailableError {
25
25
  /// GVL is not locked.
@@ -539,6 +539,15 @@ where
539
539
  pub(crate) fn raise(e: Error) -> ! {
540
540
  match e.0 {
541
541
  ErrorType::Jump(tag) => tag.resume(),
542
+ ErrorType::Error(class, _)
543
+ if class.as_rb_value()
544
+ == unsafe { Ruby::get_unchecked().exception_fatal().as_rb_value() } =>
545
+ {
546
+ unsafe { rb_exc_fatal(e.exception().as_rb_value()) }
547
+ // friendly reminder: we really never get here, and as such won't
548
+ // drop any values still in scope, make sure everything has been
549
+ // consumed/dropped
550
+ }
542
551
  _ => {
543
552
  unsafe { rb_exc_raise(e.exception().as_rb_value()) }
544
553
  // friendly reminder: we really never get here, and as such won't
@@ -463,11 +463,11 @@ impl Fiber {
463
463
  {
464
464
  unsafe {
465
465
  protect(|| {
466
- Value::new(rb_fiber_raise(
467
- self.as_rb_value(),
468
- 1,
469
- &e.as_rb_value() as *const VALUE,
470
- ))
466
+ #[cfg(ruby_lte_3_4)]
467
+ let e = &e.as_rb_value() as *const VALUE;
468
+ #[cfg(ruby_gt_3_4)]
469
+ let e = &mut e.as_rb_value() as *mut VALUE;
470
+ Value::new(rb_fiber_raise(self.as_rb_value(), 1, e))
471
471
  })
472
472
  .and_then(TryConvert::try_convert)
473
473
  }
@@ -212,7 +212,7 @@ where
212
212
  ///
213
213
  /// Prevents Ruby moving or collecting `valref`. This should be used on
214
214
  /// `static` items to prevent them being collected instead of relying on Ruby
215
- /// constants/globals to allways refrence the value.
215
+ /// constants/globals to always reference the value.
216
216
  ///
217
217
  /// See also [`BoxValue`](crate::value::BoxValue).
218
218
  ///
@@ -347,7 +347,7 @@ impl Ruby {
347
347
  /// Trigger a "full" GC run.
348
348
  ///
349
349
  /// This will perform a full mark phase and a complete sweep phase, but may
350
- /// not run every single proceess associated with garbage collection.
350
+ /// not run every single process associated with garbage collection.
351
351
  ///
352
352
  /// Finalisers will be deferred to run later.
353
353
  ///
@@ -552,7 +552,7 @@ pub fn enable() -> bool {
552
552
  /// Trigger a "full" GC run.
553
553
  ///
554
554
  /// This will perform a full mark phase and a complete sweep phase, but may not
555
- /// run every single proceess associated with garbage collection.
555
+ /// run every single process associated with garbage collection.
556
556
  ///
557
557
  /// Finalisers will be deferred to run later.
558
558
  ///