kreuzberg 4.0.0.pre.rc.6
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 +7 -0
- data/.gitignore +14 -0
- data/.rspec +3 -0
- data/.rubocop.yaml +1 -0
- data/.rubocop.yml +538 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +157 -0
- data/README.md +426 -0
- data/Rakefile +25 -0
- data/Steepfile +47 -0
- data/examples/async_patterns.rb +341 -0
- data/ext/kreuzberg_rb/extconf.rb +45 -0
- data/ext/kreuzberg_rb/native/Cargo.lock +6535 -0
- data/ext/kreuzberg_rb/native/Cargo.toml +44 -0
- data/ext/kreuzberg_rb/native/README.md +425 -0
- data/ext/kreuzberg_rb/native/build.rs +15 -0
- data/ext/kreuzberg_rb/native/include/ieeefp.h +11 -0
- data/ext/kreuzberg_rb/native/include/msvc_compat/strings.h +14 -0
- data/ext/kreuzberg_rb/native/include/strings.h +20 -0
- data/ext/kreuzberg_rb/native/include/unistd.h +47 -0
- data/ext/kreuzberg_rb/native/src/lib.rs +2998 -0
- data/extconf.rb +28 -0
- data/kreuzberg.gemspec +148 -0
- data/lib/kreuzberg/api_proxy.rb +142 -0
- data/lib/kreuzberg/cache_api.rb +46 -0
- data/lib/kreuzberg/cli.rb +55 -0
- data/lib/kreuzberg/cli_proxy.rb +127 -0
- data/lib/kreuzberg/config.rb +691 -0
- data/lib/kreuzberg/error_context.rb +32 -0
- data/lib/kreuzberg/errors.rb +118 -0
- data/lib/kreuzberg/extraction_api.rb +85 -0
- data/lib/kreuzberg/mcp_proxy.rb +186 -0
- data/lib/kreuzberg/ocr_backend_protocol.rb +113 -0
- data/lib/kreuzberg/post_processor_protocol.rb +86 -0
- data/lib/kreuzberg/result.rb +216 -0
- data/lib/kreuzberg/setup_lib_path.rb +80 -0
- data/lib/kreuzberg/validator_protocol.rb +89 -0
- data/lib/kreuzberg/version.rb +5 -0
- data/lib/kreuzberg.rb +103 -0
- data/sig/kreuzberg/internal.rbs +184 -0
- data/sig/kreuzberg.rbs +520 -0
- data/spec/binding/cache_spec.rb +227 -0
- data/spec/binding/cli_proxy_spec.rb +85 -0
- data/spec/binding/cli_spec.rb +55 -0
- data/spec/binding/config_spec.rb +345 -0
- data/spec/binding/config_validation_spec.rb +283 -0
- data/spec/binding/error_handling_spec.rb +213 -0
- data/spec/binding/errors_spec.rb +66 -0
- data/spec/binding/plugins/ocr_backend_spec.rb +307 -0
- data/spec/binding/plugins/postprocessor_spec.rb +269 -0
- data/spec/binding/plugins/validator_spec.rb +274 -0
- data/spec/fixtures/config.toml +39 -0
- data/spec/fixtures/config.yaml +41 -0
- data/spec/fixtures/invalid_config.toml +4 -0
- data/spec/smoke/package_spec.rb +178 -0
- data/spec/spec_helper.rb +42 -0
- data/vendor/kreuzberg/Cargo.toml +204 -0
- data/vendor/kreuzberg/README.md +175 -0
- data/vendor/kreuzberg/benches/otel_overhead.rs +48 -0
- data/vendor/kreuzberg/build.rs +474 -0
- data/vendor/kreuzberg/src/api/error.rs +81 -0
- data/vendor/kreuzberg/src/api/handlers.rs +199 -0
- data/vendor/kreuzberg/src/api/mod.rs +79 -0
- data/vendor/kreuzberg/src/api/server.rs +353 -0
- data/vendor/kreuzberg/src/api/types.rs +170 -0
- data/vendor/kreuzberg/src/cache/mod.rs +1167 -0
- data/vendor/kreuzberg/src/chunking/mod.rs +677 -0
- data/vendor/kreuzberg/src/core/batch_mode.rs +95 -0
- data/vendor/kreuzberg/src/core/config.rs +1032 -0
- data/vendor/kreuzberg/src/core/extractor.rs +1024 -0
- data/vendor/kreuzberg/src/core/io.rs +329 -0
- data/vendor/kreuzberg/src/core/mime.rs +605 -0
- data/vendor/kreuzberg/src/core/mod.rs +45 -0
- data/vendor/kreuzberg/src/core/pipeline.rs +984 -0
- data/vendor/kreuzberg/src/embeddings.rs +432 -0
- data/vendor/kreuzberg/src/error.rs +431 -0
- data/vendor/kreuzberg/src/extraction/archive.rs +954 -0
- data/vendor/kreuzberg/src/extraction/docx.rs +40 -0
- data/vendor/kreuzberg/src/extraction/email.rs +854 -0
- data/vendor/kreuzberg/src/extraction/excel.rs +688 -0
- data/vendor/kreuzberg/src/extraction/html.rs +553 -0
- data/vendor/kreuzberg/src/extraction/image.rs +368 -0
- data/vendor/kreuzberg/src/extraction/libreoffice.rs +563 -0
- data/vendor/kreuzberg/src/extraction/markdown.rs +213 -0
- data/vendor/kreuzberg/src/extraction/mod.rs +81 -0
- data/vendor/kreuzberg/src/extraction/office_metadata/app_properties.rs +398 -0
- data/vendor/kreuzberg/src/extraction/office_metadata/core_properties.rs +247 -0
- data/vendor/kreuzberg/src/extraction/office_metadata/custom_properties.rs +240 -0
- data/vendor/kreuzberg/src/extraction/office_metadata/mod.rs +130 -0
- data/vendor/kreuzberg/src/extraction/office_metadata/odt_properties.rs +287 -0
- data/vendor/kreuzberg/src/extraction/pptx.rs +3000 -0
- data/vendor/kreuzberg/src/extraction/structured.rs +490 -0
- data/vendor/kreuzberg/src/extraction/table.rs +328 -0
- data/vendor/kreuzberg/src/extraction/text.rs +269 -0
- data/vendor/kreuzberg/src/extraction/xml.rs +333 -0
- data/vendor/kreuzberg/src/extractors/archive.rs +446 -0
- data/vendor/kreuzberg/src/extractors/bibtex.rs +469 -0
- data/vendor/kreuzberg/src/extractors/docbook.rs +502 -0
- data/vendor/kreuzberg/src/extractors/docx.rs +367 -0
- data/vendor/kreuzberg/src/extractors/email.rs +143 -0
- data/vendor/kreuzberg/src/extractors/epub.rs +707 -0
- data/vendor/kreuzberg/src/extractors/excel.rs +343 -0
- data/vendor/kreuzberg/src/extractors/fictionbook.rs +491 -0
- data/vendor/kreuzberg/src/extractors/fictionbook.rs.backup2 +738 -0
- data/vendor/kreuzberg/src/extractors/html.rs +393 -0
- data/vendor/kreuzberg/src/extractors/image.rs +198 -0
- data/vendor/kreuzberg/src/extractors/jats.rs +1051 -0
- data/vendor/kreuzberg/src/extractors/jupyter.rs +367 -0
- data/vendor/kreuzberg/src/extractors/latex.rs +652 -0
- data/vendor/kreuzberg/src/extractors/markdown.rs +700 -0
- data/vendor/kreuzberg/src/extractors/mod.rs +365 -0
- data/vendor/kreuzberg/src/extractors/odt.rs +628 -0
- data/vendor/kreuzberg/src/extractors/opml.rs +634 -0
- data/vendor/kreuzberg/src/extractors/orgmode.rs +528 -0
- data/vendor/kreuzberg/src/extractors/pdf.rs +493 -0
- data/vendor/kreuzberg/src/extractors/pptx.rs +248 -0
- data/vendor/kreuzberg/src/extractors/rst.rs +576 -0
- data/vendor/kreuzberg/src/extractors/rtf.rs +810 -0
- data/vendor/kreuzberg/src/extractors/security.rs +484 -0
- data/vendor/kreuzberg/src/extractors/security_tests.rs +367 -0
- data/vendor/kreuzberg/src/extractors/structured.rs +140 -0
- data/vendor/kreuzberg/src/extractors/text.rs +260 -0
- data/vendor/kreuzberg/src/extractors/typst.rs +650 -0
- data/vendor/kreuzberg/src/extractors/xml.rs +135 -0
- data/vendor/kreuzberg/src/image/dpi.rs +164 -0
- data/vendor/kreuzberg/src/image/mod.rs +6 -0
- data/vendor/kreuzberg/src/image/preprocessing.rs +417 -0
- data/vendor/kreuzberg/src/image/resize.rs +89 -0
- data/vendor/kreuzberg/src/keywords/config.rs +154 -0
- data/vendor/kreuzberg/src/keywords/mod.rs +237 -0
- data/vendor/kreuzberg/src/keywords/processor.rs +267 -0
- data/vendor/kreuzberg/src/keywords/rake.rs +293 -0
- data/vendor/kreuzberg/src/keywords/types.rs +68 -0
- data/vendor/kreuzberg/src/keywords/yake.rs +163 -0
- data/vendor/kreuzberg/src/language_detection/mod.rs +942 -0
- data/vendor/kreuzberg/src/lib.rs +105 -0
- data/vendor/kreuzberg/src/mcp/mod.rs +32 -0
- data/vendor/kreuzberg/src/mcp/server.rs +1968 -0
- data/vendor/kreuzberg/src/ocr/cache.rs +469 -0
- data/vendor/kreuzberg/src/ocr/error.rs +37 -0
- data/vendor/kreuzberg/src/ocr/hocr.rs +216 -0
- data/vendor/kreuzberg/src/ocr/mod.rs +58 -0
- data/vendor/kreuzberg/src/ocr/processor.rs +863 -0
- data/vendor/kreuzberg/src/ocr/table/mod.rs +4 -0
- data/vendor/kreuzberg/src/ocr/table/tsv_parser.rs +144 -0
- data/vendor/kreuzberg/src/ocr/tesseract_backend.rs +450 -0
- data/vendor/kreuzberg/src/ocr/types.rs +393 -0
- data/vendor/kreuzberg/src/ocr/utils.rs +47 -0
- data/vendor/kreuzberg/src/ocr/validation.rs +206 -0
- data/vendor/kreuzberg/src/panic_context.rs +154 -0
- data/vendor/kreuzberg/src/pdf/error.rs +122 -0
- data/vendor/kreuzberg/src/pdf/images.rs +139 -0
- data/vendor/kreuzberg/src/pdf/metadata.rs +346 -0
- data/vendor/kreuzberg/src/pdf/mod.rs +50 -0
- data/vendor/kreuzberg/src/pdf/rendering.rs +369 -0
- data/vendor/kreuzberg/src/pdf/table.rs +393 -0
- data/vendor/kreuzberg/src/pdf/text.rs +158 -0
- data/vendor/kreuzberg/src/plugins/extractor.rs +1013 -0
- data/vendor/kreuzberg/src/plugins/mod.rs +209 -0
- data/vendor/kreuzberg/src/plugins/ocr.rs +620 -0
- data/vendor/kreuzberg/src/plugins/processor.rs +642 -0
- data/vendor/kreuzberg/src/plugins/registry.rs +1337 -0
- data/vendor/kreuzberg/src/plugins/traits.rs +258 -0
- data/vendor/kreuzberg/src/plugins/validator.rs +956 -0
- data/vendor/kreuzberg/src/stopwords/mod.rs +1470 -0
- data/vendor/kreuzberg/src/text/mod.rs +19 -0
- data/vendor/kreuzberg/src/text/quality.rs +697 -0
- data/vendor/kreuzberg/src/text/string_utils.rs +217 -0
- data/vendor/kreuzberg/src/text/token_reduction/cjk_utils.rs +164 -0
- data/vendor/kreuzberg/src/text/token_reduction/config.rs +100 -0
- data/vendor/kreuzberg/src/text/token_reduction/core.rs +796 -0
- data/vendor/kreuzberg/src/text/token_reduction/filters.rs +902 -0
- data/vendor/kreuzberg/src/text/token_reduction/mod.rs +160 -0
- data/vendor/kreuzberg/src/text/token_reduction/semantic.rs +619 -0
- data/vendor/kreuzberg/src/text/token_reduction/simd_text.rs +147 -0
- data/vendor/kreuzberg/src/types.rs +903 -0
- data/vendor/kreuzberg/src/utils/mod.rs +17 -0
- data/vendor/kreuzberg/src/utils/quality.rs +959 -0
- data/vendor/kreuzberg/src/utils/string_utils.rs +381 -0
- data/vendor/kreuzberg/stopwords/af_stopwords.json +53 -0
- data/vendor/kreuzberg/stopwords/ar_stopwords.json +482 -0
- data/vendor/kreuzberg/stopwords/bg_stopwords.json +261 -0
- data/vendor/kreuzberg/stopwords/bn_stopwords.json +400 -0
- data/vendor/kreuzberg/stopwords/br_stopwords.json +1205 -0
- data/vendor/kreuzberg/stopwords/ca_stopwords.json +280 -0
- data/vendor/kreuzberg/stopwords/cs_stopwords.json +425 -0
- data/vendor/kreuzberg/stopwords/da_stopwords.json +172 -0
- data/vendor/kreuzberg/stopwords/de_stopwords.json +622 -0
- data/vendor/kreuzberg/stopwords/el_stopwords.json +849 -0
- data/vendor/kreuzberg/stopwords/en_stopwords.json +1300 -0
- data/vendor/kreuzberg/stopwords/eo_stopwords.json +175 -0
- data/vendor/kreuzberg/stopwords/es_stopwords.json +734 -0
- data/vendor/kreuzberg/stopwords/et_stopwords.json +37 -0
- data/vendor/kreuzberg/stopwords/eu_stopwords.json +100 -0
- data/vendor/kreuzberg/stopwords/fa_stopwords.json +801 -0
- data/vendor/kreuzberg/stopwords/fi_stopwords.json +849 -0
- data/vendor/kreuzberg/stopwords/fr_stopwords.json +693 -0
- data/vendor/kreuzberg/stopwords/ga_stopwords.json +111 -0
- data/vendor/kreuzberg/stopwords/gl_stopwords.json +162 -0
- data/vendor/kreuzberg/stopwords/gu_stopwords.json +226 -0
- data/vendor/kreuzberg/stopwords/ha_stopwords.json +41 -0
- data/vendor/kreuzberg/stopwords/he_stopwords.json +196 -0
- data/vendor/kreuzberg/stopwords/hi_stopwords.json +227 -0
- data/vendor/kreuzberg/stopwords/hr_stopwords.json +181 -0
- data/vendor/kreuzberg/stopwords/hu_stopwords.json +791 -0
- data/vendor/kreuzberg/stopwords/hy_stopwords.json +47 -0
- data/vendor/kreuzberg/stopwords/id_stopwords.json +760 -0
- data/vendor/kreuzberg/stopwords/it_stopwords.json +634 -0
- data/vendor/kreuzberg/stopwords/ja_stopwords.json +136 -0
- data/vendor/kreuzberg/stopwords/kn_stopwords.json +84 -0
- data/vendor/kreuzberg/stopwords/ko_stopwords.json +681 -0
- data/vendor/kreuzberg/stopwords/ku_stopwords.json +64 -0
- data/vendor/kreuzberg/stopwords/la_stopwords.json +51 -0
- data/vendor/kreuzberg/stopwords/lt_stopwords.json +476 -0
- data/vendor/kreuzberg/stopwords/lv_stopwords.json +163 -0
- data/vendor/kreuzberg/stopwords/ml_stopwords.json +1 -0
- data/vendor/kreuzberg/stopwords/mr_stopwords.json +101 -0
- data/vendor/kreuzberg/stopwords/ms_stopwords.json +477 -0
- data/vendor/kreuzberg/stopwords/ne_stopwords.json +490 -0
- data/vendor/kreuzberg/stopwords/nl_stopwords.json +415 -0
- data/vendor/kreuzberg/stopwords/no_stopwords.json +223 -0
- data/vendor/kreuzberg/stopwords/pl_stopwords.json +331 -0
- data/vendor/kreuzberg/stopwords/pt_stopwords.json +562 -0
- data/vendor/kreuzberg/stopwords/ro_stopwords.json +436 -0
- data/vendor/kreuzberg/stopwords/ru_stopwords.json +561 -0
- data/vendor/kreuzberg/stopwords/si_stopwords.json +193 -0
- data/vendor/kreuzberg/stopwords/sk_stopwords.json +420 -0
- data/vendor/kreuzberg/stopwords/sl_stopwords.json +448 -0
- data/vendor/kreuzberg/stopwords/so_stopwords.json +32 -0
- data/vendor/kreuzberg/stopwords/st_stopwords.json +33 -0
- data/vendor/kreuzberg/stopwords/sv_stopwords.json +420 -0
- data/vendor/kreuzberg/stopwords/sw_stopwords.json +76 -0
- data/vendor/kreuzberg/stopwords/ta_stopwords.json +129 -0
- data/vendor/kreuzberg/stopwords/te_stopwords.json +54 -0
- data/vendor/kreuzberg/stopwords/th_stopwords.json +118 -0
- data/vendor/kreuzberg/stopwords/tl_stopwords.json +149 -0
- data/vendor/kreuzberg/stopwords/tr_stopwords.json +506 -0
- data/vendor/kreuzberg/stopwords/uk_stopwords.json +75 -0
- data/vendor/kreuzberg/stopwords/ur_stopwords.json +519 -0
- data/vendor/kreuzberg/stopwords/vi_stopwords.json +647 -0
- data/vendor/kreuzberg/stopwords/yo_stopwords.json +62 -0
- data/vendor/kreuzberg/stopwords/zh_stopwords.json +796 -0
- data/vendor/kreuzberg/stopwords/zu_stopwords.json +31 -0
- data/vendor/kreuzberg/tests/api_extract_multipart.rs +52 -0
- data/vendor/kreuzberg/tests/api_tests.rs +966 -0
- data/vendor/kreuzberg/tests/archive_integration.rs +543 -0
- data/vendor/kreuzberg/tests/batch_orchestration.rs +556 -0
- data/vendor/kreuzberg/tests/batch_processing.rs +316 -0
- data/vendor/kreuzberg/tests/bibtex_parity_test.rs +421 -0
- data/vendor/kreuzberg/tests/concurrency_stress.rs +525 -0
- data/vendor/kreuzberg/tests/config_features.rs +598 -0
- data/vendor/kreuzberg/tests/config_loading_tests.rs +415 -0
- data/vendor/kreuzberg/tests/core_integration.rs +510 -0
- data/vendor/kreuzberg/tests/csv_integration.rs +414 -0
- data/vendor/kreuzberg/tests/docbook_extractor_tests.rs +498 -0
- data/vendor/kreuzberg/tests/docx_metadata_extraction_test.rs +122 -0
- data/vendor/kreuzberg/tests/docx_vs_pandoc_comparison.rs +370 -0
- data/vendor/kreuzberg/tests/email_integration.rs +325 -0
- data/vendor/kreuzberg/tests/epub_native_extractor_tests.rs +275 -0
- data/vendor/kreuzberg/tests/error_handling.rs +393 -0
- data/vendor/kreuzberg/tests/fictionbook_extractor_tests.rs +228 -0
- data/vendor/kreuzberg/tests/format_integration.rs +159 -0
- data/vendor/kreuzberg/tests/helpers/mod.rs +142 -0
- data/vendor/kreuzberg/tests/html_table_test.rs +551 -0
- data/vendor/kreuzberg/tests/image_integration.rs +253 -0
- data/vendor/kreuzberg/tests/instrumentation_test.rs +139 -0
- data/vendor/kreuzberg/tests/jats_extractor_tests.rs +639 -0
- data/vendor/kreuzberg/tests/jupyter_extractor_tests.rs +704 -0
- data/vendor/kreuzberg/tests/keywords_integration.rs +479 -0
- data/vendor/kreuzberg/tests/keywords_quality.rs +509 -0
- data/vendor/kreuzberg/tests/latex_extractor_tests.rs +496 -0
- data/vendor/kreuzberg/tests/markdown_extractor_tests.rs +490 -0
- data/vendor/kreuzberg/tests/mime_detection.rs +428 -0
- data/vendor/kreuzberg/tests/ocr_configuration.rs +510 -0
- data/vendor/kreuzberg/tests/ocr_errors.rs +676 -0
- data/vendor/kreuzberg/tests/ocr_quality.rs +627 -0
- data/vendor/kreuzberg/tests/ocr_stress.rs +469 -0
- data/vendor/kreuzberg/tests/odt_extractor_tests.rs +695 -0
- data/vendor/kreuzberg/tests/opml_extractor_tests.rs +616 -0
- data/vendor/kreuzberg/tests/orgmode_extractor_tests.rs +822 -0
- data/vendor/kreuzberg/tests/pdf_integration.rs +43 -0
- data/vendor/kreuzberg/tests/pipeline_integration.rs +1411 -0
- data/vendor/kreuzberg/tests/plugin_ocr_backend_test.rs +771 -0
- data/vendor/kreuzberg/tests/plugin_postprocessor_test.rs +560 -0
- data/vendor/kreuzberg/tests/plugin_system.rs +921 -0
- data/vendor/kreuzberg/tests/plugin_validator_test.rs +783 -0
- data/vendor/kreuzberg/tests/registry_integration_tests.rs +586 -0
- data/vendor/kreuzberg/tests/rst_extractor_tests.rs +692 -0
- data/vendor/kreuzberg/tests/rtf_extractor_tests.rs +776 -0
- data/vendor/kreuzberg/tests/security_validation.rs +415 -0
- data/vendor/kreuzberg/tests/stopwords_integration_test.rs +888 -0
- data/vendor/kreuzberg/tests/test_fastembed.rs +609 -0
- data/vendor/kreuzberg/tests/typst_behavioral_tests.rs +1259 -0
- data/vendor/kreuzberg/tests/typst_extractor_tests.rs +647 -0
- data/vendor/kreuzberg/tests/xlsx_metadata_extraction_test.rs +87 -0
- data/vendor/rb-sys/.cargo-ok +1 -0
- data/vendor/rb-sys/.cargo_vcs_info.json +6 -0
- data/vendor/rb-sys/Cargo.lock +393 -0
- data/vendor/rb-sys/Cargo.toml +70 -0
- data/vendor/rb-sys/Cargo.toml.orig +57 -0
- data/vendor/rb-sys/LICENSE-APACHE +190 -0
- data/vendor/rb-sys/LICENSE-MIT +21 -0
- data/vendor/rb-sys/bin/release.sh +21 -0
- data/vendor/rb-sys/build/features.rs +108 -0
- data/vendor/rb-sys/build/main.rs +246 -0
- data/vendor/rb-sys/build/stable_api_config.rs +153 -0
- data/vendor/rb-sys/build/version.rs +48 -0
- data/vendor/rb-sys/readme.md +36 -0
- data/vendor/rb-sys/src/bindings.rs +21 -0
- data/vendor/rb-sys/src/hidden.rs +11 -0
- data/vendor/rb-sys/src/lib.rs +34 -0
- data/vendor/rb-sys/src/macros.rs +371 -0
- data/vendor/rb-sys/src/memory.rs +53 -0
- data/vendor/rb-sys/src/ruby_abi_version.rs +38 -0
- data/vendor/rb-sys/src/special_consts.rs +31 -0
- data/vendor/rb-sys/src/stable_api/compiled.c +179 -0
- data/vendor/rb-sys/src/stable_api/compiled.rs +257 -0
- data/vendor/rb-sys/src/stable_api/ruby_2_6.rs +316 -0
- data/vendor/rb-sys/src/stable_api/ruby_2_7.rs +316 -0
- data/vendor/rb-sys/src/stable_api/ruby_3_0.rs +324 -0
- data/vendor/rb-sys/src/stable_api/ruby_3_1.rs +317 -0
- data/vendor/rb-sys/src/stable_api/ruby_3_2.rs +315 -0
- data/vendor/rb-sys/src/stable_api/ruby_3_3.rs +326 -0
- data/vendor/rb-sys/src/stable_api/ruby_3_4.rs +327 -0
- data/vendor/rb-sys/src/stable_api.rs +261 -0
- data/vendor/rb-sys/src/symbol.rs +31 -0
- data/vendor/rb-sys/src/tracking_allocator.rs +332 -0
- data/vendor/rb-sys/src/utils.rs +89 -0
- data/vendor/rb-sys/src/value_type.rs +7 -0
- metadata +536 -0
data/README.md
ADDED
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
# Kreuzberg for Ruby
|
|
2
|
+
|
|
3
|
+
[](https://rubygems.org/gems/kreuzberg)
|
|
4
|
+
[](https://crates.io/crates/kreuzberg)
|
|
5
|
+
[](https://pypi.org/project/kreuzberg/)
|
|
6
|
+
[](https://www.npmjs.com/package/kreuzberg)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
[](https://kreuzberg.dev)
|
|
9
|
+
|
|
10
|
+
High-performance document intelligence for Ruby, powered by Rust.
|
|
11
|
+
|
|
12
|
+
Extract text, tables, images, and metadata from 30+ file formats including PDF, DOCX, PPTX, XLSX, images, and more.
|
|
13
|
+
|
|
14
|
+
> **🚀 Version 4.0.0 Release Candidate**
|
|
15
|
+
> This is a pre-release version. We invite you to test the library and [report any issues](https://github.com/kreuzberg-dev/kreuzberg/issues) you encounter.
|
|
16
|
+
|
|
17
|
+
## Features
|
|
18
|
+
|
|
19
|
+
- **30+ File Formats**: PDF, DOCX, PPTX, XLSX, images, HTML, Markdown, XML, JSON, and more
|
|
20
|
+
- **OCR Support**: Built-in Tesseract OCR for scanned documents and images
|
|
21
|
+
- **High Performance**: Rust-powered extraction for native-level performance
|
|
22
|
+
- **Table Extraction**: Extract structured tables from documents
|
|
23
|
+
- **Language Detection**: Automatic language detection for extracted text
|
|
24
|
+
- **Text Chunking**: Split long documents into manageable chunks
|
|
25
|
+
- **Caching**: Built-in result caching for faster repeated extractions
|
|
26
|
+
- **Type-Safe**: Comprehensive typed configuration and result objects
|
|
27
|
+
|
|
28
|
+
## Requirements
|
|
29
|
+
|
|
30
|
+
- Ruby 3.2 or higher
|
|
31
|
+
- Rust toolchain (for building from source)
|
|
32
|
+
|
|
33
|
+
### Optional System Dependencies
|
|
34
|
+
|
|
35
|
+
- **Tesseract**: For OCR functionality
|
|
36
|
+
- macOS: `brew install tesseract`
|
|
37
|
+
- Ubuntu: `sudo apt-get install tesseract-ocr`
|
|
38
|
+
- Windows: Download from [GitHub](https://github.com/tesseract-ocr/tesseract)
|
|
39
|
+
|
|
40
|
+
- **LibreOffice**: For legacy MS Office formats (.doc, .ppt)
|
|
41
|
+
- macOS: `brew install libreoffice`
|
|
42
|
+
- Ubuntu: `sudo apt-get install libreoffice`
|
|
43
|
+
|
|
44
|
+
- **Pandoc**: For advanced document conversion
|
|
45
|
+
- macOS: `brew install pandoc`
|
|
46
|
+
- Ubuntu: `sudo apt-get install pandoc`
|
|
47
|
+
|
|
48
|
+
## Installation
|
|
49
|
+
|
|
50
|
+
Add to your Gemfile:
|
|
51
|
+
|
|
52
|
+
```ruby
|
|
53
|
+
gem 'kreuzberg'
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Then run:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
bundle install
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Or install directly:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
gem install kreuzberg
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Quick Start
|
|
69
|
+
|
|
70
|
+
### Basic Extraction
|
|
71
|
+
|
|
72
|
+
```ruby
|
|
73
|
+
require 'kreuzberg'
|
|
74
|
+
|
|
75
|
+
# Extract from a file
|
|
76
|
+
result = Kreuzberg.extract_file_sync("document.pdf")
|
|
77
|
+
puts result.content
|
|
78
|
+
puts "MIME type: #{result.mime_type}"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### With Configuration
|
|
82
|
+
|
|
83
|
+
```ruby
|
|
84
|
+
# Create configuration
|
|
85
|
+
config = Kreuzberg::Config::Extraction.new(
|
|
86
|
+
use_cache: true,
|
|
87
|
+
force_ocr: false
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
result = Kreuzberg.extract_file_sync("document.pdf", config: config)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### With OCR
|
|
94
|
+
|
|
95
|
+
```ruby
|
|
96
|
+
# Configure OCR
|
|
97
|
+
ocr_config = Kreuzberg::Config::OCR.new(
|
|
98
|
+
backend: "tesseract",
|
|
99
|
+
language: "eng",
|
|
100
|
+
preprocessing: true
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
config = Kreuzberg::Config::Extraction.new(ocr: ocr_config)
|
|
104
|
+
result = Kreuzberg.extract_file_sync("scanned.pdf", config: config)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Extract from Bytes
|
|
108
|
+
|
|
109
|
+
```ruby
|
|
110
|
+
data = File.binread("document.pdf")
|
|
111
|
+
result = Kreuzberg.extract_bytes_sync(data, "application/pdf")
|
|
112
|
+
puts result.content
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Batch Processing
|
|
116
|
+
|
|
117
|
+
```ruby
|
|
118
|
+
paths = ["doc1.pdf", "doc2.docx", "doc3.xlsx"]
|
|
119
|
+
results = Kreuzberg.batch_extract_files_sync(paths)
|
|
120
|
+
|
|
121
|
+
results.each do |result|
|
|
122
|
+
puts "Content: #{result.content[0..100]}"
|
|
123
|
+
puts "MIME: #{result.mime_type}"
|
|
124
|
+
end
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Structured Results (Chunks & Images)
|
|
128
|
+
|
|
129
|
+
```ruby
|
|
130
|
+
result = Kreuzberg.extract_file_sync("long-report.pdf", config: {
|
|
131
|
+
chunking: { max_chars: 750 },
|
|
132
|
+
image_extraction: { extract_images: true }
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
result.chunks&.each do |chunk|
|
|
136
|
+
puts "[#{chunk.chunk_index + 1}/#{chunk.total_chunks}] #{chunk.content[0..80]}"
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
result.images&.each do |image|
|
|
140
|
+
File.binwrite("image-#{image.image_index}.#{image.format}", image.data)
|
|
141
|
+
if image.ocr_result
|
|
142
|
+
puts "Embedded OCR content: #{image.ocr_result.content[0..60]}"
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Configuration
|
|
148
|
+
|
|
149
|
+
### Load From File
|
|
150
|
+
|
|
151
|
+
```ruby
|
|
152
|
+
config = Kreuzberg::Config::Extraction.from_file("config.toml")
|
|
153
|
+
result = Kreuzberg.extract_file_sync("report.pdf", config: config)
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Extraction Configuration
|
|
157
|
+
|
|
158
|
+
```ruby
|
|
159
|
+
config = Kreuzberg::Config::Extraction.new(
|
|
160
|
+
use_cache: true, # Enable result caching
|
|
161
|
+
enable_quality_processing: false, # Enable text quality processing
|
|
162
|
+
force_ocr: false # Force OCR even for digital PDFs
|
|
163
|
+
)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### OCR Configuration
|
|
167
|
+
|
|
168
|
+
```ruby
|
|
169
|
+
ocr = Kreuzberg::Config::OCR.new(
|
|
170
|
+
backend: "tesseract", # OCR backend (tesseract, easyocr, paddleocr)
|
|
171
|
+
language: "eng", # Language code (eng, deu, fra, etc.)
|
|
172
|
+
tesseract_config: {
|
|
173
|
+
psm: 6,
|
|
174
|
+
enable_table_detection: true,
|
|
175
|
+
preprocessing: Kreuzberg::Config::ImagePreprocessing.new(auto_rotate: true).to_h
|
|
176
|
+
}
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
config = Kreuzberg::Config::Extraction.new(ocr: ocr)
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Chunking Configuration
|
|
183
|
+
|
|
184
|
+
```ruby
|
|
185
|
+
chunking = Kreuzberg::Config::Chunking.new(
|
|
186
|
+
enabled: true,
|
|
187
|
+
chunk_size: 1000, # Characters per chunk
|
|
188
|
+
chunk_overlap: 200, # Overlap between chunks
|
|
189
|
+
embedding: {
|
|
190
|
+
model: { type: :preset, name: "balanced" },
|
|
191
|
+
normalize: true
|
|
192
|
+
}
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
config = Kreuzberg::Config::Extraction.new(chunking: chunking)
|
|
196
|
+
result = Kreuzberg.extract_file_sync("long_document.pdf", config: config)
|
|
197
|
+
|
|
198
|
+
result.chunks.each do |chunk|
|
|
199
|
+
puts "Chunk: #{chunk.content}"
|
|
200
|
+
puts "Tokens: #{chunk.token_count}"
|
|
201
|
+
end
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### HTML Conversion Options
|
|
205
|
+
|
|
206
|
+
```ruby
|
|
207
|
+
html_options = Kreuzberg::Config::HtmlOptions.new(
|
|
208
|
+
heading_style: :atx_closed,
|
|
209
|
+
wrap: true,
|
|
210
|
+
wrap_width: 100,
|
|
211
|
+
preprocessing: { enabled: true, preset: :standard }
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
config = Kreuzberg::Config::Extraction.new(html_options: html_options)
|
|
215
|
+
result = Kreuzberg.extract_file_sync("page.html", config: config)
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Keyword Extraction
|
|
219
|
+
|
|
220
|
+
```ruby
|
|
221
|
+
keywords = Kreuzberg::Config::Keywords.new(
|
|
222
|
+
algorithm: :yake,
|
|
223
|
+
max_keywords: 8,
|
|
224
|
+
min_score: 0.2,
|
|
225
|
+
ngram_range: [1, 3]
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
config = Kreuzberg::Config::Extraction.new(keywords: keywords)
|
|
229
|
+
result = Kreuzberg.extract_file_sync("research.pdf", config: config)
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Language Detection
|
|
233
|
+
|
|
234
|
+
```ruby
|
|
235
|
+
lang_detection = Kreuzberg::Config::LanguageDetection.new(
|
|
236
|
+
enabled: true,
|
|
237
|
+
min_confidence: 0.8,
|
|
238
|
+
detect_multiple: true
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
config = Kreuzberg::Config::Extraction.new(language_detection: lang_detection)
|
|
242
|
+
result = Kreuzberg.extract_file_sync("multilingual.pdf", config: config)
|
|
243
|
+
|
|
244
|
+
result.detected_languages&.each do |lang|
|
|
245
|
+
puts "Language: #{lang.lang}, Confidence: #{lang.confidence}"
|
|
246
|
+
end
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### PDF Options
|
|
250
|
+
|
|
251
|
+
```ruby
|
|
252
|
+
pdf_options = Kreuzberg::Config::PDF.new(
|
|
253
|
+
extract_images: true,
|
|
254
|
+
image_min_size: 10000, # Minimum image size in bytes
|
|
255
|
+
password: "secret" # PDF password
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
config = Kreuzberg::Config::Extraction.new(pdf_options: pdf_options)
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## Working with Results
|
|
262
|
+
|
|
263
|
+
```ruby
|
|
264
|
+
result = Kreuzberg.extract_file_sync("invoice.pdf")
|
|
265
|
+
|
|
266
|
+
# Access extracted text
|
|
267
|
+
puts result.content
|
|
268
|
+
|
|
269
|
+
# Access MIME type
|
|
270
|
+
puts result.mime_type
|
|
271
|
+
|
|
272
|
+
# Access metadata
|
|
273
|
+
puts result.metadata.inspect
|
|
274
|
+
|
|
275
|
+
# Access extracted tables
|
|
276
|
+
result.tables.each do |table|
|
|
277
|
+
puts "Headers: #{table.headers.join(', ')}"
|
|
278
|
+
table.rows.each do |row|
|
|
279
|
+
puts row.join(', ')
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
# Access text chunks and metadata
|
|
284
|
+
result.chunks&.each do |chunk|
|
|
285
|
+
puts "Chunk #{chunk.chunk_index + 1}/#{chunk.total_chunks}"
|
|
286
|
+
puts "Chars: #{chunk.char_start}-#{chunk.char_end}"
|
|
287
|
+
puts "Embedding length: #{chunk.embedding&.length}"
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
# Access extracted images
|
|
291
|
+
result.images&.each do |image|
|
|
292
|
+
File.binwrite("image-\#{image.image_index}.#{image.format}", image.data)
|
|
293
|
+
puts "Image #{image.image_index} on page #{image.page_number}"
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
# Convert to hash
|
|
297
|
+
hash = result.to_h
|
|
298
|
+
|
|
299
|
+
# Convert to JSON
|
|
300
|
+
json = result.to_json
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## CLI Usage
|
|
304
|
+
|
|
305
|
+
Kreuzberg provides a Ruby wrapper for the CLI:
|
|
306
|
+
|
|
307
|
+
```ruby
|
|
308
|
+
# Extract content
|
|
309
|
+
output = Kreuzberg::CLI.extract("document.pdf", output: "text")
|
|
310
|
+
|
|
311
|
+
# Detect MIME type
|
|
312
|
+
mime_type = Kreuzberg::CLI.detect("document.pdf")
|
|
313
|
+
|
|
314
|
+
# Get version
|
|
315
|
+
version = Kreuzberg::CLI.version
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
## API Server
|
|
319
|
+
|
|
320
|
+
Start an API server (requires kreuzberg CLI):
|
|
321
|
+
|
|
322
|
+
```ruby
|
|
323
|
+
Kreuzberg::APIProxy.run(port: 8000) do |server|
|
|
324
|
+
# Server runs in background
|
|
325
|
+
# Make HTTP requests to http://localhost:8000
|
|
326
|
+
end
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
## MCP Server
|
|
330
|
+
|
|
331
|
+
Start a Model Context Protocol server for Claude Desktop:
|
|
332
|
+
|
|
333
|
+
```ruby
|
|
334
|
+
server = Kreuzberg::MCPProxy::Server.new(transport: 'stdio')
|
|
335
|
+
server.start
|
|
336
|
+
|
|
337
|
+
# Use with Claude Desktop integration
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
## Cache Management
|
|
341
|
+
|
|
342
|
+
```ruby
|
|
343
|
+
# Get cache statistics
|
|
344
|
+
stats = Kreuzberg.cache_stats
|
|
345
|
+
puts "Entries: #{stats[:total_entries]}"
|
|
346
|
+
puts "Size: #{stats[:total_size_bytes]} bytes"
|
|
347
|
+
|
|
348
|
+
# Clear cache
|
|
349
|
+
Kreuzberg.clear_cache
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
## Error Handling
|
|
353
|
+
|
|
354
|
+
```ruby
|
|
355
|
+
begin
|
|
356
|
+
result = Kreuzberg.extract_file_sync("document.pdf")
|
|
357
|
+
rescue Kreuzberg::Errors::ParsingError => e
|
|
358
|
+
puts "Parsing failed: #{e.message}"
|
|
359
|
+
puts "Context: #{e.context}"
|
|
360
|
+
rescue Kreuzberg::Errors::OCRError => e
|
|
361
|
+
puts "OCR failed: #{e.message}"
|
|
362
|
+
rescue Kreuzberg::Errors::MissingDependencyError => e
|
|
363
|
+
puts "Missing dependency: #{e.dependency}"
|
|
364
|
+
rescue Kreuzberg::Errors::Error => e
|
|
365
|
+
puts "Kreuzberg error: #{e.message}"
|
|
366
|
+
end
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## Supported Formats
|
|
370
|
+
|
|
371
|
+
- **Documents**: PDF, DOCX, DOC, PPTX, PPT, ODT, ODP
|
|
372
|
+
- **Spreadsheets**: XLSX, XLS, ODS, CSV
|
|
373
|
+
- **Images**: PNG, JPEG, TIFF, BMP, GIF
|
|
374
|
+
- **Web**: HTML, MHTML, Markdown
|
|
375
|
+
- **Data**: JSON, YAML, TOML, XML
|
|
376
|
+
- **Email**: EML, MSG
|
|
377
|
+
- **Archives**: ZIP, TAR, 7Z
|
|
378
|
+
- **Text**: TXT, RTF, MD
|
|
379
|
+
|
|
380
|
+
## Performance
|
|
381
|
+
|
|
382
|
+
Kreuzberg's Rust core provides significant performance improvements:
|
|
383
|
+
|
|
384
|
+
- **PDF extraction**: 10-50x faster than pure Ruby solutions
|
|
385
|
+
- **Batch processing**: Parallel extraction with Tokio async runtime
|
|
386
|
+
- **Memory efficient**: Streaming parsers for large files
|
|
387
|
+
- **Caching**: Automatic result caching for repeated extractions
|
|
388
|
+
|
|
389
|
+
## Development
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
# Clone the repository
|
|
393
|
+
git clone https://github.com/kreuzberg-dev/kreuzberg.git
|
|
394
|
+
cd kreuzberg/packages/ruby
|
|
395
|
+
|
|
396
|
+
# Install dependencies
|
|
397
|
+
bundle install
|
|
398
|
+
|
|
399
|
+
# Set up vendor symlink for local development (required for building)
|
|
400
|
+
ln -sfn ../../crates/kreuzberg vendor/kreuzberg
|
|
401
|
+
|
|
402
|
+
# Build the Rust extension
|
|
403
|
+
bundle exec rake compile
|
|
404
|
+
|
|
405
|
+
# Run tests
|
|
406
|
+
bundle exec rspec
|
|
407
|
+
|
|
408
|
+
# Run RuboCop
|
|
409
|
+
bundle exec rubocop
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
**Note**: The Ruby bindings use a vendored copy of the core `kreuzberg` Rust crate. For local development, create a symlink at `vendor/kreuzberg` pointing to `../../crates/kreuzberg`. In CI and gem packaging, the actual vendored files are copied to this location.
|
|
413
|
+
|
|
414
|
+
## License
|
|
415
|
+
|
|
416
|
+
MIT License. See [LICENSE](../../LICENSE) for details.
|
|
417
|
+
|
|
418
|
+
## Contributing
|
|
419
|
+
|
|
420
|
+
Contributions are welcome! Please see [CONTRIBUTING.md](../../CONTRIBUTING.md) for guidelines.
|
|
421
|
+
|
|
422
|
+
## Links
|
|
423
|
+
|
|
424
|
+
- **Documentation**: https://docs.kreuzberg.dev
|
|
425
|
+
- **GitHub**: https://github.com/kreuzberg-dev/kreuzberg
|
|
426
|
+
- **Issues**: https://github.com/kreuzberg-dev/kreuzberg/issues
|
data/Rakefile
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bundler/gem_tasks'
|
|
4
|
+
require 'rake/extensiontask'
|
|
5
|
+
require 'rspec/core/rake_task'
|
|
6
|
+
|
|
7
|
+
GEMSPEC = Gem::Specification.load(File.expand_path('kreuzberg.gemspec', __dir__))
|
|
8
|
+
|
|
9
|
+
Rake::ExtensionTask.new('kreuzberg_rb', GEMSPEC) do |ext|
|
|
10
|
+
ext.lib_dir = 'lib'
|
|
11
|
+
ext.ext_dir = 'ext/kreuzberg_rb'
|
|
12
|
+
ext.cross_compile = true
|
|
13
|
+
ext.cross_platform = %w[
|
|
14
|
+
x86_64-linux
|
|
15
|
+
aarch64-linux
|
|
16
|
+
x86_64-darwin
|
|
17
|
+
arm64-darwin
|
|
18
|
+
x64-mingw32
|
|
19
|
+
]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
23
|
+
|
|
24
|
+
task spec: :compile
|
|
25
|
+
task default: :spec
|
data/Steepfile
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Steep configuration for Kreuzberg Ruby package
|
|
4
|
+
|
|
5
|
+
target :lib do
|
|
6
|
+
signature 'sig'
|
|
7
|
+
|
|
8
|
+
check 'lib'
|
|
9
|
+
|
|
10
|
+
# Core library
|
|
11
|
+
library 'pathname'
|
|
12
|
+
library 'json'
|
|
13
|
+
library 'fileutils'
|
|
14
|
+
library 'open3'
|
|
15
|
+
|
|
16
|
+
# Strategic ignores for steep limitations (not fixable, safe to ignore):
|
|
17
|
+
|
|
18
|
+
# 1. Struct.new with keyword_init - steep cannot understand implicit attr_readers
|
|
19
|
+
# defined by Struct.new in blocks (Table and Chunk classes)
|
|
20
|
+
ignore 'lib/kreuzberg/result.rb'
|
|
21
|
+
|
|
22
|
+
# 2. Generic type parameters in normalize_config - steep has difficulty with
|
|
23
|
+
# methods that take Class as parameter and return instances
|
|
24
|
+
ignore 'lib/kreuzberg/config.rb'
|
|
25
|
+
|
|
26
|
+
# 3. Interface types - steep doesn't recognize that all Ruby objects have nil? and is_a?
|
|
27
|
+
# even for interface types like _ToH
|
|
28
|
+
ignore 'lib/kreuzberg/extraction_api.rb'
|
|
29
|
+
|
|
30
|
+
# 4. Open3 methods - steep's built-in Open3 RBS signatures incomplete
|
|
31
|
+
# (capture2, capture3, popen3 are standard library methods)
|
|
32
|
+
ignore 'lib/kreuzberg/setup_lib_path.rb'
|
|
33
|
+
ignore 'lib/kreuzberg/cli_proxy.rb'
|
|
34
|
+
ignore 'lib/kreuzberg/mcp_proxy.rb'
|
|
35
|
+
|
|
36
|
+
# Ignore Rust extension methods (defined in native code)
|
|
37
|
+
ignore 'ext'
|
|
38
|
+
|
|
39
|
+
# Ignore vendored code
|
|
40
|
+
ignore 'vendor'
|
|
41
|
+
|
|
42
|
+
# Ignore test files
|
|
43
|
+
ignore 'spec'
|
|
44
|
+
|
|
45
|
+
# Ignore examples
|
|
46
|
+
ignore 'examples'
|
|
47
|
+
end
|