com.fofx.observething 1.1.0 → 1.1.1-dev.161
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.
- package/Runtime/{Operators/IInitializationOperationsProvider.cs → IInitializationOperationsProvider.cs} +1 -1
- package/Runtime/{IObservable.cs → Observables/IObservable.cs} +13 -9
- package/Runtime/{Implementations/ObservableBase.cs → Observables/Observable.cs} +6 -19
- package/Runtime/{Implementations → Observables}/ObservableCollection.cs +6 -15
- package/Runtime/{Implementations → Observables}/ObservableDictionary.cs +7 -18
- package/Runtime/{Implementations/Observable.cs → Observables/ObservableEventStream.cs} +11 -3
- package/Runtime/{Implementations → Observables}/ObservableList.cs +3 -13
- package/Runtime/{Implementations → Observables}/ObservableSet.cs +6 -15
- package/Runtime/{Implementations → Observables}/ObservableValue.cs +4 -11
- package/Runtime/Observables.meta +1 -1
- package/Runtime/ObservationDefaults.cs +10 -0
- package/Runtime/ObservationDefaults.cs.meta +2 -0
- package/Runtime/Observers.cs +51 -64
- package/Runtime/Operators/BatchOperator.cs +52 -51
- package/Runtime/Operators/BatchOperator.cs.meta +1 -1
- package/Runtime/{Observables/CastObservable.cs → Operators/CastOperator.cs} +10 -10
- package/Runtime/{Observables/CombineObservable.cs → Operators/CombineOperator.cs} +10 -10
- package/Runtime/{Observables/CombineValueObservable.cs → Operators/CombineValueOperator.cs} +12 -12
- package/Runtime/{Observables/ConcatObservable.cs → Operators/ConcatOperator.cs} +2 -2
- package/Runtime/{Observables/ContainsObservable.cs → Operators/ContainsOperator.cs} +2 -2
- package/Runtime/Operators/ContainsOperator.cs.meta +2 -0
- package/Runtime/{Observables/CountObservable.cs → Operators/CountOperator.cs} +2 -2
- package/Runtime/{Observables/DistinctObservable.cs → Operators/DistinctOperator.cs} +2 -2
- package/Runtime/Operators/{CollectionOperator.cs → Factories/CollectionOperatorFactory.cs} +2 -9
- package/Runtime/Operators/{DictionaryOperator.cs → Factories/DictionaryOperatorFactory.cs} +2 -9
- package/Runtime/Operators/{ObservableOperator.cs → Factories/EventStreamOperatorFactory.cs} +17 -10
- package/Runtime/Operators/{ListOperator.cs → Factories/ListOperatorFactory.cs} +2 -9
- package/Runtime/Operators/{Operator.cs → Factories/OperatorFactory.cs} +8 -8
- package/Runtime/Operators/{SetOperator.cs → Factories/SetOperatorFactory.cs} +2 -9
- package/Runtime/Operators/{ValueOperator.cs → Factories/ValueOperator.cs} +2 -9
- package/Runtime/{Implementations.meta → Operators/Factories.meta} +1 -1
- package/Runtime/{Observables/FirstObservable.cs → Operators/FirstOperator.cs} +2 -2
- package/Runtime/{Observables/IndexOfObservable.cs → Operators/IndexOfOperator.cs} +2 -2
- package/Runtime/Operators/OperationStreamOperator.cs +212 -0
- package/Runtime/{Observables.cs → Operators/Operators.cs} +105 -73
- package/Runtime/{Observables/OrderByObservable.cs → Operators/OrderByOperator.cs} +2 -2
- package/Runtime/{Observables/SelectCollectionObservable.cs → Operators/SelectCollectionOperator.cs} +2 -2
- package/Runtime/{Observables/SelectListObservable.cs → Operators/SelectListOperator.cs} +2 -2
- package/Runtime/{Observables/SelectManyObservable.cs → Operators/SelectManyOperator.cs} +2 -2
- package/Runtime/{Observables/SkipWhileObservable.cs → Operators/SkipWhileOperator.cs} +2 -2
- package/Runtime/{Observables/ThenObservable.cs → Operators/ThenOperator.cs} +2 -2
- package/Runtime/{Observables/ToDictionaryObservable.cs → Operators/ToDictionaryOperator.cs} +3 -3
- package/Runtime/{Observables/TrackObservable.cs → Operators/TrackOperator.cs} +2 -2
- package/Runtime/{Observables/UnwrapCollectionObservable.cs → Operators/UnwrapCollectionOperator.cs} +2 -2
- package/Runtime/{Observables/UnwrapListObservable.cs → Operators/UnwrapListOperator.cs} +2 -2
- package/Runtime/{Observables/UnwrapValueObservable.cs → Operators/UnwrapValueOperator.cs} +2 -2
- package/Runtime/{Observables/WhereObservable.cs → Operators/WhereOperator.cs} +2 -2
- package/Runtime/{Observables/WithPreviousObservable.cs → Operators/WithPreviousOperator.cs} +2 -2
- package/Tests/CollectionObservableTests.cs +1 -1
- package/Tests/DictionaryObservableTests.cs +1 -1
- package/Tests/ListObservableTests.cs +1 -1
- package/Tests/ObservationContextTests.cs +109 -83
- package/Tests/ValueObservableTests.cs +1 -1
- package/package.json +5 -4
- package/Runtime/Observables/BatchObservable.cs +0 -72
- package/Runtime/Observables/BatchObservable.cs.meta +0 -2
- package/Runtime/Observables/ContainsObservable.cs.meta +0 -2
- package/Runtime/Observables/OperationStreamObservable.cs +0 -194
- /package/Runtime/{Operators/IInitializationOperationsProvider.cs.meta → IInitializationOperationsProvider.cs.meta} +0 -0
- /package/Runtime/{IObservable.cs.meta → Observables/IObservable.cs.meta} +0 -0
- /package/Runtime/{Implementations/ObservableBase.cs.meta → Observables/Observable.cs.meta} +0 -0
- /package/Runtime/{Implementations → Observables}/ObservableCollection.cs.meta +0 -0
- /package/Runtime/{Implementations → Observables}/ObservableDictionary.cs.meta +0 -0
- /package/Runtime/{Implementations/Observable.cs.meta → Observables/ObservableEventStream.cs.meta} +0 -0
- /package/Runtime/{Implementations → Observables}/ObservableList.cs.meta +0 -0
- /package/Runtime/{Implementations → Observables}/ObservableSet.cs.meta +0 -0
- /package/Runtime/{Implementations → Observables}/ObservableValue.cs.meta +0 -0
- /package/Runtime/{Observables/CastObservable.cs.meta → Operators/CastOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/CombineObservable.cs.meta → Operators/CombineOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/CombineValueObservable.cs.meta → Operators/CombineValueOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/ConcatObservable.cs.meta → Operators/ConcatOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/CountObservable.cs.meta → Operators/CountOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/DistinctObservable.cs.meta → Operators/DistinctOperator.cs.meta} +0 -0
- /package/Runtime/Operators/{CollectionOperator.cs.meta → Factories/CollectionOperatorFactory.cs.meta} +0 -0
- /package/Runtime/Operators/{DictionaryOperator.cs.meta → Factories/DictionaryOperatorFactory.cs.meta} +0 -0
- /package/Runtime/Operators/{ObservableOperator.cs.meta → Factories/EventStreamOperatorFactory.cs.meta} +0 -0
- /package/Runtime/Operators/{ListOperator.cs.meta → Factories/ListOperatorFactory.cs.meta} +0 -0
- /package/Runtime/Operators/{Operator.cs.meta → Factories/OperatorFactory.cs.meta} +0 -0
- /package/Runtime/Operators/{SetOperator.cs.meta → Factories/SetOperatorFactory.cs.meta} +0 -0
- /package/Runtime/Operators/{ValueOperator.cs.meta → Factories/ValueOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/FirstObservable.cs.meta → Operators/FirstOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/IndexOfObservable.cs.meta → Operators/IndexOfOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/OperationStreamObservable.cs.meta → Operators/OperationStreamOperator.cs.meta} +0 -0
- /package/Runtime/{Observables.cs.meta → Operators/Operators.cs.meta} +0 -0
- /package/Runtime/{Observables/OrderByObservable.cs.meta → Operators/OrderByOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/SelectCollectionObservable.cs.meta → Operators/SelectCollectionOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/SelectListObservable.cs.meta → Operators/SelectListOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/SelectManyObservable.cs.meta → Operators/SelectManyOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/SelectValueObservable.cs → Operators/SelectValueOperator.cs} +0 -0
- /package/Runtime/{Observables/SelectValueObservable.cs.meta → Operators/SelectValueOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/SkipWhileObservable.cs.meta → Operators/SkipWhileOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/ThenObservable.cs.meta → Operators/ThenOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/ToDictionaryObservable.cs.meta → Operators/ToDictionaryOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/TrackObservable.cs.meta → Operators/TrackOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/UnwrapCollectionObservable.cs.meta → Operators/UnwrapCollectionOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/UnwrapListObservable.cs.meta → Operators/UnwrapListOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/UnwrapValueObservable.cs.meta → Operators/UnwrapValueOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/WhereObservable.cs.meta → Operators/WhereOperator.cs.meta} +0 -0
- /package/Runtime/{Observables/WithPreviousObservable.cs.meta → Operators/WithPreviousOperator.cs.meta} +0 -0
|
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|
|
3
3
|
|
|
4
4
|
namespace ObserveThing
|
|
5
5
|
{
|
|
6
|
-
public class
|
|
6
|
+
public class WhereOperator<T> : IDisposable
|
|
7
7
|
{
|
|
8
8
|
private ObservableCollection<T> _operand;
|
|
9
9
|
private Func<T, IValueObservable<bool>> _where;
|
|
@@ -18,7 +18,7 @@ namespace ObserveThing
|
|
|
18
18
|
public IDisposable subscription;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
public
|
|
21
|
+
public WhereOperator(ICollectionObservable<T> source, Func<T, IValueObservable<bool>> where, ObservableCollection<T> operand)
|
|
22
22
|
{
|
|
23
23
|
_operand = operand;
|
|
24
24
|
_where = where;
|
|
@@ -2,13 +2,13 @@ using System;
|
|
|
2
2
|
|
|
3
3
|
namespace ObserveThing
|
|
4
4
|
{
|
|
5
|
-
public class
|
|
5
|
+
public class WithPreviousOperator<T> : IDisposable
|
|
6
6
|
{
|
|
7
7
|
private ObservableValue<(T previous, T current)> _operand;
|
|
8
8
|
private T _previousValue;
|
|
9
9
|
private IDisposable _subscriptions;
|
|
10
10
|
|
|
11
|
-
public
|
|
11
|
+
public WithPreviousOperator(IValueObservable<T> source, ObservableValue<(T previous, T current)> operand)
|
|
12
12
|
{
|
|
13
13
|
_operand = operand;
|
|
14
14
|
_subscriptions = source.Subscribe(
|
|
@@ -11,7 +11,7 @@ namespace ObserveThing.Tests
|
|
|
11
11
|
[SetUp]
|
|
12
12
|
public void SetUp()
|
|
13
13
|
{
|
|
14
|
-
|
|
14
|
+
ObservationDefaults.DefaultExceptionHandler = UnityEngine.Debug.LogException;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
private T Peek<T>(IValueObservable<T> observable)
|
|
@@ -10,6 +10,26 @@ namespace ObserveThing.Tests
|
|
|
10
10
|
{
|
|
11
11
|
public class ObservationContextTests
|
|
12
12
|
{
|
|
13
|
+
public struct TestValueOperation
|
|
14
|
+
{
|
|
15
|
+
public IObservable source;
|
|
16
|
+
public object value;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
public struct TestValueSubscriptionOperation
|
|
20
|
+
{
|
|
21
|
+
public int source;
|
|
22
|
+
public object value;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public struct TestCollectionOperation
|
|
26
|
+
{
|
|
27
|
+
public IObservable source;
|
|
28
|
+
public int index;
|
|
29
|
+
public object value;
|
|
30
|
+
public bool isRemove;
|
|
31
|
+
}
|
|
32
|
+
|
|
13
33
|
[Test]
|
|
14
34
|
public void TestOperationOrder()
|
|
15
35
|
{
|
|
@@ -17,24 +37,27 @@ namespace ObserveThing.Tests
|
|
|
17
37
|
|
|
18
38
|
ObservableValue<int> intObservable = new ObservableValue<int>(context, 100);
|
|
19
39
|
ObservableValue<string> stringObservable = new ObservableValue<string>(context, "200");
|
|
20
|
-
List<
|
|
40
|
+
List<TestValueOperation> operations = new List<TestValueOperation>();
|
|
21
41
|
|
|
22
42
|
int callCount = 0;
|
|
23
43
|
|
|
24
|
-
var stream =
|
|
44
|
+
var stream = Operators.ObservableCombine(
|
|
45
|
+
intObservable.ObservableEventStream(x => new TestValueOperation() { source = intObservable, value = x }),
|
|
46
|
+
stringObservable.ObservableEventStream(x => new TestValueOperation() { source = stringObservable, value = x })
|
|
47
|
+
).Subscribe(
|
|
25
48
|
onNext: op =>
|
|
26
49
|
{
|
|
27
50
|
callCount++;
|
|
28
|
-
operations.Add(
|
|
51
|
+
operations.Add(op);
|
|
29
52
|
}
|
|
30
53
|
);
|
|
31
54
|
|
|
32
55
|
Assert.AreEqual(2, callCount);
|
|
33
56
|
Assert.AreEqual(
|
|
34
|
-
new List<
|
|
57
|
+
new List<TestValueOperation>
|
|
35
58
|
{
|
|
36
|
-
new(intObservable, 100
|
|
37
|
-
new(stringObservable, "200"
|
|
59
|
+
new() { source = intObservable, value = 100 },
|
|
60
|
+
new() { source = stringObservable, value = "200" }
|
|
38
61
|
},
|
|
39
62
|
operations
|
|
40
63
|
);
|
|
@@ -53,13 +76,13 @@ namespace ObserveThing.Tests
|
|
|
53
76
|
|
|
54
77
|
Assert.AreEqual(5, callCount);
|
|
55
78
|
Assert.AreEqual(
|
|
56
|
-
new List<
|
|
79
|
+
new List<TestValueOperation>
|
|
57
80
|
{
|
|
58
|
-
new(intObservable, 1
|
|
59
|
-
new(stringObservable, "2"
|
|
60
|
-
new(intObservable, 3
|
|
61
|
-
new(intObservable, 4
|
|
62
|
-
new(stringObservable, "5"
|
|
81
|
+
new() { source = intObservable, value = 1 },
|
|
82
|
+
new() { source = stringObservable, value = "2" },
|
|
83
|
+
new() { source = intObservable, value = 3 },
|
|
84
|
+
new() { source = intObservable, value = 4 },
|
|
85
|
+
new() { source = stringObservable, value = "5" },
|
|
63
86
|
},
|
|
64
87
|
operations
|
|
65
88
|
);
|
|
@@ -72,7 +95,7 @@ namespace ObserveThing.Tests
|
|
|
72
95
|
|
|
73
96
|
ObservableValue<int> intObservable = new ObservableValue<int>(context);
|
|
74
97
|
|
|
75
|
-
List<
|
|
98
|
+
List<TestValueSubscriptionOperation> observerCallOrder = new List<TestValueSubscriptionOperation>();
|
|
76
99
|
|
|
77
100
|
IDisposable subscription1 = default;
|
|
78
101
|
IDisposable subscription2 = default;
|
|
@@ -81,13 +104,13 @@ namespace ObserveThing.Tests
|
|
|
81
104
|
IDisposable subscription5 = default;
|
|
82
105
|
|
|
83
106
|
subscription1 = intObservable.Subscribe(
|
|
84
|
-
onNext: value => observerCallOrder.Add(new(1, value)
|
|
107
|
+
onNext: value => observerCallOrder.Add(new() { source = 1, value = value })
|
|
85
108
|
);
|
|
86
109
|
|
|
87
110
|
subscription2 = intObservable.Subscribe(
|
|
88
111
|
onNext: value =>
|
|
89
112
|
{
|
|
90
|
-
observerCallOrder.Add(new(2, value)
|
|
113
|
+
observerCallOrder.Add(new() { source = 2, value = value });
|
|
91
114
|
|
|
92
115
|
if (value == 1)
|
|
93
116
|
intObservable.value = 2;
|
|
@@ -97,7 +120,7 @@ namespace ObserveThing.Tests
|
|
|
97
120
|
subscription3 = intObservable.Subscribe(
|
|
98
121
|
onNext: value =>
|
|
99
122
|
{
|
|
100
|
-
observerCallOrder.Add(new(3, value)
|
|
123
|
+
observerCallOrder.Add(new() { source = 3, value = value });
|
|
101
124
|
|
|
102
125
|
if (value == 2)
|
|
103
126
|
{
|
|
@@ -108,11 +131,11 @@ namespace ObserveThing.Tests
|
|
|
108
131
|
);
|
|
109
132
|
|
|
110
133
|
subscription4 = intObservable.Subscribe(
|
|
111
|
-
onNext: value => observerCallOrder.Add(new(4, value)
|
|
134
|
+
onNext: value => observerCallOrder.Add(new() { source = 4, value = value })
|
|
112
135
|
);
|
|
113
136
|
|
|
114
137
|
subscription5 = intObservable.Subscribe(
|
|
115
|
-
onNext: value => observerCallOrder.Add(new(5, value)
|
|
138
|
+
onNext: value => observerCallOrder.Add(new() { source = 5, value = value })
|
|
116
139
|
);
|
|
117
140
|
|
|
118
141
|
intObservable.value = 1;
|
|
@@ -120,26 +143,26 @@ namespace ObserveThing.Tests
|
|
|
120
143
|
Assert.AreEqual(3, intObservable.value);
|
|
121
144
|
|
|
122
145
|
Assert.AreEqual(
|
|
123
|
-
new List<
|
|
146
|
+
new List<TestValueSubscriptionOperation>()
|
|
124
147
|
{
|
|
125
|
-
new (1, 0
|
|
126
|
-
new (2, 0
|
|
127
|
-
new (3, 0
|
|
128
|
-
new (4, 0
|
|
129
|
-
new (5, 0
|
|
130
|
-
new (1, 1
|
|
131
|
-
new (2, 1
|
|
132
|
-
new (1, 2
|
|
133
|
-
new (2, 2
|
|
134
|
-
new (3, 1
|
|
135
|
-
new (3, 2
|
|
148
|
+
new () { source = 1, value = 0}, //init observer1
|
|
149
|
+
new () { source = 2, value = 0}, //init observer2
|
|
150
|
+
new () { source = 3, value = 0}, //init observer3
|
|
151
|
+
new () { source = 4, value = 0}, //init observer4
|
|
152
|
+
new () { source = 5, value = 0}, //init observer5
|
|
153
|
+
new () { source = 1, value = 1}, //observer1 observes external setting intObservable to 1
|
|
154
|
+
new () { source = 2, value = 1}, //observer2 observes external setting intObservable to 1
|
|
155
|
+
new () { source = 1, value = 2}, //observer1 observes observer2 setting intObservable to 2
|
|
156
|
+
new () { source = 2, value = 2}, //observer2 observes observer2 setting intObservable to 2
|
|
157
|
+
new () { source = 3, value = 1}, //observer3 observes external setting intObservable to 1
|
|
158
|
+
new () { source = 3, value = 2}, //observer3 observes observer2 setting intObservable to 2
|
|
136
159
|
//4, //observer4 is never called past the init because it gets unsubscribed by observer3
|
|
137
|
-
new (1, 3
|
|
138
|
-
new (2, 3
|
|
139
|
-
new (3, 3
|
|
140
|
-
new (5, 1
|
|
141
|
-
new (5, 2
|
|
142
|
-
new (5, 3
|
|
160
|
+
new () { source = 1, value = 3}, //observer1 observes observer3 setting intObservable to 3
|
|
161
|
+
new () { source = 2, value = 3}, //observer2 observes observer3 setting intObservable to 3
|
|
162
|
+
new () { source = 3, value = 3}, //observer3 observes observer3 setting intObservable to 3
|
|
163
|
+
new () { source = 5, value = 1}, //observer5 observes external setting intObservable to 1
|
|
164
|
+
new () { source = 5, value = 2}, //observer5 observes observer2 setting intObservable to 2
|
|
165
|
+
new () { source = 5, value = 3} //observer5 observes observer3 setting intObservable to 3
|
|
143
166
|
},
|
|
144
167
|
observerCallOrder
|
|
145
168
|
);
|
|
@@ -153,14 +176,17 @@ namespace ObserveThing.Tests
|
|
|
153
176
|
ObservableValue<int> intObservable = new ObservableValue<int>(context);
|
|
154
177
|
ObservableValue<string> stringObservable = new ObservableValue<string>(context);
|
|
155
178
|
|
|
156
|
-
var query =
|
|
179
|
+
var query = Operators.ObservableCombine(
|
|
180
|
+
intObservable.ObservableEventStream(x => new TestValueOperation() { source = intObservable, value = x }),
|
|
181
|
+
stringObservable.ObservableEventStream(x => new TestValueOperation() { source = stringObservable, value = x })
|
|
182
|
+
);
|
|
157
183
|
|
|
158
|
-
List<
|
|
184
|
+
List<TestValueOperation> observerCallOrder = new List<TestValueOperation>();
|
|
159
185
|
|
|
160
186
|
IDisposable subscription = query.Subscribe(
|
|
161
187
|
onNext: op =>
|
|
162
188
|
{
|
|
163
|
-
observerCallOrder.Add(
|
|
189
|
+
observerCallOrder.Add(op);
|
|
164
190
|
|
|
165
191
|
if (intObservable.value == 2)
|
|
166
192
|
{
|
|
@@ -181,21 +207,21 @@ namespace ObserveThing.Tests
|
|
|
181
207
|
intObservable.value = 4;
|
|
182
208
|
|
|
183
209
|
Assert.AreEqual(
|
|
184
|
-
new List<
|
|
210
|
+
new List<TestValueOperation>()
|
|
185
211
|
{
|
|
186
|
-
new(intObservable, 0
|
|
187
|
-
new(stringObservable, null
|
|
188
|
-
new(intObservable, 1
|
|
189
|
-
new(stringObservable, "cat"
|
|
190
|
-
new(stringObservable, "dog"
|
|
191
|
-
new(intObservable, 2
|
|
192
|
-
new(intObservable, 6
|
|
193
|
-
new(intObservable, 7
|
|
194
|
-
new(intObservable, 8
|
|
195
|
-
new(stringObservable, "mouse"
|
|
196
|
-
new(stringObservable, "frog"
|
|
197
|
-
new(intObservable, 3
|
|
198
|
-
new(intObservable, 4
|
|
212
|
+
new() { source = intObservable, value = 0},
|
|
213
|
+
new() { source = stringObservable, value = null},
|
|
214
|
+
new() { source = intObservable, value = 1},
|
|
215
|
+
new() { source = stringObservable, value = "cat"},
|
|
216
|
+
new() { source = stringObservable, value = "dog"},
|
|
217
|
+
new() { source = intObservable, value = 2},
|
|
218
|
+
new() { source = intObservable, value = 6},
|
|
219
|
+
new() { source = intObservable, value = 7},
|
|
220
|
+
new() { source = intObservable, value = 8},
|
|
221
|
+
new() { source = stringObservable, value = "mouse"},
|
|
222
|
+
new() { source = stringObservable, value = "frog"},
|
|
223
|
+
new() { source = intObservable, value = 3},
|
|
224
|
+
new() { source = intObservable, value = 4},
|
|
199
225
|
},
|
|
200
226
|
observerCallOrder
|
|
201
227
|
);
|
|
@@ -210,7 +236,10 @@ namespace ObserveThing.Tests
|
|
|
210
236
|
var disposeCallCount = 0;
|
|
211
237
|
var disposed = false;
|
|
212
238
|
|
|
213
|
-
var query =
|
|
239
|
+
var query = Operators.ObservableCombine(
|
|
240
|
+
observable1.ObservableCast<object>().ObservableEventStream(),
|
|
241
|
+
observable2.ObservableCast<object>().ObservableEventStream()
|
|
242
|
+
);
|
|
214
243
|
|
|
215
244
|
var stream = query.Subscribe(
|
|
216
245
|
onDispose: () =>
|
|
@@ -296,22 +325,21 @@ namespace ObserveThing.Tests
|
|
|
296
325
|
dictionary.Add("dog", 2);
|
|
297
326
|
dictionary.Add("frog", 3);
|
|
298
327
|
|
|
299
|
-
var initOps = new List<
|
|
328
|
+
var initOps = new List<TestCollectionOperation>();
|
|
300
329
|
|
|
301
|
-
|
|
330
|
+
Operators.ObservableCombine(dictionary.ObservableEventStream()).Subscribe(onNext: op =>
|
|
302
331
|
{
|
|
303
|
-
|
|
304
|
-
initOps.Add(new(op.source, new KeyValuePair<string, int>(args.key, args.value), args.isRemove));
|
|
332
|
+
initOps.Add(new() { source = op.source, value = new KeyValuePair<string, int>(op.key, op.value), isRemove = op.isRemove });
|
|
305
333
|
});
|
|
306
334
|
|
|
307
335
|
Assert.That(
|
|
308
336
|
initOps,
|
|
309
337
|
Is.EqualTo(
|
|
310
|
-
new List<
|
|
338
|
+
new List<TestCollectionOperation>()
|
|
311
339
|
{
|
|
312
|
-
new(dictionary, KeyValuePair.Create("cat", 1), false
|
|
313
|
-
new(dictionary, KeyValuePair.Create("dog", 2), false
|
|
314
|
-
new(dictionary, KeyValuePair.Create("frog", 3), false
|
|
340
|
+
new TestCollectionOperation() { source = dictionary, value= KeyValuePair.Create("cat", 1), isRemove = false},
|
|
341
|
+
new TestCollectionOperation() { source = dictionary, value = KeyValuePair.Create("dog", 2), isRemove = false },
|
|
342
|
+
new TestCollectionOperation() { source = dictionary, value = KeyValuePair.Create("frog", 3), isRemove = false }
|
|
315
343
|
}
|
|
316
344
|
)
|
|
317
345
|
);
|
|
@@ -325,32 +353,30 @@ namespace ObserveThing.Tests
|
|
|
325
353
|
list.Add(-1000f);
|
|
326
354
|
list.Insert(1, 50f);
|
|
327
355
|
|
|
328
|
-
var subscription =
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
}
|
|
340
|
-
});
|
|
356
|
+
var subscription = Operators.ObservableCombine(
|
|
357
|
+
false,
|
|
358
|
+
dictionary.ObservableEventStream(
|
|
359
|
+
(id, kvp) => new TestCollectionOperation() { source = dictionary, value = kvp, isRemove = false },
|
|
360
|
+
(id, kvp) => new TestCollectionOperation() { source = dictionary, value = kvp, isRemove = true }
|
|
361
|
+
),
|
|
362
|
+
list.ObservableEventStream(
|
|
363
|
+
(id, index, element) => new TestCollectionOperation() { source = list, index = index, value = element, isRemove = false },
|
|
364
|
+
(id, index, element) => new TestCollectionOperation() { source = list, index = index, value = element, isRemove = true }
|
|
365
|
+
)
|
|
366
|
+
).Subscribe(onNext: op => initOps.Add(op));
|
|
341
367
|
|
|
342
368
|
Assert.That(
|
|
343
369
|
initOps,
|
|
344
370
|
Is.EqualTo(
|
|
345
|
-
new List<
|
|
371
|
+
new List<TestCollectionOperation>()
|
|
346
372
|
{
|
|
347
|
-
new(dictionary, KeyValuePair.Create("cat", 1), false
|
|
348
|
-
new(dictionary, KeyValuePair.Create("dog", 2), false
|
|
349
|
-
new(dictionary, KeyValuePair.Create("frog", 3), false
|
|
350
|
-
new(list, 0.22f, false
|
|
351
|
-
new(list, 50f, false
|
|
352
|
-
new(list, 0.11f, false
|
|
353
|
-
new(list, -1000f, false
|
|
373
|
+
new () { source = dictionary, value = KeyValuePair.Create("cat", 1), isRemove = false },
|
|
374
|
+
new () { source = dictionary, value = KeyValuePair.Create("dog", 2), isRemove = false },
|
|
375
|
+
new () { source = dictionary, value = KeyValuePair.Create("frog", 3), isRemove = false },
|
|
376
|
+
new () { source = list, index = 0, value = 0.22f, isRemove = false },
|
|
377
|
+
new () { source = list, index = 1, value = 50f, isRemove = false },
|
|
378
|
+
new () { source = list, index = 2, value = 0.11f, isRemove = false },
|
|
379
|
+
new () { source = list, index = 3, value = -1000f, isRemove = false }
|
|
354
380
|
}
|
|
355
381
|
)
|
|
356
382
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
+
"version": "1.1.1-dev.161",
|
|
3
|
+
"dependencies": {},
|
|
2
4
|
"name": "com.fofx.observething",
|
|
3
|
-
"version": "1.1.0",
|
|
4
5
|
"description": "An observable event stream library.",
|
|
5
6
|
"keywords": [
|
|
6
7
|
"observability",
|
|
@@ -9,13 +10,13 @@
|
|
|
9
10
|
"C#",
|
|
10
11
|
"csharp"
|
|
11
12
|
],
|
|
12
|
-
"homepage": "https://github.com/
|
|
13
|
+
"homepage": "https://github.com/FofX-Games/ObserveThing#readme",
|
|
13
14
|
"bugs": {
|
|
14
|
-
"url": "https://github.com/
|
|
15
|
+
"url": "https://github.com/FofX-Games/ObserveThing/issues"
|
|
15
16
|
},
|
|
16
17
|
"repository": {
|
|
17
18
|
"type": "git",
|
|
18
|
-
"url": "
|
|
19
|
+
"url": "https://github.com/FofX-Games/ObserveThing"
|
|
19
20
|
},
|
|
20
21
|
"license": "MIT",
|
|
21
22
|
"author": "Elliot Pjecha <epjecha@gmail.com>",
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
using System;
|
|
2
|
-
using System.Collections.Generic;
|
|
3
|
-
|
|
4
|
-
namespace ObserveThing
|
|
5
|
-
{
|
|
6
|
-
public class BatchObservable<T> : IInitializationOperationsProvider<BatchOp<T>>, IPendingObserver where T : IOperation
|
|
7
|
-
{
|
|
8
|
-
public bool immediate { get; } = false;
|
|
9
|
-
public uint priority { get; private set; }
|
|
10
|
-
public bool disposed { get; private set; }
|
|
11
|
-
|
|
12
|
-
private IObservable<T> _source;
|
|
13
|
-
private Observable<BatchOp<T>> _operand;
|
|
14
|
-
private IDisposable _subscriptions;
|
|
15
|
-
private bool _pending;
|
|
16
|
-
|
|
17
|
-
private List<T> _batchedOperations = new List<T>();
|
|
18
|
-
|
|
19
|
-
public BatchObservable(IObservable<T> source, Observable<BatchOp<T>> operand)
|
|
20
|
-
{
|
|
21
|
-
priority = source.context.AllocateObserverPriority();
|
|
22
|
-
|
|
23
|
-
_source = source;
|
|
24
|
-
_operand = operand;
|
|
25
|
-
|
|
26
|
-
_subscriptions = source.Subscribe(new Observer<T>(
|
|
27
|
-
onNext: HandleSourceOperation,
|
|
28
|
-
onError: operand.OnError,
|
|
29
|
-
onDispose: Dispose
|
|
30
|
-
), immediate: true);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
private void HandleSourceOperation(T operation)
|
|
34
|
-
{
|
|
35
|
-
_batchedOperations.Add(operation);
|
|
36
|
-
|
|
37
|
-
if (_pending)
|
|
38
|
-
return;
|
|
39
|
-
|
|
40
|
-
_pending = true;
|
|
41
|
-
_source.context.RegisterPendingObserver(this);
|
|
42
|
-
_source.context.NotifyPendingObserversIfNecessary();
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
public IEnumerable<BatchOp<T>> GetInitializationOperations()
|
|
46
|
-
{
|
|
47
|
-
List<T> initOps = new List<T>();
|
|
48
|
-
var subscription = _source.Subscribe(new Observer<T>(x => initOps.Add(x)));
|
|
49
|
-
subscription.Dispose();
|
|
50
|
-
yield return new BatchOp<T>() { source = _source, operations = initOps };
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
public void SendNext()
|
|
54
|
-
{
|
|
55
|
-
_pending = false;
|
|
56
|
-
|
|
57
|
-
var batch = _batchedOperations.ToArray();
|
|
58
|
-
_batchedOperations.Clear();
|
|
59
|
-
|
|
60
|
-
_operand.EnqueueOperation(new BatchOp<T>() { source = _source, operations = batch });
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
public void Dispose()
|
|
64
|
-
{
|
|
65
|
-
disposed = true;
|
|
66
|
-
_source.context.DeallocateObserverPriority(priority);
|
|
67
|
-
_subscriptions?.Dispose();
|
|
68
|
-
_subscriptions = null;
|
|
69
|
-
_operand.Dispose();
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|