smart_ioc 0.3.9 → 0.4.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: 1952e81bd1c8dd7759dad214db0629d9d7deb1f51ead352d85d76c7375207903
4
- data.tar.gz: b6a18802edbb15c81e9de29ac346e69a126bb05ec743a91c3abddecc31219f75
3
+ metadata.gz: ec0b7417468b3bf40350a297a885266b3067809f6ca074326614b8663ca762bb
4
+ data.tar.gz: 6508ed9fdee9191479459541718c63172bd7a9d47fa1de63bdd9ab883737927b
5
5
  SHA512:
6
- metadata.gz: fed6928dafae5cf284d1cb1cec295737c0b2823e6f053e62444f6c688bf73e02be5b70a46b95c1f35cf87ac0b7e96d3483a6e72fb058d96c6b239af23f01f013
7
- data.tar.gz: 7028318cd0bcaa4752c44a221af6a4f7b96eccdeadd2e1676aa90a5fb1547817035e8f7a8f346e20a527bdf5bd365ca9cda82f73e51bca918fe77c09d72b512a
6
+ metadata.gz: 2daa5061878b44419bbb0d3e4e2c5c7edcc526259b27e04f1600a3b2c994e06a03722c160e6b6c01a67a587cb99efa2dd385bbc215f275989ec0e622d78eb9a7
7
+ data.tar.gz: fb7fbdc1dc05f2462f5aaf399564423798129e9e6ed324dceaa8e47747707083c40857f6528047c0d703b2cad45889900cf60924e33d339e775ef31215c97f66
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.7.2
1
+ 3.1.1
data/Gemfile.lock CHANGED
@@ -1,38 +1,36 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- smart_ioc (0.3.9)
4
+ smart_ioc (0.4.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  byebug (11.1.3)
10
- codecov (0.2.5)
11
- colorize
12
- json
13
- simplecov
14
- colorize (0.8.1)
15
- diff-lcs (1.4.4)
16
- docile (1.3.2)
17
- json (2.3.1)
18
- rake (13.0.1)
19
- rspec (3.9.0)
20
- rspec-core (~> 3.9.0)
21
- rspec-expectations (~> 3.9.0)
22
- rspec-mocks (~> 3.9.0)
23
- rspec-core (3.9.2)
24
- rspec-support (~> 3.9.3)
25
- rspec-expectations (3.9.2)
10
+ codecov (0.6.0)
11
+ simplecov (>= 0.15, < 0.22)
12
+ diff-lcs (1.5.0)
13
+ docile (1.4.0)
14
+ rake (13.0.6)
15
+ rspec (3.11.0)
16
+ rspec-core (~> 3.11.0)
17
+ rspec-expectations (~> 3.11.0)
18
+ rspec-mocks (~> 3.11.0)
19
+ rspec-core (3.11.0)
20
+ rspec-support (~> 3.11.0)
21
+ rspec-expectations (3.11.0)
26
22
  diff-lcs (>= 1.2.0, < 2.0)
27
- rspec-support (~> 3.9.0)
28
- rspec-mocks (3.9.1)
23
+ rspec-support (~> 3.11.0)
24
+ rspec-mocks (3.11.0)
29
25
  diff-lcs (>= 1.2.0, < 2.0)
30
- rspec-support (~> 3.9.0)
31
- rspec-support (3.9.3)
32
- simplecov (0.18.5)
26
+ rspec-support (~> 3.11.0)
27
+ rspec-support (3.11.0)
28
+ simplecov (0.21.2)
33
29
  docile (~> 1.1)
34
30
  simplecov-html (~> 0.11)
35
- simplecov-html (0.12.2)
31
+ simplecov_json_formatter (~> 0.1)
32
+ simplecov-html (0.12.3)
33
+ simplecov_json_formatter (0.1.4)
36
34
 
37
35
  PLATFORMS
38
36
  ruby
@@ -47,4 +45,4 @@ DEPENDENCIES
47
45
  smart_ioc!
48
46
 
49
47
  BUNDLED WITH
50
- 2.3.25
48
+ 2.1.4
@@ -47,7 +47,7 @@ class SmartIoC::BeanDefinition
47
47
  end
48
48
 
49
49
  def ==(bean_definition)
50
- bean_definition.name == @name && bean_definition.package == @package && bean_definition.context == @context
50
+ bean_definition.klass == @klass
51
51
  end
52
52
 
53
53
  def singleton?
@@ -56,6 +56,7 @@ class SmartIoC::BeanDefinition
56
56
 
57
57
  def inspect
58
58
  str = []
59
+ str << "class: #{@klass}"
59
60
  str << "name: :#{@name}"
60
61
  str << "package: :#{@package}"
61
62
  str << "context: :#{@context}"
@@ -20,18 +20,15 @@ class SmartIoC::BeanDefinitionsStorage
20
20
  end
21
21
 
22
22
  if existing_bd
23
- @collection.reject! { |bd| bd == existing_bd }
24
-
25
- message = <<~EOF
26
- \nReplacing bean definition...
27
- - New bean details:
28
- #{bean_definition.inspect}
29
- - Existing bean details:
30
- #{existing_bd.inspect})
31
-
32
- EOF
33
-
34
- puts message
23
+ error_msg =
24
+ %Q(Not able to add bean to definitions storage.
25
+ Bean definition already exists.
26
+ New bean details:
27
+ #{bean_definition.inspect}
28
+ Existing bean details:
29
+ #{existing_bd.inspect})
30
+
31
+ raise ArgumentError, error_msg
35
32
  end
36
33
 
37
34
  @collection.push(bean_definition)
@@ -49,16 +46,8 @@ class SmartIoC::BeanDefinitionsStorage
49
46
  # @param klass [Class] bean class
50
47
  # @return bean definition [BeanDefinition] or nil
51
48
  def find_by_class(klass)
52
- @collection.detect {|bd| bd.klass == klass}
53
- end
54
-
55
- # Returns bean definition for specific class
56
- # @param bean_name [Symbol]
57
- # @param package [Symbol]
58
- # @param context [Symbol]
59
- # @return bean definition [BeanDefinition] or nil
60
- def find_bean(bean_name, package, context)
61
- @collection.detect {|bd| bd.name == bean_name && bd.package == package && bd.context == context}
49
+ klass_str = klass.to_s
50
+ @collection.detect {|bd| bd.klass.to_s == klass_str}
62
51
  end
63
52
 
64
53
  def filter_by(bean_name, package = nil, context = nil)
@@ -31,7 +31,7 @@ class SmartIoC::BeanFactory
31
31
  # @return bean instance
32
32
  # @raise [ArgumentError] if bean is not found
33
33
  # @raise [ArgumentError] if ambiguous bean definition was found
34
- def get_bean(bean_name, package: nil, parent_bean_definition: nil, context: nil, parent_bean_name: nil)
34
+ def get_bean(bean_name, package: nil, parent_bean_definition: nil, context: nil)
35
35
  check_arg(bean_name, :bean_name, Symbol)
36
36
  check_arg(package, :package, Symbol) if package
37
37
  check_arg(parent_bean_definition, :parent_bean_definition, SmartIoC::BeanDefinition) if parent_bean_definition
@@ -40,7 +40,7 @@ class SmartIoC::BeanFactory
40
40
  @bean_file_loader.require_bean(bean_name)
41
41
 
42
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)
43
+ context = autodetect_context(bean_name, package, parent_package_name, context)
44
44
  bean_definition = @bean_definitions_storage.find(bean_name, package, context, parent_package_name)
45
45
  scope = get_scope(bean_definition)
46
46
  bean = scope.get_bean(bean_definition.klass)
@@ -76,18 +76,18 @@ class SmartIoC::BeanFactory
76
76
  bean
77
77
  end
78
78
 
79
- def autodetect_context(bean_name, package, parent_bean_package, context, parent_bean_name)
79
+ def autodetect_context(bean_name, package, parent_bean_package, context)
80
80
  return context if context
81
81
 
82
82
  if package
83
83
  @extra_package_contexts.get_context(package)
84
84
  else
85
- bean_definition = autodetect_bean_definition(bean_name, package, parent_bean_package, parent_bean_name)
85
+ bean_definition = autodetect_bean_definition(bean_name, package, parent_bean_package)
86
86
  @extra_package_contexts.get_context(bean_definition.package)
87
87
  end
88
88
  end
89
89
 
90
- def autodetect_bean_definition(bean, package, parent_bean_package, parent_bean_name)
90
+ def autodetect_bean_definition(bean, package, parent_bean_package)
91
91
  if package
92
92
  bean_context = @extra_package_contexts.get_context(package)
93
93
  bds = @bean_definitions_storage.filter_by_with_drop_to_default_context(bean, package, bean_context)
@@ -121,7 +121,7 @@ class SmartIoC::BeanFactory
121
121
 
122
122
  if smart_bds.size > 1
123
123
  raise ArgumentError.new(
124
- %Q(Unable to autodetect bean :#{bean}#{parent_bean_name ? " for bean :#{parent_bean_name}" : ''}.
124
+ %Q(Unable to autodetect bean :#{bean}.
125
125
  Several definitions were found:\n
126
126
  #{smart_bds.map(&:inspect).join("\n\n")}.
127
127
  Set package directly for injected dependency
@@ -57,6 +57,8 @@ module SmartIoC
57
57
  raise ArgumentError, "bean scope should be one of #{allowed_scopes.inspect}"
58
58
  end
59
59
 
60
+ package_name ||= SmartIoC::BeanLocations.get_bean_package(path)
61
+
60
62
  if !package_name
61
63
  raise ArgumentError, %Q(
62
64
  Package name should be given for bean :#{bean_name}.
@@ -86,12 +88,10 @@ module SmartIoC
86
88
  end
87
89
 
88
90
  # Returns bean definition for specific class
89
- # @param bean_name [Symbol]
90
- # @param package [Symbol]
91
- # @param context [Symbol]
91
+ # @param klass [Class] class name
92
92
  # return [BeanDefinition]
93
- def get_bean_definition(bean_name, package, context)
94
- bean_definitions_storage.find_bean(bean_name, package, context)
93
+ def get_bean_definition_by_class(klass)
94
+ bean_definitions_storage.find_by_class(klass)
95
95
  end
96
96
 
97
97
  # Sets new load proc
@@ -117,13 +117,12 @@ module SmartIoC
117
117
  # @param optional parent_bean_definition [SmartIoc::BeanDefinition] bean definition of parent bean
118
118
  # @param optional context [Symbol] package context
119
119
  # @return bean instance from container
120
- def get_bean(bean_name, package: nil, context: nil, parent_bean_definition: nil, parent_bean_name: nil)
120
+ def get_bean(bean_name, package: nil, context: nil, parent_bean_definition: nil)
121
121
  bean_factory.get_bean(
122
122
  bean_name,
123
123
  package: package,
124
124
  parent_bean_definition: parent_bean_definition,
125
125
  context: context,
126
- parent_bean_name: parent_bean_name,
127
126
  )
128
127
  end
129
128
 
@@ -2,9 +2,6 @@
2
2
  # Example of usage:
3
3
  # class Bar
4
4
  # bean :bar
5
- #
6
- # def call
7
- # end
8
5
  # end
9
6
  #
10
7
  # class Foo
@@ -15,7 +12,6 @@
15
12
  # inject :some_bar, ref: bar, from: :repository
16
13
  #
17
14
  # def hello_world
18
- # some_bar.call
19
15
  # puts 'Hello world'
20
16
  # end
21
17
  # end
@@ -27,35 +23,6 @@ module SmartIoC::Iocify
27
23
  end
28
24
 
29
25
  module ClassMethods
30
- def package(name)
31
- raise ArgumentError, "name should be a Symbol" if !name.is_a?(Symbol)
32
- @package = name
33
- end
34
-
35
- def context(name)
36
- raise ArgumentError, "name should be a Symbol" if !name.is_a?(Symbol)
37
- @context = name
38
- end
39
-
40
- def factory_method(name)
41
- raise ArgumentError, "name should be a Symbol" if !name.is_a?(Symbol)
42
- @factory_method = name
43
- end
44
-
45
- def scope(name)
46
- raise ArgumentError, "name should be a Symbol" if !name.is_a?(Symbol)
47
- @scope = name
48
- end
49
-
50
- def instance
51
- @instance = true
52
- end
53
-
54
- def after_init(name)
55
- raise ArgumentError, "name should be a Symbol" if !name.is_a?(Symbol)
56
- @after_init = name
57
- end
58
-
59
26
  # @param bean_name [Symbol] bean name
60
27
  # @param scope [Symbol] bean scope (defaults to :singleton)
61
28
  # @param package [nil or Symbol]
@@ -64,11 +31,10 @@ module SmartIoC::Iocify
64
31
  # @param context [Symbol] set bean context (ex: :test)
65
32
  # @param after_init [Symbol] name of bean method that will be called after bean initialization (ex: :test)
66
33
  # @return nil
67
- def bean(bean_name, scope: nil, package: nil, instance: true, factory_method: nil, context: nil, after_init: nil, file_path: nil)
68
- file_path ||= caller[0].split(':').first
69
- package ||= SmartIoC::BeanLocations.get_bean_package(file_path)
70
- context ||= SmartIoC::Container::DEFAULT_CONTEXT
71
- bean_definition = SmartIoC.get_bean_definition(bean_name, package, context)
34
+ def bean(bean_name, scope: nil, package: nil, instance: true, factory_method: nil, context: nil, after_init: nil)
35
+ file_path = caller[0].split(':').first
36
+
37
+ bean_definition = SmartIoC.get_bean_definition_by_class(self)
72
38
 
73
39
  if bean_definition
74
40
  if bean_definition.path == file_path
@@ -102,20 +68,9 @@ module SmartIoC::Iocify
102
68
  )
103
69
  end
104
70
 
105
- self.instance_variable_set(:@bean_definition, bean_definition)
106
-
107
71
  nil
108
72
  end
109
73
 
110
- def inject(bean_name, ref: nil, from: nil)
111
- if @anonymous_bean
112
- @injects ||= []
113
- @injects.push({bean_name: bean_name, ref: ref, from: from})
114
- else
115
- register_inject(bean_name, ref: ref, from: from)
116
- end
117
- end
118
-
119
74
  # @param bean_name [Symbol] injected bean name
120
75
  # @param ref [Symbol] refferece bean to be sef as bean_name
121
76
  # @param from [Symbol] package name
@@ -124,14 +79,14 @@ module SmartIoC::Iocify
124
79
  # @raise [ArgumentError] if ref provided and ref is not a Symbol
125
80
  # @raise [ArgumentError] if from provided and from is not a Symbol
126
81
  # @raise [ArgumentError] if bean with same name was injected before
127
- def register_inject(bean_name, ref: nil, from: nil)
128
- if !@bean_definition
82
+ def inject(bean_name, ref: nil, from: nil)
83
+ bean_definition = SmartIoC::Container.get_instance.get_bean_definition_by_class(self)
84
+
85
+ if bean_definition.nil?
129
86
  raise ArgumentError, "#{self.to_s} is not registered as bean. Add `bean :bean_name` declaration"
130
87
  end
131
88
 
132
- bd = @bean_definition
133
-
134
- bd.add_dependency(
89
+ bean_definition.add_dependency(
135
90
  bean_name: bean_name,
136
91
  ref: ref,
137
92
  package: from
@@ -142,18 +97,18 @@ module SmartIoC::Iocify
142
97
  return bean if bean
143
98
 
144
99
  klass = self.is_a?(Class) ? self : self.class
100
+ bean_definition = SmartIoC::Container.get_instance.get_bean_definition_by_class(klass)
145
101
 
146
102
  bean = SmartIoC::Container.get_instance.get_bean(
147
103
  ref || bean_name,
148
104
  package: from,
149
- parent_bean_definition: bd,
150
- parent_bean_name: bd.name,
105
+ parent_bean_definition: bean_definition
151
106
  )
152
107
 
153
108
  instance_variable_set(:"@#{bean_name}", bean)
154
109
  end
155
110
 
156
- if bd.is_instance?
111
+ if bean_definition.is_instance?
157
112
  define_method bean_name, &bean_method
158
113
  private bean_name
159
114
  else
@@ -1,3 +1,3 @@
1
1
  module SmartIoC
2
- VERSION = "0.3.9"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/smart_ioc.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'smart_ioc/version'
2
2
  require 'benchmark'
3
+ require 'forwardable'
3
4
 
4
5
  module SmartIoC
5
6
  autoload :Args, 'smart_ioc/args'
@@ -15,7 +16,6 @@ module SmartIoC
15
16
  autoload :InjectMetadata, 'smart_ioc/inject_metadata'
16
17
  autoload :Iocify, 'smart_ioc/iocify'
17
18
  autoload :Scopes, 'smart_ioc/scopes'
18
- autoload :StringUtils, 'smart_ioc/string_utils'
19
19
 
20
20
  module Scopes
21
21
  autoload :Bean, 'smart_ioc/scopes/bean'
@@ -74,14 +74,18 @@ module SmartIoC
74
74
  Container.get_instance
75
75
  end
76
76
 
77
- [:register_bean, :get_bean_definition,
78
- :set_extra_context_for_package, :get_bean, :clear_scopes,
79
- :force_clear_scopes, :set_load_proc].each do |name|
80
- define_method name do |*args, &block|
81
- container.send(name, *args, &block)
82
- end
83
- end
77
+ extend Forwardable
78
+
79
+ container_methods = [
80
+ :register_bean,
81
+ :get_bean_definition_by_class,
82
+ :set_extra_context_for_package,
83
+ :get_bean,
84
+ :clear_scopes,
85
+ :force_clear_scopes,
86
+ :set_load_proc
87
+ ]
88
+
89
+ def_delegators :container, *container_methods
84
90
  end
85
91
  end
86
-
87
- require 'smart_ioc/bean'
@@ -16,7 +16,8 @@ describe SmartIoC::BeanDefinition do
16
16
  )
17
17
 
18
18
  str =
19
- "name: :test_bean
19
+ "class: Object
20
+ name: :test_bean
20
21
  package: :test_package
21
22
  context: :default
22
23
  path: current_dir
@@ -4,42 +4,27 @@ describe SmartIoC::BeanFactory do
4
4
  before :all do
5
5
  SmartIoC.clear
6
6
 
7
- bean :repo do
8
- context :default
9
- package :bean_factory
10
-
11
- def call
12
- 'default'
13
- end
7
+ class Repo
8
+ include SmartIoC::Iocify
9
+ bean :repo, context: :default, package: :bean_factory
14
10
  end
15
11
 
16
- bean :repo do
17
- context :test
18
- package :bean_factory
19
-
20
- inject :dao
21
-
22
- def call
23
- dao.call
24
- 'test'
25
- end
12
+ class TestRepo
13
+ include SmartIoC::Iocify
14
+ bean :repo, context: :test, package: :bean_factory
26
15
  end
27
16
 
28
- bean :dao do
29
- context :default
30
- package :bean_factory
31
-
32
- def call
33
- 'dao'
34
- end
17
+ class DAO
18
+ include SmartIoC::Iocify
19
+ bean :dao, context: :default, package: :bean_factory
35
20
  end
36
21
 
37
22
  class TestObject
38
23
  end
39
24
 
40
- bean :factory do
41
- factory_method :build_bean
42
- package :bean_factory
25
+ class Factory
26
+ include SmartIoC::Iocify
27
+ bean :factory, factory_method: :build_bean, package: :bean_factory
43
28
 
44
29
  def build_bean
45
30
  TestObject.new
@@ -71,17 +56,17 @@ describe SmartIoC::BeanFactory do
71
56
 
72
57
  it 'returns proper bean for test context' do
73
58
  SmartIoC.set_extra_context_for_package(:bean_factory, :test)
74
- expect(SmartIoC.get_bean(:repo).call).to eq('test')
59
+ expect(SmartIoC.get_bean(:repo)).to be_a(TestRepo)
75
60
  end
76
61
 
77
62
  it 'returns proper bean for default context' do
78
63
  SmartIoC.set_extra_context_for_package(:bean_factory, :default)
79
- expect(SmartIoC.get_bean(:repo).call).to eq('default')
64
+ expect(SmartIoC.get_bean(:repo)).to be_a(Repo)
80
65
  end
81
66
 
82
67
  it 'returns proper bean for test context with fallback to default context' do
83
68
  SmartIoC.set_extra_context_for_package(:bean_factory, :test)
84
- expect(SmartIoC.get_bean(:dao).call).to eq('dao')
69
+ expect(SmartIoC.get_bean(:dao)).to be_a(DAO)
85
70
  end
86
71
 
87
72
  it 'updates dependencies' do
@@ -169,7 +154,7 @@ describe SmartIoC::BeanFactory do
169
154
  end
170
155
 
171
156
  it 'injects prototype beans with different object id' do
172
- prototype_bean = SmartIoC.get_bean(:prototype_bean, package: :prototype)
157
+ prototype_bean = SmartIoC.get_bean(:prototype_bean)
173
158
  repo1_object_id = prototype_bean.prototype_service1.prototype_repo.object_id
174
159
  repo2_object_id = prototype_bean.prototype_service2.prototype_repo.object_id
175
160
 
@@ -177,7 +162,7 @@ describe SmartIoC::BeanFactory do
177
162
  end
178
163
 
179
164
  it 'injects singleton beans with same object id' do
180
- prototype_bean = SmartIoC.get_bean(:prototype_bean, package: :prototype)
165
+ prototype_bean = SmartIoC.get_bean(:prototype_bean)
181
166
  repo1_object_id = prototype_bean.prototype_service1.singleton_repo.object_id
182
167
  repo2_object_id = prototype_bean.prototype_service2.singleton_repo.object_id
183
168
 
@@ -13,8 +13,8 @@ describe SmartIoC::BeanLocator do
13
13
  locations = SmartIoC::BeanLocations.get_bean_locations(:repository)
14
14
 
15
15
  expect(locations[:test].size).to eq(3)
16
- expect(locations[:test][0]).to match(/example\/admins\/repository\/test\/admins_repository.rb/)
17
- expect(locations[:test][1]).to match(/example\/admins\/repository\/admins_repository.rb/)
16
+ expect(locations[:test][0]).to match(/example\/admins\/repository\/admins_repository.rb/)
17
+ expect(locations[:test][1]).to match(/example\/admins\/repository\/test\/admins_repository.rb/)
18
18
  expect(locations[:test][2]).to match(/example\/users\/repository\/users_repository.rb/)
19
19
  }
20
20
 
@@ -1,5 +1,7 @@
1
- bean :dao do
2
- after_init :setup
1
+ class AdminsDAO
2
+ include SmartIoC::Iocify
3
+
4
+ bean :dao, instance: false, after_init: :setup
3
5
 
4
6
  inject :config
5
7
 
@@ -1,7 +1,13 @@
1
- bean :repository do
1
+ class AdminsRepository
2
+ include SmartIoC::Iocify
3
+
4
+ bean :repository
5
+
2
6
  inject :dao
3
7
  inject :users_creator
4
8
 
9
+ public :users_creator
10
+
5
11
  def put(user)
6
12
  dao.insert(user)
7
13
  end
@@ -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.get_bean_definition_by_class(BeanClass)
36
36
  end
37
37
 
38
38
  it { expect(@bean_definition.name).to eq(:my_bean) }
@@ -18,7 +18,7 @@ describe SmartIoC::Container do
18
18
 
19
19
  it 'loads recursive beans' do
20
20
  users_creator = @container.get_bean(:users_creator)
21
- uc2 = users_creator.send(:repository).send(:users_creator)
21
+ uc2 = users_creator.send(:repository).users_creator
22
22
  expect(users_creator).to eq(uc2)
23
23
  end
24
24
  end
@@ -27,16 +27,14 @@ describe SmartIoC do
27
27
  repository = @container.get_bean(:repository, package: :admins)
28
28
 
29
29
  expect(repository.get(1)).to be_a(User)
30
- expect(users_creator.send(:repository)).to be_a(Class)
31
- expect(users_creator.send(:repository).methods).to include(:put)
32
- expect(users_creator.send(:repository).methods).to include(:get)
30
+ expect(users_creator.send(:repository)).to be_a(AdminsRepository)
33
31
  expect(users_creator.send(:logger)).to be_a(LoggerFactory::SmartIoCLogger)
34
32
  end
35
33
 
36
34
  it 'sets beans with extra package context' do
37
35
  SmartIoC.set_extra_context_for_package(:admins, :test)
38
36
  SmartIoC.force_clear_scopes
39
-
37
+
40
38
  users_creator = @container.get_bean(:users_creator)
41
39
  users_creator.create(1, 'test@test.com')
42
40
 
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.3.9
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-20 00:00:00.000000000 Z
11
+ date: 2022-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,7 +73,6 @@ files:
73
73
  - docs/index.md
74
74
  - lib/smart_ioc.rb
75
75
  - lib/smart_ioc/args.rb
76
- - lib/smart_ioc/bean.rb
77
76
  - lib/smart_ioc/bean_definition.rb
78
77
  - lib/smart_ioc/bean_definitions_storage.rb
79
78
  - lib/smart_ioc/bean_dependency.rb
@@ -91,7 +90,6 @@ files:
91
90
  - lib/smart_ioc/scopes/prototype.rb
92
91
  - lib/smart_ioc/scopes/request.rb
93
92
  - lib/smart_ioc/scopes/singleton.rb
94
- - lib/smart_ioc/string_utils.rb
95
93
  - lib/smart_ioc/version.rb
96
94
  - smart_ioc.gemspec
97
95
  - spec/smart_ioc/bean_definition_spec.rb
@@ -135,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
133
  - !ruby/object:Gem::Version
136
134
  version: '0'
137
135
  requirements: []
138
- rubygems_version: 3.1.4
136
+ rubygems_version: 3.3.7
139
137
  signing_key:
140
138
  specification_version: 4
141
139
  summary: Inversion of Control Container
@@ -1,59 +0,0 @@
1
- def bean(bean_name, &proc)
2
- raise ArgumentError, "name should be a Symbol" if !bean_name.is_a?(Symbol)
3
- raise ArgumentError, "proc should be provided" if !block_given?
4
-
5
- klass = Class.new do
6
- include SmartIoC::Iocify
7
- end
8
-
9
- klass.instance_variable_set(:@anonymous_bean, true)
10
- klass.instance_exec(&proc)
11
-
12
- str = SmartIoC::StringUtils
13
- file_path = caller[0].split(':').first
14
- package = klass.instance_variable_get(:@package) || SmartIoC::BeanLocations.get_bean_package(file_path)
15
- context = klass.instance_variable_get(:@context) || :default
16
-
17
- if package.nil?
18
- raise ArgumentError, "package is not defined for bean :#{bean_name}"
19
- end
20
-
21
- package_mod = str.camelize(package)
22
- context_mod = str.camelize(context || :default)
23
-
24
- class_name = str.camelize(bean_name)
25
- klass_name = "#{package_mod}::#{context_mod}::#{class_name}"
26
-
27
- eval(
28
- %Q(
29
- module #{package_mod}
30
- module #{context_mod}
31
- if constants.include?(:"#{class_name}")
32
- remove_const :"#{class_name}"
33
- end
34
- end
35
- end
36
-
37
- #{klass_name} = klass
38
- )
39
- )
40
-
41
- klass.instance_exec do
42
- bean(
43
- bean_name,
44
- file_path: file_path,
45
- scope: instance_variable_get(:@scope),
46
- package: package,
47
- instance: instance_variable_get(:@instance) || false,
48
- factory_method: instance_variable_get(:@factory_method),
49
- context: context,
50
- after_init: instance_variable_get(:@after_init),
51
- )
52
- end
53
-
54
- (klass.instance_variable_get(:@injects) || []).each do |inject|
55
- klass.register_inject(inject[:bean_name], ref: inject[:ref], from: inject[:from])
56
- end
57
-
58
- klass
59
- end
@@ -1,13 +0,0 @@
1
- module SmartIoC
2
- class StringUtils
3
- class << self
4
- def camelize(term)
5
- string = term.to_s
6
- string = string.sub(/^[a-z\d]*/) { |match| match.capitalize }
7
- string.gsub!(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }
8
- string.gsub!("/".freeze, "::".freeze)
9
- string
10
- end
11
- end
12
- end
13
- end