rx 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitattributes +22 -0
- data/.gitignore +173 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -0
- data/Rakefile +11 -0
- data/examples/aggregate.rb +39 -0
- data/examples/amb.rb +25 -0
- data/examples/ambproto.rb +24 -0
- data/examples/and.rb +26 -0
- data/examples/as_observable.rb +25 -0
- data/examples/average.rb +43 -0
- data/examples/buffer_with_count.rb +44 -0
- data/examples/buffer_with_time.rb +51 -0
- data/examples/case.rb +29 -0
- data/examples/catch.rb +20 -0
- data/examples/catchproto.rb +39 -0
- data/examples/combine_latest.rb +35 -0
- data/examples/combine_latestproto.rb +33 -0
- data/examples/concat.rb +22 -0
- data/examples/concat_all.rb +27 -0
- data/examples/concat_map.rb +61 -0
- data/examples/concat_map_observer.rb +29 -0
- data/examples/concatproto.rb +25 -0
- data/examples/connect.rb +41 -0
- data/examples/contains.rb +37 -0
- data/examples/count.rb +36 -0
- data/examples/create.rb +55 -0
- data/examples/debounce.rb +35 -0
- data/examples/default_if_empty.rb +35 -0
- data/examples/defer.rb +20 -0
- data/examples/delay.rb +49 -0
- data/examples/delay_with_selector.rb +63 -0
- data/examples/dematerialize.rb +22 -0
- data/examples/disposable.rb +12 -0
- data/examples/distinct.rb +43 -0
- data/examples/distinct_until_changed.rb +43 -0
- data/examples/do.rb +59 -0
- data/examples/empty.rb +16 -0
- data/examples/for.rb +26 -0
- data/examples/fork_join.rb +23 -0
- data/examples/from.rb +106 -0
- data/examples/from_array.rb +21 -0
- data/examples/from_callback.rb +21 -0
- data/examples/generate.rb +24 -0
- data/examples/group_join.rb +39 -0
- data/examples/if.rb +46 -0
- data/examples/intervals.rb +26 -0
- data/examples/merge.rb +36 -0
- data/examples/merge_all.rb +27 -0
- data/examples/multicast.rb +32 -0
- data/examples/never.rb +15 -0
- data/examples/of.rb +19 -0
- data/examples/on_error_resume_next.rb +21 -0
- data/examples/pairs.rb +26 -0
- data/examples/publish.rb +79 -0
- data/examples/range.rb +19 -0
- data/examples/reduce.rb +18 -0
- data/examples/repeat.rb +19 -0
- data/examples/return.rb +17 -0
- data/examples/scan.rb +41 -0
- data/examples/start.rb +29 -0
- data/examples/throw.rb +17 -0
- data/examples/time_intervals.rb +28 -0
- data/examples/timer.rb +26 -0
- data/examples/timestamp.rb +28 -0
- data/examples/to_a.rb +23 -0
- data/examples/to_async.rb +26 -0
- data/examples/using.rb +52 -0
- data/examples/when.rb +26 -0
- data/examples/while.rb +25 -0
- data/examples/window_with_time.rb +78 -0
- data/examples/zip.rb +27 -0
- data/examples/zip_array.rb +25 -0
- data/lib/core_ext/enumerable.rb +22 -0
- data/lib/rx_ruby.rb +27 -0
- data/lib/rx_ruby/concurrency/async_lock.rb +57 -0
- data/lib/rx_ruby/concurrency/current_thread_scheduler.rb +75 -0
- data/lib/rx_ruby/concurrency/default_scheduler.rb +51 -0
- data/lib/rx_ruby/concurrency/historical_scheduler.rb +16 -0
- data/lib/rx_ruby/concurrency/immediate_scheduler.rb +68 -0
- data/lib/rx_ruby/concurrency/local_scheduler.rb +39 -0
- data/lib/rx_ruby/concurrency/periodic_scheduler.rb +74 -0
- data/lib/rx_ruby/concurrency/scheduled_item.rb +42 -0
- data/lib/rx_ruby/concurrency/scheduler.rb +150 -0
- data/lib/rx_ruby/concurrency/virtual_time_scheduler.rb +170 -0
- data/lib/rx_ruby/core/async_lock_observer.rb +46 -0
- data/lib/rx_ruby/core/auto_detach_observer.rb +59 -0
- data/lib/rx_ruby/core/checked_observer.rb +66 -0
- data/lib/rx_ruby/core/notification.rb +161 -0
- data/lib/rx_ruby/core/observable.rb +104 -0
- data/lib/rx_ruby/core/observe_on_observer.rb +50 -0
- data/lib/rx_ruby/core/observer.rb +119 -0
- data/lib/rx_ruby/core/scheduled_observer.rb +83 -0
- data/lib/rx_ruby/core/synchronized_observer.rb +47 -0
- data/lib/rx_ruby/core/time_interval.rb +17 -0
- data/lib/rx_ruby/internal/priority_queue.rb +122 -0
- data/lib/rx_ruby/internal/util.rb +9 -0
- data/lib/rx_ruby/joins/active_plan.rb +45 -0
- data/lib/rx_ruby/joins/join_observer.rb +51 -0
- data/lib/rx_ruby/joins/pattern.rb +14 -0
- data/lib/rx_ruby/joins/plan.rb +44 -0
- data/lib/rx_ruby/linq/connectable_observable.rb +34 -0
- data/lib/rx_ruby/linq/observable/_observable_timer_date_and_period.rb +22 -0
- data/lib/rx_ruby/linq/observable/_observable_timer_time_span.rb +14 -0
- data/lib/rx_ruby/linq/observable/_observable_timer_time_span_and_period.rb +20 -0
- data/lib/rx_ruby/linq/observable/aggregate.rb +7 -0
- data/lib/rx_ruby/linq/observable/and.rb +7 -0
- data/lib/rx_ruby/linq/observable/case.rb +15 -0
- data/lib/rx_ruby/linq/observable/concat_all.rb +7 -0
- data/lib/rx_ruby/linq/observable/concat_map.rb +35 -0
- data/lib/rx_ruby/linq/observable/concat_map_observer.rb +43 -0
- data/lib/rx_ruby/linq/observable/contains.rb +28 -0
- data/lib/rx_ruby/linq/observable/debounce.rb +41 -0
- data/lib/rx_ruby/linq/observable/delay.rb +81 -0
- data/lib/rx_ruby/linq/observable/delay_with_selector.rb +64 -0
- data/lib/rx_ruby/linq/observable/do.rb +42 -0
- data/lib/rx_ruby/linq/observable/for.rb +13 -0
- data/lib/rx_ruby/linq/observable/fork_join.rb +55 -0
- data/lib/rx_ruby/linq/observable/from.rb +34 -0
- data/lib/rx_ruby/linq/observable/group_join.rb +108 -0
- data/lib/rx_ruby/linq/observable/if.rb +17 -0
- data/lib/rx_ruby/linq/observable/interval.rb +5 -0
- data/lib/rx_ruby/linq/observable/multicast.rb +14 -0
- data/lib/rx_ruby/linq/observable/of.rb +11 -0
- data/lib/rx_ruby/linq/observable/pairs.rb +7 -0
- data/lib/rx_ruby/linq/observable/pluck.rb +7 -0
- data/lib/rx_ruby/linq/observable/publish.rb +11 -0
- data/lib/rx_ruby/linq/observable/start.rb +7 -0
- data/lib/rx_ruby/linq/observable/time_interval.rb +15 -0
- data/lib/rx_ruby/linq/observable/timer.rb +26 -0
- data/lib/rx_ruby/linq/observable/timestamp.rb +9 -0
- data/lib/rx_ruby/linq/observable/to_async.rb +40 -0
- data/lib/rx_ruby/linq/observable/when.rb +36 -0
- data/lib/rx_ruby/linq/observable/while.rb +41 -0
- data/lib/rx_ruby/operators/aggregates.rb +611 -0
- data/lib/rx_ruby/operators/creation.rb +220 -0
- data/lib/rx_ruby/operators/multiple.rb +735 -0
- data/lib/rx_ruby/operators/single.rb +399 -0
- data/lib/rx_ruby/operators/standard_query_operators.rb +279 -0
- data/lib/rx_ruby/operators/synchronization.rb +47 -0
- data/lib/rx_ruby/operators/time.rb +120 -0
- data/lib/rx_ruby/subjects/async_subject.rb +161 -0
- data/lib/rx_ruby/subjects/behavior_subject.rb +149 -0
- data/lib/rx_ruby/subjects/replay_subject.rb +39 -0
- data/lib/rx_ruby/subjects/subject.rb +131 -0
- data/lib/rx_ruby/subjects/subject_extensions.rb +45 -0
- data/lib/rx_ruby/subscriptions/composite_subscription.rb +91 -0
- data/lib/rx_ruby/subscriptions/ref_count_subscription.rb +88 -0
- data/lib/rx_ruby/subscriptions/scheduled_subscription.rb +32 -0
- data/lib/rx_ruby/subscriptions/serial_subscription.rb +60 -0
- data/lib/rx_ruby/subscriptions/single_assignment_subscription.rb +64 -0
- data/lib/rx_ruby/subscriptions/subscription.rb +56 -0
- data/lib/rx_ruby/testing/cold_observable.rb +45 -0
- data/lib/rx_ruby/testing/hot_observable.rb +47 -0
- data/lib/rx_ruby/testing/mock_observer.rb +33 -0
- data/lib/rx_ruby/testing/reactive_test.rb +94 -0
- data/lib/rx_ruby/testing/recorded.rb +17 -0
- data/lib/rx_ruby/testing/test_scheduler.rb +96 -0
- data/lib/rx_ruby/testing/test_subscription.rb +22 -0
- data/lib/rx_ruby/version.rb +3 -0
- data/license.txt +13 -0
- data/readme.md +152 -0
- data/rx_ruby.gemspec +22 -0
- data/test/rx_ruby/concurrency/helpers/historical_virtual_scheduler_helper.rb +135 -0
- data/test/rx_ruby/concurrency/helpers/immediate_local_scheduler_helper.rb +51 -0
- data/test/rx_ruby/concurrency/test_async_lock.rb +56 -0
- data/test/rx_ruby/concurrency/test_current_thread_scheduler.rb +44 -0
- data/test/rx_ruby/concurrency/test_default_scheduler.rb +44 -0
- data/test/rx_ruby/concurrency/test_historical_scheduler.rb +18 -0
- data/test/rx_ruby/concurrency/test_immediate_scheduler.rb +53 -0
- data/test/rx_ruby/concurrency/test_local_scheduler.rb +12 -0
- data/test/rx_ruby/concurrency/test_periodic_scheduler.rb +53 -0
- data/test/rx_ruby/concurrency/test_scheduled_item.rb +50 -0
- data/test/rx_ruby/concurrency/test_scheduler.rb +128 -0
- data/test/rx_ruby/concurrency/test_virtual_time_scheduler.rb +14 -0
- data/test/rx_ruby/core/test_notification.rb +129 -0
- data/test/rx_ruby/core/test_observable_creation.rb +483 -0
- data/test/rx_ruby/core/test_observer.rb +634 -0
- data/test/rx_ruby/internal/test_priority_queue.rb +71 -0
- data/test/rx_ruby/subscriptions/test_composite_subscription.rb +116 -0
- data/test/rx_ruby/subscriptions/test_serial_subscription.rb +62 -0
- data/test/rx_ruby/subscriptions/test_singleassignment_subscription.rb +61 -0
- data/test/rx_ruby/subscriptions/test_subscription.rb +27 -0
- data/test/test_helper.rb +11 -0
- metadata +291 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6ffb05bbb6d701c73a57492647ab8c4adeb99e18
|
4
|
+
data.tar.gz: d7807b50b9855b5d72ce182d1f8844b2f4baba76
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dbc3bec8a204ef3a880cbf3d677b6f4534f51c14910d5ad94fbcc17cc5d0ad778355659ab4ba9b0747f8df125621f28aa9eca6bdf7bf54af2a5e750ad3c1c4aa
|
7
|
+
data.tar.gz: 24cd708c83eb97935c6478c6e7581697e267af41150f3cbeee1ef3a5d434825787942e3aefeff6538c6032192e8686f696ad93973f390be2897c69711896d13c
|
data/.gitattributes
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# Auto detect text files and perform LF normalization
|
2
|
+
* text=auto
|
3
|
+
|
4
|
+
# Custom for Visual Studio
|
5
|
+
*.cs diff=csharp
|
6
|
+
*.sln merge=union
|
7
|
+
*.csproj merge=union
|
8
|
+
*.vbproj merge=union
|
9
|
+
*.fsproj merge=union
|
10
|
+
*.dbproj merge=union
|
11
|
+
|
12
|
+
# Standard to msysgit
|
13
|
+
*.doc diff=astextplain
|
14
|
+
*.DOC diff=astextplain
|
15
|
+
*.docx diff=astextplain
|
16
|
+
*.DOCX diff=astextplain
|
17
|
+
*.dot diff=astextplain
|
18
|
+
*.DOT diff=astextplain
|
19
|
+
*.pdf diff=astextplain
|
20
|
+
*.PDF diff=astextplain
|
21
|
+
*.rtf diff=astextplain
|
22
|
+
*.RTF diff=astextplain
|
data/.gitignore
ADDED
@@ -0,0 +1,173 @@
|
|
1
|
+
#################
|
2
|
+
## Ruby
|
3
|
+
#################
|
4
|
+
.ruby-version
|
5
|
+
pkg/
|
6
|
+
Gemfile.lock
|
7
|
+
|
8
|
+
#################
|
9
|
+
## Eclipse
|
10
|
+
#################
|
11
|
+
|
12
|
+
*.pydevproject
|
13
|
+
.project
|
14
|
+
.metadata
|
15
|
+
bin/
|
16
|
+
tmp/
|
17
|
+
*.tmp
|
18
|
+
*.bak
|
19
|
+
*.swp
|
20
|
+
*~.nib
|
21
|
+
local.properties
|
22
|
+
.classpath
|
23
|
+
.settings/
|
24
|
+
.loadpath
|
25
|
+
|
26
|
+
# External tool builders
|
27
|
+
.externalToolBuilders/
|
28
|
+
|
29
|
+
# Locally stored "Eclipse launch configurations"
|
30
|
+
*.launch
|
31
|
+
|
32
|
+
# CDT-specific
|
33
|
+
.cproject
|
34
|
+
|
35
|
+
# PDT-specific
|
36
|
+
.buildpath
|
37
|
+
|
38
|
+
|
39
|
+
#################
|
40
|
+
## Visual Studio
|
41
|
+
#################
|
42
|
+
|
43
|
+
## Ignore Visual Studio temporary files, build results, and
|
44
|
+
## files generated by popular Visual Studio add-ons.
|
45
|
+
|
46
|
+
# User-specific files
|
47
|
+
*.suo
|
48
|
+
*.user
|
49
|
+
*.sln.docstates
|
50
|
+
|
51
|
+
# Build results
|
52
|
+
[Dd]ebug/
|
53
|
+
[Rr]elease/
|
54
|
+
*_i.c
|
55
|
+
*_p.c
|
56
|
+
*.ilk
|
57
|
+
*.meta
|
58
|
+
*.obj
|
59
|
+
*.pch
|
60
|
+
*.pdb
|
61
|
+
*.pgc
|
62
|
+
*.pgd
|
63
|
+
*.rsp
|
64
|
+
*.sbr
|
65
|
+
*.tlb
|
66
|
+
*.tli
|
67
|
+
*.tlh
|
68
|
+
*.tmp
|
69
|
+
*.vspscc
|
70
|
+
.builds
|
71
|
+
*.dotCover
|
72
|
+
|
73
|
+
## TODO: If you have NuGet Package Restore enabled, uncomment this
|
74
|
+
#packages/
|
75
|
+
|
76
|
+
# Visual C++ cache files
|
77
|
+
ipch/
|
78
|
+
*.aps
|
79
|
+
*.ncb
|
80
|
+
*.opensdf
|
81
|
+
*.sdf
|
82
|
+
|
83
|
+
# Visual Studio profiler
|
84
|
+
*.psess
|
85
|
+
*.vsp
|
86
|
+
|
87
|
+
# ReSharper is a .NET coding add-in
|
88
|
+
_ReSharper*
|
89
|
+
|
90
|
+
# Installshield output folder
|
91
|
+
[Ee]xpress
|
92
|
+
|
93
|
+
# DocProject is a documentation generator add-in
|
94
|
+
DocProject/buildhelp/
|
95
|
+
DocProject/Help/*.HxT
|
96
|
+
DocProject/Help/*.HxC
|
97
|
+
DocProject/Help/*.hhc
|
98
|
+
DocProject/Help/*.hhk
|
99
|
+
DocProject/Help/*.hhp
|
100
|
+
DocProject/Help/Html2
|
101
|
+
DocProject/Help/html
|
102
|
+
|
103
|
+
# Click-Once directory
|
104
|
+
publish
|
105
|
+
|
106
|
+
# Others
|
107
|
+
[Bb]in
|
108
|
+
[Oo]bj
|
109
|
+
sql
|
110
|
+
TestResults
|
111
|
+
*.Cache
|
112
|
+
ClientBin
|
113
|
+
stylecop.*
|
114
|
+
~$*
|
115
|
+
*.dbmdl
|
116
|
+
Generated_Code #added for RIA/Silverlight projects
|
117
|
+
|
118
|
+
# Backup & report files from converting an old project file to a newer
|
119
|
+
# Visual Studio version. Backup files are not needed, because we have git ;-)
|
120
|
+
_UpgradeReport_Files/
|
121
|
+
Backup*/
|
122
|
+
UpgradeLog*.XML
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
############
|
127
|
+
## Windows
|
128
|
+
############
|
129
|
+
|
130
|
+
# Windows image file caches
|
131
|
+
Thumbs.db
|
132
|
+
|
133
|
+
# Folder config file
|
134
|
+
Desktop.ini
|
135
|
+
|
136
|
+
|
137
|
+
#############
|
138
|
+
## Python
|
139
|
+
#############
|
140
|
+
|
141
|
+
*.py[co]
|
142
|
+
|
143
|
+
# Packages
|
144
|
+
*.egg
|
145
|
+
*.egg-info
|
146
|
+
dist
|
147
|
+
build
|
148
|
+
eggs
|
149
|
+
parts
|
150
|
+
bin
|
151
|
+
var
|
152
|
+
sdist
|
153
|
+
develop-eggs
|
154
|
+
.installed.cfg
|
155
|
+
|
156
|
+
# Installer logs
|
157
|
+
pip-log.txt
|
158
|
+
|
159
|
+
# Unit test / coverage reports
|
160
|
+
.coverage
|
161
|
+
.tox
|
162
|
+
|
163
|
+
#Translations
|
164
|
+
*.mo
|
165
|
+
|
166
|
+
#Mr Developer
|
167
|
+
.mr.developer.cfg
|
168
|
+
|
169
|
+
# Mac crap
|
170
|
+
.DS_Store
|
171
|
+
|
172
|
+
# RubyMine
|
173
|
+
.idea
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/testtask'
|
5
|
+
|
6
|
+
task default: :test
|
7
|
+
|
8
|
+
Rake::TestTask.new do |task|
|
9
|
+
task.libs.unshift(File.expand_path('../test', __FILE__))
|
10
|
+
task.test_files = FileList['test/**/test*.rb']
|
11
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rx_ruby'
|
2
|
+
|
3
|
+
# Using a seed for the accumulate
|
4
|
+
source = RxRuby::Observable.range(1, 10).aggregate(1) {|acc, x|
|
5
|
+
acc * x
|
6
|
+
}
|
7
|
+
|
8
|
+
subscription = source.subscribe(
|
9
|
+
lambda {|x|
|
10
|
+
puts 'Next: ' + x.to_s
|
11
|
+
},
|
12
|
+
lambda {|err|
|
13
|
+
puts 'Error: ' + err.to_s
|
14
|
+
},
|
15
|
+
lambda {
|
16
|
+
puts 'Completed'
|
17
|
+
})
|
18
|
+
|
19
|
+
# => Next: 3628800
|
20
|
+
# => Completed
|
21
|
+
|
22
|
+
# Without a seed
|
23
|
+
source = RxRuby::Observable.range(1, 10).aggregate {|acc, x|
|
24
|
+
acc + x
|
25
|
+
}
|
26
|
+
|
27
|
+
subscription = source.subscribe(
|
28
|
+
lambda {|x|
|
29
|
+
puts 'Next: ' + x.to_s
|
30
|
+
},
|
31
|
+
lambda {|err|
|
32
|
+
puts 'Error: ' + err
|
33
|
+
},
|
34
|
+
lambda {
|
35
|
+
puts 'Completed'
|
36
|
+
})
|
37
|
+
|
38
|
+
# => Next: 55
|
39
|
+
# => Completed
|
data/examples/amb.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rx_ruby'
|
2
|
+
|
3
|
+
# Using Observable sequences
|
4
|
+
source = RxRuby::Observable.amb(
|
5
|
+
RxRuby::Observable.timer(0.5).map { 'foo' },
|
6
|
+
RxRuby::Observable.timer(0.2).map { 'bar' }
|
7
|
+
)
|
8
|
+
|
9
|
+
subscription = source.subscribe(
|
10
|
+
lambda {|x|
|
11
|
+
puts 'Next: ' + x.to_s
|
12
|
+
},
|
13
|
+
lambda {|err|
|
14
|
+
puts 'Error: ' + err.to_s
|
15
|
+
},
|
16
|
+
lambda {
|
17
|
+
puts 'Completed'
|
18
|
+
})
|
19
|
+
|
20
|
+
# => Next: bar
|
21
|
+
# => Completed
|
22
|
+
|
23
|
+
while Thread.list.size > 1
|
24
|
+
(Thread.list - [Thread.current]).each &:join
|
25
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rx_ruby'
|
2
|
+
|
3
|
+
first = RxRuby::Observable.timer(0.3).map { 'first' }
|
4
|
+
second = RxRuby::Observable.timer(0.5).map { 'second' }
|
5
|
+
|
6
|
+
source = first.amb(second)
|
7
|
+
|
8
|
+
subscription = source.subscribe(
|
9
|
+
lambda {|x|
|
10
|
+
puts 'Next: ' + x.to_s
|
11
|
+
},
|
12
|
+
lambda {|err|
|
13
|
+
puts 'Error: ' + err.to_s
|
14
|
+
},
|
15
|
+
lambda {
|
16
|
+
puts 'Completed'
|
17
|
+
})
|
18
|
+
|
19
|
+
# => Next: first
|
20
|
+
# => Completed
|
21
|
+
|
22
|
+
while Thread.list.size > 1
|
23
|
+
(Thread.list - [Thread.current]).each &:join
|
24
|
+
end
|
data/examples/and.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'rx_ruby'
|
2
|
+
|
3
|
+
# Choice of either plan, the first set of timers or second set
|
4
|
+
source = RxRuby::Observable.when(
|
5
|
+
RxRuby::Observable.timer(0.2).and(RxRuby::Observable.timer(0.3)).then_do(lambda {|x, y| return 'first' }),
|
6
|
+
RxRuby::Observable.timer(0.4).and(RxRuby::Observable.timer(0.5)).then_do(lambda {|x, y| return 'second' }),
|
7
|
+
)
|
8
|
+
|
9
|
+
subscription = source.subscribe(
|
10
|
+
lambda {|x|
|
11
|
+
puts 'Next: ' + x.to_s
|
12
|
+
},
|
13
|
+
lambda {|err|
|
14
|
+
puts 'Error: ' + err.to_s
|
15
|
+
},
|
16
|
+
lambda {
|
17
|
+
puts 'Completed'
|
18
|
+
})
|
19
|
+
|
20
|
+
# => Next: first
|
21
|
+
# => Next: second
|
22
|
+
# => Completed
|
23
|
+
|
24
|
+
while Thread.list.size > 1
|
25
|
+
(Thread.list - [Thread.current]).each &:join
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rx_ruby'
|
2
|
+
|
3
|
+
# Create subject
|
4
|
+
subject = RxRuby::AsyncSubject.new
|
5
|
+
|
6
|
+
# Send a value
|
7
|
+
subject.on_next(42)
|
8
|
+
subject.on_completed
|
9
|
+
|
10
|
+
# Hide its type
|
11
|
+
source = subject.as_observable
|
12
|
+
|
13
|
+
subscription = source.subscribe(
|
14
|
+
lambda {|x|
|
15
|
+
puts 'Next: ' + x.to_s
|
16
|
+
},
|
17
|
+
lambda {|err|
|
18
|
+
puts 'Error: ' + err.to_s
|
19
|
+
},
|
20
|
+
lambda {
|
21
|
+
puts 'Completed'
|
22
|
+
})
|
23
|
+
|
24
|
+
# => Next: 42
|
25
|
+
# => Completed
|
data/examples/average.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'rx_ruby'
|
2
|
+
|
3
|
+
# Without a selector
|
4
|
+
source = RxRuby::Observable.range(0, 9).average
|
5
|
+
|
6
|
+
subscription = source.subscribe(
|
7
|
+
lambda {|x|
|
8
|
+
puts 'Next: ' + x.to_s
|
9
|
+
},
|
10
|
+
lambda {|err|
|
11
|
+
puts 'Error: ' + err.to_s
|
12
|
+
},
|
13
|
+
lambda {
|
14
|
+
puts 'Completed'
|
15
|
+
})
|
16
|
+
|
17
|
+
# => Next: 4
|
18
|
+
# => Completed
|
19
|
+
|
20
|
+
# With a selector
|
21
|
+
arr = [
|
22
|
+
{ value: 1 },
|
23
|
+
{ value: 2 },
|
24
|
+
{ value: 3 }
|
25
|
+
]
|
26
|
+
|
27
|
+
source = RxRuby::Observable.from_array(arr).average {|x|
|
28
|
+
x[:value]
|
29
|
+
}
|
30
|
+
|
31
|
+
subscription = source.subscribe(
|
32
|
+
lambda {|x|
|
33
|
+
puts 'Next: ' + x.to_s
|
34
|
+
},
|
35
|
+
lambda {|err|
|
36
|
+
puts 'Error: ' + err.to_s
|
37
|
+
},
|
38
|
+
lambda {
|
39
|
+
puts 'Completed'
|
40
|
+
})
|
41
|
+
|
42
|
+
# => Next: 2
|
43
|
+
# => Completed
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'rx_ruby'
|
2
|
+
|
3
|
+
# Without a skip
|
4
|
+
source = RxRuby::Observable.range(1, 6)
|
5
|
+
.buffer_with_count(2)
|
6
|
+
|
7
|
+
subscription = source.subscribe(
|
8
|
+
lambda {|x|
|
9
|
+
puts 'Next: ' + x.to_s
|
10
|
+
},
|
11
|
+
lambda {|err|
|
12
|
+
puts 'Error: ' + err.to_s
|
13
|
+
},
|
14
|
+
lambda {
|
15
|
+
puts 'Completed'
|
16
|
+
})
|
17
|
+
|
18
|
+
# => Next: [1, 2]
|
19
|
+
# => Next: [3, 4]
|
20
|
+
# => Next: [5, 6]
|
21
|
+
# => Completed
|
22
|
+
|
23
|
+
# Using a skip
|
24
|
+
source = RxRuby::Observable.range(1, 6)
|
25
|
+
.buffer_with_count(2, 1)
|
26
|
+
|
27
|
+
subscription = source.subscribe(
|
28
|
+
lambda {|x|
|
29
|
+
puts 'Next: ' + x.to_s
|
30
|
+
},
|
31
|
+
lambda {|err|
|
32
|
+
puts 'Error: ' + err.to_s
|
33
|
+
},
|
34
|
+
lambda {
|
35
|
+
puts 'Completed'
|
36
|
+
})
|
37
|
+
|
38
|
+
# => Next: [1, 2]
|
39
|
+
# => Next: [2, 3]
|
40
|
+
# => Next: [3, 4]
|
41
|
+
# => Next: [4, 5]
|
42
|
+
# => Next: [5, 6]
|
43
|
+
# => Next: [6]
|
44
|
+
# => Completed
|