y-rb 0.4.0-arm64-darwin → 0.4.2-arm64-darwin

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: 6e480dc9c968e97535397f50227065764b687a9bccdb2492cd5a10483bbc6744
4
- data.tar.gz: 917f7d3da29665102cba8bf439fecf331cd77e52f29d3b702fa2e1a01f069374
3
+ metadata.gz: 471e24956dba5d6e52d09a4b8357a3d04f56bbc7d72736e21edb2f50bbd6f2dd
4
+ data.tar.gz: 7167ddc78214e95fa6eaefc7a9a6d45af1afeddcb88e1d1d66a0d19b5c569952
5
5
  SHA512:
6
- metadata.gz: c3984e3e584bea49a2ed62a6fee7f9937b8337291aa8d195f1772b9ee8fa266279c4e73bed3e2b884863c85fd68dd7f09b9d1dd3e35d36203c09bacf6b54069a
7
- data.tar.gz: f9954f8ac4ace34b29a5afec45230ee1b99d60017d65f8c933185d2d2193ed842b3d7b24937b3666de50713cf4b1b0bf66017d9bc2ccf68b91bf1b5164c456ac
6
+ metadata.gz: f521487258f7c89f6f9064c89d52e37c711ad8cace76efab7f4ef0cb95e2834ed9fa84e38af73c20075757d518269937de93677815955bca104cd4c36619b87f
7
+ data.tar.gz: 16b4921a1f563dd1310d11cb4a0f9a4f5768ec848e421a9ef586ccd630398d8faa1f327c644b8998774a440f74178cab1f3bd5baae7dabb2d719cd5c4b600bbf
data/ext/yrb/Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "yrb"
3
- version = "0.4.0"
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"
@@ -8,12 +8,12 @@ repository = "https://github.com/y-crdt/yrb"
8
8
 
9
9
  [dependencies]
10
10
  lib0 = "0.14.1" # must match yrs version
11
- magnus = { version = "0.4.3" }
12
- thiserror = "1.0.37"
11
+ magnus = { git = "https://github.com/matsadler/magnus", rev = "a51ccaf01d82e9e1a981e4f3fbaca35100513b08" }
12
+ thiserror = "1.0.38"
13
13
  yrs = "0.14.1"
14
14
 
15
15
  [dev-dependencies]
16
- magnus = { version = "0.4.3", features = ["embed"] }
16
+ magnus = { git = "https://github.com/matsadler/magnus", rev = "a51ccaf01d82e9e1a981e4f3fbaca35100513b08", features = ["embed"] }
17
17
 
18
18
  [lib]
19
19
  name = "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/utils.rs CHANGED
@@ -1,7 +1,7 @@
1
1
  use crate::yvalue::YValue;
2
2
  use lib0::any::Any;
3
3
  use magnus::r_hash::ForEach::Continue;
4
- use magnus::{Error, RHash, RString, Symbol, Value};
4
+ use magnus::{exception, Error, RHash, RString, Symbol, Value};
5
5
  use std::rc::Rc;
6
6
  use yrs::types::Attrs;
7
7
 
@@ -27,7 +27,10 @@ pub(crate) fn map_rhash_to_attrs(hash: RHash) -> Result<Attrs, Error> {
27
27
  });
28
28
 
29
29
  if result.is_err() {
30
- return Err(Error::runtime_error("could not map hash to attrs"));
30
+ return Err(Error::new(
31
+ exception::runtime_error(),
32
+ "could not map hash to attrs",
33
+ ));
31
34
  }
32
35
 
33
36
  Ok(a)
@@ -1,6 +1,5 @@
1
1
  use crate::awareness::{Awareness, AwarenessUpdate, Event};
2
- use magnus::block::Proc;
3
- use magnus::{Error, Value};
2
+ use magnus::{block::Proc, exception, Error, Value};
4
3
  use std::borrow::Borrow;
5
4
  use std::cell::RefCell;
6
5
  use std::collections::HashMap;
