symbiont-ruby 0.1.0 → 0.2.0

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +7 -1
  3. data/.travis.yml +3 -1
  4. data/CHANGELOG.md +15 -0
  5. data/README.md +56 -17
  6. data/Rakefile +27 -3
  7. data/lib/symbiont.rb +20 -0
  8. data/lib/symbiont/context.rb +14 -9
  9. data/lib/symbiont/executor.rb +89 -24
  10. data/lib/symbiont/private_trigger.rb +11 -2
  11. data/lib/symbiont/public_trigger.rb +12 -3
  12. data/lib/symbiont/trigger.rb +39 -36
  13. data/lib/symbiont/version.rb +5 -1
  14. data/logo/render_sample_1.JPG +0 -0
  15. data/logo/render_sample_2.JPG +0 -0
  16. data/logo/symbiont_logo_circle.ai +1348 -0
  17. data/logo/symbiont_logo_circle.eps +0 -0
  18. data/logo/symbiont_logo_circle.jpg +0 -0
  19. data/logo/symbiont_logo_circle.pdf +1419 -1
  20. data/logo/symbiont_logo_circle.png +0 -0
  21. data/logo/symbiont_logo_circle.psd +0 -0
  22. data/logo/symbiont_logo_circle.svg +116 -0
  23. data/logo/symbiont_logo_circle.tif +0 -0
  24. data/logo/symbiont_logo_circle_black.ai +2048 -6
  25. data/logo/symbiont_logo_circle_black.eps +0 -0
  26. data/logo/symbiont_logo_circle_black.jpg +0 -0
  27. data/logo/symbiont_logo_circle_black.pdf +2217 -9
  28. data/logo/symbiont_logo_circle_black.png +0 -0
  29. data/logo/symbiont_logo_circle_black.psd +0 -0
  30. data/logo/symbiont_logo_circle_black.svg +120 -0
  31. data/logo/symbiont_logo_circle_black.tif +0 -0
  32. data/logo/symbiont_logo_hexagon.ai +1994 -3
  33. data/logo/symbiont_logo_hexagon.eps +0 -0
  34. data/logo/symbiont_logo_hexagon.jpg +0 -0
  35. data/logo/symbiont_logo_hexagon.pdf +2221 -5
  36. data/logo/symbiont_logo_hexagon.png +0 -0
  37. data/logo/symbiont_logo_hexagon.psd +0 -0
  38. data/logo/symbiont_logo_hexagon.svg +115 -0
  39. data/logo/symbiont_logo_hexagon.tif +0 -0
  40. data/logo/symbiont_logo_hexagon_black.ai +2073 -3
  41. data/logo/symbiont_logo_hexagon_black.eps +0 -0
  42. data/logo/symbiont_logo_hexagon_black.jpg +0 -0
  43. data/logo/symbiont_logo_hexagon_black.pdf +2157 -4
  44. data/logo/symbiont_logo_hexagon_black.png +0 -0
  45. data/logo/symbiont_logo_hexagon_black.psd +0 -0
  46. data/logo/symbiont_logo_hexagon_black.svg +126 -0
  47. data/logo/symbiont_logo_hexagon_black.tif +0 -0
  48. data/symbiont-ruby.gemspec +10 -9
  49. metadata +50 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 981797ea2447acb615faac8cefe3fc02c0d05b0e
4
- data.tar.gz: 42fc09dd324faddd33a20d0c908251fb16e149e3
3
+ metadata.gz: 2df520b8812cc17063343dec89c82fd4ef94feb5
4
+ data.tar.gz: 3ef7f4309989802c211aa91f234547c69ecc654a
5
5
  SHA512:
6
- metadata.gz: cfce829ffc18d93300100a9f25d474ab3907d40be4c81ce6abe4952e4fa2d5818d7fbb8d25f1f765db28ea0d1dd810d2afdeeac065afbbc22707deb4319df572
7
- data.tar.gz: 956452d617195d896ec245e70b0b2ce04d9b2c42d21df1edb7e012cff670f8c61a3d811abdce0dd80f4cfe1c52aa91648ffdcea407febcbd2e978e0e51587255
6
+ metadata.gz: 9c752120deaf778e7cf356b79beec8f2b471de4c3356993bd476239c25c23e7e1dbb540c5c2e39c37627aa6958c0306f209a97176ec038bc07767e9f5d01a708
7
+ data.tar.gz: 03f7fb48f8b91acd2e37260c4b6cfde7e18b4c2125ab4c2f2db56577c281f33bb4fc77a325ede3edb4a1a3e312afa37f85c4a69fb204b1d89cd96e763853e7b3
@@ -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: 100
79
+ Max: 120
74
80
 
75
81
  Metrics/BlockLength:
76
82
  Exclude:
@@ -9,4 +9,6 @@ rvm:
9
9
  sudo: false
10
10
  before_install: gem install bundler
11
11
  cache: bundler
12
- script: bundle exec rspec
12
+ script:
13
+ - bundle exec rake yardoc
14
+ - bundle exec rspec
@@ -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
- # Symbiont · [![Gem Version](https://badge.fury.io/rb/symbiont-ruby.svg)](https://badge.fury.io/rb/symbiont-ruby) [![Build Status](https://travis-ci.org/0exp/symbiont-ruby.svg?branch=master)](https://travis-ci.org/0exp/symbiont-ruby) [![Coverage Status](https://coveralls.io/repos/github/0exp/symbiont-ruby/badge.svg?branch=master)](https://coveralls.io/github/0exp/symbiont-ruby?branch=master)
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(required_context, [context_direction], &closure)`
205
+ - `evaluate(*required_contexts, [context_direction:], &closure)`
197
206
  - public and private methods:
198
- - `evaluate_private(required_context, [context_direction], &closure)`
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::IncompatibleclosureObjectError` exception is thrown.
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, required_context, [context_direction], &clojure)`
264
+ - `public_method(method_name, *required_contexts, [context_direction:], &clojure)`
256
265
  - public and private methods:
257
- - `private_method(method_name, required_context, [context_direction], &clojure)`
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
- 'Symbiont:: Context' is a mixin that allows any object to call proc objects in the context of itself as Symbiont::Executor
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
- # About
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
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
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
- task :default => :rspec
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
@@ -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
@@ -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>] Delegation order.
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, Metrics/LineLength
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, Metrics/LineLength
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
@@ -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 a mediator for the proc invocation by them.
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 required_context [Object]
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(required_context, context_direction = Trigger::IOK, &closure)
24
- public_trigger(required_context, context_direction, &closure).__evaluate__
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 required_context [Object]
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(required_context, context_direction = Trigger::IOK, &closure)
40
- private_trigger(required_context, context_direction, &closure).__evaluate__
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(required_context, context_direction = Trigger::IOK, &closure)
56
- PublicTrigger.new(required_context, closure, context_direction)
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 required_context [Any]
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(required_context, context_direction = Trigger::IOK, &closure)
73
- PrivateTrigger.new(required_context, closure, context_direction)
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 required_context [Any]
81
- # @param context_direction [Array<Symbol>]
82
- # @param closure [Proc]
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, required_context, context_direction = Trigger::IOK, &closure)
90
- public_trigger(required_context, context_direction, &closure).method(method_name)
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 required_context [Any]
98
- # @param context_direction [Array<Symbol>]
99
- # @param closure [Proc]
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, required_context, context_direction = Trigger::IOK, &closure)
107
- private_trigger(required_context, context_direction, &closure).method(method_name)
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