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.
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