|
1 | 1 | use magnus::{ |
2 | | - class, define_module, function, method, |
3 | | - prelude::*, gc::register_mark_object, memoize, |
| 2 | + function, method, prelude::*, value::Lazy, Ruby, |
4 | 3 | Error, ExceptionClass, RModule |
5 | 4 | }; |
6 | 5 |
|
7 | 6 | use mrml::mjml::Mjml; |
8 | 7 | use mrml::prelude::print::Printable; |
9 | 8 | use mrml::prelude::render::RenderOptions; |
10 | 9 |
|
| 10 | +static MODULE: Lazy<RModule> = |
| 11 | + Lazy::new(|ruby| ruby.class_object().const_get("MRML").unwrap()); |
| 12 | + |
| 13 | +static ERROR: Lazy<ExceptionClass> = |
| 14 | + Lazy::new(|ruby| ruby.get_inner(&MODULE).const_get("Error").unwrap()); |
| 15 | + |
11 | 16 | fn mrml_error() -> ExceptionClass { |
12 | | - *memoize!(ExceptionClass: { |
13 | | - let ex = class::object().const_get::<_, RModule>("MRML").unwrap().const_get("Error").unwrap(); |
14 | | - register_mark_object(ex); |
15 | | - ex |
16 | | - }) |
| 17 | + Ruby::get().unwrap().get_inner(&ERROR) |
17 | 18 | } |
18 | 19 |
|
19 | 20 | macro_rules! error { |
@@ -76,9 +77,9 @@ impl Clone for Template { |
76 | 77 | } |
77 | 78 |
|
78 | 79 | #[magnus::init] |
79 | | -fn init() -> Result<(), Error> { |
80 | | - let module = define_module("MRML")?; |
81 | | - let class = module.define_class("Template", class::object())?; |
| 80 | +fn init(ruby: &Ruby) -> Result<(), Error> { |
| 81 | + let module = ruby.define_module("MRML")?; |
| 82 | + let class = module.define_class("Template", ruby.class_object())?; |
82 | 83 |
|
83 | 84 | class.define_singleton_method("new", function!(Template::new, 1))?; |
84 | 85 | class.define_singleton_method("from_json", function!(Template::from_json, 1))?; |
|
0 commit comments