y-rb 0.1.3 → 0.1.4.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
data/src/ytext.rs DELETED
@@ -1,204 +0,0 @@
1
- use crate::util::{
2
- map_attrs_to_hash, map_hash_to_attrs, map_ruby_type_to_rust,
3
- map_yrs_value_to_ruby
4
- };
5
- use crate::ytransaction::{YTransaction, TRANSACTION_WRAPPER};
6
- use rutie::{
7
- AnyObject, Fixnum, Hash, Integer, NilClass, Object, Proc, RString, Symbol,
8
- VM
9
- };
10
- use yrs::types::Delta;
11
- use yrs::{SubscriptionId, Text};
12
-
13
- wrappable_struct!(Text, TextWrapper, TEXT_WRAPPER);
14
- class!(YText);
15
-
16
- #[rustfmt::skip]
17
- methods!(
18
- YText,
19
- rtself,
20
- fn ytext_insert(transaction: YTransaction, index: Fixnum, chunk: RString) -> NilClass {
21
- let mut txn = transaction.map_err(|e| VM::raise_ex(e)).unwrap();
22
-
23
- let i = index.map_err(|e| VM::raise_ex(e)).unwrap();
24
-
25
- let c = chunk.map_err(|e| VM::raise_ex(e)).unwrap().to_string();
26
-
27
- let tx = txn.get_data_mut(&*TRANSACTION_WRAPPER);
28
- let text: &Text = rtself.get_data_mut(&*TEXT_WRAPPER);
29
-
30
- text.insert(tx, i.to_u32(), &c);
31
-
32
- NilClass::new()
33
- },
34
- fn ytext_insert_embed(
35
- transaction: YTransaction,
36
- index: Fixnum,
37
- content: AnyObject) -> NilClass {
38
- let mut txn = transaction.map_err(|e| VM::raise_ex(e)).unwrap();
39
- let i = index.map_err(|e| VM::raise_ex(e)).unwrap();
40
-
41
- let c = content.map_err(|e| VM::raise_ex(e)).unwrap();
42
- let v = map_ruby_type_to_rust(c).map_err(|e| VM::raise_ex(e)).unwrap();
43
-
44
- let tx = txn.get_data_mut(&*TRANSACTION_WRAPPER);
45
- let text: &Text = rtself.get_data_mut(&*TEXT_WRAPPER);
46
-
47
- text.insert_embed(tx, i.to_u32(), v);
48
-
49
- NilClass::new()
50
- }
51
- fn ytext_insert_embed_with_attributes(
52
- transaction: YTransaction,
53
- index: Fixnum,
54
- embed: AnyObject,
55
- attrs: Hash) -> NilClass {
56
- let mut txn = transaction.map_err(|e| VM::raise_ex(e)).unwrap();
57
- let i = index.map_err(|e| VM::raise_ex(e)).unwrap();
58
-
59
- let c = embed.map_err(|e| VM::raise_ex(e)).unwrap();
60
- let v = map_ruby_type_to_rust(c).map_err(|e| VM::raise_ex(e)).unwrap();
61
-
62
- let a = attrs.map_err(|e| VM::raise_ex(e)).unwrap();
63
- let mapped_attrs = map_hash_to_attrs(a);
64
-
65
- let tx = txn.get_data_mut(&*TRANSACTION_WRAPPER);
66
- let text: &Text = rtself.get_data_mut(&*TEXT_WRAPPER);
67
-
68
- text.insert_embed_with_attributes(tx, i.to_u32(), v, mapped_attrs);
69
-
70
- NilClass::new()
71
- }
72
- fn ytext_insert_with_attributes(
73
- transaction: YTransaction,
74
- index: Fixnum,
75
- chunk: RString,
76
- attrs: Hash) -> NilClass {
77
- let mut txn = transaction.map_err(|e| VM::raise_ex(e)).unwrap();
78
- let i = index.map_err(|e| VM::raise_ex(e)).unwrap();
79
-
80
- let c = chunk.map_err(|e| VM::raise_ex(e)).unwrap().to_string();
81
-
82
- let a = attrs.map_err(|e| VM::raise_ex(e)).unwrap();
83
- let mapped_attrs = map_hash_to_attrs(a);
84
-
85
- let tx = txn.get_data_mut(&*TRANSACTION_WRAPPER);
86
- let text: &Text = rtself.get_data_mut(&*TEXT_WRAPPER);
87
-
88
- text.insert_with_attributes(tx, i.to_u32(), &c, mapped_attrs);
89
-
90
- NilClass::new()
91
- },
92
- fn ytext_length() -> Fixnum {
93
- let text = rtself.get_data(&*TEXT_WRAPPER);
94
-
95
- Fixnum::new(i64::from(text.len()))
96
- }
97
- fn ytext_push(transaction: YTransaction, value: RString) -> NilClass {
98
- let value_str = value.map_err(|e| VM::raise_ex(e)).unwrap().to_string();
99
-
100
- let mut txn = transaction.map_err(|e| VM::raise_ex(e)).unwrap();
101
-
102
- let t = txn.get_data_mut(&*TRANSACTION_WRAPPER);
103
- let text = rtself.get_data_mut(&*TEXT_WRAPPER);
104
-
105
- text.push(t, &value_str);
106
-
107
- NilClass::new()
108
- },
109
- fn ytext_remove_range(transaction: YTransaction, index: Fixnum, length: Fixnum) -> NilClass {
110
- let mut txn = transaction.map_err(|e| VM::raise_ex(e)).unwrap();
111
- let i = index.map_err(|e| VM::raise_ex(e)).unwrap();
112
- let l = length.map_err(|e| VM::raise_ex(e)).unwrap();
113
-
114
- let tx = txn.get_data_mut(&*TRANSACTION_WRAPPER);
115
- let text: &Text = rtself.get_data_mut(&*TEXT_WRAPPER);
116
-
117
- text.remove_range(tx, i.to_u32(), l.to_u32());
118
-
119
- NilClass::new()
120
- },
121
- fn ytext_format(transaction: YTransaction, index: Fixnum, length: Fixnum, attrs: Hash) -> NilClass {
122
- let mut txn = transaction.map_err(|e| VM::raise_ex(e)).unwrap();
123
- let i = index.map_err(|e| VM::raise_ex(e)).unwrap();
124
- let l = length.map_err(|e| VM::raise_ex(e)).unwrap();
125
-
126
- let a = attrs.map_err(|e| VM::raise_ex(e)).unwrap();
127
- let mapped_attrs = map_hash_to_attrs(a);
128
-
129
- let tx = txn.get_data_mut(&*TRANSACTION_WRAPPER);
130
- let text: &Text = rtself.get_data_mut(&*TEXT_WRAPPER);
131
-
132
- text.format(tx, i.to_u32(), l.to_u32(), mapped_attrs);
133
-
134
- NilClass::new()
135
- },
136
- fn ytext_observe(callback: Proc) -> Integer {
137
- let c = callback.map_err(|e| VM::raise_ex(e)).unwrap();
138
-
139
- let text: &mut Text = rtself.get_data_mut(&*TEXT_WRAPPER);
140
- let subscription_id: SubscriptionId = text
141
- .observe(move |transaction, text_event| {
142
- let delta = text_event.delta(transaction);
143
- for event in delta {
144
- match event {
145
- Delta::Inserted(v, attrs) => {
146
- let mut payload = Hash::new();
147
- payload.store(Symbol::new("insert"), map_yrs_value_to_ruby(v.clone()));
148
-
149
- match attrs {
150
- Some(a) => {
151
- let copy = a.clone();
152
- let result = map_attrs_to_hash(*copy).to_any_object();
153
- payload.store(Symbol::new("attributes"), result);
154
- },
155
- None => ()
156
- }
157
-
158
- let args = &[payload.to_any_object()];
159
- c.call(args);
160
- },
161
- Delta::Retain(position, attrs) => {
162
- let mut payload = Hash::new();
163
- payload.store(Symbol::new("retain"), Integer::from(*position));
164
-
165
- match attrs {
166
- Some(a) => {
167
- let copy = a.clone();
168
- let result = map_attrs_to_hash(*copy).to_any_object();
169
- payload.store(Symbol::new("attributes"), result);
170
- },
171
- None => ()
172
- }
173
-
174
- let args = &[payload.to_any_object()];
175
- c.call(args);
176
- },
177
- Delta::Deleted(position) => {
178
- let mut payload = Hash::new();
179
- payload.store(Symbol::new("delete"), Integer::from(*position));
180
-
181
- let args = &[payload.to_any_object()];
182
- c.call(args);
183
- }
184
- }
185
- }
186
- })
187
- .into();
188
-
189
- Integer::from(subscription_id)
190
- },
191
- fn ytext_to_string() -> RString {
192
- let text = rtself.get_data(&*TEXT_WRAPPER);
193
-
194
- RString::new_utf8(&text.to_string())
195
- },
196
- fn ytext_unobserve(subscription_id: Integer) -> NilClass {
197
- let s = subscription_id.map_err(|e| VM::raise_ex(e)).unwrap();
198
-
199
- let text: &mut Text = rtself.get_data_mut(&*TEXT_WRAPPER);
200
- text.unobserve(s.into());
201
-
202
- NilClass::new()
203
- }
204
- );
data/src/ytransaction.rs DELETED
@@ -1,102 +0,0 @@
1
- use crate::util::{convert_array_to_vecu8, convert_vecu8_to_array};
2
- use crate::yarray::ARRAY_WRAPPER;
3
- use crate::ymap::MAP_WRAPPER;
4
- use crate::ytext::TEXT_WRAPPER;
5
- use crate::yxml::{XML_ELEMENT_WRAPPER, XML_TEXT_WRAPPER};
6
- use rutie::{
7
- AnyObject, Array, Module, NilClass, Object, RString, VerifiedObject, VM,
8
- };
9
- use yrs::updates::decoder::Decode;
10
- use yrs::updates::encoder::Encode;
11
- use yrs::{Transaction, Update};
12
-
13
- wrappable_struct!(Transaction, TransactionWrapper, TRANSACTION_WRAPPER);
14
- class!(YTransaction);
15
-
16
- impl VerifiedObject for YTransaction {
17
- fn is_correct_type<T: Object>(object: &T) -> bool {
18
- object.class()
19
- == Module::from_existing("Y").get_nested_class("Transaction")
20
- }
21
-
22
- fn error_message() -> &'static str {
23
- "Error converting to YTransaction"
24
- }
25
- }
26
-
27
- methods!(
28
- YTransaction,
29
- rtself,
30
- fn ytransaction_apply_update(update: Array) -> NilClass {
31
- let u = convert_array_to_vecu8(update.unwrap());
32
-
33
- let transaction = rtself.get_data_mut(&*TRANSACTION_WRAPPER);
34
- let update = Update::decode_v1(u.as_slice()).unwrap();
35
- transaction.apply_update(update);
36
-
37
- NilClass::new()
38
- },
39
- fn ytransaction_commit() -> NilClass {
40
- let transaction = rtself.get_data_mut(&*TRANSACTION_WRAPPER);
41
- transaction.commit();
42
-
43
- NilClass::new()
44
- },
45
- fn ytransaction_get_array(name: RString) -> AnyObject {
46
- let name_str = name.map_err(|e| VM::raise_ex(e)).unwrap().to_string();
47
-
48
- let transaction = rtself.get_data_mut(&*TRANSACTION_WRAPPER);
49
- let arr = transaction.get_array(&name_str);
50
-
51
- Module::from_existing("Y")
52
- .get_nested_class("Array")
53
- .wrap_data(arr, &*ARRAY_WRAPPER)
54
- },
55
- fn ytransaction_get_map(name: RString) -> AnyObject {
56
- let name_str = name.map_err(|e| VM::raise_ex(e)).unwrap().to_string();
57
-
58
- let transaction = rtself.get_data_mut(&*TRANSACTION_WRAPPER);
59
- let map = transaction.get_map(&name_str);
60
-
61
- Module::from_existing("Y")
62
- .get_nested_class("Map")
63
- .wrap_data(map, &*MAP_WRAPPER)
64
- },
65
- fn ytransaction_get_text(name: RString) -> AnyObject {
66
- let name_str = name.map_err(|e| VM::raise_ex(e)).unwrap().to_string();
67
-
68
- let transaction = rtself.get_data_mut(&*TRANSACTION_WRAPPER);
69
- let text = transaction.get_text(&name_str);
70
-
71
- Module::from_existing("Y")
72
- .get_nested_class("Text")
73
- .wrap_data(text, &*TEXT_WRAPPER)
74
- },
75
- fn ytransaction_get_xml_element(name: RString) -> AnyObject {
76
- let name_str = name.map_err(|e| VM::raise_ex(e)).unwrap().to_string();
77
-
78
- let transaction = rtself.get_data_mut(&*TRANSACTION_WRAPPER);
79
- let xml_element = transaction.get_xml_element(&name_str);
80
-
81
- Module::from_existing("Y")
82
- .get_nested_class("XMLElement")
83
- .wrap_data(xml_element, &*XML_ELEMENT_WRAPPER)
84
- },
85
- fn ytransaction_get_xml_text(name: RString) -> AnyObject {
86
- let name_str = name.map_err(|e| VM::raise_ex(e)).unwrap().to_string();
87
-
88
- let transaction = rtself.get_data_mut(&*TRANSACTION_WRAPPER);
89
- let xml_text = transaction.get_xml_text(&name_str);
90
-
91
- Module::from_existing("Y")
92
- .get_nested_class("XMLText")
93
- .wrap_data(xml_text, &*XML_TEXT_WRAPPER)
94
- },
95
- fn ytransaction_state_vector() -> Array {
96
- let transaction = rtself.get_data_mut(&*TRANSACTION_WRAPPER);
97
- let sv = transaction.state_vector();
98
- let payload = sv.encode_v1();
99
-
100
- convert_vecu8_to_array(payload)
101
- }
102
- );