smart_injection 0.0.0.alpha3 → 0.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6f87bba0170853c09fc72fd200054365cc4653d76bf7c3e2347af9d5c8a3e59
4
- data.tar.gz: 9f09cbfca987d5a0423f8ff0100d4c1a2732b1f9051ec689fa8106dc5bde2678
3
+ metadata.gz: 1f48169147897c8ce8f66b9f89612932e7f4928dfbd841a71333952e36fa2d8e
4
+ data.tar.gz: d8516b07187415d826c6370f3b03c7200c3c8df59cc04cba455aa815beda0f1e
5
5
  SHA512:
6
- metadata.gz: de681417379858196fad5b211b065e226c1744c20472d592b479697ff82a309ba111b9a460c5b4484ca81499c486848bfa445567c95ba32100b0d1112def7cd1
7
- data.tar.gz: 15d6cfd72927a2d46c9d71465b1650666cb81f5bc112d1abb3710ff4f397718b49debb4a1c821259e118ffeb09d34b8173c1b4e4359d4342018ed46db20f3f27
6
+ metadata.gz: 6258aebce545dafba8aaef29d7f137f322e097c60d7003d2dfd3bdc8d111845493f52909918c71bc233abc54c5c5c3b55dd7fd4b83d753f238bdf6a92c8c3704
7
+ data.tar.gz: 3f27d11d72af45e20fd2fbf393765be6414a2bb5e91b9dff4a797c13870fd36752702cc03cb9fd7e13acbea3632b2712e967ddf6e6bab6ef22c24e52bd70fad3
data/Gemfile.lock CHANGED
@@ -1,41 +1,34 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- smart_injection (0.0.0.alpha2)
5
- smart_container (~> 0.8, >= 0.8.1)
6
- smart_engine (~> 0.7)
4
+ smart_injection (0.0.0)
7
5
 
8
6
  GEM
9
7
  remote: https://rubygems.org/
10
8
  specs:
11
- activesupport (6.0.3.2)
9
+ activesupport (6.0.3.1)
12
10
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
11
  i18n (>= 0.7, < 2)
14
12
  minitest (~> 5.1)
15
13
  tzinfo (~> 1.1)
16
14
  zeitwerk (~> 2.2, >= 2.2.2)
17
- armitage-rubocop (0.85.1)
18
- rubocop (= 0.85.1)
15
+ armitage-rubocop (0.85.0)
16
+ rubocop (= 0.85.0)
19
17
  rubocop-performance (= 1.6.1)
20
- rubocop-rails (= 2.6.0)
18
+ rubocop-rails (= 2.5.2)
21
19
  rubocop-rake (= 0.5.1)
22
- rubocop-rspec (= 1.40.0)
20
+ rubocop-rspec (= 1.39.0)
23
21
  ast (2.4.1)
24
- coderay (1.1.3)
25
22
  concurrent-ruby (1.1.6)
26
- diff-lcs (1.4.4)
23
+ diff-lcs (1.3)
27
24
  docile (1.3.2)
28
25
  i18n (1.8.3)
29
26
  concurrent-ruby (~> 1.0)
30
- method_source (1.0.0)
31
27
  minitest (5.14.1)
32
- parallel (1.19.2)
33
- parser (2.7.1.4)
34
- ast (~> 2.4.1)
35
- pry (0.13.1)
36
- coderay (~> 1.1)
37
- method_source (~> 1.0)
38
- rack (2.2.3)
28
+ parallel (1.19.1)
29
+ parser (2.7.1.3)
30
+ ast (~> 2.4.0)
31
+ rack (2.2.2)
39
32
  rainbow (3.0.0)
40
33
  rake (13.0.1)
41
34
  regexp_parser (1.7.1)
@@ -53,7 +46,7 @@ GEM
53
46
  diff-lcs (>= 1.2.0, < 2.0)
54
47
  rspec-support (~> 3.9.0)
55
48
  rspec-support (3.9.3)
