smart_container 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6670714cdeb503df6debb42135ee26283aef48a012fcf2469487668390a675f3
4
- data.tar.gz: ba0ad291f05bdebb5d5af7fc46554c30c0748753243e04ac6277abf74886acb6
3
+ metadata.gz: fbae5c2d40dc40e3114d685c1f13d6cbfb7003a1c8fda862ef5dbcfa432cf5cd
4
+ data.tar.gz: dd288fa47167c0da4e2aae656478170d0dd78b142eef52a351c461ddbc92bf29
5
5
  SHA512:
6
- metadata.gz: 29b1566aaff6a6227ed13a03a0b65110ce319c4b08bccc50b8c346793cb258174ee611fa19e3950e339049ab50b5819fc31ae6164b2e6d715c8a51d72a29a44f
7
- data.tar.gz: cd38836e86ef48c860e58e55af5a30b8f3babdb7724658f96dee7a42ee953a122667688b29bdbb50aeccb94fc4026c1dc17d922524f21a32b20ab67ad7f3ca58
6
+ metadata.gz: 27129a91c84f8aad432c5462c2d3a921284b2b8e3b1fb4b0a215295f6f88d94063946cc24f2d065f6da9ba6e64baf421f2a192b68fa63ebda879a81715e2c88f
7
+ data.tar.gz: 5e6839adcfe1e3c31513b622fc3e46aab37ab3ec35a992c8a3b9c7ff029c976dbf331619d3df20da7ffe3d712a8839f04ac83f3055f9e2426869e9b9ecf556f6
@@ -1,6 +1,16 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [0.8.1] - 2020-07-09
5
+ ### Changed
6
+ - *Core*
7
+ - refactored `SmartCore::Container::Entities::NamespaceBuilder` and `SmartCore::Container::Entities::DependencyBuilder`
8
+ (from stateful-based logic on instances to stateless-based logic on modules);
9
+
10
+ ### Fixed
11
+ - Subscription to the nested dependency changement doesn't work
12
+ (incomplete nested dependency path in watcher notification);
13
+
4
14
  ## [0.8.0] - 2020-07-08
5
15
  ### Added
6
16
  - An ability to observe dependency re-registrations:
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- smart_container (0.8.0)
4
+ smart_container (0.8.1)
5
5
  smart_engine (~> 0.5)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -35,7 +35,7 @@ require 'smart_core/container'
