symbiont-ruby 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +7 -1
- data/.travis.yml +3 -1
- data/CHANGELOG.md +15 -0
- data/README.md +56 -17
- data/Rakefile +27 -3
- data/lib/symbiont.rb +20 -0
- data/lib/symbiont/context.rb +14 -9
- data/lib/symbiont/executor.rb +89 -24
- data/lib/symbiont/private_trigger.rb +11 -2
- data/lib/symbiont/public_trigger.rb +12 -3
- data/lib/symbiont/trigger.rb +39 -36
- data/lib/symbiont/version.rb +5 -1
- data/logo/render_sample_1.JPG +0 -0
- data/logo/render_sample_2.JPG +0 -0
- data/logo/symbiont_logo_circle.ai +1348 -0
- data/logo/symbiont_logo_circle.eps +0 -0
- data/logo/symbiont_logo_circle.jpg +0 -0
- data/logo/symbiont_logo_circle.pdf +1419 -1
- data/logo/symbiont_logo_circle.png +0 -0
- data/logo/symbiont_logo_circle.psd +0 -0
- data/logo/symbiont_logo_circle.svg +116 -0
- data/logo/symbiont_logo_circle.tif +0 -0
- data/logo/symbiont_logo_circle_black.ai +2048 -6
- data/logo/symbiont_logo_circle_black.eps +0 -0
- data/logo/symbiont_logo_circle_black.jpg +0 -0
- data/logo/symbiont_logo_circle_black.pdf +2217 -9
- data/logo/symbiont_logo_circle_black.png +0 -0
- data/logo/symbiont_logo_circle_black.psd +0 -0
- data/logo/symbiont_logo_circle_black.svg +120 -0
- data/logo/symbiont_logo_circle_black.tif +0 -0
- data/logo/symbiont_logo_hexagon.ai +1994 -3
- data/logo/symbiont_logo_hexagon.eps +0 -0
- data/logo/symbiont_logo_hexagon.jpg +0 -0
- data/logo/symbiont_logo_hexagon.pdf +2221 -5
- data/logo/symbiont_logo_hexagon.png +0 -0
- data/logo/symbiont_logo_hexagon.psd +0 -0
- data/logo/symbiont_logo_hexagon.svg +115 -0
- data/logo/symbiont_logo_hexagon.tif +0 -0
- data/logo/symbiont_logo_hexagon_black.ai +2073 -3
- data/logo/symbiont_logo_hexagon_black.eps +0 -0
- data/logo/symbiont_logo_hexagon_black.jpg +0 -0
- data/logo/symbiont_logo_hexagon_black.pdf +2157 -4
- data/logo/symbiont_logo_hexagon_black.png +0 -0
- data/logo/symbiont_logo_hexagon_black.psd +0 -0
- data/logo/symbiont_logo_hexagon_black.svg +126 -0
- data/logo/symbiont_logo_hexagon_black.tif +0 -0
- data/symbiont-ruby.gemspec +10 -9
- metadata +50 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2df520b8812cc17063343dec89c82fd4ef94feb5
|
4
|
+
data.tar.gz: 3ef7f4309989802c211aa91f234547c69ecc654a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c752120deaf778e7cf356b79beec8f2b471de4c3356993bd476239c25c23e7e1dbb540c5c2e39c37627aa6958c0306f209a97176ec038bc07767e9f5d01a708
|
7
|
+
data.tar.gz: 03f7fb48f8b91acd2e37260c4b6cfde7e18b4c2125ab4c2f2db56577c281f33bb4fc77a325ede3edb4a1a3e312afa37f85c4a69fb204b1d89cd96e763853e7b3
|
data/.rubocop.yml
CHANGED
@@ -39,6 +39,9 @@ Style/Documentation:
|
|
39
39
|
Style/ClassAndModuleChildren:
|
40
40
|
Enabled: false
|
41
41
|
|
42
|
+
Style/IfUnlessModifier:
|
43
|
+
Enabled: false
|
44
|
+
|
42
45
|
Style/EmptyCaseCondition:
|
43
46
|
Enabled: false
|
44
47
|
|
@@ -54,6 +57,9 @@ Style/ParallelAssignment:
|
|
54
57
|
Style/CommentedKeyword:
|
55
58
|
Enabled: false
|
56
59
|
|
60
|
+
Lint/HandleExceptions:
|
61
|
+
Enabled: false
|
62
|
+
|
57
63
|
Layout/IndentArray:
|
58
64
|
Enabled: false
|
59
65
|
|
@@ -70,7 +76,7 @@ Naming/VariableNumber:
|
|
70
76
|
EnforcedStyle: snake_case
|
71
77
|
|
72
78
|
Metrics/LineLength:
|
73
|
-
Max:
|
79
|
+
Max: 120
|
74
80
|
|
75
81
|
Metrics/BlockLength:
|
76
82
|
Exclude:
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# Changelog
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## [0.2.0] 2018-04-22
|
5
|
+
### Added
|
6
|
+
- Logo ^_^ (special thanks to **Viktoria Karaulova**)
|
7
|
+
- Support for multiple inner contexts: you can pass an array of objects as a context argument
|
8
|
+
to `Symbiont::Executor`. Each object will be used as an inner context in order they are passed.
|
9
|
+
|
10
|
+
### Changed
|
11
|
+
- Method signature: context direction should be passed as a named attribute `context_direction:`.
|
12
|
+
|
13
|
+
Affected methods:
|
14
|
+
- `Symbiont::Executor.evaluate`
|
15
|
+
- `Symbiont::Executor.evaluate_private`
|
16
|
+
- `Symbiont::Executor.public_method`
|
17
|
+
- `Symbiont::Executor.private_method`
|
18
|
+
|
4
19
|
## [0.1.0] - 2018-04-08
|
5
20
|
- Release :)
|
data/README.md
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
|
1
|
+
<p align="center"><img width="250" height="250" src="logo/symbiont_logo_circle.png" /></div>
|
2
|
+
<p align="center">
|
3
|
+
<h1 align="center">
|
4
|
+
Symbiont<br />
|
5
|
+
<a href="https://badge.fury.io/rb/symbiont-ruby"><img src="https://badge.fury.io/rb/symbiont-ruby.svg"></a>
|
6
|
+
<a href="https://travis-ci.org/0exp/symbiont-ruby"><img src="https://travis-ci.org/0exp/symbiont-ruby.svg?branch=master"></a>
|
7
|
+
<a href="https://coveralls.io/github/0exp/symbiont-ruby?branch=master"><img src="https://coveralls.io/repos/github/0exp/symbiont-ruby/badge.svg?branch=master"></a>
|
8
|
+
</h1>
|
9
|
+
</p>
|
2
10
|
|
3
11
|
**Symbiont** is a cool implementation of proc-objects execution algorithm: in the context of other object,
|
4
12
|
but with the preservation of the closed environment of the proc object and with the ability of control the method dispatch
|
@@ -46,6 +54,7 @@ require 'symbiont'
|
|
46
54
|
- [Symbiont Mixin](#symbiont-mixin)
|
47
55
|
- [Mixing a module with default delegation direction](#mixing-a-module-with-default-delegation-direction)
|
48
56
|
- [Mixing a module with certain delegation direction](#mixing-a-module-with-certain-delegation-direction)
|
57
|
+
- [Multiple inner contexts](#multiple-inner-contexts)
|
49
58
|
|
50
59
|
# Problems and motivaiton
|
51
60
|
|
@@ -193,15 +202,15 @@ Symbiont::KIO # Kernel Context => Inner Context => Outer Context
|
|
193
202
|
`Symbiont::Executor` allows you to execute proc objects in two modes of the delegation:
|
194
203
|
|
195
204
|
- only public methods:
|
196
|
-
- `evaluate(
|
205
|
+
- `evaluate(*required_contexts, [context_direction:], &closure)`
|
197
206
|
- public and private methods:
|
198
|
-
- `evaluate_private(
|
207
|
+
- `evaluate_private(*required_contexts, [context_direction:], &closure)`
|
199
208
|
|
200
209
|
If no context is able to respond to the required method - `Symbiont::Trigger::ContextNoMethodError` exception is thrown.
|
201
210
|
|
202
211
|
In the case when an unsupported direction value is used - `Symbiont::Trigger::IncompatibleContextDirectionError` exception is thrown.
|
203
212
|
|
204
|
-
If proc object isnt passed to the executor - `Symbiont::Trigger::
|
213
|
+
If proc object isnt passed to the executor - `Symbiont::Trigger::UnprovidedClosureAttributeError` exception is thrown.
|
205
214
|
|
206
215
|
#### Considering public methods only (.evaluate)
|
207
216
|
|
@@ -213,13 +222,13 @@ end
|
|
213
222
|
# => "Data: inner_context"
|
214
223
|
|
215
224
|
# with a custom delegation order
|
216
|
-
Symbiont::Executor.evaluate(object, Symbiont::KIO) do
|
225
|
+
Symbiont::Executor.evaluate(object, context_direction: Symbiont::KIO) do
|
217
226
|
format_data(object_data)
|
218
227
|
end
|
219
228
|
# => "Data: kernel_context"
|
220
229
|
|
221
230
|
# SimpleObject#object_data is a private method (inner_context)
|
222
|
-
Symbiont::Executor.evaluate(object, Symbiont::IOK) do
|
231
|
+
Symbiont::Executor.evaluate(object, context_direction: Symbiont::IOK) do
|
223
232
|
format_data(object_data)
|
224
233
|
end
|
225
234
|
# => "Data: outer_context"
|
@@ -235,13 +244,13 @@ end
|
|
235
244
|
# => "Data: inner_context"
|
236
245
|
|
237
246
|
# with a custom delegation order
|
238
|
-
Symbiont::Executor.evaluate_private(object, Symbiont::KIO) do
|
247
|
+
Symbiont::Executor.evaluate_private(object, context_direction: Symbiont::KIO) do
|
239
248
|
format_data(object_data)
|
240
249
|
end
|
241
250
|
# => "Data: kernel_context"
|
242
251
|
|
243
252
|
# SimpleObject#object_data is a private method (inner_context)
|
244
|
-
Symbiont::Executor.evaluate_private(object, Symbiont::IOK) do
|
253
|
+
Symbiont::Executor.evaluate_private(object, context_direction: Symbiont::IOK) do
|
245
254
|
format_data(object_data)
|
246
255
|
end
|
247
256
|
# => "Data: inner_data"
|
@@ -252,9 +261,9 @@ end
|
|
252
261
|
`Symbiont::Executor` provides the possibility of obtaining the method object with consideration of the chosen delegation order:
|
253
262
|
|
254
263
|
- only public methods:
|
255
|
-
- `public_method(method_name,
|
264
|
+
- `public_method(method_name, *required_contexts, [context_direction:], &clojure)`
|
256
265
|
- public and private methods:
|
257
|
-
- `private_method(method_name,
|
266
|
+
- `private_method(method_name, *required_contexts, [context_direction:], &clojure)`
|
258
267
|
|
259
268
|
If no context is able to respond to the required method - `Symbiont::Trigger::ContextNoMethodError` exception is thrown.
|
260
269
|
|
@@ -268,11 +277,11 @@ Symbiont::Executor.public_method(:object_data, object, &closure)
|
|
268
277
|
# => #<Method: SimpleObject#object_data>
|
269
278
|
|
270
279
|
# with a custom delegation order
|
271
|
-
Symbiont::Executor.public_method(:object_data, object, Symbiont::OIK, &closure)
|
280
|
+
Symbiont::Executor.public_method(:object_data, object, context_direction: Symbiont::OIK, &closure)
|
272
281
|
# => (main) #<Method: SimpleObject(object)#object_data>
|
273
282
|
|
274
283
|
# SimpleObject#object_data is a private method
|
275
|
-
Symbiont::Executor.public_method(:object_data, object, Symbiont::IOK, &closure)
|
284
|
+
Symbiont::Executor.public_method(:object_data, object, context_direction: Symbiont::IOK, &closure)
|
276
285
|
# => (main) #<Method: SimpleObject(object)#object_data>
|
277
286
|
```
|
278
287
|
|
@@ -284,17 +293,17 @@ Symbiont::Executor.private_method(:object_data, object, &clojure)
|
|
284
293
|
# => #<Method: SimpleObject#object_data>
|
285
294
|
|
286
295
|
# with a custom delegation order
|
287
|
-
Symbiont::Executor.private_method(:object_data, object, Symbiont::KIO, &clojure)
|
296
|
+
Symbiont::Executor.private_method(:object_data, object, context_direction: Symbiont::KIO, &clojure)
|
288
297
|
# => #<Method: Kernel.object_data>
|
289
298
|
|
290
299
|
# SimpleObject#object_data is a private_method
|
291
|
-
Symbiont::Executor.private_method(:object_data, object, Symbiotn::IKO, &clojure)
|
300
|
+
Symbiont::Executor.private_method(:object_data, object, context_direction: Symbiotn::IKO, &clojure)
|
292
301
|
# => #<Method: SimpleObject#object_data>
|
293
302
|
```
|
294
303
|
|
295
304
|
## Symbiont Mixin
|
296
305
|
|
297
|
-
|
306
|
+
`Symbiont::Context` is a mixin that allows any object to call proc objects in the context of itself as `Symbiont::Executor`.
|
298
307
|
|
299
308
|
You can specify the default direction of the context delegation. `Symbiont::IOK` is used by default.
|
300
309
|
|
@@ -354,6 +363,33 @@ SimpleObject.new.evaluate(Symbiont::IOK) { object_data }
|
|
354
363
|
# => object.object_data => "inner_context"
|
355
364
|
```
|
356
365
|
|
366
|
+
## Multiple inner contexts
|
367
|
+
|
368
|
+
|
369
|
+
`Symbiont::Executor` allows you to work with multiple inner contexts (can receive a set of objects instead of the one main object).
|
370
|
+
Each object will be used as an inner context in order they are passed.
|
371
|
+
The method will be addressed to the object that responds first (in accordance with a chosen delegation order).
|
372
|
+
|
373
|
+
```ruby
|
374
|
+
# Usage:
|
375
|
+
|
376
|
+
Symbiont::Executor.evaluate(object_a, object_b, context_direction: Symbiont::IOK, &closure)
|
377
|
+
Symbiont::Executor.evaluate_private(object_a, object_b, context_direction: Symbiont::IOK, &closure)
|
378
|
+
Symbiont::Executor.publc_method(:method_name, object_a, object_b, context_direction: Symbiont::IOK, &closure)
|
379
|
+
Symbiont::Executor.private_method(:method_name, object_a, object_b, context_direction: Symbiont::IOK, &closure)
|
380
|
+
|
381
|
+
# Example
|
382
|
+
|
383
|
+
object_a.info # => "object_info"
|
384
|
+
object_b.data # => "object_data"
|
385
|
+
|
386
|
+
closure = proc { "#{info} #{data}" }
|
387
|
+
|
388
|
+
Symbiont::Executor.evaluate(object_a, object_b, &closure) # => "object_info object_data"
|
389
|
+
Symbiont::Executor.public_method(:data, object_a, object_b, &closure).call # => "object_data"
|
390
|
+
Symbiont::Executor.public_method(:info, object_a, object_b, &closure).call # => "object_info"
|
391
|
+
```
|
392
|
+
|
357
393
|
# Contributing
|
358
394
|
|
359
395
|
- Fork it ( https://github.com/0exp/symbiont-ruby/fork )
|
@@ -366,6 +402,9 @@ SimpleObject.new.evaluate(Symbiont::IOK) { object_data }
|
|
366
402
|
|
367
403
|
Released under MIT License.
|
368
404
|
|
369
|
-
#
|
405
|
+
# Authors
|
406
|
+
|
407
|
+
[Logo](https://github.com/0exp/symbiont-ruby/tree/master/logo) was created by **Viktoria Karaulova** (my special thanks ^_^).
|
408
|
+
|
409
|
+
Project was created by **Rustam Ibragimov**.
|
370
410
|
|
371
|
-
Created by Rustam Ibragimov.
|
data/Rakefile
CHANGED
@@ -1,6 +1,30 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'yard'
|
3
6
|
|
4
7
|
RSpec::Core::RakeTask.new(:rspec)
|
5
8
|
|
6
|
-
|
9
|
+
YARD::Rake::YardocTask.new(:doc) do |t|
|
10
|
+
t.files = Dir[Pathname.new(__FILE__).join('../lib/**/*.rb')]
|
11
|
+
t.options = %w[--protected --private]
|
12
|
+
end
|
13
|
+
|
14
|
+
task default: :rspec
|
15
|
+
|
16
|
+
task yardoc: :doc do
|
17
|
+
undocumented_code_objects = YARD::Registry.tap(&:load).select do |code_object|
|
18
|
+
code_object.docstring.empty?
|
19
|
+
end
|
20
|
+
|
21
|
+
if undocumented_code_objects.empty?
|
22
|
+
puts 'YARD COVERAGE [SUCCESS] => 100% documentation coverage!'
|
23
|
+
else
|
24
|
+
failing_code_objects = undocumented_code_objects.map do |code_object|
|
25
|
+
"- #{code_object.class} => #{code_object.to_s}"
|
26
|
+
end.join("\n")
|
27
|
+
|
28
|
+
abort("YARD COVERAGE [FAILURE] => No documentation found for: \n #{failing_code_objects}")
|
29
|
+
end
|
30
|
+
end
|
data/lib/symbiont.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Main Symbiont namespace.
|
4
|
+
#
|
3
5
|
# @api public
|
4
6
|
# @since 0.1.0
|
5
7
|
module Symbiont
|
@@ -10,32 +12,50 @@ module Symbiont
|
|
10
12
|
require_relative 'symbiont/executor'
|
11
13
|
require_relative 'symbiont/context'
|
12
14
|
|
15
|
+
# Method delegation order alias (inner_contexts => outer_context => kernel_context).
|
16
|
+
#
|
13
17
|
# @see Symbiont::Trigger::IOK
|
18
|
+
#
|
14
19
|
# @api public
|
15
20
|
# @since 0.1.0
|
16
21
|
IOK = Trigger::IOK
|
17
22
|
|
23
|
+
# Method delegation order alias (outer_context => inner_contexts => kernel_context).
|
24
|
+
#
|
18
25
|
# @see Symbiont::Trigger::OIK
|
26
|
+
#
|
19
27
|
# @api public
|
20
28
|
# @since 0.1.0
|
21
29
|
OIK = Trigger::OIK
|
22
30
|
|
31
|
+
# Method delegation order alias (outer_context => kernel_context => inner_contexts).
|
32
|
+
#
|
23
33
|
# @see Symbiont::Trigger::OKI
|
34
|
+
#
|
24
35
|
# @api public
|
25
36
|
# @since 0.1.0
|
26
37
|
OKI = Trigger::OKI
|
27
38
|
|
39
|
+
# Method delegation order alias (inner_contexts => kernel_context => outer_context).
|
40
|
+
#
|
28
41
|
# @see Symbiont::Trigger::IKO
|
42
|
+
#
|
29
43
|
# @api public
|
30
44
|
# @since 0.1.0
|
31
45
|
IKO = Trigger::IKO
|
32
46
|
|
47
|
+
# Method delegation order alias (kernel_context => outer_context => inner_contexts).
|
48
|
+
#
|
33
49
|
# @see Symbiont::Trigger::IOK
|
50
|
+
#
|
34
51
|
# @api public
|
35
52
|
# @since 0.1.0
|
36
53
|
KOI = Trigger::KOI
|
37
54
|
|
55
|
+
# Method delegation order alias (kernel_context => inner_contexts => outer_context).
|
56
|
+
#
|
38
57
|
# @see Symbiont::Trigger::KIO
|
58
|
+
#
|
39
59
|
# @api public
|
40
60
|
# @since 0.1.0
|
41
61
|
KIO = Trigger::KIO
|
data/lib/symbiont/context.rb
CHANGED
@@ -4,9 +4,10 @@ module Symbiont
|
|
4
4
|
class << self
|
5
5
|
# Factory method for a mixin module that provides an ability to invoke procs and lambdas
|
6
6
|
# in many contexts to any object. Mixes up special methods that delegate execution logic to
|
7
|
-
# to a special mediator object (Symbiont::Executor).
|
7
|
+
# to a special mediator object (`Symbiont::Executor`).
|
8
8
|
#
|
9
|
-
# @param default_context_direction [Array<Symbol>]
|
9
|
+
# @param default_context_direction [Array<Symbol>]
|
10
|
+
# Delegation order `for Symbiont::Executor`. Trigger::IOK is used by default.
|
10
11
|
# @return [Module]
|
11
12
|
#
|
12
13
|
# @see Symbiont::Executor
|
@@ -17,32 +18,36 @@ module Symbiont
|
|
17
18
|
# @api public
|
18
19
|
# @since 0.1.0
|
19
20
|
#
|
20
|
-
# rubocop:disable Naming/MethodName
|
21
|
+
# rubocop:disable Naming/MethodName
|
21
22
|
def Context(default_context_direction = Trigger::IOK)
|
22
23
|
Module.new do
|
23
24
|
define_method :evaluate do |context_direction = default_context_direction, &closure|
|
24
|
-
Executor.evaluate(self, context_direction, &closure)
|
25
|
+
Executor.evaluate(self, context_direction: context_direction, &closure)
|
25
26
|
end
|
26
27
|
|
27
28
|
define_method :evaluate_private do |context_direction = default_context_direction, &closure|
|
28
|
-
Executor.evaluate_private(self, context_direction, &closure)
|
29
|
+
Executor.evaluate_private(self, context_direction: context_direction, &closure)
|
29
30
|
end
|
30
31
|
|
31
32
|
define_method :public_method do |method_name, context_direction = default_context_direction, &closure|
|
32
|
-
Executor.public_method(self, method_name, context_direction, &closure)
|
33
|
+
Executor.public_method(self, method_name, context_direction: context_direction, &closure)
|
33
34
|
end
|
34
35
|
|
35
36
|
define_method :private_method do |method_name, context_direction = default_context_direction, &closure|
|
36
|
-
Executor.private_method(self, method_name, context_direction, &closure)
|
37
|
+
Executor.private_method(self, method_name, context_direction: context_direction, &closure)
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
40
|
-
# rubocop:enable Naming/MethodName
|
41
|
+
# rubocop:enable Naming/MethodName
|
41
42
|
end
|
42
43
|
|
44
|
+
# Default Context mixin that provides an ability to invoke procs and lambdas
|
45
|
+
# in many contexts to any object. Mixes up special methods that delegate execution logic to
|
46
|
+
# to a special mediator object (`Symbiont::Executor`). Uses Symbiont::Trigger::IOK delegation order.
|
47
|
+
#
|
43
48
|
# @see Symbiont.Context
|
44
49
|
#
|
45
50
|
# @api public
|
46
51
|
# @since 0.1.0
|
47
|
-
Context = Context()
|
52
|
+
Context = Context(Trigger::IOK)
|
48
53
|
end
|
data/lib/symbiont/executor.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Symbiont
|
4
4
|
# Mediator service object that controls the logic of creating triggers and calling them.
|
5
|
-
# Acts as a factory for trigerrs and
|
5
|
+
# Acts as a factory for trigerrs and an execution-mediator for procs.
|
6
6
|
#
|
7
7
|
# @api public
|
8
8
|
# @since 0.1.0
|
@@ -11,40 +11,74 @@ module Symbiont
|
|
11
11
|
# Starts execution of a proc object in the context of the passed object with the selected
|
12
12
|
# direction of method dispatching. Delegates execution to a public trigger.
|
13
13
|
#
|
14
|
-
# @param
|
14
|
+
# @param required_contexts [Array<Object>]
|
15
|
+
# A set of objects that should be used as the main context series for method resolving
|
16
|
+
# algorithm.
|
15
17
|
# @param context_direction [Array<Symbol>]
|
18
|
+
# An array of symbols that represents the direction of contexts. Possible values:
|
19
|
+
#
|
20
|
+
# - Symbiont::IOK
|
21
|
+
# - Symbiont::OIK
|
22
|
+
# - Symbiont::OKI
|
23
|
+
# - Symbiont::IKO
|
24
|
+
# - Symbiont::KOI
|
25
|
+
# - Symbiont::KIO
|
16
26
|
# @param closure [Proc]
|
27
|
+
# Proc object that will be evaluated in many contexts: initial, outer and kernel.
|
17
28
|
# @return void
|
18
29
|
#
|
19
30
|
# @see Symbiont::Trigger#__evaluate__
|
20
31
|
#
|
21
32
|
# @api public
|
22
33
|
# @since 0.1.0
|
23
|
-
def evaluate(
|
24
|
-
public_trigger(
|
34
|
+
def evaluate(*required_contexts, context_direction: Trigger::IOK, &closure)
|
35
|
+
public_trigger(*required_contexts, context_direction: context_direction, &closure).__evaluate__
|
25
36
|
end
|
26
37
|
|
27
38
|
# Starts execution of a proc object in the context of the passed object with the selected
|
28
39
|
# direction of method dispatching. Delegates execution to a private trigger.
|
29
40
|
#
|
30
|
-
# @param
|
41
|
+
# @param required_contexts [Array<Object>]
|
42
|
+
# A set of objects that should be used as the main context series for method resolving
|
43
|
+
# algorithm.
|
31
44
|
# @param context_direction [Array<Symbol>]
|
45
|
+
# An array of symbols that represents the direction of contexts. Possible values:
|
46
|
+
#
|
47
|
+
# - Symbiont::IOK
|
48
|
+
# - Symbiont::OIK
|
49
|
+
# - Symbiont::OKI
|
50
|
+
# - Symbiont::IKO
|
51
|
+
# - Symbiont::KOI
|
52
|
+
# - Symbiont::KIO
|
32
53
|
# @param closure [Proc]
|
54
|
+
# Proc object that will be evaluated in many contexts: initial, outer and kernel.
|
33
55
|
# @return void
|
34
56
|
#
|
35
57
|
# @see Symbiont::Trigger#__evaluate__
|
36
58
|
#
|
37
59
|
# @api public
|
38
60
|
# @since 0.1.0
|
39
|
-
def evaluate_private(
|
40
|
-
private_trigger(
|
61
|
+
def evaluate_private(*required_contexts, context_direction: Trigger::IOK, &closure)
|
62
|
+
private_trigger(*required_contexts, context_direction: context_direction, &closure).__evaluate__
|
41
63
|
end
|
42
64
|
|
43
65
|
# Factory method that instantiates a public trigger with the desired execution context,
|
44
66
|
# the direction of method dispatching and the closure that needs to be performed.
|
45
67
|
#
|
68
|
+
# @param required_contexts [Array<Object>]
|
69
|
+
# A set of objects that should be used as the main context series for method resolving
|
70
|
+
# algorithm.
|
46
71
|
# @param context_direction [Array<Symbol>]
|
72
|
+
# An array of symbols that represents the direction of contexts. Possible values:
|
73
|
+
#
|
74
|
+
# - Symbiont::IOK
|
75
|
+
# - Symbiont::OIK
|
76
|
+
# - Symbiont::OKI
|
77
|
+
# - Symbiont::IKO
|
78
|
+
# - Symbiont::KOI
|
79
|
+
# - Symbiont::KIO
|
47
80
|
# @param closure [Proc]
|
81
|
+
# Proc object that will be evaluated in many contexts: initial, outer and kernel.
|
48
82
|
# @return [Symbiont::PublicTrigger]
|
49
83
|
#
|
50
84
|
# @see Symbiont::PublicTrigger
|
@@ -52,16 +86,27 @@ module Symbiont
|
|
52
86
|
#
|
53
87
|
# @api public
|
54
88
|
# @since 0.1.0
|
55
|
-
def public_trigger(
|
56
|
-
PublicTrigger.new(
|
89
|
+
def public_trigger(*required_contexts, context_direction: Trigger::IOK, &closure)
|
90
|
+
PublicTrigger.new(*required_contexts, context_direction: context_direction, &closure)
|
57
91
|
end
|
58
92
|
|
59
93
|
# Factory method that instantiates a private trigger with the desired execution context,
|
60
94
|
# the direction of method dispatching and the closure that needs to be performed.
|
61
95
|
#
|
62
|
-
# @param
|
96
|
+
# @param required_contexts [Array<Object>]
|
97
|
+
# A set of objects that should be used as the main context series for method resolving
|
98
|
+
# algorithm.
|
63
99
|
# @param context_direction [Array<Symbol>]
|
100
|
+
# An array of symbols that represents the direction of contexts. Possible values:
|
101
|
+
#
|
102
|
+
# - Symbiont::IOK
|
103
|
+
# - Symbiont::OIK
|
104
|
+
# - Symbiont::OKI
|
105
|
+
# - Symbiont::IKO
|
106
|
+
# - Symbiont::KOI
|
107
|
+
# - Symbiont::KIO
|
64
108
|
# @param closure [Proc]
|
109
|
+
# Proc object that will be evaluated in many contexts: initial, outer and kernel.
|
65
110
|
# @return [Symbiont::PrivateTrigger]
|
66
111
|
#
|
67
112
|
# @see Symbiont::PrivateTrigger
|
@@ -69,42 +114,62 @@ module Symbiont
|
|
69
114
|
#
|
70
115
|
# @api public
|
71
116
|
# @since 0.1.0
|
72
|
-
def private_trigger(
|
73
|
-
PrivateTrigger.new(
|
117
|
+
def private_trigger(*required_contexts, context_direction: Trigger::IOK, &closure)
|
118
|
+
PrivateTrigger.new(*required_contexts, context_direction: context_direction, &closure)
|
74
119
|
end
|
75
120
|
|
76
121
|
# Gets the method object taken from the context that can respond to it.
|
77
122
|
# Considers only public methods.
|
78
123
|
#
|
79
|
-
# @param method_name [Symbol,String]
|
80
|
-
# @param
|
81
|
-
#
|
82
|
-
#
|
124
|
+
# @param method_name [Symbol,String] A name of required method.
|
125
|
+
# @param required_contexts [Array<Object>]
|
126
|
+
# A set of objects that should be used as the main context series for method resolving
|
127
|
+
# algorithm.
|
128
|
+
# An array of symbols that represents the direction of contexts. Possible values:
|
129
|
+
#
|
130
|
+
# - Symbiont::IOK
|
131
|
+
# - Symbiont::OIK
|
132
|
+
# - Symbiont::OKI
|
133
|
+
# - Symbiont::IKO
|
134
|
+
# - Symbiont::KOI
|
135
|
+
# - Symbiont::KIO
|
136
|
+
# @param closure [Proc] Proc object that will be used as outer-context for method resolution.
|
83
137
|
# @return [Method]
|
84
138
|
#
|
139
|
+
# @see Symbiont::PublicTrigger
|
85
140
|
# @see Symbiont::Trigger#method
|
86
141
|
#
|
87
142
|
# @api public
|
88
143
|
# @since 0.1.0
|
89
|
-
def public_method(method_name,
|
90
|
-
public_trigger(
|
144
|
+
def public_method(method_name, *required_contexts, context_direction: Trigger::IOK, &closure)
|
145
|
+
public_trigger(*required_contexts, context_direction: context_direction, &closure).method(method_name)
|
91
146
|
end
|
92
147
|
|
93
148
|
# Gets the method object taken from the context that can respond to it.
|
94
149
|
# Considers private methods and public methods.
|
95
150
|
#
|
96
|
-
# @param method_name [Symbol,String]
|
97
|
-
# @param
|
98
|
-
#
|
99
|
-
#
|
151
|
+
# @param method_name [Symbol,String] A name of required method.
|
152
|
+
# @param required_contexts [Array<Object>]
|
153
|
+
# A set of objects that should be used as the main context series for method resolving
|
154
|
+
# algorithm.
|
155
|
+
# An array of symbols that represents the direction of contexts. Possible values:
|
156
|
+
#
|
157
|
+
# - Symbiont::IOK
|
158
|
+
# - Symbiont::OIK
|
159
|
+
# - Symbiont::OKI
|
160
|
+
# - Symbiont::IKO
|
161
|
+
# - Symbiont::KOI
|
162
|
+
# - Symbiont::KIO
|
163
|
+
# @param closure [Proc] Proc object that will be used as outer-context for method resolution.
|
100
164
|
# @return [Method]
|
101
165
|
#
|
166
|
+
# @see Symbiont::PrivateTrigger
|
102
167
|
# @see Symbiont::Trigger#method
|
103
168
|
#
|
104
169
|
# @api public
|
105
170
|
# @since 0.1.0
|
106
|
-
def private_method(method_name,
|
107
|
-
private_trigger(
|
171
|
+
def private_method(method_name, *required_contexts, context_direction: Trigger::IOK, &closure)
|
172
|
+
private_trigger(*required_contexts, context_direction: context_direction, &closure).method(method_name)
|
108
173
|
end
|
109
174
|
end
|
110
175
|
end
|