56
- rubocop (0.85.1)
49
+ rubocop (0.85.0)
57
50
  parallel (~> 1.10)
58
51
  parser (>= 2.7.0.1)
59
52
  rainbow (>= 2.2.2, < 4.0)
@@ -62,31 +55,28 @@ GEM
62
55
  rubocop-ast (>= 0.0.3)
63
56
  ruby-progressbar (~> 1.7)
64
57
  unicode-display_width (>= 1.4.0, < 2.0)
65
- rubocop-ast (0.1.0)
58
+ rubocop-ast (0.0.3)
66
59
  parser (>= 2.7.0.1)
67
60
  rubocop-performance (1.6.1)
68
61
  rubocop (>= 0.71.0)
69
- rubocop-rails (2.6.0)
70
- activesupport (>= 4.2.0)
62
+ rubocop-rails (2.5.2)
63
+ activesupport
71
64
  rack (>= 1.1)
72
- rubocop (>= 0.82.0)
65
+ rubocop (>= 0.72.0)
73
66
  rubocop-rake (0.5.1)
74
67
  rubocop
75
- rubocop-rspec (1.40.0)
68
+ rubocop-rspec (1.39.0)
76
69
  rubocop (>= 0.68.1)
77
70
  ruby-progressbar (1.10.1)
78
71
  simplecov (0.18.5)
79
72
  docile (~> 1.1)
80
73
  simplecov-html (~> 0.11)
81
74
  simplecov-html (0.12.2)
82
- smart_container (0.8.1)
83
- smart_engine (~> 0.5)
84
- smart_engine (0.7.0)
85
75
  thread_safe (0.3.6)
86
76
  tzinfo (1.2.7)
87
77
  thread_safe (~> 0.1)
88
78
  unicode-display_width (1.7.0)
89
- zeitwerk (2.3.1)
79
+ zeitwerk (2.3.0)
90
80
 
91
81
  PLATFORMS
92
82
  ruby
@@ -94,7 +84,6 @@ PLATFORMS
94
84
  DEPENDENCIES
95
85
  armitage-rubocop (~> 0.85)
96
86
  bundler (~> 2.1)
97
- pry (~> 0.13)
98
87
  rake (~> 13.0)
99
88
  rspec (~> 3.9)
100
89
  simplecov (~> 0.18)
data/README.md CHANGED
@@ -2,26 +2,6 @@
2
2
 
3
3
  Dependency injection principles and idioms realized in scope of Ruby.
4
4
 
5
- ---
6
-
7
- ## Major Features
8
-
9
- - `method-injection` strategy
10
- - `soon:` constructor injection strategy;
11
- - `soon:` property injection strategy;
12
- - realized as a mixin;
13
- - instance-method dependency injection;
14
- - class-method dependency injection;
15
- - multiple IoC-container registration;
16
- - static and dynamic bindings;
17
- - support for memoization with run-time dependency-switchable re-memoization;
18
- - an ability to import dependencies from the list of IoC-containers
19
- - an ability to import from the pre-configured default IoC-container(s);
20
- - an ability to import from any manually passed IoC-container;
21
- - privacy control of injected dependency (public/private/protected);
22
-
23
- ---
24
-
25
5
  ## Installation
26
6
 
