y-rb 0.4.1-x86_64-darwin → 0.4.2-x86_64-darwin

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: 4e58287c9f9aba21b180ecc7b1d1059a2e89e80d4d3b7b4111a1649c23127bd2
4
- data.tar.gz: d63b4313f205d0459cda44cced5a22be2aa4f36985ab51bdf8ccb6199a91dc8b
3
+ metadata.gz: 91ffbc9065f98d80686d4dee355709a3347c3adc3368e2f6f12fd9ee5b695fa0
4
+ data.tar.gz: 896f475bb9c26e5fb70a37f39155896436ed34478aea720bfb3b3ab7150b8891
5
5
  SHA512:
6
- metadata.gz: 43063223f16e6ee0fae39c0faea87b767168589cb69e9eb1312e86730384772d7e19b46becb444bb12440f06eb067e6999cd26f99fa319622a0209ca83451f33
7
- data.tar.gz: f2069bccfbdb7686caaf3a8c77f71f8c451ed2952408b016b2e78d517b270999f987411b946227ae1f5d49aca696f38b58f3f7b11020952f93c656cf8d7e89e6
6
+ metadata.gz: 06d0709dbbaed23ca3346d49cf4e158faa8d78c8d7fe652fc3afda9bcd9d015ec88728c6190157b1463ce2515a2382d51a627ccc599f89a548a863d62eccc188
7
+ data.tar.gz: a5c742a86eb5a0bc8c7c43d13cfc923df0eb83adc0b941cf20923f0a564235f59ab07110f1e5ee1b23a87b6631220305d703bd9e6d36e99abfe3f4618f745656
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/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/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: x86_64-darwin
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