@@ -25,12 +24,11 @@ impl YAwareness {
25
24
 
26
25
  pub(crate) fn yawareness_apply_update(&self, update: Vec<u8>) -> Result<(), Error> {
27
26
  AwarenessUpdate::decode_v1(update.as_slice())
28
- .map_err(|_error| Error::runtime_error("cannot decode update"))
27
+ .map_err(|_error| Error::new(exception::runtime_error(), "cannot decode update"))
29
28
  .and_then(|value| {
30
- self.0
31
- .borrow_mut()
32
- .apply_update(value)
33
- .map_err(|_error| Error::runtime_error("cannot apply awareness update"))
29
+ self.0.borrow_mut().apply_update(value).map_err(|_error| {
30
+ Error::new(exception::runtime_error(), "cannot apply awareness update")
31
+ })
34
32
  })
35
33
  }
36
34
 
@@ -83,7 +81,12 @@ impl YAwareness {
83
81
  .borrow_mut()
84
82
  .update()
85
83
  .map(|update| update.encode_v1())
86
- .map_err(|_error| Error::runtime_error("cannot create update for current state"))
84
+ .map_err(|_error| {
85
+ Error::new(
86
+ exception::runtime_error(),
87
+ "cannot create update for current state",
88
+ )
89
+ })
87
90
  }
88
91
 
89
92
  pub(crate) fn yawareness_update_with_clients(
@@ -95,7 +98,10 @@ impl YAwareness {
95
98
  .update_with_clients(clients)
96
99
  .map(|update| update.encode_v1())
97
100
  .map_err(|_error| {
98
- Error::runtime_error("cannot create update for current state and given clients")
101
+ Error::new(
102
+ exception::runtime_error(),
103
+ "cannot create update for current state and given clients",
104
+ )
99
105
  })
100
106
  }
101
107
  }
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::{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>);
@@ -39,7 +41,7 @@ impl YDoc {
39
41
 
40
42
  StateVector::decode_v1(state_vector.borrow())
41
43
  .map(|sv| tx.encode_diff_v1(&sv))
42
- .map_err(|_e| Error::runtime_error("cannot encode diff"))
44
+ .map_err(|_e| Error::new(exception::runtime_error(), "cannot encode diff"))
43
45
  }
44
46
 
45
47
  pub(crate) fn ydoc_get_or_insert_array(&self, name: String) -> YArray {
@@ -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/ext/yrb/src/ymap.rs CHANGED
@@ -3,7 +3,7 @@ use crate::yvalue::YValue;
3
3
  use crate::YTransaction;
4
4
  use lib0::any::Any;
5
5
  use magnus::block::Proc;
6
- use magnus::{Error, RArray, RHash, Symbol, Value};
6
+ use magnus::{exception, Error, RArray, RHash, Symbol, Value};
7
7
  use std::cell::RefCell;
8
8
  use yrs::types::{EntryChange, Value as YrsValue};
9
9
  use yrs::{Map, MapRef, Observable};
@@ -60,7 +60,8 @@ impl YMap {
60
60
  let tx = tx.as_mut().unwrap();
61
61
 
62
62
  match indifferent_hash_key(key) {
63
- None => Err(Error::runtime_error(
63
+ None => Err(Error::new(
64
+ exception::runtime_error(),
64
65
  "invalid key type, make sure it is either of type Symbol or String",
65
66
  )),
66
67
  Some(k) => {
@@ -4,7 +4,7 @@ use crate::ytext::YText;
4
4
  use crate::yxml_element::YXmlElement;
5
5
  use crate::yxml_fragment::YXmlFragment;
6
6
  use crate::yxml_text::YXmlText;
7
- use magnus::Error;
7
+ use magnus::{exception, Error};
8
8
  use std::cell::{RefCell, RefMut};
9
9
  use yrs::updates::decoder::Decode;
10
10
  use yrs::updates::encoder::Encode;
@@ -29,7 +29,12 @@ impl<'doc> From<TransactionMut<'doc>> for YTransaction {
29
29
  impl YTransaction {
30
30
  pub(crate) fn ytransaction_apply_update(&self, update: Vec<u8>) -> Result<(), Error> {
31
31
  Update::decode_v1(update.as_slice())
32
- .map_err(|error| Error::runtime_error(format!("cannot decode update: {:?}", error)))
32
+ .map_err(|error| {
33
+ Error::new(
34
+ exception::runtime_error(),
35
+ format!("cannot decode update: {:?}", error),
36
+ )
37
+ })
33
38
  .map(|u| self.transaction().as_mut().unwrap().apply_update(u))
34
39
  }
35
40
 
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.0"
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.0
4
+ version: 0.4.2
5
5
  platform: arm64-darwin
6
6
  authors:
7
7
  - Hannes Moser
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-14 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
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.9.50
33
+ version: 0.9.53
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.9.50
40
+ version: 0.9.53
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake-compiler
43
43
  requirement: !ruby/object:Gem::Requirement