27
7
  ```ruby
@@ -40,71 +20,6 @@ require 'smart_core/injection'
40
20
 
41
21
  ---
42
22
 
43
- ## Synopsis
44
-
45
- Create some containers:
46
-
47
- ```ruby
48
- AppContainer = SmartCore::Container.define do
49
- namespace(:data_storage) do
50
- register(:main) { Sequel::Model.db }
51
- register(:cache) { Redis.new }
52
- end
53
- end
54
-
55
- ServiceContainer = SmartCore::Container.define do
56
- namespace(:rands) do
57
- register(:alphanum) { -> { SeureRandom.alphanumeric } }
58
- register(:hex) { -> { SecureRandom.hex } }
59
- end
60
- end
61
-
62
- GlobalContainer = SmartCore::Container.define do
63
- namespace(:phone_clients) do
64
- register(:nexmo) { Nexmo.new }
65
- register(:twilio) { Twilio.new }
66
- end
67
- end
68
- ```
69
-
70
- And work with dependency injection:
71
-
72
- ```ruby
73
- class MiniService
74
- include SmartCore::Injection
75
-
76
- register_container(AppContainer)
77
- register_container(ServiceContainer)
78
-
79
- # --- or ---
80
- include SmartCore::Injection(AppContainer, ServiceContainer)
81
-
82
- # --- or ---
83
- include SmartCore::Injection
84
- register_container(AppContainer, ServiceContainer)
85
-
86
- # import dependencies to an instance
87
- import({ db: 'data_storage.main' }, bind: :dynamic, access: :private)
88
- import({ rnd: 'rands.alphanum' }, bind: :static, memoize: true)
89
-
90
- # import dependencies to a class
91
- import_static({ cache: 'data_storage.cache', hexer: 'rands.hex' }, bind: :static)
92
-
93
- # import from a non-registered container
94
- import({ phone_client: 'phone_clients.nexmo' }, from: GlobalContainer)
95
-
96
- def call
97
- db # => returns data_storage.main
98
- rnd # => returns rands.alphanum
99
- self.class.cache # => returns data_storage.cache
100
- self.class.hexer # => returns rands.hexer
101
- phone_client # => returns phone_clients.nexmo
102
- end
103
- end
104
- ```
105
-
106
- ---
107
-
108
23
  ## Contributing
109
24
 
110
25
  - Fork it ( https://github.com/smart-rb/smart_injection )
@@ -6,6 +6,6 @@ module SmartCore
6
6
  #
7
7
  # @api public
8
8
  # @since 0.1.0
9
- VERSION = '0.0.0.alpha3'
9
+ VERSION = '0.0.0'
10
10
  end
11
11
  end
@@ -1,44 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'smart_core/container'
4
- require 'set'
5
-
6
3
  # @api public
7
4
  # @since 0.1.0
8
5
  module SmartCore
9
- # TODO: обязательно учесть наследование
10
-
11
- class << self
12
- # @param containers [Array<SmartCore::Container>]
13
- # @return [Module]
14
- #
15
- # @api public
16
- # @since 0.1.0
17
- # rubocop:disable Naming/MethodName
18
- def Injection(*containers)
19
- ::SmartCore::Injection::Injector::Modulizer.with_containers(containers)
20
- end
21
- # rubocop:enable Naming/MethodName
22
- end
23
-
24
6
  # @api public
25
7
  # @since 0.1.0
26
8
  module Injection
27
9
  require_relative 'injection/version'
28
- require_relative 'injection/errors'
29
- require_relative 'injection/injector'
30
- require_relative 'injection/locator'
31
- require_relative 'injection/dsl'
32
-
33
- class << self
34
- # @param base_klass [Class, Module]
35
- # @return [void]
36
- #
37
- # @api private
38
- # @since 0.1.0
39
- def included(base_klass)
40
- ::SmartCore::Injection::Injector::Modulizer.inject_to(base_klass)
41
- end
42
- end
43
10
  end
44
11
  end
@@ -5,10 +5,10 @@ require_relative 'lib/smart_core/injection/version'
5
5
  Gem::Specification.new do |spec|
6
6
  spec.required_ruby_version = Gem::Requirement.new('>= 2.4.10')
7
7
 
8
- spec.name = 'smart_injection'
8
+ spec.name = "smart_injection"
9
9
  spec.version = SmartCore::Injection::VERSION
10
- spec.authors = ['Rustam Ibragimov']
11
- spec.email = ['iamdaiver@gmail.com']
10
+ spec.authors = ["Rustam Ibragimov"]
11
+ spec.email = ["iamdaiver@gmail.com"]
12
12
 
13
13
  spec.summary = 'DI principles and idioms realized in scope of Ruby'
14
14
  spec.description = 'DI principles and idioms realized in scope of Ruby'
@@ -30,13 +30,9 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ['lib']
32
32
 
33
- spec.add_runtime_dependency 'smart_engine', '~> 0.7'
34
- spec.add_runtime_dependency 'smart_container', '~> 0.8', '>= 0.8.1'
35
-
36
33
  spec.add_development_dependency 'bundler', '~> 2.1'
37
34
  spec.add_development_dependency 'rake', '~> 13.0'
38
35
  spec.add_development_dependency 'rspec', '~> 3.9'
39
36
  spec.add_development_dependency 'armitage-rubocop', '~> 0.85'
40
37
  spec.add_development_dependency 'simplecov', '~> 0.18'
41
- spec.add_development_dependency 'pry', '~> 0.13'
42
38
  end
metadata CHANGED
@@ -1,49 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_injection
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0.alpha3
4
+ version: 0.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rustam Ibragimov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-09 00:00:00.000000000 Z
11
+ date: 2020-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: smart_engine
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.7'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '0.7'
27
- - !ruby/object:Gem::Dependency
28
- name: smart_container
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.8'
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- version: 0.8.1
37
- type: :runtime
38
- prerelease: false
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - "~>"
42
- - !ruby/object:Gem::Version
43
- version: '0.8'
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: 0.8.1
47
13
  - !ruby/object:Gem::Dependency
48
14
  name: bundler
49
15
  requirement: !ruby/object:Gem::Requirement
@@ -114,20 +80,6 @@ dependencies:
114
80
  - - "~>"
115
81
  - !ruby/object:Gem::Version
116
82
  version: '0.18'
117
- - !ruby/object:Gem::Dependency
118
- name: pry
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '0.13'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '0.13'
131
83
  description: DI principles and idioms realized in scope of Ruby
132
84
  email:
133
85
  - iamdaiver@gmail.com
@@ -149,20 +101,6 @@ files:
149
101
  - bin/console
150
102
  - bin/setup
151
103
  - lib/smart_core/injection.rb
152
- - lib/smart_core/injection/dsl.rb
153
- - lib/smart_core/injection/errors.rb
154
- - lib/smart_core/injection/injector.rb
155
- - lib/smart_core/injection/injector/container_set.rb
156
- - lib/smart_core/injection/injector/container_set/adding_listener.rb
157
- - lib/smart_core/injection/injector/injection_settings.rb
158
- - lib/smart_core/injection/injector/injection_settings/incompatability_control.rb
159
- - lib/smart_core/injection/injector/modulizer.rb
160
- - lib/smart_core/injection/injector/strategies.rb
161
- - lib/smart_core/injection/injector/strategies/method_injection.rb
162
- - lib/smart_core/injection/locator.rb
163
- - lib/smart_core/injection/locator/container_proxy.rb
164
- - lib/smart_core/injection/locator/dependency.rb
165
- - lib/smart_core/injection/locator/factory.rb
166
104
  - lib/smart_core/injection/version.rb
167
105
  - smart_injection.gemspec
168
106
  homepage: https://github.com/smart-rb/smart_injection
@@ -183,9 +121,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
183
121
  version: 2.4.10
184
122
  required_rubygems_version: !ruby/object:Gem::Requirement
185
123
  requirements:
186
- - - ">"
124
+ - - ">="
187
125
  - !ruby/object:Gem::Version
188
- version: 1.3.1
126
+ version: '0'
189
127
  requirements: []
190
128
  rubygems_version: 3.1.2
191
129
  signing_key:
@@ -1,107 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # @api public
4
- # @since 0.1.0
5
- module SmartCore::Injection::DSL
6
- class << self
7
- # @param base_klass [Class, Module]
8
- # @return [void]
9
- #
10
- # @api private
11
- # @since 0.1.0
12
- def included(base_klass)
13
- base_klass.instance_variable_set(
14
- :@__smart_injection_injector__,
15
- SmartCore::Injection::Injector.new(base_klass)
16
- )
17
-
18
- base_klass.extend(ClassMethods)
19
- base_klass.singleton_class.prepend(ClassInheritance)
20
- end
21
- end
22
-
23
- # @api private
24
- # @since 0.1.0
25
- module ClassInheritance
26
- # @param child_klass [Class]
27
- # @return [void]
28
- #
29
- # @api private
30
- # @since 0.1.0
31
- def inherited(child_klass)
32
- child_klass.instance_variable_set(
33
- :@__smart_injection_injector__,
34
- __smart_injection_injector__.duplicate_for(child_klass)
35
- )
36
- child_klass.singleton_class.prepend(ClassInheritance)
37
- super
38
- end
39
- end
40
-
41
- # @api private
42
- # @since 0.1.0
43
- module ClassMethods
44
- # @param imports [Hash<String|Symbol,String>]
45
- # @option memoize [Boolean]
46
- # @option access [Symbol]
47
- # @option bind [Symbol]
48
- # @option from [NilClass, SmartCore::Container]
49
- # @return [void]
50
- #
51
- # @api public
52
- # @sincd 0.1.0
53
- def import(
54
- imports,
55
- memoize: SmartCore::Injection::Injector::InjectionSettings::DEFAULT_MEMOIZE,
56
- access: SmartCore::Injection::Injector::InjectionSettings::DEFAULT_ACCESS,
57
- bind: SmartCore::Injection::Injector::InjectionSettings::DEFAULT_BINDING_STRATEGY,
58
- from: SmartCore::Injection::Injector::InjectionSettings::EMPTY_CONTAINER_DESTINATION
59
- )
60
- __smart_injection_injector__.inject(imports, memoize, access, bind, from)
61
- end
62
-
63
- # @param imports [Hash<String|Symbol,String>]
64
- # @option memoize [Boolean]
65
- # @option access [Symbol]
66
- # @option bind [Symbol]
67
- # @option from [NilClass, SmartCore::Container]
68
- # @return [void]
69
- #
70
- # @api public
71
- # @sincd 0.1.0
72
- def import_static(
73
- imports,
74
- memoize: SmartCore::Injection::Injector::InjectionSettings::DEFAULT_MEMOIZE,
75
- access: SmartCore::Injection::Injector::InjectionSettings::DEFAULT_ACCESS,
76
- bind: SmartCore::Injection::Injector::InjectionSettings::DEFAULT_BINDING_STRATEGY,
77
- from: SmartCore::Injection::Injector::InjectionSettings::EMPTY_CONTAINER_DESTINATION
78
- )
79
- __smart_injection_injector__.inject_static(imports, memoize, access, bind, from)
80
- end
81
-
82
- # @param containers [Array<SmartCore::Container>]
83
- # @return [void]
84
- #
85
- # @api public
86
- # @since 0.1.0
87
- def register_container(*containers)
88
- __smart_injection_injector__.register_container(*containers)
89
- end
90
-
91
- # @return [Array<SmartCore::Container>]
92
- #
93
- # @api public
94
- # @since 0.1.0
95
- def linked_containers
96
- __smart_injection_injector__.associated_containers
97
- end
98
-
99
- # @return [SmartCore::Injection::Injector]
100
- #
101
- # @api private
102
- # @since 0.1.0
103
- def __smart_injection_injector__
104
- @__smart_injection_injector__
105
- end
106
- end
107
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SmartCore::Injection
4
- # @api public
5
- # @since 0.1.0
6
- Error = Class.new(SmartCore::Error)
7
-
8
- # @api public
9
- # @since 0.1.0
10
- ArgumentError = Class.new(SmartCore::ArgumentError)
11
-
12
- # @api public
13
- # @since 0.1.0
14
- NoRegisteredContainersError = Class.new(Error)
15
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # @api private
4
- # @since 0.1.0
5
- class SmartCore::Injection::Injector::ContainerSet::AddingListener
6
- # @param listener [Proc]
7
- # @return [void]
8
- #
9
- # @api private
10
- # @since 0.1.0
11
- def initialize(listener)
12
- @listener = listener
13
- end
14
-
15
- # @param cotnainer [SmartCore::Container]
16
- #
17
- # @api private
18
- # @since 0.1.0
19
- def notify(container)
20
- listener.call(container)
21
- end
22
-
23
- private
24
-
25
- # @return [Proc]
26
- #
27
- # @api private
28
- # @since 0.1.0
29
- attr_reader :listener
30
- end
@@ -1,113 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # @api private
4
- # @since 0.1.0
5
- class SmartCore::Injection::Injector::ContainerSet
6
- require_relative 'container_set/adding_listener'
7
-
8
- # @since 0.1.0
9
- include Enumerable
10
-
11
- # @return [void]
12
- #
13
- # @api private
14
- # @since 0.1.0
15
- def initialize
16
- @containers = [] # NOTE: we use Array cuz we need an ordered set
17
- @adding_listeners = []
18
- @access_lock = SmartCore::Engine::Lock.new
19
- end
20
-
21
- # @param container [SmartCore::Container]
22
- # @return [void]
23
- #
24
- # @api private
25
- # @since 0.1.0
26
- def add(container)
27
- thread_safe { append_container(container) }
28
- end
29
- alias_method :<<, :add
30
-
31
- # @param listener [Block]
32
- # @yield [container]
33
- # @yieldparam container [SmartCore::Container]
34
- # @return [void]
35
- #
36
- # @api private
37
- # @since 0.1.0
38
- def listen_addings(&listener)
39
- thread_safe { add_adding_listener(listener) }
40
- end
41
-
42
- # @param block [Block]
43
- # @yield [container]
44
- # @yieldparam container [SmartCore::Container]
45
- # @return [Enumerator]
46
- #
47
- # @api private
48
- # @since 0.1.0
49
- def each(&block)
50
- thread_safe { block_given? ? containers.each(&block) : containers.each }
51
- end
52
-
53
- # @param block [Block]
54
- # @yield [container]
55
- # @yieldparam container [SmartCore::Container]
56
- # @return [Enumerator]
57
- #
58
- # @api private
59
- # @since 0.1.0
60
- def reverse_each(&block)
61
- thread_safe { block_given? ? containers.reverse_each(&block) : containers.reverse_each }
62
- end
63
-
64
- # @return [Array<SmartCore::Container>]
65
- #
66
- # @api private
67
- # @since 0.1.0
68
- def list
69
- thread_safe { containers.dup }
70
- end
71
-
72
- private
73
-
74
- # @return [Array<SmartCore::Container>]
75
- #
76
- # @api private
77
- # @since 0.1.0
78
- attr_reader :containers
79
-
80
- # @return [Array<SmartCore::Injection::Injector::ContainerSet::AddingListener>]
81
- attr_reader :adding_listeners
82
-
83
- # @param listener [Proc]
84
- # @return [void]
85
- #
86
- # @api private
87
- # @since 0.1.0
88
- def add_adding_listener(listener)
89
- adding_listeners << SmartCore::Injection::Injector::ContainerSet::AddingListener.new(listener)
90
- end
91
-
92
- # @param container [SmartCore::Container]
93
- # @return [void]
94
- #
95
- # @api private
96
- # @since 0.1.0
97
- def append_container(container)
98
- # NOTE:
99
- # - #concant is used to prevent container duplications in ordered set;
100
- # - @containers should have an ordered unified container list;
101
- containers.concat([container])
102
- adding_listeners.each { |listener| listener.notify(container) }
103
- end
104
-
105
- # @param block [Block]
106
- # @return [Any]
107
- #
108
- # @api private
109
- # @since 0.1.0
110
- def thread_safe(&block)
111
- @access_lock.synchronize(&block)
112
- end
113
- end