y-rb 0.4.1-x86_64-linux-musl → 0.4.2-x86_64-linux-musl

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9553c8a866d70034f4fa8f9f7d2684f0a853a6c84f664d8ad89234e8d51d312c
4
- data.tar.gz: 11e5f55c3090d3df6933847af7850843b6391037ea7543f71c950a8075f8afca
3
+ metadata.gz: 747457cfb21e66da374a352cbd29d99a4d7c5741ebc971eeff82a197ada4b8ce
4
+ data.tar.gz: 542ff3efa50da67d1e9a912f5a7c1596895967b7aff83936fc7fdd39f7dbfa08
5
5
  SHA512:
6
- metadata.gz: 3fe252160aa6ba50c8e1ce7f1c2327824b4f13bf6b1fb90698ee6f629c5ab9d82a4355bd3ed87bea0aca452e8db824043957d28c862aa64af05f1fcfcb1e8727
7
- data.tar.gz: 8a42b05975a277d0a2e97523934baac2236aab24df48f8b807fac9dd9ba8c26a3955b86135f6f2b61119fb0a8c059b41748509aa37a587c7d6e9f4695933bbb3
6
+ metadata.gz: c08cd2c80ac6bd44e330f0edc8ec1ee99c678ec1ec3c5b7200cdeba26d7c06f8697728571417b764c236fdff06f60aff9b35fa730ca94c8fdd3c0df043093780
7
+ data.tar.gz: d56c3ce5b6b2d18120849a039b4c715a4b2a5b26edaf04499783b3951a804295ea8dfe2cc57a1f62e2eac7bb17bb7cb2c7a54fad2d717c75f7e0c797101edfdf
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.so CHANGED
Binary file
data/lib/3.0/yrb.so CHANGED
Binary file
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: x86_64-linux-musl
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