smart_ioc 0.5.0 → 0.5.2

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: 9d8b979ba9bf2ec07fbd542a155af2fad52bb85fdbffece8cc50f1e3132c8d77
4
- data.tar.gz: 47478f2706b6e5a262af7de3974825ca8d01b48839716c14d9996749421b390a
3
+ metadata.gz: f7dac45d6133624620331b4bbc980e7e19574881e51b4c98b2558d7b5114c584
4
+ data.tar.gz: a7753416faca728d5f72e2d8d215b3f77ef7de7eeb54f58601bf97d3b2d92f5d
5
5
  SHA512:
6
- metadata.gz: 530e72ce702c8f328ca21ce183d6f511216cb957511f026b52dbcd110b9fc0b21e418e2005f549cfcea75f1b6e6b7b1de3134e476609a19588755434c058aefb
7
- data.tar.gz: 75ac2416d31d4e067d9a4e3fb1966edfa3a929771fad2760f7506bf50a8e8b60c0a7b1d0fa72120856230ceb62212256a402ebebd981b548e17a4e5134da73ed
6
+ metadata.gz: ca530b375da6e1467d9d6ac60e7c84e3be955a8c1922bd4b4a2a24d53057ba3cb707ffe87a7bbaf0e897749b4825cdf138312df8fc24441a921c41cf60f8824d
7
+ data.tar.gz: ca838c6018069eead30c652c05f74a2c0f345429b87845e70c9f9d5cfb1d98021cb96f93417605ac2171ac99ee6ecf31dd12341f7fa85becdb201dcf5940e367
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.3.4
1
+ 3.2.2
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- smart_ioc (0.5.0)
4
+ smart_ioc (0.5.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -67,12 +67,14 @@ class SmartIoC::BeanDefinition
67
67
 
68
68
  def preload
69
69
  @dependencies.each do |dep|
70
- SmartIoC::Container.get_instance.get_bean(
71
- dep.ref || dep.bean_name,
70
+ bd = SmartIoC.get_bean_definition(
71
+ dep.ref,
72
72
  package: dep.package,
73
73
  parent_bean_definition: self,
74
74
  parent_bean_name: name,
75
- ).class._smart_ioc_preload_; nil
75
+ )
76
+
77
+ bd.preload
76
78
  end
77
79
  end
78
80
  end
@@ -2,11 +2,11 @@ class SmartIoC::BeanDefinitionsStorage
2
2
  include SmartIoC::Errors
3
3
 
4
4
  def initialize
5
- @collection = []
5
+ @collection = Hash.new { |h, k| h[k] = [] }
6
6
  end
7
7
 
8
8
  def clear_dependencies
9
- @collection.each do |bd|
9
+ @collection.values.flatten.each do |bd|
10
10
  bd.dependencies.each do |dependency|
11
11
  dependency.bean_definition = nil
12
12
  end
@@ -15,12 +15,12 @@ class SmartIoC::BeanDefinitionsStorage
15
15
 
16
16
  # @param bean_definition [BeanDefinition]
17
17
  def push(bean_definition)
18
- existing_bd = @collection.detect do |bd|
19
- bd == bean_definition
20
- end
18
+ bd_scope = @collection[bean_definition.name]
19
+
20
+ existing_bd = bd_scope.detect { |bd| bd == bean_definition }
21
21
 
22
22
  if existing_bd
23
- @collection.reject! { |bd| bd == existing_bd }
23
+ bd_scope.reject! { |bd| bd == bean_definition }
24
24
 
25
25
  message = <<~EOF
26
26
  \nReplacing bean definition...
@@ -34,22 +34,15 @@ class SmartIoC::BeanDefinitionsStorage
34
34
  puts message
35
35
  end
36
36
 
37
- @collection.push(bean_definition)
37
+ bd_scope.push(bean_definition)
38
38
  end
39
39
 
40
- def delete_by_class(klass)
41
- klass_str = klass.to_s
42
- bean = @collection.detect {|bd| bd.klass.to_s == klass_str}
40
+ def delete(bean_definition)
41
+ bd_scope = @collection[bean_definition.name]
43
42
 
44
- if bean
45
- @collection.delete(bean)
46
- end
47
- end
43
+ bd_scope.delete_if { |bd| bd.klass.to_s == bean_definition.klass.to_s }
48
44
 
49
- # @param klass [Class] bean class
50
- # @return bean definition [BeanDefinition] or nil
51
- def find_by_class(klass)
52
- @collection.detect {|bd| bd.klass == klass}
45
+ nil
53
46
  end
54
47
 
55
48
  # Returns bean definition for specific class
@@ -58,27 +51,23 @@ class SmartIoC::BeanDefinitionsStorage
58
51
  # @param context [Symbol]
59
52
  # @return bean definition [BeanDefinition] or nil
60
53
  def find_bean(bean_name, package, context)
61
- @collection.detect {|bd| bd.name == bean_name && bd.package == package && bd.context == context}
54
+ @collection[bean_name].detect do |bd|
55
+ bd.name == bean_name && bd.package == package && bd.context == context
56
+ end
62
57
  end
63
58
 
64
59
  def filter_by(bean_name, package = nil, context = nil)
65
- bean_definitions = @collection.select do |bd|
66
- bd.name == bean_name
67
- end
60
+ bd_scope = @collection[bean_name]
68
61
 
69
62
  if package
70
- bean_definitions = bean_definitions.select do |bd|
71
- bd.package == package
72
- end
63
+ bd_scope = bd_scope.select { |bd| bd.package == package }
73
64
  end
74
65
 
75
66
  if context
76
- bean_definitions = bean_definitions.select do |bd|
77
- bd.context == context
78
- end
67
+ bd_scope = bean_definitions.select { |bd| bd.context == context }
79
68
  end
80
69
 
81
- bean_definitions
70
+ bd_scope
82
71
  end
83
72
 
84
73
  # @bean_name [Symbol] bean name
@@ -112,26 +101,18 @@ class SmartIoC::BeanDefinitionsStorage
112
101
  # @package [Symbol, nil] package name
113
102
  # @context [Symbol, nil] context
114
103
  def filter_by_with_drop_to_default_context(bean_name, package = nil, context = nil)
115
- bean_definitions = @collection.select do |bd|
116
- bd.name == bean_name
117
- end
104
+ bd_scope = @collection[bean_name]
118
105
 
119
106
  if package
120
- bean_definitions = bean_definitions.select do |bd|
121
- bd.package == package
122
- end
107
+ bd_scope = bd_scope.select { |bd| bd.package == package }
123
108
  end
124
109
 
125
110
  if context
126
- context_bean_definitions = bean_definitions.select do |bd|
127
- bd.context == context
128
- end
111
+ context_bean_definitions = bd_scope.select { |bd| bd.context == context }
129
112
 
130
- if !context_bean_definitions.empty?
131
- bean_definitions = context_bean_definitions
132
- end
113
+ bd_scope = context_bean_definitions if context_bean_definitions.any?
133
114
  end
134
115
 
135
- bean_definitions
116
+ bd_scope
136
117
  end
137
118
  end
@@ -32,16 +32,7 @@ class SmartIoC::BeanFactory
32
32
  # @raise [ArgumentError] if bean is not found
33
33
  # @raise [ArgumentError] if ambiguous bean definition was found
34
34
  def get_bean(bean_name, package: nil, parent_bean_definition: nil, context: nil, parent_bean_name: nil)
35
- check_arg(bean_name, :bean_name, Symbol)
36
- check_arg(package, :package, Symbol) if package
37
- check_arg(parent_bean_definition, :parent_bean_definition, SmartIoC::BeanDefinition) if parent_bean_definition
38
- check_arg(context, :context, Symbol) if context
39
-
40
- @bean_file_loader.require_bean(bean_name)
41
-
42
- parent_package_name = parent_bean_definition ? parent_bean_definition.package : nil
43
- context = autodetect_context(bean_name, package, parent_package_name, context, parent_bean_name)
44
- bean_definition = @bean_definitions_storage.find(bean_name, package, context, parent_package_name)
35
+ bean_definition = get_bean_definition(bean_name, package:, parent_bean_definition:, context:, parent_bean_name:)
45
36
  scope = get_scope(bean_definition)
46
37
  bean = scope.get_bean(bean_definition.klass)
47
38
 
@@ -56,6 +47,19 @@ class SmartIoC::BeanFactory
56
47
  raise e
57
48
  end
58
49
 
50
+ def get_bean_definition(bean_name, package: nil, context: nil, parent_bean_definition: nil, parent_bean_name: nil)
51
+ check_arg(bean_name, :bean_name, Symbol)
52
+ check_arg(package, :package, Symbol) if package
53
+ check_arg(parent_bean_definition, :parent_bean_definition, SmartIoC::BeanDefinition) if parent_bean_definition
54
+ check_arg(context, :context, Symbol) if context
55
+
56
+ @bean_file_loader.require_bean(bean_name)
57
+
58
+ parent_package_name = parent_bean_definition ? parent_bean_definition.package : nil
59
+ context = autodetect_context(bean_name, package, parent_package_name, context, parent_bean_name)
60
+ bean_definition = @bean_definitions_storage.find(bean_name, package, context, parent_package_name)
61
+ end
62
+
59
63
  private
60
64
 
61
65
  def init_bean(bean_definition)
@@ -19,10 +19,10 @@ module SmartIoC
19
19
  raise ArgumentError, "SmartIoC::Container should not be allocated. Use SmartIoC::Container.get_instance instead"
20
20
  end
21
21
 
22
- # @param klass [Class] bean class name
22
+ # @param klass [BeanDefinition] bean class name
23
23
  # @return nil
24
- def unregister_bean(klass)
25
- bean_definitions_storage.delete_by_class(klass)
24
+ def unregister_bean(bean_definition)
25
+ bean_definitions_storage.delete(bean_definition)
26
26
  clear_scopes
27
27
  nil
28
28
  end
@@ -90,10 +90,14 @@ module SmartIoC
90
90
  # @param package [Symbol]
91
91
  # @param context [Symbol]
92
92
  # return [BeanDefinition]
93
- def get_bean_definition(bean_name, package, context)
93
+ def find_bean_definition(bean_name, package, context)
94
94
  bean_definitions_storage.find_bean(bean_name, package, context)
95
95
  end
96
96
 
97
+ def get_bean_definition(...)
98
+ bean_factory.get_bean_definition(...)
99
+ end
100
+
97
101
  # Sets new load proc
98
102
  # for those who use active support dependency loader
99
103
  # one can use
@@ -68,15 +68,14 @@ module SmartIoC::Iocify
68
68
  file_path ||= caller[0].split(':').first
69
69
  package ||= SmartIoC::BeanLocations.get_bean_package(file_path)
70
70
  context ||= SmartIoC::Container::DEFAULT_CONTEXT
71
- bean_definition = SmartIoC.get_bean_definition(bean_name, package, context)
71
+ bean_definition = SmartIoC.find_bean_definition(bean_name, package, context)
72
72
 
73
73
  if bean_definition
74
74
  if bean_definition.path == file_path
75
75
  # seems that file with bean definition was reloaded
76
76
  # lets clear all scopes so we do not have
77
- container = SmartIoC::Container.get_instance
78
- container.unregister_bean(self)
79
- container.force_clear_scopes
77
+ SmartIoC::Container.get_instance.unregister_bean(bean_definition)
78
+ SmartIoC::Container.get_instance.force_clear_scopes
80
79
  else
81
80
  raise ArgumentError, "bean with for class #{self.to_s} was already defined in #{bean_definition.path}"
82
81
  end
@@ -168,9 +167,5 @@ module SmartIoC::Iocify
168
167
 
169
168
  nil
170
169
  end
171
-
172
- def _smart_ioc_preload_
173
- @bean_definition&.preload; nil
174
- end
175
170
  end
176
171
  end
@@ -1,3 +1,3 @@
1
1
  module SmartIoC
2
- VERSION = "0.5.0"
2
+ VERSION = "0.5.2"
3
3
  end
data/lib/smart_ioc.rb CHANGED
@@ -80,6 +80,7 @@ module SmartIoC
80
80
  container_methods = [
81
81
  :register_bean,
82
82
  :get_bean_definition,
83
+ :find_bean_definition,
83
84
  :set_extra_context_for_package,
84
85
  :get_bean,
85
86
  :clear_scopes,
@@ -32,7 +32,7 @@ describe Object do
32
32
  factory_method: :my_method, context: :test
33
33
  end
34
34
 
35
- @bean_definition = SmartIoC.get_bean_definition(:my_bean, :my_package, :test)
35
+ @bean_definition = SmartIoC.find_bean_definition(:my_bean, :my_package, :test)
36
36
  end
37
37
 
38
38
  it { expect(@bean_definition.name).to eq(:my_bean) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_ioc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-28 00:00:00.000000000 Z
11
+ date: 2024-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -135,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
135
  - !ruby/object:Gem::Version
136
136
  version: '0'
137
137
  requirements: []
138
- rubygems_version: 3.5.11
138
+ rubygems_version: 3.5.10
139
139
  signing_key:
140
140
  specification_version: 4
141
141
  summary: Inversion of Control Container