kp_anydoc 0.2.4

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.
@@ -0,0 +1,15 @@
1
+ [package]
2
+ name = "anydoc"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ license = "MIT"
6
+ publish = false
7
+
8
+ [lib]
9
+ name = "anydoc"
10
+ crate-type = ["cdylib"]
11
+
12
+ [dependencies]
13
+ magnus = "0.8"
14
+ rb-sys = "0.9"
15
+ anydoc_core = { package = "anydoc", version = "0.2.4" }
@@ -0,0 +1,4 @@
1
+ require "mkmf"
2
+ require "rb_sys/mkmf"
3
+
4
+ create_rust_makefile("anydoc/anydoc")
@@ -0,0 +1,39 @@
1
+ use anydoc_core::{ConvertError, Format};
2
+ use magnus::{function, prelude::*, Error, ExceptionClass, RString, Ruby};
3
+
4
+ fn error_class_name(error: &ConvertError) -> &'static str {
5
+ match error {
6
+ ConvertError::Unsupported(_) => "UnsupportedError",
7
+ ConvertError::Malformed { .. } => "MalformedError",
8
+ ConvertError::Encrypted => "EncryptedError",
9
+ ConvertError::ResourceLimit { .. } => "ResourceLimitError",
10
+ ConvertError::MissingPart { .. } => "MissingPartError",
11
+ ConvertError::Io(_) => "IoError",
12
+ _ => "Error",
13
+ }
14
+ }
15
+
16
+ fn convert_error(ruby: &Ruby, error: ConvertError) -> Error {
17
+ let class = ruby
18
+ .define_module("Anydoc")
19
+ .and_then(|module| module.const_get::<_, ExceptionClass>(error_class_name(&error)))
20
+ .unwrap_or_else(|_| ruby.exception_runtime_error());
21
+ Error::new(class, error.to_string())
22
+ }
23
+
24
+ fn to_markdown(ruby: &Ruby, data: RString, filename: Option<String>) -> Result<String, Error> {
25
+ let format = filename
26
+ .as_deref()
27
+ .and_then(|name| name.rsplit('.').next())
28
+ .and_then(Format::from_extension);
29
+
30
+ let bytes = unsafe { data.as_slice() };
31
+ anydoc_core::to_markdown_bytes(bytes, format).map_err(|error| convert_error(ruby, error))
32
+ }
33
+
34
+ #[magnus::init]
35
+ fn init(ruby: &Ruby) -> Result<(), Error> {
36
+ let module = ruby.define_module("Anydoc")?;
37
+ module.define_singleton_method("_to_markdown", function!(to_markdown, 2))?;
38
+ Ok(())
39
+ }
@@ -0,0 +1,5 @@
1
+ module Anydoc
2
+ # Tracks the anydoc Rust crate this gem wraps: the version here is always the
3
+ # version of `anydoc_core` in ext/anydoc/Cargo.toml.
4
+ VERSION = "0.2.4"
5
+ end
data/lib/anydoc.rb ADDED
@@ -0,0 +1,28 @@
1
+ require_relative "anydoc/version"
2
+
3
+ begin
4
+ RUBY_VERSION =~ /(\d+\.\d+)/
5
+ require_relative "anydoc/#{Regexp.last_match(1)}/anydoc"
6
+ rescue LoadError
7
+ require_relative "anydoc/anydoc"
8
+ end
9
+
10
+ module Anydoc
11
+ class Error < StandardError; end
12
+
13
+ class UnsupportedError < Error; end
14
+
15
+ class MalformedError < Error; end
16
+
17
+ class EncryptedError < Error; end
18
+
19
+ class ResourceLimitError < Error; end
20
+
21
+ class MissingPartError < Error; end
22
+
23
+ class IoError < Error; end
24
+
25
+ def self.to_markdown(bytes, filename: nil)
26
+ _to_markdown(bytes, filename)
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kp_anydoc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.4
5
+ platform: ruby
6
+ authors:
7
+ - KirkpatrickPrice
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rb_sys
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.9'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '0.9'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '13.0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '13.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rake-compiler
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.2'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.2'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rake-compiler-dock
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.9'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.9'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rspec
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.13'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.13'
82
+ description: Converts documents such as PDF, XLSX, and CSV to Markdown in-process
83
+ using the anydoc Rust library.
84
+ executables: []
85
+ extensions:
86
+ - ext/anydoc/extconf.rb
87
+ extra_rdoc_files: []
88
+ files:
89
+ - CHANGELOG.md
90
+ - Cargo.lock
91
+ - Cargo.toml
92
+ - LICENSE.txt
93
+ - README.md
94
+ - THIRD-PARTY-LICENSES.txt
95
+ - ext/anydoc/Cargo.toml
96
+ - ext/anydoc/extconf.rb
97
+ - ext/anydoc/src/lib.rs
98
+ - lib/anydoc.rb
99
+ - lib/anydoc/version.rb
100
+ homepage: https://github.com/kirkpatrickprice/anydoc
101
+ licenses:
102
+ - MIT
103
+ metadata:
104
+ allowed_push_host: https://rubygems.org
105
+ homepage_uri: https://github.com/kirkpatrickprice/anydoc
106
+ source_code_uri: https://github.com/kirkpatrickprice/anydoc
107
+ changelog_uri: https://github.com/kirkpatrickprice/anydoc/blob/main/CHANGELOG.md
108
+ rubygems_mfa_required: 'true'
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '3.4'
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubygems_version: 3.6.9
124
+ specification_version: 4
125
+ summary: Ruby bindings for the anydoc document-to-markdown Rust library
126
+ test_files: []