y-rb 0.5.5-x64-mingw32 → 0.5.6-x64-mingw32
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 +1 -1
- data/ext/yrb/src/lib.rs +17 -1
- data/ext/yrb/src/yattrs.rs +9 -18
- data/ext/yrb/src/ydiff.rs +19 -0
- data/ext/yrb/src/ytext.rs +41 -4
- data/lib/3.0/yrb.so +0 -0
- data/lib/y/array.rb +2 -2
- data/lib/y/diff.rb +38 -0
- data/lib/y/text.rb +15 -0
- data/lib/y/version.rb +1 -1
- data/lib/y-rb.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01d135541c5cc031e66ddf530225b301b5b7804dc39ddd053b9bcfacb2d4a757
|
4
|
+
data.tar.gz: ad480abf9f5422744fdd822e289ebdcbba96c038b8cf042b1ea9a41b134efe57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d3d7eed7d60d0a6e47ddf65ec53c2d7edf99b96971234d10ea08579d57db716746c7fbf3ed3cf07828f6746107cbd9e40a5c192edd8784cc2f42fa508bbfc9d
|
7
|
+
data.tar.gz: 7f65e02b289146f97941d55b53e1185476218392ee17910a49b24c43c11f92ef8a4105929418c7c70a4e6ae47dcda5671be3fd344ea580e121e083021fd010bb
|
data/ext/yrb/Cargo.toml
CHANGED
data/ext/yrb/src/lib.rs
CHANGED
@@ -2,6 +2,7 @@ extern crate core;
|
|
2
2
|
|
3
3
|
use crate::yarray::YArray;
|
4
4
|
use crate::yawareness::{YAwareness, YAwarenessEvent};
|
5
|
+
use crate::ydiff::YDiff;
|
5
6
|
use crate::ydoc::YDoc;
|
6
7
|
use crate::ymap::YMap;
|
7
8
|
use crate::ytext::YText;
|
@@ -9,6 +10,7 @@ use crate::ytransaction::YTransaction;
|
|
9
10
|
use crate::yxml_element::YXmlElement;
|
10
11
|
use crate::yxml_fragment::YXmlFragment;
|
11
12
|
use crate::yxml_text::YXmlText;
|
13
|
+
|
12
14
|
use magnus::{class, define_module, function, method, Error, Module, Object};
|
13
15
|
|
14
16
|
mod utils;
|
@@ -16,6 +18,7 @@ mod yany;
|
|
16
18
|
mod yarray;
|
17
19
|
mod yattrs;
|
18
20
|
mod yawareness;
|
21
|
+
mod ydiff;
|
19
22
|
mod ydoc;
|
20
23
|
mod ymap;
|
21
24
|
mod ytext;
|
@@ -224,6 +227,9 @@ fn init() -> Result<(), Error> {
|
|
224
227
|
.define_class("Text", class::object())
|
225
228
|
.expect("cannot define class Y::Text");
|
226
229
|
|
230
|
+
ytext
|
231
|
+
.define_private_method("ytext_diff", method!(YText::ytext_diff, 1))
|
232
|
+
.expect("cannot define private method: ytext_diff");
|
227
233
|
ytext
|
228
234
|
.define_private_method("ytext_format", method!(YText::ytext_format, 4))
|
229
235
|
.expect("cannot define private method: ytext_format");
|
@@ -618,7 +624,7 @@ fn init() -> Result<(), Error> {
|
|
618
624
|
|
619
625
|
let yawareness_event = module
|
620
626
|
.define_class("AwarenessEvent", class::object())
|
621
|
-
.expect("cannot define class Y
|
627
|
+
.expect("cannot define class Y::AwarenessEvent");
|
622
628
|
yawareness_event
|
623
629
|
.define_method("added", method!(YAwarenessEvent::added, 0))
|
624
630
|
.expect("cannot define private method: added");
|
@@ -629,5 +635,15 @@ fn init() -> Result<(), Error> {
|
|
629
635
|
.define_method("removed", method!(YAwarenessEvent::removed, 0))
|
630
636
|
.expect("cannot define private method: removed");
|
631
637
|
|
638
|
+
let ydiff = module
|
639
|
+
.define_class("Diff", class::object())
|
640
|
+
.expect("cannot define class Y::Diff");
|
641
|
+
ydiff
|
642
|
+
.define_private_method("ydiff_insert", method!(YDiff::ydiff_insert, 0))
|
643
|
+
.expect("cannot define private method: insert");
|
644
|
+
ydiff
|
645
|
+
.define_private_method("ydiff_attrs", method!(YDiff::ydiff_attrs, 0))
|
646
|
+
.expect("cannot define private method: attrs");
|
647
|
+
|
632
648
|
Ok(())
|
633
649
|
}
|
data/ext/yrb/src/yattrs.rs
CHANGED
@@ -1,16 +1,21 @@
|
|
1
1
|
use crate::yvalue::YValue;
|
2
2
|
use magnus::r_hash::ForEach::Continue;
|
3
3
|
use magnus::{RHash, Value};
|
4
|
-
use std::
|
4
|
+
use std::cell::RefCell;
|
5
5
|
use std::sync::Arc;
|
6
6
|
use yrs::types::Attrs;
|
7
7
|
use yrs::Any;
|
8
8
|
|
9
|
-
|
9
|
+
#[magnus::wrap(class = "Y::Attrs")]
|
10
|
+
#[derive(Clone)]
|
11
|
+
pub(crate) struct YAttrs(pub(crate) RefCell<Attrs>);
|
12
|
+
|
13
|
+
/// SAFETY: This is safe because we only access this data when the GVL is held.
|
14
|
+
unsafe impl Send for YAttrs {}
|
10
15
|
|
11
16
|
impl From<Attrs> for YAttrs {
|
12
17
|
fn from(value: Attrs) -> Self {
|
13
|
-
YAttrs(value)
|
18
|
+
YAttrs(RefCell::from(value))
|
14
19
|
}
|
15
20
|
}
|
16
21
|
|
@@ -29,20 +34,6 @@ impl From<RHash> for YAttrs {
|
|
29
34
|
})
|
30
35
|
.expect("cannot iterate attributes hash");
|
31
36
|
|
32
|
-
YAttrs(attrs)
|
33
|
-
}
|
34
|
-
}
|
35
|
-
|
36
|
-
impl Deref for YAttrs {
|
37
|
-
type Target = Attrs;
|
38
|
-
|
39
|
-
fn deref(&self) -> &Self::Target {
|
40
|
-
&self.0
|
41
|
-
}
|
42
|
-
}
|
43
|
-
|
44
|
-
impl DerefMut for YAttrs {
|
45
|
-
fn deref_mut(&mut self) -> &mut Self::Target {
|
46
|
-
&mut self.0
|
37
|
+
YAttrs(RefCell::from(attrs))
|
47
38
|
}
|
48
39
|
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
use magnus::{IntoValue, RHash, Value};
|
2
|
+
|
3
|
+
unsafe impl Send for YDiff {}
|
4
|
+
|
5
|
+
#[magnus::wrap(class = "Y::Diff")]
|
6
|
+
pub(crate) struct YDiff {
|
7
|
+
pub(crate) ydiff_insert: Value,
|
8
|
+
pub(crate) ydiff_attrs: Option<RHash>,
|
9
|
+
}
|
10
|
+
|
11
|
+
impl YDiff {
|
12
|
+
pub(crate) fn ydiff_insert(&self) -> Value {
|
13
|
+
self.ydiff_insert
|
14
|
+
}
|
15
|
+
|
16
|
+
pub(crate) fn ydiff_attrs(&self) -> Option<Value> {
|
17
|
+
self.ydiff_attrs.as_ref().map(|value| value.into_value())
|
18
|
+
}
|
19
|
+
}
|
data/ext/yrb/src/ytext.rs
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
use crate::yattrs::YAttrs;
|
2
|
+
use crate::ydiff::YDiff;
|
2
3
|
use crate::yvalue::YValue;
|
3
4
|
use crate::YTransaction;
|
4
5
|
use magnus::block::Proc;
|
5
6
|
use magnus::value::Qnil;
|
6
|
-
use magnus::
|
7
|
+
use magnus::RArray;
|
8
|
+
pub(crate) use magnus::{Error, IntoValue, RHash, Symbol, Value};
|
7
9
|
use std::cell::RefCell;
|
10
|
+
use yrs::types::text::YChange;
|
8
11
|
use yrs::types::Delta;
|
9
12
|
use yrs::{Any, GetString, Observable, Text, TextRef};
|
10
13
|
|
@@ -15,6 +18,38 @@ pub(crate) struct YText(pub(crate) RefCell<TextRef>);
|
|
15
18
|
unsafe impl Send for YText {}
|
16
19
|
|
17
20
|
impl YText {
|
21
|
+
pub(crate) fn ytext_diff(&self, transaction: &YTransaction) -> RArray {
|
22
|
+
let tx = transaction.transaction();
|
23
|
+
let tx = tx.as_ref().unwrap();
|
24
|
+
|
25
|
+
RArray::from_iter(
|
26
|
+
self.0
|
27
|
+
.borrow()
|
28
|
+
.diff(tx, YChange::identity)
|
29
|
+
.iter()
|
30
|
+
.map(move |diff| {
|
31
|
+
let yvalue = YValue::from(diff.insert.clone());
|
32
|
+
let insert = yvalue.0.into_inner();
|
33
|
+
let attributes = diff.attributes.as_ref().map_or_else(
|
34
|
+
|| None,
|
35
|
+
|boxed_attrs| {
|
36
|
+
let attributes = RHash::new();
|
37
|
+
for (key, value) in boxed_attrs.iter() {
|
38
|
+
let key = key.to_string();
|
39
|
+
let value = YValue::from(value.clone()).0.into_inner();
|
40
|
+
attributes.aset(key, value).expect("cannot add value");
|
41
|
+
}
|
42
|
+
Some(attributes)
|
43
|
+
},
|
44
|
+
);
|
45
|
+
YDiff {
|
46
|
+
ydiff_insert: insert,
|
47
|
+
ydiff_attrs: attributes,
|
48
|
+
}
|
49
|
+
.into_value()
|
50
|
+
}),
|
51
|
+
)
|
52
|
+
}
|
18
53
|
pub(crate) fn ytext_format(
|
19
54
|
&self,
|
20
55
|
transaction: &YTransaction,
|
@@ -27,7 +62,9 @@ impl YText {
|
|
27
62
|
|
28
63
|
let a = YAttrs::from(attrs);
|
29
64
|
|
30
|
-
self.0
|
65
|
+
self.0
|
66
|
+
.borrow_mut()
|
67
|
+
.format(tx, index, length, a.0.into_inner())
|
31
68
|
}
|
32
69
|
pub(crate) fn ytext_insert(&self, transaction: &YTransaction, index: u32, chunk: String) {
|
33
70
|
let mut tx = transaction.transaction();
|
@@ -66,7 +103,7 @@ impl YText {
|
|
66
103
|
|
67
104
|
self.0
|
68
105
|
.borrow_mut()
|
69
|
-
.insert_embed_with_attributes(tx, index, avalue, a.0);
|
106
|
+
.insert_embed_with_attributes(tx, index, avalue, a.0.into_inner());
|
70
107
|
}
|
71
108
|
pub(crate) fn ytext_insert_with_attributes(
|
72
109
|
&self,
|
@@ -82,7 +119,7 @@ impl YText {
|
|
82
119
|
|
83
120
|
self.0
|
84
121
|
.borrow_mut()
|
85
|
-
.insert_with_attributes(tx, index, chunk.as_str(), a.0)
|
122
|
+
.insert_with_attributes(tx, index, chunk.as_str(), a.0.into_inner())
|
86
123
|
}
|
87
124
|
pub(crate) fn ytext_length(&self, transaction: &YTransaction) -> u32 {
|
88
125
|
let tx = transaction.transaction();
|
data/lib/3.0/yrb.so
CHANGED
Binary file
|
data/lib/y/array.rb
CHANGED
@@ -115,8 +115,8 @@ module Y
|
|
115
115
|
end
|
116
116
|
|
117
117
|
# @return [void]
|
118
|
-
def each(
|
119
|
-
document.current_transaction { |tx| yarray_each(tx,
|
118
|
+
def each(...)
|
119
|
+
document.current_transaction { |tx| yarray_each(tx, ...) }
|
120
120
|
end
|
121
121
|
|
122
122
|
# Check if the array is empty
|
data/lib/y/diff.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Y
|
4
|
+
# A representation of an uniformly-formatted chunk of rich context stored by
|
5
|
+
# Text or XmlText. It contains a value (which could be a string, embedded
|
6
|
+
# object or another shared type) with optional formatting attributes wrapping
|
7
|
+
# around this chunk.
|
8
|
+
class Diff
|
9
|
+
# @return [Object]
|
10
|
+
def insert
|
11
|
+
ydiff_insert
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [Hash]
|
15
|
+
def attrs
|
16
|
+
ydiff_attrs
|
17
|
+
end
|
18
|
+
|
19
|
+
# Convert the diff to a Hash representation
|
20
|
+
#
|
21
|
+
# @return [Hash]
|
22
|
+
def to_h
|
23
|
+
{
|
24
|
+
insert: ydiff_insert,
|
25
|
+
attrs: ydiff_attrs
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
# @!method ydiff_insert()
|
30
|
+
# Returns string representation of text
|
31
|
+
#
|
32
|
+
# @return [Object]
|
33
|
+
|
34
|
+
# @!method ydiff_attrs()
|
35
|
+
#
|
36
|
+
# @return [Hash]
|
37
|
+
end
|
38
|
+
end
|
data/lib/y/text.rb
CHANGED
@@ -80,6 +80,15 @@ module Y
|
|
80
80
|
ytext_unobserve(subscription_id)
|
81
81
|
end
|
82
82
|
|
83
|
+
# Diff
|
84
|
+
#
|
85
|
+
# @return[Array<YDiff>]
|
86
|
+
def diff
|
87
|
+
document.current_transaction do |tx|
|
88
|
+
ytext_diff(tx)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
83
92
|
# Checks if text is empty
|
84
93
|
#
|
85
94
|
# @example Check if text is empty
|
@@ -284,6 +293,12 @@ module Y
|
|
284
293
|
value.is_a?(Hash)
|
285
294
|
end
|
286
295
|
|
296
|
+
# @!method ytext_diff(tx)
|
297
|
+
# Returns text changes as list of diffs
|
298
|
+
#
|
299
|
+
# @param transaction [Y::Transaction]
|
300
|
+
# @return [Array<YDiff>]
|
301
|
+
|
287
302
|
# @!method ytext_insert(tx, index, chunk)
|
288
303
|
# Insert into text at position
|
289
304
|
#
|
data/lib/y/version.rb
CHANGED
data/lib/y-rb.rb
CHANGED
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.5.
|
4
|
+
version: 0.5.6
|
5
5
|
platform: x64-mingw32
|
6
6
|
authors:
|
7
7
|
- Hannes Moser
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- ext/yrb/src/yarray.rs
|
85
85
|
- ext/yrb/src/yattrs.rs
|
86
86
|
- ext/yrb/src/yawareness.rs
|
87
|
+
- ext/yrb/src/ydiff.rs
|
87
88
|
- ext/yrb/src/ydoc.rs
|
88
89
|
- ext/yrb/src/ymap.rs
|
89
90
|
- ext/yrb/src/ytext.rs
|
@@ -97,6 +98,7 @@ files:
|
|
97
98
|
- lib/y.rb
|
98
99
|
- lib/y/array.rb
|
99
100
|
- lib/y/awareness.rb
|
101
|
+
- lib/y/diff.rb
|
100
102
|
- lib/y/doc.rb
|
101
103
|
- lib/y/map.rb
|
102
104
|
- lib/y/text.rb
|