ioc_rb 0.2.1 → 0.3.0

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
  SHA1:
3
- metadata.gz: a891de10c310306a9305ca4ba8f763d76872af4d
4
- data.tar.gz: ceb9706f9fce1c9db0cafe2f019fc0c2b4117541
3
+ metadata.gz: 85f0f26c7d82aeb28d8f04d99d0c52ebdeed61b5
4
+ data.tar.gz: 12d2af5706bf986c5c4b01c4fc6fd0a7c8910c9f
5
5
  SHA512:
6
- metadata.gz: 6e5f79ac207477a266503a3c1bf063dddf45f9de8725a63377bfda7be83af093fddb6faf8b7e02b141b7f661c2b8719b714954fe2dc786ce287ef9122b76dc7c
7
- data.tar.gz: 8c1b1645a3877073d7452b210d3e7fea1570b85fdf0c54cff369419027b7913a1cd2e1f5beac08af3abfd0413e991f9e074a04e03f6f1b2ae1b692ae9c0d9c2a
6
+ metadata.gz: e6ada01c013048e28219bcf6b2aa06adb2e9a31790263eced54e6b8a818fb3e74729df5553c7d2df2ab48408a7b0a55d325a67f783c674fda8bce5c6b279876d
7
+ data.tar.gz: 36cdcc328ddd3e1c34a8fd2e377ccef29696924df2436269b40849f5cae88dae80d4c5c50084813217db9478ed0cce39aa502a61648ec13e447c5c453326bb26
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ioc_rb (0.2.1)
4
+ ioc_rb (0.3.0)
5
5
  activesupport
6
6
  request_store
7
7
 
@@ -35,16 +35,7 @@ class IocRb::BeanFactory
35
35
  # @param [BeanMetadata] bean metadata
36
36
  # @return bean instance
37
37
  def get_bean_with_metadata(bean_metadata)
38
- case bean_metadata.scope
39
- when :singleton
40
- @singleton_scope.get_bean(bean_metadata)
41
- when :prototype
42
- @prototype_scope.get_bean(bean_metadata)
43
- when :request
44
- @request_scope.get_bean(bean_metadata)
45
- else
46
- raise IocRb::Errors::UnsupportedScopeError, "Bean with name :#{bean_metadata.name} has unsupported scope :#{bean_metadata.scope}"
47
- end
38
+ get_scope_by_metadata(bean_metadata).get_bean(bean_metadata)
48
39
  end
49
40
 
50
41
  # Create new bean instance according
@@ -73,6 +64,17 @@ class IocRb::BeanFactory
73
64
  bean
74
65
  end
75
66
 
67
+ # Delete bean from the container by it's +name+.
68
+ # @param [Symbol] bean name
69
+ # @raise MissingBeanError if bean with the specified name is not found
70
+ def delete_bean(name)
71
+ bean_metadata = @beans_metadata_storage.by_name(name)
72
+ unless bean_metadata
73
+ raise IocRb::Errors::MissingBeanError, "Bean with name :#{name} is not defined"
74
+ end
75
+ get_scope_by_metadata(bean_metadata).delete_bean(bean_metadata)
76
+ end
77
+
76
78
  private
77
79
 
78
80
  def set_bean_dependencies(bean, bean_metadata)
@@ -98,4 +100,17 @@ class IocRb::BeanFactory
98
100
  end
99
101
  end
100
102
 
103
+ def get_scope_by_metadata(bean_metadata)
104
+ case bean_metadata.scope
105
+ when :singleton
106
+ @singleton_scope
107
+ when :prototype
108
+ @prototype_scope
109
+ when :request
110
+ @request_scope
111
+ else
112
+ raise IocRb::Errors::UnsupportedScopeError, "Bean with name :#{bean_metadata.name} has unsupported scope :#{bean_metadata.scope}"
113
+ end
114
+ end
115
+
101
116
  end
@@ -50,6 +50,19 @@ module IocRb
50
50
  @beans_metadata_storage.put(bean)
51
51
  end
52
52
 
53
+ # Registers new bean in container and replace existing instance if it's instantiated
54
+ # @param bean_name [Symbol] bean name
55
+ # @param options [Hash] includes bean class and bean scope
56
+ # @param &block [Proc] the block which describes bean dependencies,
57
+ # see more in the BeanMetadata
58
+ def replace_bean(bean_name, options, &block)
59
+ bean(bean_name, options, &block)
60
+
61
+ if @bean_factory.get_bean(bean_name)
62
+ @bean_factory.delete_bean(bean_name)
63
+ end
64
+ end
65
+
53
66
  # Returns bean instance from the container
54
67
  # by the specified bean name
55
68
  # @param name [Symbol] bean name
@@ -14,4 +14,12 @@ class IocRb::Scopes::PrototypeScope
14
14
  def get_bean(bean_metadata)
15
15
  @bean_factory.create_bean_and_save(bean_metadata, {})
16
16
  end
17
+
18
+ # Delete bean from scope,
19
+ # because Prototype scope doesn't store bean
20
+ # then do nothing here
21
+ #
22
+ # @param bean_metadata [BeanMetadata] bean metadata
23
+ def delete_bean(bean_metadata)
24
+ end
17
25
  end
@@ -24,4 +24,10 @@ class IocRb::Scopes::RequestScope
24
24
  @bean_factory.create_bean_and_save(bean_metadata, RequestStore.store[:_iocrb_beans])
25
25
  end
26
26
  end
27
+
28
+ # Delete bean from scope
29
+ # @param bean_metadata [BeanMetadata] bean metadata
30
+ def delete_bean(bean_metadata)
31
+ RequestStore.store[:_iocrb_beans].delete(bean_metadata.name)
32
+ end
27
33
  end
@@ -20,4 +20,10 @@ class IocRb::Scopes::SingletonScope
20
20
  @bean_factory.create_bean_and_save(bean_metadata, @beans)
21
21
  end
22
22
  end
23
+
24
+ # Delete bean from scope
25
+ # @param bean_metadata [BeanMetadata] bean metadata
26
+ def delete_bean(bean_metadata)
27
+ @beans.delete(bean_metadata.name)
28
+ end
23
29
  end
@@ -1,3 +1,3 @@
1
1
  module IocRb
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -33,6 +33,17 @@ describe IocRb::Container do
33
33
  end
34
34
  end
35
35
 
36
+ describe "#replace_bean" do
37
+ it "should replace bean definition" do
38
+ container = IocRb::Container.new
39
+ container.bean(:appender, class: Appender)
40
+ container[:appender].should be_a(Appender)
41
+
42
+ container.replace_bean(:appender, class: Logger)
43
+ container[:appender].should be_a(Logger)
44
+ end
45
+ end
46
+
36
47
  describe "passing bean definitions to container constructor" do
37
48
  let(:resource) do
38
49
  Proc.new do |c|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ioc_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Albert Gazizov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-14 00:00:00.000000000 Z
11
+ date: 2015-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: request_store