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.
- checksums.yaml +4 -4
- data/.cargo/config +2 -2
- data/Cargo.lock +10 -16
- data/README.md +8 -8
- data/ext/cargo-vendor/codeowners-0.3.2/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/codeowners-0.3.2/.github/CODEOWNERS +1 -0
- data/ext/cargo-vendor/codeowners-0.3.2/AGENTS.md +38 -0
- data/ext/cargo-vendor/codeowners-0.3.2/CLAUDE.md +1 -0
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/Cargo.lock +1 -1
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/Cargo.toml +17 -1
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/README.md +11 -1
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cli.rs +9 -5
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/config.rs +81 -1
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/crosscheck.rs +5 -8
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/codeowners_file_parser.rs +3 -3
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_owner_resolver.rs +3 -1
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/package_mapper.rs +2 -2
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper.rs +2 -2
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/validator.rs +15 -10
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership.rs +1 -0
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project.rs +3 -0
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project_builder.rs +111 -44
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/runner/api.rs +7 -6
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/runner/types.rs +2 -1
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/runner.rs +67 -16
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/tracked_files.rs +29 -1
- data/ext/cargo-vendor/codeowners-0.3.2/tests/codeowners_path_test.rs +92 -0
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/common/mod.rs +2 -1
- data/ext/cargo-vendor/codeowners-0.3.2/tests/executable_name_config_test.rs +67 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/config/code_ownership.yml +11 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/config/teams/test_team.yml +6 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/docs/CODEOWNERS +14 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/expected/CODEOWNERS +14 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_codeowners_path/ruby/app/models/test.rb +3 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/.github/CODEOWNERS +10 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/app/foo.rb +3 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/config/code_ownership.yml +4 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/config/teams/foo.yml +5 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/config/teams/payments.yml +6 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/custom_executable_name/ruby/app/payments/foo.rb +4 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/.github/CODEOWNERS +11 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/app/bar.rb +3 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/config/code_ownership.yml +5 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/default_executable_name/config/teams/bar.yml +5 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/.github/CODEOWNERS +10 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/config/code_ownership.yml +10 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/config/teams/bad_team.yml +1 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/missing_github_team/config/teams/good.yml +3 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/fixtures/valid_project/gems/pets/dog.rb +5 -0
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/git_stage_test.rs +4 -1
- data/ext/cargo-vendor/codeowners-0.3.2/tests/missing_github_team_test.rs +23 -0
- data/ext/cargo-vendor/codeowners-0.3.2/tests/run_config_executable_override_test.rs +98 -0
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/runner_api.rs +8 -4
- data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/valid_project_test.rs +3 -3
- data/ext/cargo-vendor/codeowners-0.3.2/tests/validate_files_test.rs +378 -0
- data/ext/cargo-vendor/magnus-0.8.2/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/magnus-0.8.2/.cargo_vcs_info.json +6 -0
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/CHANGELOG.md +66 -1
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/Cargo.lock +243 -9
- data/ext/cargo-vendor/magnus-0.8.2/Cargo.toml +277 -0
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/Cargo.toml.orig +11 -6
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/README.md +75 -23
- data/ext/cargo-vendor/magnus-0.8.2/build.rs +15 -0
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/complete_object/test/temperature_test.rb +4 -4
- data/ext/cargo-vendor/magnus-0.8.2/examples/inheritance.rs +66 -0
- data/ext/cargo-vendor/magnus-0.8.2/examples/mut_point.rs +116 -0
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/api.rs +4 -3
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/class.rs +9 -7
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/encoding.rs +5 -5
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/error.rs +12 -3
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/fiber.rs +5 -5
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/gc.rs +3 -3
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/integer.rs +134 -0
- data/ext/cargo-vendor/magnus-0.8.2/src/io.rs +230 -0
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/lib.rs +53 -54
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/macros.rs +2 -2
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/method.rs +14 -100
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/module.rs +1 -1
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/mutex.rs +1 -1
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_array.rs +2 -2
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_bignum.rs +100 -3
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_hash.rs +63 -1
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_string.rs +31 -231
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_typed_data.rs +6 -9
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/rb_sys.rs +4 -4
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/scan_args.rs +3 -3
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/thread.rs +16 -10
- data/ext/cargo-vendor/magnus-0.8.2/src/time.rs +462 -0
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/try_convert.rs +64 -2
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/typed_data.rs +113 -11
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/value/flonum.rs +1 -1
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/value.rs +83 -6
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/test +1 -1
- data/ext/cargo-vendor/magnus-0.8.2/tests/hash.rs +44 -0
- data/ext/cargo-vendor/magnus-0.8.2/tests/io.rs +62 -0
- data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/return_iter.rs +1 -1
- data/ext/cargo-vendor/magnus-0.8.2/tests/string.rs +23 -0
- data/ext/cargo-vendor/magnus-0.8.2/tests/time.rs +71 -0
- data/ext/cargo-vendor/magnus-macros-0.8.0/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/magnus-macros-0.8.0/.cargo_vcs_info.json +6 -0
- data/ext/cargo-vendor/magnus-macros-0.8.0/Cargo.lock +47 -0
- data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/Cargo.toml +10 -1
- data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/Cargo.toml.orig +1 -1
- data/ext/cargo-vendor/magnus-macros-0.8.0/src/lib.rs +545 -0
- data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/src/typed_data.rs +3 -3
- data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/src/util.rs +1 -1
- data/ext/cargo-vendor/serde_magnus-0.10.0/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/serde_magnus-0.10.0/.cargo_vcs_info.json +6 -0
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/Cargo.lock +77 -75
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/Cargo.toml +3 -3
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/Cargo.toml.orig +7 -4
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/README.md +8 -5
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/array_deserializer.rs +12 -8
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/array_enumerator.rs +12 -7
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/deserializer.rs +21 -18
- data/ext/cargo-vendor/serde_magnus-0.10.0/src/de/enum_deserializer.rs +35 -0
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/hash_deserializer.rs +18 -11
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/mod.rs +76 -76
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/de/variant_deserializer.rs +10 -9
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/error.rs +10 -4
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/lib.rs +6 -5
- data/ext/cargo-vendor/serde_magnus-0.10.0/src/ser/enums.rs +11 -0
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/ser/map_serializer.rs +11 -12
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/ser/mod.rs +53 -50
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/ser/seq_serializer.rs +11 -10
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/src/ser/serializer.rs +50 -34
- data/ext/cargo-vendor/serde_magnus-0.10.0/src/ser/struct_serializer.rs +40 -0
- data/ext/cargo-vendor/serde_magnus-0.10.0/src/ser/struct_variant_serializer.rs +45 -0
- data/ext/cargo-vendor/serde_magnus-0.10.0/src/ser/tuple_variant_serializer.rs +38 -0
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_arrays.rs +3 -3
- data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_booleans.rs +15 -0
- data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_enums.rs +39 -0
- data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_floats.rs +12 -0
- data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_integers.rs +18 -0
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_maps.rs +3 -2
- data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_options.rs +15 -0
- data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_results.rs +17 -0
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_strings.rs +7 -7
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_structs.rs +9 -9
- data/ext/cargo-vendor/serde_magnus-0.10.0/tests/deserializing_tuples.rs +27 -0
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/deserializing_vecs.rs +3 -3
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_arrays.rs +3 -3
- data/ext/cargo-vendor/serde_magnus-0.10.0/tests/serializing_booleans.rs +15 -0
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_enums.rs +9 -7
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_floats.rs +2 -2
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_integers.rs +4 -4
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_maps.rs +3 -2
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_options.rs +3 -3
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_results.rs +5 -4
- data/ext/cargo-vendor/serde_magnus-0.10.0/tests/serializing_strings.rs +30 -0
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_structs.rs +15 -7
- data/ext/cargo-vendor/serde_magnus-0.10.0/tests/serializing_tuples.rs +35 -0
- data/ext/cargo-vendor/{serde_magnus-0.9.0 → serde_magnus-0.10.0}/tests/serializing_vecs.rs +3 -3
- data/ext/cargo-vendor/unicode-ident-1.0.19/.cargo-checksum.json +1 -1
- data/ext/code_ownership/Cargo.toml +3 -3
- data/ext/code_ownership/extconf.rb +2 -1
- data/ext/code_ownership/src/lib.rs +18 -18
- data/lib/code_ownership/cli.rb +1 -0
- data/lib/code_ownership/private/file_path_finder.rb +22 -10
- data/lib/code_ownership/private/file_path_team_cache.rb +5 -9
- data/lib/code_ownership/private/for_file_output_builder.rb +0 -1
- data/lib/code_ownership/private/team_finder.rb +9 -16
- data/lib/code_ownership/version.rb +2 -2
- data/lib/code_ownership.rb +14 -17
- metadata +359 -337
- data/ext/cargo-vendor/codeowners-0.3.0/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/codeowners-0.3.0/tests/validate_files_test.rs +0 -144
- data/ext/cargo-vendor/magnus-0.7.1/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/magnus-0.7.1/.cargo_vcs_info.json +0 -6
- data/ext/cargo-vendor/magnus-0.7.1/Cargo.toml +0 -95
- data/ext/cargo-vendor/magnus-0.7.1/build.rs +0 -5
- data/ext/cargo-vendor/magnus-0.7.1/examples/mut_point.rs +0 -60
- data/ext/cargo-vendor/magnus-0.7.1/src/time.rs +0 -190
- data/ext/cargo-vendor/magnus-0.7.1/tests/hash.rs +0 -25
- data/ext/cargo-vendor/magnus-0.7.1/tests/string.rs +0 -13
- data/ext/cargo-vendor/magnus-macros-0.6.0/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/magnus-macros-0.6.0/.cargo_vcs_info.json +0 -6
- data/ext/cargo-vendor/magnus-macros-0.6.0/src/lib.rs +0 -401
- data/ext/cargo-vendor/rb-sys-env-0.1.2/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/rb-sys-env-0.1.2/.cargo_vcs_info.json +0 -6
- data/ext/cargo-vendor/rb-sys-env-0.1.2/Cargo.toml +0 -25
- data/ext/cargo-vendor/rb-sys-env-0.1.2/Cargo.toml.orig +0 -14
- data/ext/cargo-vendor/rb-sys-env-0.1.2/LICENSE-APACHE +0 -190
- data/ext/cargo-vendor/rb-sys-env-0.1.2/LICENSE-MIT +0 -21
- data/ext/cargo-vendor/rb-sys-env-0.1.2/readme.md +0 -119
- data/ext/cargo-vendor/rb-sys-env-0.1.2/src/defines.rs +0 -37
- data/ext/cargo-vendor/rb-sys-env-0.1.2/src/lib.rs +0 -180
- data/ext/cargo-vendor/rb-sys-env-0.1.2/src/rb_env.rs +0 -110
- data/ext/cargo-vendor/rb-sys-env-0.1.2/src/ruby_version.rs +0 -163
- data/ext/cargo-vendor/rb-sys-env-0.1.2/src/utils.rs +0 -6
- data/ext/cargo-vendor/serde_magnus-0.9.0/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/serde_magnus-0.9.0/.cargo_vcs_info.json +0 -6
- data/ext/cargo-vendor/serde_magnus-0.9.0/src/de/enum_deserializer.rs +0 -30
- data/ext/cargo-vendor/serde_magnus-0.9.0/src/ser/enums.rs +0 -11
- data/ext/cargo-vendor/serde_magnus-0.9.0/src/ser/struct_serializer.rs +0 -36
- data/ext/cargo-vendor/serde_magnus-0.9.0/src/ser/struct_variant_serializer.rs +0 -37
- data/ext/cargo-vendor/serde_magnus-0.9.0/src/ser/tuple_variant_serializer.rs +0 -33
- data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_booleans.rs +0 -18
- data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_enums.rs +0 -39
- data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_floats.rs +0 -12
- data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_integers.rs +0 -18
- data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_options.rs +0 -15
- data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_results.rs +0 -17
- data/ext/cargo-vendor/serde_magnus-0.9.0/tests/deserializing_tuples.rs +0 -31
- data/ext/cargo-vendor/serde_magnus-0.9.0/tests/serializing_booleans.rs +0 -15
- data/ext/cargo-vendor/serde_magnus-0.9.0/tests/serializing_strings.rs +0 -30
- data/ext/cargo-vendor/serde_magnus-0.9.0/tests/serializing_tuples.rs +0 -27
- data/ext/cargo-vendor/unicode-ident-1.0.19/tests/fst/.gitignore +0 -1
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/audit.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/ci.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.github/workflows/dotslash-config.json +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.rustfmt.toml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/.rusty-hook.toml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/dev/run_benchmarks_for_file.sh +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/dev/run_benchmarks_for_gv.sh +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/rust-toolchain.toml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/file.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/mod.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/cache/noop.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/common_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/lib.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/main.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/codeowners_query.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_generator.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/file_owner_finder.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/annotated_file_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/directory_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/escaper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_gem_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_glob_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/ownership/mapper/team_yml_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/path_utils.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/src/project_file_builder.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/cache_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/crosscheck_owners_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/.github/CODEOWNERS +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/code_ownership.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/teams/payments.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/config/teams/payroll.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/gems/payroll_calculator/calculator.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/bank_account.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/blockchain.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/models/payroll.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/payments/nacha.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/services/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/services/multi_owned.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/app/unowned.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/invalid_project/ruby/packages/payroll_flow/package.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/.github/CODEOWNERS +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/.keep +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/code_ownership.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/teams/design.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/config/teams/frontend.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/apps/public/index.tsx +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/dashboard/package.json +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/.codeowner +0 -0
- /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
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/.github/CODEOWNERS +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/consumers/.codeowner +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/consumers/one_owner.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/services/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/app/services/exciting/.codeowner +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/teams/bar.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/multiple-directory-owners/config/teams/foo.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/.github/CODEOWNERS +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/.ignore +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/code_ownership.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/payments.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/payroll.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/config/teams/ux.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/gems/payroll_calculator/calculator.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/index.tsx +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/package.json +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/(special)/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/(special)/pay.ts +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/items/item.ts +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/javascript/packages/list/page-admin.tsx +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/models/bank_account.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/models/payroll.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payments/foo/.codeowner +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payments/nacha.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payroll/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/payroll/payroll.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/app/views/foos/edit.erb +0 -0
- /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
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/ignored_files/git_ignored.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project/ruby/packages/payroll_flow/package.yml +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/.github/CODEOWNERS +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/code_ownership.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/brewers.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/cubs.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/giants.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/config/teams/rockies.yml +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/games/package.yml +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/locations/package.yml +0 -0
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/packs/schedule/package.yml +0 -0
- /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
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/.codeowner +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/invalid_project_structure_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/invalid_project_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/multiple_directory_owners_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/untracked_files_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tests/valid_project_with_overrides_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.3.0 → codeowners-0.3.2}/tmp/.gitkeep +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/.cargo/config.toml +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/Gemfile +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/LICENSE +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/complete_object/Rakefile +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/complete_object/lib/temperature.rb +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_ruby/Rakefile +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_ruby/lib/ahriman/error.rb +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_ruby/lib/ahriman.rb +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_ruby/test/error_test.rb +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_rust/Rakefile +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_rust/lib/ahriman.rb +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/custom_exception_rust/test/error_test.rb +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/fibonacci.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/hello_world.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/point.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/rust_blank/Rakefile +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/rust_blank/lib/rust_blank.rb +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/rust_blank/test/bench.rb +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/examples/rust_blank/test/blank_test.rb +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/block.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/embed.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/enumerator.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/exception.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/float.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/into_value.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/numeric.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/object.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/process.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_complex.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_file.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_float.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_match.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_object.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_rational.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_regexp.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/r_struct.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/range.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/src/symbol.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/allocate_before_init.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/array_slice.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/block_call.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/bytes.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/call_proc.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/classname.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/clone.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/codepoints.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/debug_exception.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/encoding_capable.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/enumerator.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/enumeratorize.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/float_convert_from_value.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/float_convert_to_value.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/fmt.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/freeze.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/integer_convert_to_value.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/integer_traits.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/ivar.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/lazy_id.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/make_proc.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/proc_new.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/range.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/return_custom_error.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/scan_args.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/str.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/struct.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/symbol.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/try_convert_array.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/tuple_to_array.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/typed_data.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/typed_data_obj.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/typed_data_subclass.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/typed_data_subclass_from_ruby.rs +0 -0
- /data/ext/cargo-vendor/{magnus-0.7.1 → magnus-0.8.2}/tests/yield.rs +0 -0
- /data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/LICENSE +0 -0
- /data/ext/cargo-vendor/{magnus-macros-0.6.0 → magnus-macros-0.8.0}/src/init.rs +0 -0
- /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
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
150
|
-
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
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`
|
|
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
|
|
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
|
-
|
|
384
|
+
† see the `wrap` macro.
|
|
385
|
+
|
|
386
|
+
‡ when the `bytes` feature is enabled
|
|
341
387
|
|
|
342
|
-
|
|
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
|
|
409
|
+
| `T`, `typed_data::Obj<T>` where `T: TypedData`\* | instance of `<T as TypedData>::class()` |
|
|
364
410
|
|
|
365
|
-
|
|
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.
|
|
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
|
|
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.
|
|
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?(:
|
|
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.
|
|
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?(:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
510
|
-
|
|
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
|
|
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
|
|
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
|
|
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).
|
|
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,
|
|
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
|
|
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
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
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
|
|
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
|
|
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
|
|
555
|
+
/// run every single process associated with garbage collection.
|
|
556
556
|
///
|
|
557
557
|
/// Finalisers will be deferred to run later.
|
|
558
558
|
///
|