asynchronic 0.2.0 → 0.2.1
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 +7 -0
- data/asynchronic.gemspec +1 -0
- data/lib/asynchronic/data_store/helper.rb +4 -0
- data/lib/asynchronic/data_store/lazy_store.rb +2 -2
- data/lib/asynchronic/data_store/lazy_value.rb +4 -2
- data/lib/asynchronic/data_store/no_lazy_store.rb +18 -0
- data/lib/asynchronic/data_store/readonly_store.rb +3 -3
- data/lib/asynchronic/process.rb +4 -2
- data/lib/asynchronic/version.rb +1 -1
- data/lib/asynchronic.rb +1 -0
- data/spec/data_store/data_store_examples.rb +16 -0
- data/spec/expectations.rb +0 -1
- data/spec/jobs.rb +27 -0
- data/spec/process/life_cycle_examples.rb +43 -0
- metadata +85 -101
- data/lib/asynchronic/transparent_proxy.rb +0 -52
- data/spec/transparent_proxy_spec.rb +0 -36
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2ee0dd3eef07147809867c45baccde4b008120a1
|
4
|
+
data.tar.gz: 74299af765d4d3e26a42add38cec3ef7bcb3fd0a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d83f18a63b3ba1be37b25750498e0aa33f0c1490b28756472791bab825092d9de154d53c7c4cf6ea612d91ce2a2fe85901a94ef8c92cb03bcb9c93531af36dd1
|
7
|
+
data.tar.gz: 6ee3a6051385501266ae97b7c8a69fbbf31a9f45ccc26bd881cb7f273dab2141c4f5eb4631710017dd28345373feae823bfc98a5e2cce1ec57face5a995e9aae
|
data/asynchronic.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency 'redis', '~> 3.0'
|
22
22
|
spec.add_dependency 'ost', '~> 0.1'
|
23
23
|
spec.add_dependency 'class_config', '~> 0.0'
|
24
|
+
spec.add_dependency 'transparent_proxy', '~> 0.0'
|
24
25
|
|
25
26
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
26
27
|
spec.add_development_dependency 'rake'
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require_relative '../transparent_proxy'
|
2
|
-
|
3
1
|
module Asynchronic
|
4
2
|
module DataStore
|
5
3
|
class LazyValue < TransparentProxy
|
@@ -23,6 +21,10 @@ module Asynchronic
|
|
23
21
|
@data_store_class.connect @data_store_connection
|
24
22
|
end
|
25
23
|
|
24
|
+
def to_value
|
25
|
+
__getobj__
|
26
|
+
end
|
27
|
+
|
26
28
|
private
|
27
29
|
|
28
30
|
def __getobj__
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Asynchronic
|
2
|
+
module DataStore
|
3
|
+
class NoLazyStore < TransparentProxy
|
4
|
+
|
5
|
+
include Helper
|
6
|
+
|
7
|
+
def [](key)
|
8
|
+
value = __getobj__[key]
|
9
|
+
value.respond_to?(:proxy?) ? value.reload.to_value : value
|
10
|
+
end
|
11
|
+
|
12
|
+
def lazy?
|
13
|
+
false
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/asynchronic/process.rb
CHANGED
@@ -42,7 +42,7 @@ module Asynchronic
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def params
|
45
|
-
data_store.scoped(:params).readonly
|
45
|
+
data_store.scoped(:params).no_lazy.readonly
|
46
46
|
end
|
47
47
|
|
48
48
|
def result
|
@@ -89,7 +89,9 @@ module Asynchronic
|
|
89
89
|
elsif processes.all?(&:completed?)
|
90
90
|
completed!
|
91
91
|
else
|
92
|
-
processes.
|
92
|
+
processes.each do |p|
|
93
|
+
p.enqueue if p.ready?
|
94
|
+
end
|
93
95
|
end
|
94
96
|
end
|
95
97
|
|
data/lib/asynchronic/version.rb
CHANGED
data/lib/asynchronic.rb
CHANGED
@@ -74,5 +74,21 @@ module DataStoreExamples
|
|
74
74
|
lazy_value.must_equal 1
|
75
75
|
lazy_value.reload.must_equal 2
|
76
76
|
end
|
77
|
+
|
78
|
+
it 'No lazy' do
|
79
|
+
data_store[:key] = 1
|
80
|
+
lazy_store = data_store.lazy
|
81
|
+
no_lazy_store = lazy_store.no_lazy
|
82
|
+
|
83
|
+
data_store.wont_be :lazy?
|
84
|
+
lazy_store.must_be :lazy?
|
85
|
+
no_lazy_store.wont_be :lazy?
|
86
|
+
|
87
|
+
no_lazy_store[:key].must_equal 1
|
88
|
+
|
89
|
+
data_store[:key] = 2
|
90
|
+
|
91
|
+
no_lazy_store[:key].must_equal 2
|
92
|
+
end
|
77
93
|
|
78
94
|
end
|
data/spec/expectations.rb
CHANGED
data/spec/jobs.rb
CHANGED
@@ -166,4 +166,31 @@ end
|
|
166
166
|
class WorkerJob < Asynchronic::Job
|
167
167
|
def call
|
168
168
|
end
|
169
|
+
end
|
170
|
+
|
171
|
+
class ForwardReferenceJob < Asynchronic::Job
|
172
|
+
def call
|
173
|
+
async BuildReferenceJob
|
174
|
+
async SendReferenceJob, number: result(BuildReferenceJob)
|
175
|
+
result SendReferenceJob
|
176
|
+
end
|
177
|
+
|
178
|
+
class BuildReferenceJob < Asynchronic::Job
|
179
|
+
def call
|
180
|
+
1
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
class SendReferenceJob < Asynchronic::Job
|
185
|
+
def call
|
186
|
+
async UseReferenceJob, number: params[:number]
|
187
|
+
result UseReferenceJob
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
class UseReferenceJob < Asynchronic::Job
|
192
|
+
def call
|
193
|
+
params[:number] + 1
|
194
|
+
end
|
195
|
+
end
|
169
196
|
end
|
@@ -340,4 +340,47 @@ module LifeCycleExamples
|
|
340
340
|
process[ExceptionJob].error.message.must_equal 'Error for test'
|
341
341
|
end
|
342
342
|
|
343
|
+
it 'Forward reference' do
|
344
|
+
process = create ForwardReferenceJob
|
345
|
+
|
346
|
+
process.must_be_initialized
|
347
|
+
queue.must_be_empty
|
348
|
+
|
349
|
+
process.enqueue
|
350
|
+
|
351
|
+
process.must_be_queued
|
352
|
+
queue.must_enqueued process
|
353
|
+
|
354
|
+
execute queue
|
355
|
+
|
356
|
+
process.must_be_waiting
|
357
|
+
process[ForwardReferenceJob::BuildReferenceJob].must_be_queued
|
358
|
+
process[ForwardReferenceJob::SendReferenceJob].must_be_pending
|
359
|
+
queue.must_enqueued process[ForwardReferenceJob::BuildReferenceJob]
|
360
|
+
|
361
|
+
execute queue
|
362
|
+
|
363
|
+
process.must_be_waiting
|
364
|
+
process[ForwardReferenceJob::BuildReferenceJob].must_be_completed
|
365
|
+
process[ForwardReferenceJob::SendReferenceJob].must_be_queued
|
366
|
+
queue.must_enqueued process[ForwardReferenceJob::SendReferenceJob]
|
367
|
+
|
368
|
+
execute queue
|
369
|
+
|
370
|
+
process.must_be_waiting
|
371
|
+
process[ForwardReferenceJob::BuildReferenceJob].must_be_completed
|
372
|
+
process[ForwardReferenceJob::SendReferenceJob].must_be_waiting
|
373
|
+
process[ForwardReferenceJob::SendReferenceJob][ForwardReferenceJob::UseReferenceJob].must_be_queued
|
374
|
+
queue.must_enqueued process[ForwardReferenceJob::SendReferenceJob][ForwardReferenceJob::UseReferenceJob]
|
375
|
+
|
376
|
+
execute queue
|
377
|
+
|
378
|
+
process.must_be_completed
|
379
|
+
process.result.must_equal 2
|
380
|
+
process[ForwardReferenceJob::BuildReferenceJob].must_be_completed
|
381
|
+
process[ForwardReferenceJob::SendReferenceJob].must_be_completed
|
382
|
+
process[ForwardReferenceJob::SendReferenceJob][ForwardReferenceJob::UseReferenceJob].must_be_completed
|
383
|
+
queue.must_be_empty
|
384
|
+
end
|
385
|
+
|
343
386
|
end
|
metadata
CHANGED
@@ -1,176 +1,169 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asynchronic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.2.0
|
4
|
+
version: 0.2.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Gabriel Naiman
|
9
|
-
autorequire:
|
8
|
+
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-
|
11
|
+
date: 2014-06-13 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: redis
|
16
|
-
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
17
16
|
requirements:
|
18
|
-
- - ~>
|
17
|
+
- - "~>"
|
19
18
|
- !ruby/object:Gem::Version
|
20
19
|
version: '3.0'
|
21
|
-
|
22
|
-
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.0'
|
27
|
-
none: false
|
28
|
-
prerelease: false
|
29
|
-
type: :runtime
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: ost
|
32
|
-
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
33
30
|
requirements:
|
34
|
-
- - ~>
|
31
|
+
- - "~>"
|
35
32
|
- !ruby/object:Gem::Version
|
36
33
|
version: '0.1'
|
37
|
-
|
38
|
-
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
37
|
requirements:
|
40
|
-
- - ~>
|
38
|
+
- - "~>"
|
41
39
|
- !ruby/object:Gem::Version
|
42
40
|
version: '0.1'
|
43
|
-
none: false
|
44
|
-
prerelease: false
|
45
|
-
type: :runtime
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: class_config
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
48
50
|
version_requirements: !ruby/object:Gem::Requirement
|
49
51
|
requirements:
|
50
|
-
- - ~>
|
52
|
+
- - "~>"
|
51
53
|
- !ruby/object:Gem::Version
|
52
54
|
version: '0.0'
|
53
|
-
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: transparent_proxy
|
54
57
|
requirement: !ruby/object:Gem::Requirement
|
55
58
|
requirements:
|
56
|
-
- - ~>
|
59
|
+
- - "~>"
|
57
60
|
- !ruby/object:Gem::Version
|
58
61
|
version: '0.0'
|
59
|
-
none: false
|
60
|
-
prerelease: false
|
61
62
|
type: :runtime
|
62
|
-
|
63
|
-
name: bundler
|
63
|
+
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
69
|
-
|
68
|
+
version: '0.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler
|
70
71
|
requirement: !ruby/object:Gem::Requirement
|
71
72
|
requirements:
|
72
|
-
- - ~>
|
73
|
+
- - "~>"
|
73
74
|
- !ruby/object:Gem::Version
|
74
75
|
version: '1.3'
|
75
|
-
none: false
|
76
|
-
prerelease: false
|
77
76
|
type: :development
|
78
|
-
|
79
|
-
name: rake
|
77
|
+
prerelease: false
|
80
78
|
version_requirements: !ruby/object:Gem::Requirement
|
81
79
|
requirements:
|
82
|
-
- -
|
80
|
+
- - "~>"
|
83
81
|
- !ruby/object:Gem::Version
|
84
|
-
version: '
|
85
|
-
|
82
|
+
version: '1.3'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
86
85
|
requirement: !ruby/object:Gem::Requirement
|
87
86
|
requirements:
|
88
|
-
- -
|
87
|
+
- - ">="
|
89
88
|
- !ruby/object:Gem::Version
|
90
89
|
version: '0'
|
91
|
-
none: false
|
92
|
-
prerelease: false
|
93
90
|
type: :development
|
94
|
-
|
95
|
-
name: minitest
|
91
|
+
prerelease: false
|
96
92
|
version_requirements: !ruby/object:Gem::Requirement
|
97
93
|
requirements:
|
98
|
-
- -
|
94
|
+
- - ">="
|
99
95
|
- !ruby/object:Gem::Version
|
100
|
-
version: '
|
101
|
-
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: minitest
|
102
99
|
requirement: !ruby/object:Gem::Requirement
|
103
100
|
requirements:
|
104
|
-
- - ~>
|
101
|
+
- - "~>"
|
105
102
|
- !ruby/object:Gem::Version
|
106
103
|
version: '4.7'
|
107
|
-
none: false
|
108
|
-
prerelease: false
|
109
104
|
type: :development
|
110
|
-
|
111
|
-
name: minitest-great_expectations
|
105
|
+
prerelease: false
|
112
106
|
version_requirements: !ruby/object:Gem::Requirement
|
113
107
|
requirements:
|
114
|
-
- - ~>
|
108
|
+
- - "~>"
|
115
109
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
117
|
-
|
110
|
+
version: '4.7'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: minitest-great_expectations
|
118
113
|
requirement: !ruby/object:Gem::Requirement
|
119
114
|
requirements:
|
120
|
-
- - ~>
|
115
|
+
- - "~>"
|
121
116
|
- !ruby/object:Gem::Version
|
122
117
|
version: '0.0'
|
123
|
-
none: false
|
124
|
-
prerelease: false
|
125
118
|
type: :development
|
126
|
-
|
127
|
-
name: turn
|
119
|
+
prerelease: false
|
128
120
|
version_requirements: !ruby/object:Gem::Requirement
|
129
121
|
requirements:
|
130
|
-
- - ~>
|
122
|
+
- - "~>"
|
131
123
|
- !ruby/object:Gem::Version
|
132
|
-
version: '0.
|
133
|
-
|
124
|
+
version: '0.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: turn
|
134
127
|
requirement: !ruby/object:Gem::Requirement
|
135
128
|
requirements:
|
136
|
-
- - ~>
|
129
|
+
- - "~>"
|
137
130
|
- !ruby/object:Gem::Version
|
138
131
|
version: '0.9'
|
139
|
-
none: false
|
140
|
-
prerelease: false
|
141
132
|
type: :development
|
142
|
-
|
143
|
-
name: simplecov
|
133
|
+
prerelease: false
|
144
134
|
version_requirements: !ruby/object:Gem::Requirement
|
145
135
|
requirements:
|
146
|
-
- -
|
136
|
+
- - "~>"
|
147
137
|
- !ruby/object:Gem::Version
|
148
|
-
version: '0'
|
149
|
-
|
138
|
+
version: '0.9'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: simplecov
|
150
141
|
requirement: !ruby/object:Gem::Requirement
|
151
142
|
requirements:
|
152
|
-
- -
|
143
|
+
- - ">="
|
153
144
|
- !ruby/object:Gem::Version
|
154
145
|
version: '0'
|
155
|
-
none: false
|
156
|
-
prerelease: false
|
157
146
|
type: :development
|
158
|
-
|
159
|
-
name: pry
|
147
|
+
prerelease: false
|
160
148
|
version_requirements: !ruby/object:Gem::Requirement
|
161
149
|
requirements:
|
162
|
-
- -
|
150
|
+
- - ">="
|
163
151
|
- !ruby/object:Gem::Version
|
164
152
|
version: '0'
|
165
|
-
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: pry
|
166
155
|
requirement: !ruby/object:Gem::Requirement
|
167
156
|
requirements:
|
168
|
-
- -
|
157
|
+
- - ">="
|
169
158
|
- !ruby/object:Gem::Version
|
170
159
|
version: '0'
|
171
|
-
none: false
|
172
|
-
prerelease: false
|
173
160
|
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
174
167
|
description: DSL for asynchronic pipeline
|
175
168
|
email:
|
176
169
|
- gabynaiman@gmail.com
|
@@ -178,9 +171,9 @@ executables: []
|
|
178
171
|
extensions: []
|
179
172
|
extra_rdoc_files: []
|
180
173
|
files:
|
181
|
-
- .coveralls.yml
|
182
|
-
- .gitignore
|
183
|
-
- .travis.yml
|
174
|
+
- ".coveralls.yml"
|
175
|
+
- ".gitignore"
|
176
|
+
- ".travis.yml"
|
184
177
|
- Gemfile
|
185
178
|
- LICENSE.txt
|
186
179
|
- README.md
|
@@ -192,6 +185,7 @@ files:
|
|
192
185
|
- lib/asynchronic/data_store/key.rb
|
193
186
|
- lib/asynchronic/data_store/lazy_store.rb
|
194
187
|
- lib/asynchronic/data_store/lazy_value.rb
|
188
|
+
- lib/asynchronic/data_store/no_lazy_store.rb
|
195
189
|
- lib/asynchronic/data_store/readonly_store.rb
|
196
190
|
- lib/asynchronic/data_store/redis.rb
|
197
191
|
- lib/asynchronic/data_store/scoped_store.rb
|
@@ -202,7 +196,6 @@ files:
|
|
202
196
|
- lib/asynchronic/queue_engine/in_memory.rb
|
203
197
|
- lib/asynchronic/queue_engine/ost.rb
|
204
198
|
- lib/asynchronic/queue_engine/synchronic.rb
|
205
|
-
- lib/asynchronic/transparent_proxy.rb
|
206
199
|
- lib/asynchronic/version.rb
|
207
200
|
- lib/asynchronic/worker.rb
|
208
201
|
- spec/coverage_helper.rb
|
@@ -223,40 +216,32 @@ files:
|
|
223
216
|
- spec/queue_engine/ost_spec.rb
|
224
217
|
- spec/queue_engine/queue_engine_examples.rb
|
225
218
|
- spec/queue_engine/synchronic_spec.rb
|
226
|
-
- spec/transparent_proxy_spec.rb
|
227
219
|
- spec/worker/in_memory_spec.rb
|
228
220
|
- spec/worker/redis_spec.rb
|
229
221
|
- spec/worker/worker_examples.rb
|
230
222
|
homepage: https://github.com/gabynaiman/asynchronic
|
231
223
|
licenses:
|
232
224
|
- MIT
|
233
|
-
|
225
|
+
metadata: {}
|
226
|
+
post_install_message:
|
234
227
|
rdoc_options: []
|
235
228
|
require_paths:
|
236
229
|
- lib
|
237
230
|
required_ruby_version: !ruby/object:Gem::Requirement
|
238
231
|
requirements:
|
239
|
-
- -
|
232
|
+
- - ">="
|
240
233
|
- !ruby/object:Gem::Version
|
241
|
-
segments:
|
242
|
-
- 0
|
243
|
-
hash: 2
|
244
234
|
version: '0'
|
245
|
-
none: false
|
246
235
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
247
236
|
requirements:
|
248
|
-
- -
|
237
|
+
- - ">="
|
249
238
|
- !ruby/object:Gem::Version
|
250
|
-
segments:
|
251
|
-
- 0
|
252
|
-
hash: 2
|
253
239
|
version: '0'
|
254
|
-
none: false
|
255
240
|
requirements: []
|
256
|
-
rubyforge_project:
|
257
|
-
rubygems_version:
|
258
|
-
signing_key:
|
259
|
-
specification_version:
|
241
|
+
rubyforge_project:
|
242
|
+
rubygems_version: 2.2.2
|
243
|
+
signing_key:
|
244
|
+
specification_version: 4
|
260
245
|
summary: DSL for asynchronic pipeline using queues over Redis
|
261
246
|
test_files:
|
262
247
|
- spec/coverage_helper.rb
|
@@ -277,7 +262,6 @@ test_files:
|
|
277
262
|
- spec/queue_engine/ost_spec.rb
|
278
263
|
- spec/queue_engine/queue_engine_examples.rb
|
279
264
|
- spec/queue_engine/synchronic_spec.rb
|
280
|
-
- spec/transparent_proxy_spec.rb
|
281
265
|
- spec/worker/in_memory_spec.rb
|
282
266
|
- spec/worker/redis_spec.rb
|
283
267
|
- spec/worker/worker_examples.rb
|
@@ -1,52 +0,0 @@
|
|
1
|
-
module Asynchronic
|
2
|
-
class TransparentProxy
|
3
|
-
|
4
|
-
PROXY_METHODS = [:class, :methods, :respond_to?]
|
5
|
-
|
6
|
-
SAFE_METHODS = [:__send__, :__id__, :object_id, :tap] + PROXY_METHODS.map { |m| "proxy_#{m}".to_sym }
|
7
|
-
|
8
|
-
PROXY_METHODS.each { |m| alias_method "proxy_#{m}".to_sym, m }
|
9
|
-
|
10
|
-
instance_methods.reject { |m| SAFE_METHODS.include? m }.
|
11
|
-
each { |m| undef_method m }
|
12
|
-
|
13
|
-
def inspect
|
14
|
-
__getobj__.inspect
|
15
|
-
end
|
16
|
-
|
17
|
-
def proxy_inspect
|
18
|
-
"#<#{proxy_class} @object=#{inspect}>"
|
19
|
-
end
|
20
|
-
|
21
|
-
def methods(*args)
|
22
|
-
proxy_methods(*args) | __getobj__.methods(*args)
|
23
|
-
end
|
24
|
-
|
25
|
-
def respond_to?(*args)
|
26
|
-
proxy_respond_to?(*args) || __getobj__.respond_to?(*args)
|
27
|
-
end
|
28
|
-
|
29
|
-
def proxy?
|
30
|
-
true
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
def initialize(object)
|
36
|
-
__setobj__ object
|
37
|
-
end
|
38
|
-
|
39
|
-
def __getobj__
|
40
|
-
@object
|
41
|
-
end
|
42
|
-
|
43
|
-
def __setobj__(object)
|
44
|
-
@object = object
|
45
|
-
end
|
46
|
-
|
47
|
-
def method_missing(method, *args, &block)
|
48
|
-
__getobj__.send(method, *args, &block)
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Asynchronic::TransparentProxy do
|
4
|
-
|
5
|
-
it 'Transparent' do
|
6
|
-
proxy = Asynchronic::TransparentProxy.new 1
|
7
|
-
|
8
|
-
proxy.must_equal 1
|
9
|
-
(proxy + 1).must_equal 2
|
10
|
-
proxy.class.must_equal Fixnum
|
11
|
-
proxy.inspect.must_equal 1.inspect
|
12
|
-
proxy.methods.must_equal proxy.proxy_methods | 1.methods
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'Proxy methods' do
|
16
|
-
proxy = Asynchronic::TransparentProxy.new 1
|
17
|
-
|
18
|
-
proxy.must_be :proxy?
|
19
|
-
proxy.proxy_class.must_equal Asynchronic::TransparentProxy
|
20
|
-
proxy.proxy_inspect.must_match /#<Asynchronic::TransparentProxy @object=1>/
|
21
|
-
proxy.proxy_methods.must_include_all [:__send__, :object_id, :tap]
|
22
|
-
proxy.must_respond_to :proxy_respond_to?
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'Subclass' do
|
26
|
-
class NumberProxy < Asynchronic::TransparentProxy
|
27
|
-
def to_letters
|
28
|
-
'one'
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
proxy = NumberProxy.new 1
|
33
|
-
proxy.to_letters.must_equal 'one'
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|