y-rb 0.6.0-aarch64-linux-gnu → 0.7.0-aarch64-linux-gnu

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.
@@ -3,7 +3,7 @@ use crate::yxml_fragment::YXmlFragment;
3
3
  use crate::yxml_text::YXmlText;
4
4
  use crate::YTransaction;
5
5
  use magnus::block::Proc;
6
- use magnus::{Error, IntoValue, RArray, RHash, Symbol, Value};
6
+ use magnus::{Error, IntoValue, RArray, RHash, Ruby, Value};
7
7
  use std::cell::RefCell;
8
8
  use yrs::types::Change;
9
9
  use yrs::{
@@ -19,22 +19,28 @@ unsafe impl Send for YXmlElement {}
19
19
 
20
20
  impl YXmlElement {
21
21
  pub(crate) fn yxml_element_attributes(&self, transaction: &YTransaction) -> RHash {
22
+ let ruby = unsafe { Ruby::get_unchecked() };
22
23
  let tx = transaction.transaction();
23
24
  let tx = tx.as_ref().unwrap();
24
25
 
25
- RHash::from_iter(self.0.borrow().attributes(tx))
26
+ let hash = ruby.hash_new();
27
+ for (k, v) in self.0.borrow().attributes(tx) {
28
+ hash.aset(k, v).expect("cannot insert into hash");
29
+ }
30
+ hash
26
31
  }
27
32
  pub(crate) fn yxml_element_first_child(&self, transaction: &YTransaction) -> Option<Value> {
28
33
  self.yxml_element_get(transaction, 0)
29
34
  }
30
35
  pub(crate) fn yxml_element_get(&self, transaction: &YTransaction, index: u32) -> Option<Value> {
36
+ let ruby = unsafe { Ruby::get_unchecked() };
31
37
  let tx = transaction.transaction();
32
38
  let tx = tx.as_ref().unwrap();
33
39
 
34
40
  self.0.borrow().get(tx, index).map(|node| match node {
35
- XmlNode::Element(element) => YXmlElement::from(element).into_value(),
36
- XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value(),
37
- XmlNode::Text(text) => YXmlText::from(text).into_value(),
41
+ XmlNode::Element(element) => YXmlElement::from(element).into_value_with(&ruby),
42
+ XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value_with(&ruby),
43
+ XmlNode::Text(text) => YXmlText::from(text).into_value_with(&ruby),
38
44
  })
39
45
  }
40
46
  pub(crate) fn yxml_element_get_attribute(
@@ -89,38 +95,41 @@ impl YXmlElement {
89
95
  self.0.borrow().len(tx)
90
96
  }
91
97
  pub(crate) fn yxml_element_next_sibling(&self, transaction: &YTransaction) -> Option<Value> {
98
+ let ruby = unsafe { Ruby::get_unchecked() };
92
99
  let tx = transaction.transaction();
93
100
  let tx = tx.as_ref().unwrap();
94
101
 
95
102
  self.0.borrow().siblings(tx).next().map(|item| match item {
96
- XmlNode::Element(el) => YXmlElement::from(el).into_value(),
97
- XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value(),
98
- XmlNode::Text(text) => YXmlText::from(text).into_value(),
103
+ XmlNode::Element(el) => YXmlElement::from(el).into_value_with(&ruby),
104
+ XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value_with(&ruby),
105
+ XmlNode::Text(text) => YXmlText::from(text).into_value_with(&ruby),
99
106
  })
100
107
  }
101
108
  pub(crate) fn yxml_element_observe(&self, block: Proc) -> Result<u32, Error> {
102
- let change_added = Symbol::new("added").to_static();
103
- let change_retain = Symbol::new("retain").to_static();
104
- let change_removed = Symbol::new("removed").to_static();
109
+ let ruby = unsafe { Ruby::get_unchecked() };
110
+ let change_added = ruby.to_symbol("added").to_static();
111
+ let change_retain = ruby.to_symbol("retain").to_static();
112
+ let change_removed = ruby.to_symbol("removed").to_static();
105
113
 
106
114
  let subscription_id = self
107
115
  .0
108
116
  .borrow_mut()
109
117
  .observe(move |transaction, xml_element_event| {
118
+ let ruby = unsafe { Ruby::get_unchecked() };
110
119
  let delta = xml_element_event.delta(transaction);
111
- let changes = RArray::with_capacity(delta.len());
120
+ let changes = ruby.ary_new_capa(delta.len());
112
121
 
113
122
  for change in delta {
114
123
  match change {
115
124
  Change::Added(v) => {
116
- let values = RArray::new();
125
+ let values = ruby.ary_new();
117
126
  for value in v.iter() {
118
127
  let value = YValue::from(value.clone());
119
128
  let value = *value.0.borrow();
120
129
  values.push(value).expect("cannot push value to array");
121
130
  }
122
131
 
123
- let payload = RHash::new();
132
+ let payload = ruby.hash_new();
124
133
  payload
125
134
  .aset(change_added, values)
126
135
  .expect("cannot create change::added payload");
@@ -130,7 +139,7 @@ impl YXmlElement {
130
139
  .expect("cannot push payload to list of changes");
131
140
  }
132
141
  Change::Retain(position) => {
133
- let payload = RHash::new();
142
+ let payload = ruby.hash_new();
134
143
  payload
135
144
  .aset(change_retain, *position)
136
145
  .expect("cannot create change::retain payload");
@@ -140,7 +149,7 @@ impl YXmlElement {
140
149
  .expect("cannot push payload to list of changes");
141
150
  }
142
151
  Change::Removed(position) => {
143
- let payload = RHash::new();
152
+ let payload = ruby.hash_new();
144
153
  payload
145
154
  .aset(change_removed, *position)
146
155
  .expect("cannot create change::removed payload");
@@ -160,13 +169,15 @@ impl YXmlElement {
160
169
  Ok(subscription_id.into())
161
170
  }
162
171
  pub(crate) fn yxml_element_parent(&self) -> Option<Value> {
172
+ let ruby = unsafe { Ruby::get_unchecked() };
163
173
  self.0.borrow().parent().map(|item| match item {
164
- XmlNode::Element(el) => YXmlElement::from(el).into_value(),
165
- XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value(),
166
- XmlNode::Text(text) => YXmlText::from(text).into_value(),
174
+ XmlNode::Element(el) => YXmlElement::from(el).into_value_with(&ruby),
175
+ XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value_with(&ruby),
176
+ XmlNode::Text(text) => YXmlText::from(text).into_value_with(&ruby),
167
177
  })
168
178
  }
169
179
  pub(crate) fn yxml_element_prev_sibling(&self, transaction: &YTransaction) -> Option<Value> {
180
+ let ruby = unsafe { Ruby::get_unchecked() };
170
181
  let tx = transaction.transaction();
171
182
  let tx = tx.as_ref().unwrap();
172
183
 
@@ -175,9 +186,9 @@ impl YXmlElement {
175
186
  .siblings(tx)
176
187
  .next_back()
177
188
  .map(|item| match item {
178
- XmlNode::Element(el) => YXmlElement::from(el).into_value(),
179
- XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value(),
180
- XmlNode::Text(text) => YXmlText::from(text).into_value(),
189
+ XmlNode::Element(el) => YXmlElement::from(el).into_value_with(&ruby),
190
+ XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value_with(&ruby),
191
+ XmlNode::Text(text) => YXmlText::from(text).into_value_with(&ruby),
181
192
  })
182
193
  }
183
194
  pub(crate) fn yxml_element_push_element_back(
@@ -242,16 +253,20 @@ impl YXmlElement {
242
253
  self.0.borrow_mut().remove_range(tx, index, length)
243
254
  }
244
255
  pub(crate) fn yxml_element_siblings(&self, transaction: &YTransaction) -> RArray {
256
+ let ruby = unsafe { Ruby::get_unchecked() };
245
257
  let tx = transaction.transaction();
246
258
  let tx = tx.as_ref().unwrap();
247
259
 
248
- let siblings = self.0.borrow().siblings(tx).map(|item| match item {
249
- XmlNode::Element(el) => YXmlElement::from(el).into_value(),
250
- XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value(),
251
- XmlNode::Text(text) => YXmlText::from(text).into_value(),
252
- });
253
-
254
- RArray::from_iter(siblings)
260
+ let array = ruby.ary_new();
261
+ for item in self.0.borrow().siblings(tx) {
262
+ let value = match item {
263
+ XmlNode::Element(el) => YXmlElement::from(el).into_value_with(&ruby),
264
+ XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value_with(&ruby),
265
+ XmlNode::Text(text) => YXmlText::from(text).into_value_with(&ruby),
266
+ };
267
+ array.push(value).expect("cannot push value to array");
268
+ }
269
+ array
255
270
  }
256
271
  pub(crate) fn yxml_element_size(&self, transaction: &YTransaction) -> u32 {
257
272
  let tx = transaction.transaction();
@@ -1,7 +1,7 @@
1
1
  use crate::ytransaction::YTransaction;
2
2
  use crate::yxml_element::YXmlElement;
3
3
  use crate::yxml_text::YXmlText;
4
- use magnus::{IntoValue, RArray, Value};
4
+ use magnus::{IntoValue, RArray, Ruby, Value};
5
5
  use std::cell::RefCell;
6
6
  use yrs::{GetString, XmlElementPrelim, XmlFragment, XmlFragmentRef, XmlNode};
7
7
 
@@ -13,10 +13,11 @@ unsafe impl Send for YXmlFragment {}
13
13
 
14
14
  impl YXmlFragment {
15
15
  pub(crate) fn yxml_fragment_first_child(&self) -> Option<Value> {
16
+ let ruby = unsafe { Ruby::get_unchecked() };
16
17
  self.0.borrow().first_child().map(|node| match node {
17
- XmlNode::Element(element) => YXmlElement::from(element).into_value(),
18
- XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value(),
19
- XmlNode::Text(text) => YXmlText::from(text).into_value(),
18
+ XmlNode::Element(element) => YXmlElement::from(element).into_value_with(&ruby),
19
+ XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value_with(&ruby),
20
+ XmlNode::Text(text) => YXmlText::from(text).into_value_with(&ruby),
20
21
  })
21
22
  }
22
23
 
@@ -25,13 +26,14 @@ impl YXmlFragment {
25
26
  transaction: &YTransaction,
26
27
  index: u32,
27
28
  ) -> Option<Value> {
29
+ let ruby = unsafe { Ruby::get_unchecked() };
28
30
  let tx = transaction.transaction();
29
31
  let tx = tx.as_ref().unwrap();
30
32
 
31
33
  self.0.borrow().get(tx, index).map(|node| match node {
32
- XmlNode::Element(element) => YXmlElement::from(element).into_value(),
33
- XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value(),
34
- XmlNode::Text(text) => YXmlText::from(text).into_value(),
34
+ XmlNode::Element(element) => YXmlElement::from(element).into_value_with(&ruby),
35
+ XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value_with(&ruby),
36
+ XmlNode::Text(text) => YXmlText::from(text).into_value_with(&ruby),
35
37
  })
36
38
  }
37
39
 
@@ -56,10 +58,11 @@ impl YXmlFragment {
56
58
  }
57
59
 
58
60
  pub(crate) fn yxml_fragment_parent(&self) -> Option<Value> {
61
+ let ruby = unsafe { Ruby::get_unchecked() };
59
62
  self.0.borrow().parent().map(|item| match item {
60
- XmlNode::Element(el) => YXmlElement::from(el).into_value(),
61
- XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value(),
62
- XmlNode::Text(text) => YXmlText::from(text).into_value(),
63
+ XmlNode::Element(el) => YXmlElement::from(el).into_value_with(&ruby),
64
+ XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value_with(&ruby),
65
+ XmlNode::Text(text) => YXmlText::from(text).into_value_with(&ruby),
63
66
  })
64
67
  }
65
68
 
@@ -100,18 +103,22 @@ impl YXmlFragment {
100
103
  }
101
104
 
102
105
  pub(crate) fn yxml_fragment_successors(&self, transaction: &YTransaction) -> RArray {
106
+ let ruby = unsafe { Ruby::get_unchecked() };
103
107
  let tx = transaction.transaction();
104
108
  let tx = tx.as_ref().unwrap();
105
109
 
106
110
  let fragment = self.0.borrow();
107
111
 
108
- let result = fragment.successors(tx).map(|item| match item {
109
- XmlNode::Element(el) => YXmlElement::from(el).into_value(),
110
- XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value(),
111
- XmlNode::Text(text) => YXmlText::from(text).into_value(),
112
- });
113
-
114
- RArray::from_iter(result)
112
+ let array = ruby.ary_new();
113
+ for item in fragment.successors(tx) {
114
+ let value = match item {
115
+ XmlNode::Element(el) => YXmlElement::from(el).into_value_with(&ruby),
116
+ XmlNode::Fragment(fragment) => YXmlFragment::from(fragment).into_value_with(&ruby),
117
+ XmlNode::Text(text) => YXmlText::from(text).into_value_with(&ruby),
118
+ };
119
+ array.push(value).expect("cannot push value to array");
120
+ }
121
+ array
115
122
  }
116
123
 
117
124
  pub(crate) fn yxml_fragment_to_s(&self, transaction: &YTransaction) -> String {
@@ -2,7 +2,7 @@ use crate::utils::map_rhash_to_attrs;
2
2
  use crate::yvalue::YValue;
3
3
  use crate::yxml_fragment::YXmlFragment;
4
4
  use crate::{YTransaction, YXmlElement};
5
- use magnus::{Error, IntoValue, RHash, Value};
5
+ use magnus::{Error, IntoValue, RHash, Ruby, Value};
6
6
  use std::cell::RefCell;
7
7
  use yrs::{Any, GetString, Text, Xml, XmlNode, XmlTextRef};
8
8
 
@@ -14,10 +14,15 @@ unsafe impl Send for YXmlText {}
14
14
 
15
15
  impl YXmlText {
16
16
  pub(crate) fn yxml_text_attributes(&self, transaction: &YTransaction) -> RHash {
17
+ let ruby = unsafe { Ruby::get_unchecked() };
17
18
  let tx = transaction.transaction();
18
19
  let tx = tx.as_ref().unwrap();
19
20
 
20
- RHash::from_iter(self.0.borrow().attributes(tx))
21
+ let hash = ruby.hash_new();
22
+ for (k, v) in self.0.borrow().attributes(tx) {
23
+ hash.aset(k, v).expect("cannot insert into hash");
24
+ }
25
+ hash
21
26
  }
22
27
  pub(crate) fn yxml_text_format(
23
28
  &self,
@@ -115,23 +120,30 @@ impl YXmlText {
115
120
  self.0.borrow().len(tx)
116
121
  }
117
122
  pub(crate) fn yxml_text_next_sibling(&self, transaction: &YTransaction) -> Option<Value> {
123
+ let ruby = unsafe { Ruby::get_unchecked() };
118
124
  let tx = transaction.transaction();
119
125
  let tx = tx.as_ref().unwrap();
120
126
 
121
127
  self.0.borrow().siblings(tx).next().map(|item| match item {
122
- XmlNode::Element(el) => YXmlElement(RefCell::from(el)).into_value(),
123
- XmlNode::Fragment(fragment) => YXmlFragment(RefCell::from(fragment)).into_value(),
124
- XmlNode::Text(text) => YXmlText(RefCell::from(text)).into_value(),
128
+ XmlNode::Element(el) => YXmlElement(RefCell::from(el)).into_value_with(&ruby),
129
+ XmlNode::Fragment(fragment) => {
130
+ YXmlFragment(RefCell::from(fragment)).into_value_with(&ruby)
131
+ }
132
+ XmlNode::Text(text) => YXmlText(RefCell::from(text)).into_value_with(&ruby),
125
133
  })
126
134
  }
127
135
  pub(crate) fn yxml_text_parent(&self) -> Option<Value> {
136
+ let ruby = unsafe { Ruby::get_unchecked() };
128
137
  self.0.borrow().parent().map(|item| match item {
129
- XmlNode::Element(el) => YXmlElement(RefCell::from(el)).into_value(),
130
- XmlNode::Fragment(fragment) => YXmlFragment(RefCell::from(fragment)).into_value(),
131
- XmlNode::Text(text) => YXmlText(RefCell::from(text)).into_value(),
138
+ XmlNode::Element(el) => YXmlElement(RefCell::from(el)).into_value_with(&ruby),
139
+ XmlNode::Fragment(fragment) => {
140
+ YXmlFragment(RefCell::from(fragment)).into_value_with(&ruby)
141
+ }
142
+ XmlNode::Text(text) => YXmlText(RefCell::from(text)).into_value_with(&ruby),
132
143
  })
133
144
  }
134
145
  pub(crate) fn yxml_text_prev_sibling(&self, transaction: &YTransaction) -> Option<Value> {
146
+ let ruby = unsafe { Ruby::get_unchecked() };
135
147
  let tx = transaction.transaction();
136
148
  let tx = tx.as_ref().unwrap();
137
149
 
@@ -140,9 +152,11 @@ impl YXmlText {
140
152
  .siblings(tx)
141
153
  .next_back()
142
154
  .map(|item| match item {
143
- XmlNode::Element(el) => YXmlElement(RefCell::from(el)).into_value(),
144
- XmlNode::Fragment(fragment) => YXmlFragment(RefCell::from(fragment)).into_value(),
145
- XmlNode::Text(text) => YXmlText(RefCell::from(text)).into_value(),
155
+ XmlNode::Element(el) => YXmlElement(RefCell::from(el)).into_value_with(&ruby),
156
+ XmlNode::Fragment(fragment) => {
157
+ YXmlFragment(RefCell::from(fragment)).into_value_with(&ruby)
158
+ }
159
+ XmlNode::Text(text) => YXmlText(RefCell::from(text)).into_value_with(&ruby),
146
160
  })
147
161
  }
148
162
  pub(crate) fn yxml_text_push(&self, transaction: &YTransaction, content: String) {
data/lib/3.1/yrb.so CHANGED
Binary file
data/lib/3.2/yrb.so CHANGED
Binary file
data/lib/3.3/yrb.so CHANGED
Binary file
data/lib/3.4/yrb.so CHANGED
Binary file
data/lib/4.0/yrb.so ADDED
Binary file
data/lib/y/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Y
4
- VERSION = "0.6.0"
4
+ VERSION = "0.7.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: y-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: aarch64-linux-gnu
6
6
  authors:
7
7
  - Hannes Moser
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-02-12 00:00:00.000000000 Z
11
+ date: 2026-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.2.1
61
+ version: 1.3.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.2.1
68
+ version: 1.3.0
69
69
  description: Ruby bindings for yrs. Yrs "wires" is a Rust port of the Yjs framework.
70
70
  email:
71
71
  - hmoser@gitlab.com
@@ -95,6 +95,7 @@ files:
95
95
  - lib/3.2/yrb.so
96
96
  - lib/3.3/yrb.so
97
97
  - lib/3.4/yrb.so
98
+ - lib/4.0/yrb.so
98
99
  - lib/y-rb.rb
99
100
  - lib/y.rb
100
101
  - lib/y/array.rb
@@ -126,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
126
127
  version: '3.1'
127
128
  - - "<"
128
129
  - !ruby/object:Gem::Version
129
- version: 3.5.dev
130
+ version: 4.1.dev
130
131
  required_rubygems_version: !ruby/object:Gem::Requirement
131
132
  requirements:
132
133
  - - ">="