himg 0.0.9 → 0.0.10

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 83698e3a0f0875ed07ac2d68ac0b8e7aeda05fc20e53026b57bab1b3c77289fa
4
- data.tar.gz: 55318699fee2f69974a5b4b20f23d4f6ea6c7eefab067aa33ee80f712fb9a2cc
3
+ metadata.gz: d65ada02141e4fdd397d4c58def4e7fd658202563a2bbc31b548801b08198d4b
4
+ data.tar.gz: b7c9cc37243b8f790dfb977a6d6e5c215104e4a6a0f03cbc63308191d7ba7e73
5
5
  SHA512:
6
- metadata.gz: 409a23fe6d6a410e45907a4d3c69be809da4c0ed88bdeaa63c89d3cb4fe45041bafe8d52fb78d8007c7a6a9b461e069232aa1b7e5a73a893ef039bb9abb4dd6f
7
- data.tar.gz: 3780996822f05a2de3c14e05d6a3ab778851450a8db0eb48271e5f89321eca7e79696b562280e9eb1fd57d48a5cfd84c2246f7c7ee71ca77b633e8ba21c12227
6
+ metadata.gz: d21cb8a714e462c08b36a000275eb9b4c840ab2bb049f8c7bcacb5b978a4404f36d0431b867b019fee864130b1895ef026b81257d6ce0199dec0adef8ecf5578
7
+ data.tar.gz: a96a262c6dc6e4a42bb8b6bcdacb47f24203d3e5d74673880b6851f76a01421e373c2a3e074f2cbb697e58c69b1e9eb1a3284824853821601c3e694c5bd127a3
data/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  ## [Unreleased]
2
2
 
3
3
 
4
+ ## [0.0.10] - 2025-08-01
5
+
6
+ - Fixed himg require from native extension
7
+ - Catch rust panics and wrap with ruby Error
8
+ - GpuNotFound error extending Himg::Error
9
+
4
10
  ## [0.0.9] - 2025-07-31
5
11
 
6
12
  - Returned to CPU-only rendering by default
data/Cargo.lock CHANGED
@@ -1094,7 +1094,7 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
1094
1094
 
1095
1095
  [[package]]
1096
1096
  name = "himg"
1097
- version = "0.0.9"
1097
+ version = "0.0.10"
1098
1098
  dependencies = [
1099
1099
  "anyrender",
1100
1100
  "anyrender_vello",
data/Cargo.toml CHANGED
@@ -5,3 +5,7 @@
5
5
  [workspace]
6
6
  members = ["./ext/himg"]
7
7
  resolver = "2"
8
+
9
+ [profile.profiling]
10
+ inherits = "release"
11
+ debug = true
data/ext/himg/Cargo.toml CHANGED
@@ -1,7 +1,7 @@
1
1
  [package]
2
2
  name = "himg"
3
3
  description = "ruby bindings to expose a blitz html->png pipeline"
4
- version = "0.0.9"
4
+ version = "0.0.10"
5
5
  edition = "2024"
6
6
  authors = ["James Edwards-Jones <git@jamedjo.co.uk>"]
7
7
  license = "MIT"
data/ext/himg/src/lib.rs CHANGED
@@ -45,10 +45,30 @@ impl Options {
45
45
  pub fn render_blocking_rb(ruby: &Ruby, html: String, options: Option<RHash>) -> Result<RString, Error> {
46
46
  let options = Options::from_ruby(options)?;
47
47
  let exception_class = ExceptionClass::from_value(magnus::eval("Himg::Error").unwrap()).unwrap();
48
+ let gpu_not_found_class = ExceptionClass::from_value(magnus::eval("Himg::GpuNotFound").unwrap()).unwrap();
48
49
 
49
- match render_blocking(html, options) {
50
- Ok(data) => Ok(ruby.str_from_slice(&data)),
51
- Err(e) => Err(Error::new(exception_class, format!("{}", e))),
50
+ let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
51
+ render_blocking(html, options)
52
+ }));
53
+
54
+ match result {
55
+ Ok(Ok(data)) => Ok(ruby.str_from_slice(&data)),
56
+ Ok(Err(e)) => Err(Error::new(exception_class, format!("{}", e))),
57
+ Err(panic) => {
58
+ let msg = if let Some(s) = panic.downcast_ref::<String>() {
59
+ s.clone()
60
+ } else if let Some(s) = panic.downcast_ref::<&str>() {
61
+ s.to_string()
62
+ } else {
63
+ "Unknown panic".to_string()
64
+ };
65
+
66
+ if msg.contains("No compatible device found") {
67
+ Err(Error::new(gpu_not_found_class, msg))
68
+ } else {
69
+ Err(Error::new(exception_class, format!("Panic: {}", msg)))
70
+ }
71
+ }
52
72
  }
53
73
  }
54
74
 
data/lib/himg/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Himg
4
- VERSION = "0.0.9"
4
+ VERSION = "0.0.10"
5
5
  end
data/lib/himg.rb CHANGED
@@ -8,7 +8,7 @@ require "himg/railtie" if defined?(Rails::Railtie)
8
8
  # Fall back to loading the non-versioned extension if version-specific loading fails.
9
9
  begin
10
10
  RUBY_VERSION =~ /(\d+\.\d+)/
11
- require "#{Regexp.last_match(1)}/himg/himg"
11
+ require "himg/#{Regexp.last_match(1)}/himg"
12
12
  rescue LoadError
13
13
  require "himg/himg"
14
14
  end
@@ -19,6 +19,7 @@ end
19
19
  module Himg
20
20
  RENDER_OPTIONS = %i[width height truncate verbose base_url disable_fetch fetch_timeout gpu].freeze
21
21
  class Error < StandardError; end
22
+ class GpuNotFound < Error; end
22
23
 
23
24
  def self.render(html, width: 720, height: 405, truncate: true, verbose: false, base_url: nil, disable_fetch: false, fetch_timeout: 10, gpu: false)
24
25
  render_to_string(html, "width" => width.to_i, "height" => height.to_i, "truncate" => truncate, "verbose" => verbose, "base_url" => BaseUrl.new(base_url).to_s, "disable_fetch" => disable_fetch, "fetch_timeout" => fetch_timeout.to_f, "gpu" => gpu)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: himg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Edwards-Jones