35
35
  - [reloading](#reloading)
36
36
  - [hash tree](#hash-tree)
37
37
  - [explicit class definition](#explicit-class-definition)
38
- - [dependency changement observing](#dependency-changement-observing)
38
+ - [subscribe to dependency changements](#subscribe-to-dependency-changements)
39
39
  - [Roadmap](#roadmap)
40
40
 
41
41
  ---
@@ -257,7 +257,7 @@ AppContainer['db_driver'] # => Sequel (AppContainer dependency)
257
257
 
258
258
  ---
259
259
 
260
- #### dependency changement observing
260
+ #### subscribe to dependency changements
261
261
 
262
262
  - features and limitations:
263
263
  - you can subscribe only on container instances (on container instance changements);
@@ -292,13 +292,13 @@ end
292
292
  ```
293
293
 
294
294
  ```ruby
295
- container.register('database.stats') { 'kek' } # => invokes entity_observer and outputs "changed! => 'kek'"
295
+ container.fetch('database').register('stats') = 'kek' # => invokes entity_observer and outputs "changed! => 'kek'"
296
296
  container.namespace('database') {} # => invoks namespace_observer and outputs "changed => 'database'"
297
297
 
298
298
  container.unobserve(observer) # unsubscribe entity_observer from dependency changement observing;
299
299
  container.clear_observers # unsubscribe all observers
300
300
 
301
- container.register('database.stats') { 'kek' } # no one to listen this changement... :)
301
+ container.fetch('database').register('stats') = 'pek' # no one to listen this changement... :)
302
302
  container.namespace('database') {} # no one to listen this changement... :)
303
303
  ```
304
304
 
@@ -306,6 +306,17 @@ container.namespace('database') {} # no one to listen this changement... :)
306
306
 
307
307
  ## Roadmap
308
308
 
309
+ - convinient way to rebind registered dependnecies:
310
+
311
+ ```ruby
312
+ # PoC
313
+
314
+ container['dependency.path'] = 'pek' # simplest instant dependency registration without memoization
315
+ # --- or/and ---
316
+ container.rebind('dependency.path', memoize: true/false) { 'pek' } # bind with dynamic dependency registration
317
+ container.rebind('dependency.path', memoize: true/false, 'pek') # bind with instant dependency registration
318
+ ```
319
+
309
320
  - pattern-based pathes in dependency changement observing;
310
321
 
311
322
  ```ruby
@@ -19,6 +19,7 @@ module SmartCore
19
19
  require_relative 'container/registry_builder'
20
20
  require_relative 'container/dependency_resolver'
21
21
  require_relative 'container/dependency_watcher'
22
+ require_relative 'container/host'
22
23
  require_relative 'container/mixin'
23
24
 
24
25
  class << self
@@ -45,18 +46,48 @@ module SmartCore
45
46
  # @since 0.1.0
46
47
  include DefinitionDSL
47
48
 
49
+ # @return [NilClass]
50
+ #
51
+ # @api private
52
+ # @since 0.8.1
53
+ NO_HOST_CONTAINER = nil
54
+
55
+ # @return [NilClass]
56
+ #
57
+ # @api private
58
+ # @since 0.8.1
59
+ NO_HOST_PATH = nil
60
+
48
61
  # @return [SmartCore::Container::Registry]
49
62
  #
50
63
  # @api private
51
64
  # @since 0.1.0
52
65
  attr_reader :registry
53
66
 
67
+ # @return [SmartCore::Container::Host]
68
+ #
69
+ # @api private
70
+ # @since 0.8.1
71
+ attr_reader :host
72
+
73
+ # @return [SmartCore::Container::DependencyWatcher]
74
+ #
75
+ # @api private
76
+ # @since 0.8.0
77
+ attr_reader :watcher
78
+
79
+ # @option host_container [SmartCore::Container, NilClass]
80
+ # @option host_path [String, NilClass]
54
81
  # @return [void]
55
82
  #
56
83
  # @api public
57
84
  # @since 0.1.0
58
- def initialize
85
+ # @version 0.8.1
86
+ def initialize(host_container: NO_HOST_CONTAINER, host_path: NO_HOST_PATH)
87
+ @host = SmartCore::Container::Host.build(host_container, host_path)
59
88
  build_registry!
89
+ @watcher = SmartCore::Container::DependencyWatcher.new(self)
90
+ @host_path = host_path
60
91
  @access_lock = ArbitraryLock.new
61
92
  end
62
93
 
@@ -87,7 +118,7 @@ module SmartCore
87
118
  # @version 0.8.0
88
119
  def namespace(namespace_name, &dependencies_definition)
89
120
  thread_safe do
90
- registry.register_namespace(namespace_name, &dependencies_definition)
121
+ registry.register_namespace(namespace_name, self, &dependencies_definition)
91
122
  watcher.notify(namespace_name)
92
123
  end
93
124
  end
@@ -238,20 +269,13 @@ module SmartCore
238
269
 
239
270
  private
240
271
 
241
- # @return [SmartCore::Container::DependencyWatcher]
242
- #
243
- # @api private
244
- # @since 0.8.0
245
- attr_reader :watcher
246
-
247
272
  # @return [void]
248
273
  #
249
274
  # @api private
250
275
  # @since 0.1.0
251
- # @version 0.8.0
276
+ # @version 0.8.1
252
277
  def build_registry!
253
278
  @registry = RegistryBuilder.build(self)
254
- @watcher = SmartCore::Container::DependencyWatcher.new(self)
255
279
  end
256
280
 
257
281
  # @param block [Block]
@@ -22,8 +22,9 @@ module SmartCore::Container::DependencyResolver
22
22
  #
23
23
  # @api private
24
24
  # @since 0.1.0
25
+ # @version 0.8.1
25
26
  def fetch(container, dependency_path)
26
- container.registry.resolve(dependency_path).reveal
27
+ container.registry.resolve(dependency_path).reveal(container)
27
28
  end
28
29
 
29
30
  # @param container [SmartCore::Container]
@@ -86,12 +87,16 @@ module SmartCore::Container::DependencyResolver
86
87
  #
87
88
  # @api private
88
89
  # @since 0.1.0
90
+ # @version 0.8.1
89
91
  def resolve(container, dependency_path)
90
92
  entity = container
93
+ host_container = container
94
+
91
95
  Route.build(dependency_path).each do |cursor|
92
96
  entity = entity.registry.resolve(cursor.current_path)
93
97
  prevent_ambiguous_resolving!(cursor, entity)
94
- entity = entity.reveal
98
+ entity = entity.reveal(host_container)
99
+ host_container = entity.is_a?(SmartCore::Container) ? entity : nil
95
100
  end
96
101
  entity
97
102
  rescue SmartCore::Container::ResolvingError => error
@@ -106,14 +111,17 @@ module SmartCore::Container::DependencyResolver
106
111
  #
107
112
  # @api private
108
113
  # @since 0.5.0
114
+ # @version 0.8.1
109
115
  def extract(container, entity_path)
110
116
  resolved_entity = container
111
117
  extracted_entity = container
118
+ host_container = container
112
119
 
113
120
  Route.build(entity_path).each do |cursor|
114
121
  resolved_entity = resolved_entity.registry.resolve(cursor.current_path)
115
122
  extracted_entity = resolved_entity
116
- resolved_entity = resolved_entity.reveal
123
+ resolved_entity = resolved_entity.reveal(host_container)
124
+ host_container = resolved_entity.is_a?(SmartCore::Container) ? resolved_entity : nil
117
125
  end
118
126
 
119
127
  extracted_entity
@@ -12,7 +12,7 @@ class SmartCore::Container::DependencyWatcher
12
12
  # @since 0.8.0
13
13
  def initialize(container)
14
14
  @container = container
15
- @observers = Hash.new { |k, v| k[v] = [] }
15
+ @observers = Hash.new { |h, k| h[k] = [] }
16
16
  @access_lock = SmartCore::Container::ArbitraryLock.new
17
17
  end
18
18
 
@@ -72,9 +72,11 @@ class SmartCore::Container::DependencyWatcher
72
72
  #
73
73
  # @api private
74
74
  # @since 0.8.0
75
+ # @version 0.8.1
75
76
  def notify_listeners(entity_path)
76
77
  entity_path = indifferently_accessable_path(entity_path)
77
78
  observers.fetch(entity_path).each(&:notify!) if observers.key?(entity_path)
79
+ container.host.notify_about_nested_changement(entity_path)
78
80
  end
79
81
 
80
82
  # @param entity_path [String, Symbol]
@@ -20,11 +20,13 @@ class SmartCore::Container::Entities::Dependency < SmartCore::Container::Entitie
20
20
  @dependency_definition = dependency_definition
21
21
  end
22
22
 
23
+ # @param host_container [SmartCore::Container, NilClass]
23
24
  # @return [Any]
24
25
  #
25
26
  # @api private
26
27
  # @since 0.1.0
27
- def reveal
28
+ # @version 0.8.1
29
+ def reveal(host_container = SmartCore::Container::NO_HOST_CONTAINER)
28
30
  dependency_definition.call
29
31
  end
30
32
 
@@ -2,7 +2,8 @@
2
2
 
3
3
  # @api private
4
4
  # @since 0.1.0
5
- class SmartCore::Container::Entities::DependencyBuilder
5
+ # @version 0.8.1
6
+ module SmartCore::Container::Entities::DependencyBuilder
6
7
  class << self
7
8
  # @param dependency_name [String]
8
9
  # @param dependency_definition [Proc]
@@ -11,68 +12,35 @@ class SmartCore::Container::Entities::DependencyBuilder
11
12
  #
12
13
  # @api private
13
14
  # @since 0.1.0
14
- # @version 0.2.0
15
+ # @version 0.8.1
15
16
  def build(dependency_name, dependency_definition, memoize)
16
- new(dependency_name, dependency_definition, memoize).build
17
+ if memoize
18
+ build_memoized_dependency(dependency_name, dependency_definition)
19
+ else
20
+ build_original_dependency(dependency_name, dependency_definition)
21
+ end
17
22
  end
18
- end
19
-
20
- # @param dependency_name [String]
21
- # @param dependency_definition [Proc]
22
- # @param memoize [Boolean]
23
- # @return [void]
24
- #
25
- # @api private
26
- # @since 0.1.0
27
- # @version 0.2.0
28
- def initialize(dependency_name, dependency_definition, memoize)
29
- @dependency_name = dependency_name
30
- @dependency_definition = dependency_definition
31
- @memoize = memoize
32
- end
33
-
34
- # @return [SmartCore::Container::Entities::Dependency]
35
- #
36
- # @api private
37
- # @since 0.1.0
38
- # @version 0.2.0
39
- def build
40
- memoize ? build_memoized_dependency : build_original_dependency
41
- end
42
-
43
- private
44
23
 
45
- # @return [String]
46
- #
47
- # @api private
48
- # @since 0.1.0
49
- attr_reader :dependency_name
24
+ private
50
25
 
51
- # @return [Proc]
52
- #
53
- # @api private
54
- # @since 0.1.0
55
- attr_reader :dependency_definition
56
-
57
- # @return [Boolean]
58
- #
59
- # @api private
60
- # @since 0.2.0
61
- attr_reader :memoize
62
-
63
- # @return [SmartCore::Container::Entities::Dependency]
64
- #
65
- # @api private
66
- # @since 0.2.0
67
- def build_memoized_dependency
68
- SmartCore::Container::Entities::MemoizedDependency.new(dependency_name, dependency_definition)
69
- end
26
+ # @param dependency_name [String]
27
+ # @param dependency_definition [Proc]
28
+ # @return [SmartCore::Container::Entities::Dependency]
29
+ #
30
+ # @api private
31
+ # @since 0.8.1
32
+ def build_memoized_dependency(dependency_name, dependency_definition)
33
+ SmartCore::Container::Entities::MemoizedDependency.new(dependency_name, dependency_definition)
34
+ end
70
35
 
71
- # @return [SmartCore::Container::Entities::Dependency]
72
- #
73
- # @api private
74
- # @since 0.2.0
75
- def build_original_dependency
76
- SmartCore::Container::Entities::Dependency.new(dependency_name, dependency_definition)
36
+ # @param dependency_name [String]
37
+ # @param dependency_definition [Proc]
38
+ # @return [SmartCore::Container::Entities::Dependency]
39
+ #
40
+ # @api private
41
+ # @since 0.8.1
42
+ def build_original_dependency(dependency_name, dependency_definition)
43
+ SmartCore::Container::Entities::Dependency.new(dependency_name, dependency_definition)
44
+ end
77
45
  end
78
46
  end
@@ -15,11 +15,13 @@ module SmartCore::Container::Entities
15
15
  @lock = SmartCore::Container::ArbitraryLock.new
16
16
  end
17
17
 
18
+ # @param host_container [SmartCore::Container, NilClass]
18
19
  # @return [Any]
19
20
  #
20
21
  # @api private
21
22
  # @since 0.2.0
22
- def reveal
23
+ # @version 0.8.1
24
+ def reveal(host_container = SmartCore::Container::NO_HOST_CONTAINER)
23
25
  @lock.thread_safe do
24
26
  unless instance_variable_defined?(:@revealed_dependency)
25
27
  @revealed_dependency = dependency_definition.call
@@ -9,24 +9,35 @@ class SmartCore::Container::Entities::Namespace < SmartCore::Container::Entities
9
9
  # @since 0.1.0
10
10
  alias_method :namespace_name, :external_name
11
11
 
12
+ # @return [NilClass, SmartCore::Container]
13
+ #
14
+ # @api private
15
+ # @since 0.8.01
16
+ attr_reader :host_container
17
+
12
18
  # @param namespace_name [String]
19
+ # @param host_container [NilClass, SmartCore::Container]
13
20
  # @return [void]
14
21
  #
15
22
  # @api private
16
23
  # @since 0.1.0
17
- def initialize(namespace_name)
24
+ # @version 0.8.1
25
+ def initialize(namespace_name, host_container = SmartCore::Container::NO_HOST_CONTAINER)
18
26
  super(namespace_name)
19
27
  @container_klass = Class.new(SmartCore::Container)
20
28
  @container_instance = nil
29
+ @host_container = host_container
21
30
  @lock = SmartCore::Container::ArbitraryLock.new
22
31
  end
23
32
 
33
+ # @param runtime_host_container [SmartCore::Container, NilClass]
24
34
  # @return [SmartCore::Container]
25
35
  #
26
36
  # @api private
27
37
  # @since 0.1.0
28
- def reveal
29
- thread_safe { container_instance }
38
+ # @version 0.8.1
39
+ def reveal(runtime_host_container = SmartCore::Container::NO_HOST_CONTAINER)
40
+ thread_safe { container_instance(runtime_host_container) }
30
41
  end
31
42
 
32
43
  # @param dependencies_definition [Proc]
@@ -54,12 +65,18 @@ class SmartCore::Container::Entities::Namespace < SmartCore::Container::Entities
54
65
  # @since 0.1.0
55
66
  attr_reader :container_klass
56
67
 
68
+ # @param runtime_host_container [SmartCore::Container, NilClass]
57
69
  # @return [SmartCore::Container]
58
70
  #
59
71
  # @api private
60
72
  # @since 0.1.0
61
- def container_instance
62
- @container_instance ||= container_klass.new
73
+ # @version 0.8.1
74
+ def container_instance(runtime_host_container = SmartCore::Container::NO_HOST_CONTAINER)
75
+ @host_container ||= runtime_host_container
76
+ @container_instance ||= container_klass.new(
77
+ host_container: @host_container,
78
+ host_path: @host_container && namespace_name
79
+ )
63
80
  end
64
81
 
65
82
  # @param block [Block]
@@ -2,40 +2,20 @@
2
2
 
3
3
  # @api private
4
4
  # @since 0.1.0
5
- class SmartCore::Container::Entities::NamespaceBuilder
6
- class << self
7
- # @param namespace_name [String]
8
- # @return [SmartCore::Container::Entities::Namespace]
9
- #
10
- # @api private
11
- # @since 0.1.0
12
- def build(namespace_name)
13
- new(namespace_name).build
5
+ # @version 0.8.1
6
+ module SmartCore::Container::Entities
7
+ module NamespaceBuilder
8
+ class << self
9
+ # @param namespace_name [String]
10
+ # @param host_container [SmartContainer, NilClass]
11
+ # @return [SmartCore::Container::Entities::Namespace]
12
+ #
13
+ # @api private
14
+ # @since 0.1.0
15
+ # @version 0.8.1
16
+ def build(namespace_name, host_container = SmartCore::Container::NO_HOST_CONTAINER)
17
+ SmartCore::Container::Entities::Namespace.new(namespace_name, host_container)
18
+ end
14
19
  end
15
20
  end
16
-
17
- # @param namespace_name [String]
18
- # @return [void]
19
- #
20
- # @api private
21
- # @since 0.1.0
22
- def initialize(namespace_name)
23
- @namespace_name = namespace_name
24
- end
25
-
26
- # @return [SmartCore::Container::Entities::Namespace]
27
- #
28
- # @api private
29
- # @since 0.1.0
30
- def build
31
- SmartCore::Container::Entities::Namespace.new(namespace_name)
32
- end
33
-
34
- private
35
-
36
- # @return [String]
37
- #
38
- # @api private
39
- # @since 0.1.0
40
- attr_reader :namespace_name
41
21
  end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.8.1
5
+ class SmartCore::Container::Host
6
+ class << self
7
+ # @param container [SmartCore::Container]
8
+ # @param path [String]
9
+ # @return [SmartCore::Container::Host]
10
+ #
11
+ # @api private
12
+ # @since 0.8.1
13
+ def build(container, path) # rubocop:disable Metrics/AbcSize
14
+ if (container.nil? && !path.nil?) || (!container.nil? && path.nil?)
15
+ raise(SmartCore::Container::ArgumentError, <<~ERROR_MESSAGE)
16
+ Host container requires both host container instance and host container path
17
+ (container: #{container.inspect} / path: #{path.inspect})
18
+ ERROR_MESSAGE
19
+ end
20
+
21
+ if (!container.nil? && !path.nil?) &&
22
+ (!container.is_a?(SmartCore::Container) || !path.is_a?(String))
23
+ raise(SmartCore::Container::ArgumentError, <<~ERROR_MESSAGE)
24
+ Host container should be a type of SmartCore::Container
25
+ and host path should be a type of String.
26
+ ERROR_MESSAGE
27
+ end
28
+
29
+ new(container, path)
30
+ end
31
+ end
32
+
33
+ # @return [SmartCore::Container]
34
+ #
35
+ # @api private
36
+ # @since 0.8.1
37
+ attr_reader :container
38
+
39
+ # @return [String]
40
+ #
41
+ # @api private
42
+ # @since 0.8.1
43
+ attr_reader :path
44
+
45
+ # @return [Boolean]
46
+ #
47
+ # @api private
48
+ # @since 0.8.1
49
+ attr_reader :exists
50
+ alias_method :exists?, :exists
51
+ alias_method :present?, :exists
52
+
53
+ # @param container [SmartCore::Container]
54
+ # @param path [String]
55
+ # @return [void]
56
+ #
57
+ # @api private
58
+ # @since 0.8.1
59
+ def initialize(container, path)
60
+ @container = container
61
+ @path = path
62
+ @exists = !!container
63
+ end
64
+
65
+ # @param nested_entity_path [String]
66
+ # @return [void]
67
+ #
68
+ # @api private
69
+ # @since 0.8.1
70
+ def notify_about_nested_changement(nested_entity_path)
71
+ return unless exists?
72
+ host_path = "#{path}" \
73
+ "#{SmartCore::Container::DependencyResolver::PATH_PART_SEPARATOR}" \
74
+ "#{nested_entity_path}"
75
+ container.watcher.notify(host_path)
76
+ end
77
+ end
@@ -62,13 +62,19 @@ class SmartCore::Container::Registry
62
62
  end
63
63
 
64
64
  # @param name [String, Symbol]
65
+ # @param host_container [NilClasss, SmartCore::Container]
65
66
  # @param dependencies_definition [Block]
66
67
  # @return [void]
67
68
  #
68
69
  # @api private
69
70
  # @since 0.1.0
70
- def register_namespace(name, &dependencies_definition)
71
- thread_safe { add_namespace(name, dependencies_definition) }
71
+ # @version 0.8.1
72
+ def register_namespace(
73
+ name,
74
+ host_container = SmartCore::Container::NO_HOST_CONTAINER,
75
+ &dependencies_definition
76
+ )
77
+ thread_safe { add_namespace(name, host_container, dependencies_definition) }
72
78
  end
73
79
 
74
80
  # @return [void]
@@ -223,6 +229,7 @@ class SmartCore::Container::Registry
223
229
  end
224
230
 
225
231
  # @param namespace_name [String, Symbol]
232
+ # @param host_container [NilClass, SmartCore::Container]
226
233
  # @param dependencies_definition [Proc]
227
234
  # @return [SmartCore::Container::Entities::Namespace]
228
235
  #
@@ -230,11 +237,13 @@ class SmartCore::Container::Registry
230
237
  #
231
238
  # @api private
232
239
  # @since 0.1.0
233
- def add_namespace(namespace_name, dependencies_definition)
240
+ # @version 0.8.1
241
+ def add_namespace(namespace_name, host_container, dependencies_definition)
234
242
  if state_frozen?
235
243
  raise(SmartCore::Container::FrozenRegistryError, 'Can not modify frozen registry!')
236
244
  end
237
245
  namespace_name = indifferently_accessable_name(namespace_name)
246
+ dependencies_definition ||= proc {}
238
247
  prevent_dependency_overlap!(namespace_name)
239
248
 
240
249
  # rubocop:disable Layout/RescueEnsureAlignment
@@ -242,7 +251,7 @@ class SmartCore::Container::Registry
242
251
  fetch_entity(namespace_name)
243
252
  rescue SmartCore::Container::FetchError
244
253
  registry[namespace_name] = SmartCore::Container::Entities::NamespaceBuilder.build(
245
- namespace_name
254
+ namespace_name, host_container
246
255
  )
247
256
  end
248
257
  # rubocop:enable Layout/RescueEnsureAlignment
@@ -4,7 +4,7 @@ module SmartCore
4
4
  class Container
5
5
  # @api public
6
6
  # @since 0.1.0
7
- # @version 0.8.0
8
- VERSION = '0.8.0'
7
+ # @version 0.8.1
8
+ VERSION = '0.8.1'
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_container
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
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-08 00:00:00.000000000 Z
11
+ date: 2020-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: smart_engine
@@ -159,6 +159,7 @@ files:
159
159
  - lib/smart_core/container/entities/namespace.rb
160
160
  - lib/smart_core/container/entities/namespace_builder.rb
161
161
  - lib/smart_core/container/errors.rb
162
+ - lib/smart_core/container/host.rb
162
163
  - lib/smart_core/container/key_guard.rb
163
164
  - lib/smart_core/container/mixin.rb
164
165
  - lib/smart_core/container/registry.rb