y-rb 0.1.7-x86_64-darwin → 0.3.0-x86_64-darwin
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 +4 -4
- data/ext/yrb/Cargo.toml +2 -1
- data/ext/yrb/src/awareness.rs +425 -0
- data/ext/yrb/src/lib.rs +174 -135
- data/ext/yrb/src/utils.rs +1 -3
- data/ext/yrb/src/yany.rs +1 -1
- data/ext/yrb/src/yarray.rs +29 -59
- data/ext/yrb/src/yattrs.rs +2 -2
- data/ext/yrb/src/yawareness.rs +155 -0
- data/ext/yrb/src/ydoc.rs +5 -9
- data/ext/yrb/src/ymap.rs +19 -36
- data/ext/yrb/src/ytext.rs +32 -59
- data/ext/yrb/src/ytransaction.rs +7 -13
- data/ext/yrb/src/yvalue.rs +5 -11
- data/ext/yrb/src/yxml_element.rs +45 -66
- data/ext/yrb/src/yxml_text.rs +27 -48
- data/lib/2.7/yrb.bundle +0 -0
- data/lib/3.0/yrb.bundle +0 -0
- data/lib/3.1/yrb.bundle +0 -0
- data/lib/y/array.rb +2 -0
- data/lib/y/awareness.rb +157 -0
- data/lib/y/doc.rb +1 -1
- data/lib/y/map.rb +2 -0
- data/lib/y/text.rb +1 -1
- data/lib/y/version.rb +1 -1
- data/lib/y/xml.rb +5 -2
- data/lib/y-rb.rb +3 -0
- metadata +8 -5
data/ext/yrb/src/ytransaction.rs
CHANGED
@@ -16,10 +16,7 @@ pub(crate) struct YTransaction(pub(crate) RefCell<Transaction>);
|
|
16
16
|
unsafe impl Send for YTransaction {}
|
17
17
|
|
18
18
|
impl YTransaction {
|
19
|
-
pub(crate) fn ytransaction_apply_update(
|
20
|
-
&self,
|
21
|
-
update: Vec<u8>
|
22
|
-
) -> Result<(), Error> {
|
19
|
+
pub(crate) fn ytransaction_apply_update(&self, update: Vec<u8>) -> Result<(), Error> {
|
23
20
|
return Update::decode_v1(update.as_slice())
|
24
21
|
.map(|u| self.0.borrow_mut().apply_update(u))
|
25
22
|
.map_err(|_e| Error::runtime_error("cannot apply update"));
|
@@ -30,30 +27,27 @@ impl YTransaction {
|
|
30
27
|
pub(crate) fn ytransaction_get_array(&self, name: String) -> YArray {
|
31
28
|
let a = self.0.borrow_mut().get_array(&*name);
|
32
29
|
|
33
|
-
|
30
|
+
YArray(RefCell::from(a))
|
34
31
|
}
|
35
32
|
pub(crate) fn ytransaction_get_map(&self, name: String) -> YMap {
|
36
33
|
let m = self.0.borrow_mut().get_map(&*name);
|
37
34
|
|
38
|
-
|
35
|
+
YMap(RefCell::from(m))
|
39
36
|
}
|
40
37
|
pub(crate) fn ytransaction_get_text(&self, name: String) -> YText {
|
41
38
|
let t = self.0.borrow_mut().get_text(&*name);
|
42
39
|
|
43
|
-
|
40
|
+
YText(RefCell::new(t))
|
44
41
|
}
|
45
|
-
pub(crate) fn ytransaction_get_xml_element(
|
46
|
-
&self,
|
47
|
-
name: String
|
48
|
-
) -> YXmlElement {
|
42
|
+
pub(crate) fn ytransaction_get_xml_element(&self, name: String) -> YXmlElement {
|
49
43
|
let el = self.0.borrow_mut().get_xml_element(&*name);
|
50
44
|
|
51
|
-
|
45
|
+
YXmlElement(RefCell::new(el))
|
52
46
|
}
|
53
47
|
pub(crate) fn ytransaction_get_xml_text(&self, name: String) -> YXmlText {
|
54
48
|
let t = self.0.borrow_mut().get_xml_text(&*name);
|
55
49
|
|
56
|
-
|
50
|
+
YXmlText(RefCell::new(t))
|
57
51
|
}
|
58
52
|
pub(crate) fn ytransaction_state_vector(&self) -> Vec<u8> {
|
59
53
|
return self.0.borrow_mut().state_vector().encode_v1();
|
data/ext/yrb/src/yvalue.rs
CHANGED
@@ -2,15 +2,11 @@ use crate::{YText, YXmlElement, YXmlText};
|
|
2
2
|
use lib0::any::Any;
|
3
3
|
use magnus::r_hash::ForEach::Continue;
|
4
4
|
use magnus::value::Qnil;
|
5
|
-
use magnus::{
|
6
|
-
class, Float, Integer, RArray, RHash, RString, Symbol, Value, QNIL
|
7
|
-
};
|
5
|
+
use magnus::{class, Float, Integer, RArray, RHash, RString, Symbol, Value, QNIL};
|
8
6
|
use std::cell::RefCell;
|
9
7
|
use std::collections::HashMap;
|
10
8
|
use yrs::types::Value as YrsValue;
|
11
|
-
use yrs::{
|
12
|
-
Text as YrsText, XmlElement as YrsXmlElement, XmlText as YrsXmlText
|
13
|
-
};
|
9
|
+
use yrs::{Text as YrsText, XmlElement as YrsXmlElement, XmlText as YrsXmlText};
|
14
10
|
|
15
11
|
pub(crate) struct YValue(pub(crate) RefCell<Value>);
|
16
12
|
|
@@ -77,7 +73,7 @@ impl From<YrsText> for YValue {
|
|
77
73
|
impl From<YrsXmlElement> for YValue {
|
78
74
|
fn from(value: YrsXmlElement) -> Self {
|
79
75
|
YValue(RefCell::from(Value::from(YXmlElement(RefCell::from(
|
80
|
-
value
|
76
|
+
value,
|
81
77
|
)))))
|
82
78
|
}
|
83
79
|
}
|
@@ -150,10 +146,7 @@ impl From<YrsValue> for YValue {
|
|
150
146
|
// *yvalue.0
|
151
147
|
// }))),
|
152
148
|
// YrsValue::YMap(val) => YValue::from(RHash::from_iter(val.iter())),
|
153
|
-
v => panic!(
|
154
|
-
"cannot map complex yrs values to yvalue: {}",
|
155
|
-
v.to_string()
|
156
|
-
)
|
149
|
+
v => panic!("cannot map complex yrs values to yvalue: {}", v.to_string()),
|
157
150
|
}
|
158
151
|
}
|
159
152
|
}
|
@@ -215,6 +208,7 @@ impl From<YValue> for Any {
|
|
215
208
|
}
|
216
209
|
}
|
217
210
|
|
211
|
+
#[allow(clippy::from_over_into)]
|
218
212
|
impl Into<Value> for YValue {
|
219
213
|
fn into(self) -> Value {
|
220
214
|
self.0.into_inner()
|
data/ext/yrb/src/yxml_element.rs
CHANGED
@@ -15,7 +15,7 @@ unsafe impl Send for YXmlElement {}
|
|
15
15
|
|
16
16
|
impl YXmlElement {
|
17
17
|
pub(crate) fn yxml_element_attributes(&self) -> RHash {
|
18
|
-
RHash::from_iter(self.0.borrow().attributes()
|
18
|
+
RHash::from_iter(self.0.borrow().attributes())
|
19
19
|
}
|
20
20
|
pub(crate) fn yxml_element_first_child(&self) -> Option<Value> {
|
21
21
|
self.yxml_element_get(0)
|
@@ -23,45 +23,39 @@ impl YXmlElement {
|
|
23
23
|
pub(crate) fn yxml_element_get(&self, index: u32) -> Option<Value> {
|
24
24
|
self.0.borrow().get(index).map(|node| match node {
|
25
25
|
Xml::Element(el) => Value::from(YXmlElement(RefCell::from(el))),
|
26
|
-
Xml::Text(text) => Value::from(YXmlText(RefCell::from(text)))
|
26
|
+
Xml::Text(text) => Value::from(YXmlText(RefCell::from(text))),
|
27
27
|
})
|
28
28
|
}
|
29
|
-
pub(crate) fn yxml_element_get_attribute(
|
30
|
-
&self,
|
31
|
-
name: String
|
32
|
-
) -> Option<String> {
|
29
|
+
pub(crate) fn yxml_element_get_attribute(&self, name: String) -> Option<String> {
|
33
30
|
self.0.borrow().get_attribute(&*name)
|
34
31
|
}
|
35
32
|
pub(crate) fn yxml_element_insert_attribute(
|
36
33
|
&self,
|
37
34
|
transaction: &YTransaction,
|
38
35
|
name: String,
|
39
|
-
value: String
|
36
|
+
value: String,
|
40
37
|
) {
|
41
|
-
self.0
|
42
|
-
|
43
|
-
name,
|
44
|
-
value
|
45
|
-
);
|
38
|
+
self.0
|
39
|
+
.borrow_mut()
|
40
|
+
.insert_attribute(&mut *transaction.0.borrow_mut(), name, value);
|
46
41
|
}
|
47
42
|
pub(crate) fn yxml_element_insert_element(
|
48
43
|
&self,
|
49
44
|
transaction: &YTransaction,
|
50
45
|
index: u32,
|
51
|
-
name: String
|
46
|
+
name: String,
|
52
47
|
) -> YXmlElement {
|
53
|
-
let element =
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
);
|
48
|
+
let element =
|
49
|
+
self.0
|
50
|
+
.borrow_mut()
|
51
|
+
.insert_elem(&mut *transaction.0.borrow_mut(), index, name);
|
58
52
|
|
59
53
|
YXmlElement(RefCell::from(element))
|
60
54
|
}
|
61
55
|
pub(crate) fn yxml_element_insert_text(
|
62
56
|
&self,
|
63
57
|
transaction: &YTransaction,
|
64
|
-
index: u32
|
58
|
+
index: u32,
|
65
59
|
) -> YXmlText {
|
66
60
|
let text = self
|
67
61
|
.0
|
@@ -73,19 +67,18 @@ impl YXmlElement {
|
|
73
67
|
pub(crate) fn yxml_element_next_sibling(&self) -> Option<Value> {
|
74
68
|
self.0.borrow().next_sibling().map(|item| match item {
|
75
69
|
Xml::Element(el) => Value::from(YXmlElement(RefCell::from(el))),
|
76
|
-
Xml::Text(text) => Value::from(YXmlText(RefCell::from(text)))
|
70
|
+
Xml::Text(text) => Value::from(YXmlText(RefCell::from(text))),
|
77
71
|
})
|
78
72
|
}
|
79
|
-
pub(crate) fn yxml_element_observe(
|
80
|
-
&self,
|
81
|
-
block: Proc
|
82
|
-
) -> Result<u32, Error> {
|
73
|
+
pub(crate) fn yxml_element_observe(&self, block: Proc) -> Result<u32, Error> {
|
83
74
|
let change_added = Symbol::new("added").to_static();
|
84
75
|
let change_retain = Symbol::new("retain").to_static();
|
85
76
|
let change_removed = Symbol::new("removed").to_static();
|
86
77
|
|
87
|
-
let subscription_id = self
|
88
|
-
|
78
|
+
let subscription_id = self
|
79
|
+
.0
|
80
|
+
.borrow_mut()
|
81
|
+
.observe(move |transaction, xml_element_event| {
|
89
82
|
let delta = xml_element_event.delta(transaction);
|
90
83
|
let changes = RArray::with_capacity(delta.len());
|
91
84
|
|
@@ -103,9 +96,9 @@ impl YXmlElement {
|
|
103
96
|
.aset(change_added, RArray::from_vec(values))
|
104
97
|
.expect("cannot create change::added payload");
|
105
98
|
|
106
|
-
changes
|
107
|
-
|
108
|
-
|
99
|
+
changes
|
100
|
+
.push(payload)
|
101
|
+
.expect("cannot push payload to list of changes");
|
109
102
|
}
|
110
103
|
Change::Retain(position) => {
|
111
104
|
let payload = RHash::new();
|
@@ -113,19 +106,19 @@ impl YXmlElement {
|
|
113
106
|
.aset(change_retain, *position)
|
114
107
|
.expect("cannot create change::retain payload");
|
115
108
|
|
116
|
-
changes
|
117
|
-
|
118
|
-
|
109
|
+
changes
|
110
|
+
.push(payload)
|
111
|
+
.expect("cannot push payload to list of changes");
|
119
112
|
}
|
120
113
|
Change::Removed(position) => {
|
121
114
|
let payload = RHash::new();
|
122
|
-
payload
|
123
|
-
|
124
|
-
|
115
|
+
payload
|
116
|
+
.aset(change_removed, *position)
|
117
|
+
.expect("cannot create change::removed payload");
|
125
118
|
|
126
|
-
changes
|
127
|
-
|
128
|
-
|
119
|
+
changes
|
120
|
+
.push(payload)
|
121
|
+
.expect("cannot push payload to list of changes");
|
129
122
|
}
|
130
123
|
}
|
131
124
|
}
|
@@ -133,8 +126,7 @@ impl YXmlElement {
|
|
133
126
|
block
|
134
127
|
.call::<(RArray,), Value>((changes,))
|
135
128
|
.expect("cannot call block");
|
136
|
-
}
|
137
|
-
);
|
129
|
+
});
|
138
130
|
|
139
131
|
Ok(subscription_id.into())
|
140
132
|
}
|
@@ -147,13 +139,13 @@ impl YXmlElement {
|
|
147
139
|
pub(crate) fn yxml_element_prev_sibling(&self) -> Option<Value> {
|
148
140
|
self.0.borrow().prev_sibling().map(|item| match item {
|
149
141
|
Xml::Element(el) => Value::from(YXmlElement(RefCell::from(el))),
|
150
|
-
Xml::Text(text) => Value::from(YXmlText(RefCell::from(text)))
|
142
|
+
Xml::Text(text) => Value::from(YXmlText(RefCell::from(text))),
|
151
143
|
})
|
152
144
|
}
|
153
145
|
pub(crate) fn yxml_element_push_element_back(
|
154
146
|
&self,
|
155
147
|
transaction: &YTransaction,
|
156
|
-
name: String
|
148
|
+
name: String,
|
157
149
|
) -> YXmlElement {
|
158
150
|
let xml_element = self
|
159
151
|
.0
|
@@ -165,7 +157,7 @@ impl YXmlElement {
|
|
165
157
|
pub(crate) fn yxml_element_push_element_front(
|
166
158
|
&self,
|
167
159
|
transaction: &YTransaction,
|
168
|
-
name: String
|
160
|
+
name: String,
|
169
161
|
) -> YXmlElement {
|
170
162
|
let xml_element = self
|
171
163
|
.0
|
@@ -174,10 +166,7 @@ impl YXmlElement {
|
|
174
166
|
|
175
167
|
YXmlElement(RefCell::from(xml_element))
|
176
168
|
}
|
177
|
-
pub(crate) fn yxml_element_push_text_back(
|
178
|
-
&self,
|
179
|
-
transaction: &YTransaction
|
180
|
-
) -> YXmlText {
|
169
|
+
pub(crate) fn yxml_element_push_text_back(&self, transaction: &YTransaction) -> YXmlText {
|
181
170
|
let xml_text = self
|
182
171
|
.0
|
183
172
|
.borrow_mut()
|
@@ -185,10 +174,7 @@ impl YXmlElement {
|
|
185
174
|
|
186
175
|
YXmlText(RefCell::from(xml_text))
|
187
176
|
}
|
188
|
-
pub(crate) fn yxml_element_push_text_front(
|
189
|
-
&self,
|
190
|
-
transaction: &YTransaction
|
191
|
-
) -> YXmlText {
|
177
|
+
pub(crate) fn yxml_element_push_text_front(&self, transaction: &YTransaction) -> YXmlText {
|
192
178
|
let xml_text = self
|
193
179
|
.0
|
194
180
|
.borrow_mut()
|
@@ -196,27 +182,20 @@ impl YXmlElement {
|
|
196
182
|
|
197
183
|
YXmlText(RefCell::from(xml_text))
|
198
184
|
}
|
199
|
-
pub(crate) fn yxml_element_remove_attribute(
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
) {
|
204
|
-
self.0.borrow_mut().remove_attribute::<&str>(
|
205
|
-
&mut *transaction.0.borrow_mut(),
|
206
|
-
&name.as_str()
|
207
|
-
);
|
185
|
+
pub(crate) fn yxml_element_remove_attribute(&self, transaction: &YTransaction, name: String) {
|
186
|
+
self.0
|
187
|
+
.borrow_mut()
|
188
|
+
.remove_attribute::<&str>(&mut *transaction.0.borrow_mut(), &name.as_str());
|
208
189
|
}
|
209
190
|
pub(crate) fn yxml_element_remove_range(
|
210
191
|
&self,
|
211
192
|
transaction: &YTransaction,
|
212
193
|
index: u32,
|
213
|
-
length: u32
|
194
|
+
length: u32,
|
214
195
|
) {
|
215
|
-
self.0
|
216
|
-
|
217
|
-
index,
|
218
|
-
length
|
219
|
-
);
|
196
|
+
self.0
|
197
|
+
.borrow_mut()
|
198
|
+
.remove_range(&mut *transaction.0.borrow_mut(), index, length);
|
220
199
|
}
|
221
200
|
pub(crate) fn yxml_element_size(&self) -> u32 {
|
222
201
|
self.0.borrow().len()
|
data/ext/yrb/src/yxml_text.rs
CHANGED
@@ -14,60 +14,45 @@ unsafe impl Send for YXmlText {}
|
|
14
14
|
|
15
15
|
impl YXmlText {
|
16
16
|
pub(crate) fn yxml_text_attributes(&self) -> RHash {
|
17
|
-
RHash::from_iter(self.0.borrow().attributes()
|
17
|
+
RHash::from_iter(self.0.borrow().attributes())
|
18
18
|
}
|
19
19
|
pub(crate) fn yxml_text_format(
|
20
20
|
&self,
|
21
21
|
transaction: &YTransaction,
|
22
22
|
index: u32,
|
23
23
|
length: u32,
|
24
|
-
attrs: RHash
|
24
|
+
attrs: RHash,
|
25
25
|
) -> Result<(), Error> {
|
26
26
|
map_rhash_to_attrs(attrs).map(|a| {
|
27
|
-
self.0
|
28
|
-
|
29
|
-
index,
|
30
|
-
length,
|
31
|
-
a
|
32
|
-
);
|
27
|
+
self.0
|
28
|
+
.borrow_mut()
|
29
|
+
.format(&mut *transaction.0.borrow_mut(), index, length, a);
|
33
30
|
})
|
34
31
|
}
|
35
|
-
pub(crate) fn yxml_text_get_attribute(
|
36
|
-
&self,
|
37
|
-
name: String
|
38
|
-
) -> Option<String> {
|
32
|
+
pub(crate) fn yxml_text_get_attribute(&self, name: String) -> Option<String> {
|
39
33
|
self.0.borrow().get_attribute(&*name)
|
40
34
|
}
|
41
|
-
pub(crate) fn yxml_text_insert(
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
content: String
|
46
|
-
) {
|
47
|
-
self.0.borrow_mut().insert(
|
48
|
-
&mut *transaction.0.borrow_mut(),
|
49
|
-
index,
|
50
|
-
&*content
|
51
|
-
)
|
35
|
+
pub(crate) fn yxml_text_insert(&self, transaction: &YTransaction, index: u32, content: String) {
|
36
|
+
self.0
|
37
|
+
.borrow_mut()
|
38
|
+
.insert(&mut *transaction.0.borrow_mut(), index, &*content)
|
52
39
|
}
|
53
40
|
pub(crate) fn yxml_text_insert_attribute(
|
54
41
|
&self,
|
55
42
|
transaction: &YTransaction,
|
56
43
|
name: String,
|
57
|
-
value: String
|
44
|
+
value: String,
|
58
45
|
) {
|
59
|
-
self.0
|
60
|
-
|
61
|
-
name,
|
62
|
-
value
|
63
|
-
)
|
46
|
+
self.0
|
47
|
+
.borrow_mut()
|
48
|
+
.insert_attribute(&mut *transaction.0.borrow_mut(), name, value)
|
64
49
|
}
|
65
50
|
pub(crate) fn yxml_text_insert_embed_with_attributes(
|
66
51
|
&self,
|
67
52
|
transaction: &YTransaction,
|
68
53
|
index: u32,
|
69
54
|
content: Value,
|
70
|
-
attrs: RHash
|
55
|
+
attrs: RHash,
|
71
56
|
) -> Result<(), Error> {
|
72
57
|
let yvalue = YValue::from(content);
|
73
58
|
let avalue = Any::from(yvalue);
|
@@ -77,7 +62,7 @@ impl YXmlText {
|
|
77
62
|
&mut *transaction.0.borrow_mut(),
|
78
63
|
index,
|
79
64
|
avalue,
|
80
|
-
a
|
65
|
+
a,
|
81
66
|
);
|
82
67
|
})
|
83
68
|
}
|
@@ -85,12 +70,12 @@ impl YXmlText {
|
|
85
70
|
&self,
|
86
71
|
transaction: &YTransaction,
|
87
72
|
index: u32,
|
88
|
-
embed: Value
|
73
|
+
embed: Value,
|
89
74
|
) {
|
90
75
|
self.0.borrow_mut().insert_embed(
|
91
76
|
&mut *transaction.0.borrow_mut(),
|
92
77
|
index,
|
93
|
-
Any::from(YValue::from(embed))
|
78
|
+
Any::from(YValue::from(embed)),
|
94
79
|
)
|
95
80
|
}
|
96
81
|
pub(crate) fn yxml_text_insert_with_attributes(
|
@@ -98,14 +83,14 @@ impl YXmlText {
|
|
98
83
|
transaction: &YTransaction,
|
99
84
|
index: u32,
|
100
85
|
content: String,
|
101
|
-
attrs: RHash
|
86
|
+
attrs: RHash,
|
102
87
|
) -> Result<(), Error> {
|
103
88
|
map_rhash_to_attrs(attrs).map(|a| {
|
104
89
|
self.0.borrow_mut().insert_with_attributes(
|
105
90
|
&mut *transaction.0.borrow_mut(),
|
106
91
|
index,
|
107
92
|
&*content,
|
108
|
-
a
|
93
|
+
a,
|
109
94
|
);
|
110
95
|
})
|
111
96
|
}
|
@@ -115,7 +100,7 @@ impl YXmlText {
|
|
115
100
|
pub(crate) fn yxml_text_next_sibling(&self) -> Option<Value> {
|
116
101
|
self.0.borrow().next_sibling().map(|item| match item {
|
117
102
|
Xml::Element(el) => Value::from(YXmlElement(RefCell::from(el))),
|
118
|
-
Xml::Text(text) => Value::from(YXmlText(RefCell::from(text)))
|
103
|
+
Xml::Text(text) => Value::from(YXmlText(RefCell::from(text))),
|
119
104
|
})
|
120
105
|
}
|
121
106
|
pub(crate) fn yxml_text_parent(&self) -> Option<Value> {
|
@@ -127,14 +112,10 @@ impl YXmlText {
|
|
127
112
|
pub(crate) fn yxml_text_prev_sibling(&self) -> Option<Value> {
|
128
113
|
self.0.borrow().prev_sibling().map(|item| match item {
|
129
114
|
Xml::Element(el) => Value::from(YXmlElement(RefCell::from(el))),
|
130
|
-
Xml::Text(text) => Value::from(YXmlText(RefCell::from(text)))
|
115
|
+
Xml::Text(text) => Value::from(YXmlText(RefCell::from(text))),
|
131
116
|
})
|
132
117
|
}
|
133
|
-
pub(crate) fn yxml_text_push(
|
134
|
-
&self,
|
135
|
-
transaction: &YTransaction,
|
136
|
-
content: String
|
137
|
-
) {
|
118
|
+
pub(crate) fn yxml_text_push(&self, transaction: &YTransaction, content: String) {
|
138
119
|
self.0
|
139
120
|
.borrow_mut()
|
140
121
|
.push(&mut *transaction.0.borrow_mut(), &*content)
|
@@ -143,13 +124,11 @@ impl YXmlText {
|
|
143
124
|
&self,
|
144
125
|
transaction: &YTransaction,
|
145
126
|
index: u32,
|
146
|
-
length: u32
|
127
|
+
length: u32,
|
147
128
|
) {
|
148
|
-
self.0
|
149
|
-
|
150
|
-
index,
|
151
|
-
length
|
152
|
-
);
|
129
|
+
self.0
|
130
|
+
.borrow_mut()
|
131
|
+
.remove_range(&mut *transaction.0.borrow_mut(), index, length);
|
153
132
|
}
|
154
133
|
pub(crate) fn yxml_text_to_s(&self) -> String {
|
155
134
|
self.0.borrow().to_string()
|
data/lib/2.7/yrb.bundle
CHANGED
Binary file
|
data/lib/3.0/yrb.bundle
CHANGED
Binary file
|
data/lib/3.1/yrb.bundle
CHANGED
Binary file
|
data/lib/y/array.rb
CHANGED
data/lib/y/awareness.rb
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Y
|
4
|
+
class Awareness
|
5
|
+
def apply_update(update)
|
6
|
+
yawareness_apply_update(update)
|
7
|
+
end
|
8
|
+
|
9
|
+
def clean_local_state
|
10
|
+
yawareness_clean_local_state
|
11
|
+
end
|
12
|
+
|
13
|
+
def client_id
|
14
|
+
yawareness_client_id
|
15
|
+
end
|
16
|
+
|
17
|
+
def clients
|
18
|
+
yawareness_clients
|
19
|
+
end
|
20
|
+
|
21
|
+
def local_state
|
22
|
+
yawareness_local_state
|
23
|
+
end
|
24
|
+
|
25
|
+
def local_state=(json)
|
26
|
+
yawareness_set_local_state(json)
|
27
|
+
end
|
28
|
+
|
29
|
+
def attach(callback, &block)
|
30
|
+
return yawareness_on_update(callback) unless callback.nil?
|
31
|
+
|
32
|
+
yawareness_on_update(block.to_proc) unless block.nil?
|
33
|
+
end
|
34
|
+
|
35
|
+
def detach(subscription_id)
|
36
|
+
yawareness_remove_on_update(subscription_id)
|
37
|
+
end
|
38
|
+
|
39
|
+
def remove_state(client_id)
|
40
|
+
yawareness_remove_state(client_id)
|
41
|
+
end
|
42
|
+
|
43
|
+
def update
|
44
|
+
yawareness_update
|
45
|
+
end
|
46
|
+
|
47
|
+
def update_with_clients(clients)
|
48
|
+
yawareness_update_with_clients(clients)
|
49
|
+
end
|
50
|
+
|
51
|
+
# rubocop:disable Lint/UselessAccessModifier
|
52
|
+
private
|
53
|
+
|
54
|
+
# @!method yawareness_apply_update(update)
|
55
|
+
# Applies an update
|
56
|
+
#
|
57
|
+
# @param [Y::AwarenessUpdate] A structure that represents an encodable state
|
58
|
+
# of an Awareness struct.
|
59
|
+
|
60
|
+
# @!method yawareness_clean_local_state
|
61
|
+
# Clears out a state of a current client , effectively marking it as
|
62
|
+
# disconnected.
|
63
|
+
|
64
|
+
# @!method yawareness_client_id
|
65
|
+
# Returns a globally unique client ID of an underlying Doc.
|
66
|
+
# @return [Integer] The Client ID
|
67
|
+
|
68
|
+
# @!method yawareness_clients
|
69
|
+
# Returns a state map of all of the clients
|
70
|
+
# tracked by current Awareness instance. Those states are identified by
|
71
|
+
# their corresponding ClientIDs. The associated state is represented and
|
72
|
+
# replicated to other clients as a JSON string.
|
73
|
+
#
|
74
|
+
# @return [Hash<Integer, String>] Map of clients
|
75
|
+
|
76
|
+
# @!method yawareness_local_state
|
77
|
+
#
|
78
|
+
# @return [String|nil] Returns a JSON string state representation of a
|
79
|
+
# current Awareness instance.
|
80
|
+
|
81
|
+
# @!method yawareness_on_update(callback, &block)
|
82
|
+
#
|
83
|
+
# @param [Proc] A callback handler for updates
|
84
|
+
# @return [Integer] The subscription ID
|
85
|
+
|
86
|
+
# @!method yawareness_remove_on_update(subscription_id)
|
87
|
+
#
|
88
|
+
# @param [Integer] subscription_id The subscription id to remove
|
89
|
+
|
90
|
+
# @!method yawareness_remove_state(client_id)
|
91
|
+
# Clears out a state of a given client, effectively marking it as
|
92
|
+
# disconnected.
|
93
|
+
#
|
94
|
+
# @param [Integer] A Client ID
|
95
|
+
# @return [String|nil] Returns a JSON string state representation of a
|
96
|
+
# current Awareness instance.
|
97
|
+
|
98
|
+
# @!method yawareness_set_local_state(state)
|
99
|
+
# Sets a current Awareness instance state to a corresponding JSON string.
|
100
|
+
# This state will be replicated to other clients as part of the
|
101
|
+
# AwarenessUpdate and it will trigger an event to be emitted if current
|
102
|
+
# instance was created using [Awareness::with_observer] method.
|
103
|
+
#
|
104
|
+
# @param [String] Returns a state map of all of the clients tracked by
|
105
|
+
# current Awareness instance. Those states are identified by their
|
106
|
+
# corresponding ClientIDs. The associated state is represented and
|
107
|
+
# replicated to other clients as a JSON string.
|
108
|
+
|
109
|
+
# @!method yawareness_update
|
110
|
+
# Returns a serializable update object which is representation of a
|
111
|
+
# current Awareness state.
|
112
|
+
#
|
113
|
+
# @return [Y::AwarenessUpdate] The update object
|
114
|
+
|
115
|
+
# @!method yawareness_update_with_clients(clients)
|
116
|
+
# Returns a serializable update object which is representation of a
|
117
|
+
# current Awareness state. Unlike [Y::Awareness#update], this method
|
118
|
+
# variant allows to prepare update only for a subset of known clients.
|
119
|
+
# These clients must all be known to a current Awareness instance,
|
120
|
+
# otherwise an error will be returned.
|
121
|
+
#
|
122
|
+
# @param [Array<Integer>]
|
123
|
+
# @return [Y::AwarenessUpdate] The update object
|
124
|
+
|
125
|
+
# rubocop:enable Lint/UselessAccessModifier
|
126
|
+
end
|
127
|
+
|
128
|
+
# rubocop:disable Lint/UselessAccessModifier
|
129
|
+
class AwarenessEvent
|
130
|
+
private
|
131
|
+
|
132
|
+
# @!method added
|
133
|
+
# @return [Array<Integer>] Added clients
|
134
|
+
|
135
|
+
# @!method updated
|
136
|
+
# @return [Array<Integer>] Updated clients
|
137
|
+
|
138
|
+
# @!method removed
|
139
|
+
# @return [Array<Integer>] Removed clients
|
140
|
+
end
|
141
|
+
# rubocop:enable Lint/UselessAccessModifier
|
142
|
+
|
143
|
+
# rubocop:disable Lint/UselessAccessModifier
|
144
|
+
class AwarenessUpdate
|
145
|
+
def encode
|
146
|
+
yawareness_update_encode
|
147
|
+
end
|
148
|
+
|
149
|
+
private
|
150
|
+
|
151
|
+
# @!method yawareness_update_encode
|
152
|
+
# Encode the awareness state for simple transport
|
153
|
+
#
|
154
|
+
# @return [Array<Integer>] Encoded update
|
155
|
+
end
|
156
|
+
# rubocop:enable Lint/UselessAccessModifier
|
157
|
+
end
|
data/lib/y/doc.rb
CHANGED
data/lib/y/map.rb
CHANGED
data/lib/y/text.rb
CHANGED
@@ -115,7 +115,7 @@ module Y
|
|
115
115
|
# - Hash (where the the types of key and values must be supported)
|
116
116
|
#
|
117
117
|
# @param [Integer] index
|
118
|
-
# @param [String,
|
118
|
+
# @param [String, Numeric, Array, Hash] value
|
119
119
|
# @param [Hash|nil] attrs
|
120
120
|
# @return [void]
|
121
121
|
def insert(index, value, attrs = nil)
|