y-rb 0.4.1-x64-mingw-ucrt → 0.4.2-x64-mingw-ucrt

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 470f58b417b5fa272fa8ae7c343c5bdd5f7caa7c33e16b05c219a502076506d2
4
- data.tar.gz: 04777b42761fe611a821c10aefb8ee9e9f9c3c61790a6cc0ffd74b02317d45df
3
+ metadata.gz: e178d45d9629ee312944eeb44030bbe4e9645c773f318ddd0f127dff8ed70ddf
4
+ data.tar.gz: 1192bb4f37f46ec34d276c0746b32eaacaff80e6a97ee068eb9919f5cd710c1b
5
5
  SHA512:
6
- metadata.gz: 3b7046f178d39061a4e72035fdd09a9117daaea2d80ba2d6939755e826e08a88b1f50d6687cea48cf8468be8a27e1cf3f4f3bbc29b73befd4d2a8cc03cf1509f
7
- data.tar.gz: 4b4324243babc47d2c23e9de0ffb31210476041a736609f294c1b48f6499c87d267923d024dcdd362372a22a80220eb67bf5dc5f7cf6d8f3ade08727cbb3ce99
6
+ metadata.gz: a1089371031254a89cd2b06f17375cd19cd3ce0e9f18d3e6bfac670785eae337faa6e593e3aaac5806d4a0231f967b521a93685b7fb560d3470b4ba10d64418d
7
+ data.tar.gz: 3bdffebf550559539685d8e243b5f810c8b4c9a6b80aeda939b09cdbf2bdc17a6e500ac142681ccb0d83cebabd6dfada7ea71fe1ea941ebd6dccfedfbf848b31
data/ext/yrb/Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "yrb"
3
- version = "0.4.1"
3
+ version = "0.4.2"
4
4
  authors = ["Hannes Moser <box@hannesmoser.at>", "Hannes Moser <hmoser@gitlab.com>"]
5
5
  edition = "2021"
6
6
  homepage = "https://github.com/y-crdt/yrb"
data/ext/yrb/src/lib.rs CHANGED
@@ -116,6 +116,9 @@ fn init() -> Result<(), Error> {
116
116
  ydoc.define_private_method("ydoc_transact", method!(YDoc::ydoc_transact, 0))
117
117
  .expect("cannot define private method: ydoc_transact");
118
118
 
119
+ ydoc.define_private_method("ydoc_observe_update", method!(YDoc::ydoc_observe_update, 1))
120
+ .expect("cannot define private method: ydoc_observe_update");
121
+
119
122
  let ymap = module
120
123
  .define_class("Map", Default::default())
121
124
  .expect("cannot define class Y::Map");
data/ext/yrb/src/ydoc.rs CHANGED
@@ -5,11 +5,13 @@ use crate::yxml_element::YXmlElement;
5
5
  use crate::yxml_fragment::YXmlFragment;
6
6
  use crate::yxml_text::YXmlText;
7
7
  use crate::YTransaction;
8
- use magnus::{exception, Error, Integer, Value};
8
+ use magnus::block::Proc;
9
+ use magnus::exception::runtime_error;
10
+ use magnus::{exception, Error, Integer, RArray, Value};
9
11
  use std::borrow::Borrow;
10
12
  use std::cell::RefCell;
11
13
  use yrs::updates::decoder::Decode;
12
- use yrs::{Doc, OffsetKind, Options, ReadTxn, StateVector, Transact};
14
+ use yrs::{Doc, OffsetKind, Options, ReadTxn, StateVector, SubscriptionId, Transact};
13
15
 
14
16
  #[magnus::wrap(class = "Y::Doc")]
15
17
  pub(crate) struct YDoc(pub(crate) RefCell<Doc>);
@@ -75,4 +77,20 @@ impl YDoc {
75
77
  let transaction = doc.transact_mut();
76
78
  YTransaction::from(transaction)
77
79
  }
80
+
81
+ pub(crate) fn ydoc_observe_update(&self, block: Proc) -> Result<SubscriptionId, Error> {
82
+ self.0
83
+ .borrow()
84
+ .observe_update_v1(move |_tx, update_event| {
85
+ let update = update_event.update.to_vec();
86
+ let update = RArray::from_vec(update);
87
+
88
+ let args: (RArray,) = (update,);
89
+ block
90
+ .call::<(RArray,), Value>(args)
91
+ .expect("cannot call update block");
92
+ })
93
+ .map(|v| v.into())
94
+ .map_err(|err| Error::new(runtime_error(), err.to_string()))
95
+ }
78
96
  }
data/lib/3.1/yrb.so CHANGED
Binary file
data/lib/y/doc.rb CHANGED
@@ -19,6 +19,22 @@ module Y
19
19
  ZERO_STATE = [0].freeze
20
20
  private_constant :ZERO_STATE
21
21
 
22
+ # Attach a listener to document changes. If one of the data structures is
23
+ # changes, the block is called with the update as its only argument.
24
+ #
25
+ # @yield [update] Called when document is updated
26
+ # @yieldparam [Array<Integer>] update The encoded document updates
27
+
28
+ # Example: Attach listener to document changes
29
+ # doc = described_class.new
30
+ # doc.attach { |update| pp update }
31
+ #
32
+ # text = doc.get_text("my text")
33
+ # text << "1"
34
+ def attach(&block)
35
+ ydoc_observe_update(block)
36
+ end
37
+
22
38
  # Commit current transaction
23
39
  #
24
40
  # This is a convenience method that invokes {Y::Transaction#commit} on the
@@ -222,5 +238,11 @@ module Y
222
238
  #
223
239
  # @return [Y::XMLText]
224
240
  # @!visibility private
241
+
242
+ # @!method ydoc_observe_update(block)
243
+ # Creates a subscription to observe changes to the document
244
+ # @param [Proc] block
245
+ # @return [Integer]
246
+ # @!visibility private
225
247
  end
226
248
  end
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.4.1"
4
+ VERSION = "0.4.2"
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.4.1
4
+ version: 0.4.2
5
5
  platform: x64-mingw-ucrt
6
6
  authors:
7
7
  - Hannes Moser
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-13 00:00:00.000000000 Z
11
+ date: 2023-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake