ioc_rb 0.1.1 → 0.2.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 +7 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +1 -9
- data/README.md +3 -0
- data/ioc_rb.gemspec +2 -2
- data/lib/ioc_rb/bean_factory.rb +5 -5
- data/lib/ioc_rb/const_loaders/active_support.rb +7 -0
- data/lib/ioc_rb/const_loaders/native.rb +9 -0
- data/lib/ioc_rb/container.rb +17 -19
- data/lib/ioc_rb/version.rb +1 -1
- data/spec/ioc_rb/container_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -1
- metadata +36 -52
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a5330611b991eea6ce2b181af7e34bbbb6e9eedc
|
4
|
+
data.tar.gz: 5e576b65af18fe9f1e1e043b86e2ebbffc9e33fc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3644f68a28d35e52c2572aa79d66de7b81f70c6e54e4906402e55f0e073da5a1cf70af3f85fa171df16f0f1075b67b013195483d4ba558959f8f382896d1a4c5
|
7
|
+
data.tar.gz: 946474ccb665a536448031cdd12ea9e1c922bc0ff5c25dbe215e444fd77798d5c7f52348243688dedf22f9ea323c540e5a6c0e8916d3f4bf471e48aa93e6d54e
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ioc_rb (0.
|
4
|
+
ioc_rb (0.2.0)
|
5
5
|
activesupport
|
6
6
|
request_store
|
7
7
|
|
@@ -15,13 +15,6 @@ GEM
|
|
15
15
|
thread_safe (~> 0.1)
|
16
16
|
tzinfo (~> 0.3.37)
|
17
17
|
atomic (1.1.14)
|
18
|
-
columnize (0.3.6)
|
19
|
-
debugger (1.6.5)
|
20
|
-
columnize (>= 0.3.1)
|
21
|
-
debugger-linecache (~> 1.2.0)
|
22
|
-
debugger-ruby_core_source (~> 1.3.1)
|
23
|
-
debugger-linecache (1.2.0)
|
24
|
-
debugger-ruby_core_source (1.3.1)
|
25
18
|
diff-lcs (1.2.5)
|
26
19
|
i18n (0.6.9)
|
27
20
|
minitest (4.7.5)
|
@@ -45,7 +38,6 @@ PLATFORMS
|
|
45
38
|
|
46
39
|
DEPENDENCIES
|
47
40
|
bundler (~> 1.3)
|
48
|
-
debugger
|
49
41
|
ioc_rb!
|
50
42
|
rake
|
51
43
|
rspec
|
data/README.md
CHANGED
@@ -92,3 +92,6 @@ Or install it yourself as:
|
|
92
92
|
1. Constructor based injection
|
93
93
|
2. Scope registration, refactor BeanFactory. IocRb:Container.register_scope(SomeScope)
|
94
94
|
3. Write documentation with more examples
|
95
|
+
|
96
|
+
## Author
|
97
|
+
Albert Gazizov, [@deeper4k](https://twitter.com/deeper4k)
|
data/ioc_rb.gemspec
CHANGED
@@ -6,8 +6,8 @@ require 'ioc_rb/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "ioc_rb"
|
8
8
|
spec.version = IocRb::VERSION
|
9
|
-
spec.authors = ["Albert Gazizov"
|
10
|
-
spec.email = ["deeper4k@gmail.com"
|
9
|
+
spec.authors = ["Albert Gazizov"]
|
10
|
+
spec.email = ["deeper4k@gmail.com"]
|
11
11
|
spec.description = %q{Inversion of Controll Container}
|
12
12
|
spec.summary = %q{Inversion of Controll Container}
|
13
13
|
spec.homepage = "http://github.com/deeper4k/ioc_rb"
|
data/lib/ioc_rb/bean_factory.rb
CHANGED
@@ -5,10 +5,12 @@ require 'ioc_rb/scopes/request_scope'
|
|
5
5
|
|
6
6
|
# Instantiates beans according to their scopes
|
7
7
|
class IocRb::BeanFactory
|
8
|
+
attr_reader :const_loader
|
8
9
|
|
9
10
|
# Constructor
|
10
11
|
# @param beans_metadata_storage [BeansMetadataStorage] storage of bean metadatas
|
11
|
-
def initialize(beans_metadata_storage)
|
12
|
+
def initialize(const_loader, beans_metadata_storage)
|
13
|
+
@const_loader = const_loader
|
12
14
|
@beans_metadata_storage = beans_metadata_storage
|
13
15
|
@singleton_scope = IocRb::Scopes::SingletonScope.new(self)
|
14
16
|
@prototype_scope = IocRb::Scopes::PrototypeScope.new(self)
|
@@ -54,9 +56,7 @@ class IocRb::BeanFactory
|
|
54
56
|
if bean_metadata.bean_class.is_a?(Class)
|
55
57
|
bean_class = bean_metadata.bean_class
|
56
58
|
else
|
57
|
-
bean_class = bean_metadata.bean_class
|
58
|
-
mod.const_get(class_name)
|
59
|
-
end
|
59
|
+
bean_class = const_loader.load_const(bean_metadata.bean_class)
|
60
60
|
bean_metadata.fetch_attrs!(bean_class)
|
61
61
|
end
|
62
62
|
bean = bean_metadata.instance ? bean_class.new : bean_class
|
@@ -79,7 +79,7 @@ class IocRb::BeanFactory
|
|
79
79
|
bean_metadata.attrs.each do |attr|
|
80
80
|
bean_metadata = @beans_metadata_storage.by_name(attr.ref)
|
81
81
|
unless bean_metadata
|
82
|
-
raise IocRb::Errors::MissingBeanError, "Bean with name :#{attr.ref} is not defined"
|
82
|
+
raise IocRb::Errors::MissingBeanError, "Bean with name :#{attr.ref} is not defined, check #{bean.class}"
|
83
83
|
end
|
84
84
|
case bean_metadata.scope
|
85
85
|
when :singleton
|
data/lib/ioc_rb/container.rb
CHANGED
@@ -3,6 +3,7 @@ require 'ioc_rb/args_validator'
|
|
3
3
|
require 'ioc_rb/bean_metadata'
|
4
4
|
require 'ioc_rb/beans_metadata_storage'
|
5
5
|
require 'ioc_rb/bean_factory'
|
6
|
+
require 'ioc_rb/const_loaders/native'
|
6
7
|
|
7
8
|
module IocRb
|
8
9
|
|
@@ -11,20 +12,28 @@ module IocRb
|
|
11
12
|
# providing a name and a class to create the object(we call them beans). Beans
|
12
13
|
# may be retrieved by asking for them by name (via the [] operator)
|
13
14
|
class Container
|
15
|
+
DEFAULT_CONST_LOADER = IocRb::ConstLoaders::Native
|
14
16
|
|
15
17
|
# Constructor
|
16
18
|
# @param resources [Array] array of procs with container's beans definitions
|
17
19
|
# @param &block [Proc] optional proc with container's beans definitions
|
18
|
-
def initialize(
|
20
|
+
def initialize(const_loader = DEFAULT_CONST_LOADER, &block)
|
19
21
|
@beans_metadata_storage = IocRb::BeansMetadataStorage.new
|
20
|
-
@bean_factory
|
22
|
+
@bean_factory = IocRb::BeanFactory.new(const_loader, @beans_metadata_storage)
|
21
23
|
|
22
|
-
if
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
block.call(self) if block_given?
|
25
|
+
end
|
26
|
+
|
27
|
+
# Evaluates the given array of blocks on the container instance
|
28
|
+
# what adds new bean definitions to the container
|
29
|
+
# @param resources [Array] array of procs with container's beans definitions
|
30
|
+
def self.new_with_beans(resources, const_loader = DEFAULT_CONST_LOADER)
|
31
|
+
IocRb::ArgsValidator.is_array!(resources, :resources)
|
32
|
+
|
33
|
+
self.new(const_loader).tap do |container|
|
34
|
+
resources.each do |resource|
|
35
|
+
resource.call(container)
|
36
|
+
end
|
28
37
|
end
|
29
38
|
end
|
30
39
|
|
@@ -50,16 +59,5 @@ module IocRb
|
|
50
59
|
@bean_factory.get_bean(name)
|
51
60
|
end
|
52
61
|
|
53
|
-
private
|
54
|
-
|
55
|
-
# Evaluates the given array of blocks on the container instance
|
56
|
-
# what adds new bean definitions to the container
|
57
|
-
# @param resources [Array] array of procs with container's beans definitions
|
58
|
-
def load_bean_definitions(resources)
|
59
|
-
resources.each do |resource|
|
60
|
-
resource.call(self)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
62
|
end
|
65
63
|
end
|
data/lib/ioc_rb/version.rb
CHANGED
@@ -44,7 +44,7 @@ describe IocRb::Container do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
it "should instanciate given bean definitions" do
|
47
|
-
container = IocRb::Container.
|
47
|
+
container = IocRb::Container.new_with_beans([resource])
|
48
48
|
container[:logger].should be_a(Logger)
|
49
49
|
container[:appender].should be_a(Appender)
|
50
50
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,92 +1,81 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ioc_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.1.1
|
4
|
+
version: 0.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Albert Gazizov
|
9
|
-
- Ruslan Gatiyatov
|
10
8
|
autorequire:
|
11
9
|
bindir: bin
|
12
10
|
cert_chain: []
|
13
|
-
date:
|
11
|
+
date: 2015-02-13 00:00:00.000000000 Z
|
14
12
|
dependencies:
|
15
13
|
- !ruby/object:Gem::Dependency
|
16
|
-
prerelease: false
|
17
14
|
name: request_store
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
20
16
|
requirements:
|
21
|
-
- -
|
17
|
+
- - ">="
|
22
18
|
- !ruby/object:Gem::Version
|
23
19
|
version: '0'
|
24
|
-
|
25
|
-
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
|
-
none: false
|
31
27
|
- !ruby/object:Gem::Dependency
|
32
|
-
prerelease: false
|
33
28
|
name: activesupport
|
34
|
-
|
35
|
-
version_requirements: !ruby/object:Gem::Requirement
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
|
-
- -
|
31
|
+
- - ">="
|
38
32
|
- !ruby/object:Gem::Version
|
39
33
|
version: '0'
|
40
|
-
|
41
|
-
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
|
-
none: false
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
|
-
prerelease: false
|
49
42
|
name: bundler
|
50
|
-
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
52
44
|
requirements:
|
53
|
-
- - ~>
|
45
|
+
- - "~>"
|
54
46
|
- !ruby/object:Gem::Version
|
55
47
|
version: '1.3'
|
56
|
-
|
57
|
-
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
51
|
requirements:
|
59
|
-
- - ~>
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '1.3'
|
62
|
-
none: false
|
63
55
|
- !ruby/object:Gem::Dependency
|
64
|
-
prerelease: false
|
65
56
|
name: rake
|
66
|
-
|
67
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
68
58
|
requirements:
|
69
|
-
- -
|
59
|
+
- - ">="
|
70
60
|
- !ruby/object:Gem::Version
|
71
61
|
version: '0'
|
72
|
-
|
73
|
-
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - ">="
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
|
-
none: false
|
79
69
|
description: Inversion of Controll Container
|
80
70
|
email:
|
81
71
|
- deeper4k@gmail.com
|
82
|
-
- ruslan.gatiyatov@gmail.com
|
83
72
|
executables: []
|
84
73
|
extensions: []
|
85
74
|
extra_rdoc_files: []
|
86
75
|
files:
|
87
|
-
- .gitignore
|
88
|
-
- .travis.yml
|
89
|
-
- .yardops
|
76
|
+
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
78
|
+
- ".yardops"
|
90
79
|
- Gemfile
|
91
80
|
- Gemfile.lock
|
92
81
|
- LICENSE.txt
|
@@ -98,6 +87,8 @@ files:
|
|
98
87
|
- lib/ioc_rb/bean_factory.rb
|
99
88
|
- lib/ioc_rb/bean_metadata.rb
|
100
89
|
- lib/ioc_rb/beans_metadata_storage.rb
|
90
|
+
- lib/ioc_rb/const_loaders/active_support.rb
|
91
|
+
- lib/ioc_rb/const_loaders/native.rb
|
101
92
|
- lib/ioc_rb/container.rb
|
102
93
|
- lib/ioc_rb/errors.rb
|
103
94
|
- lib/ioc_rb/inject.rb
|
@@ -112,33 +103,26 @@ files:
|
|
112
103
|
homepage: http://github.com/deeper4k/ioc_rb
|
113
104
|
licenses:
|
114
105
|
- MIT
|
106
|
+
metadata: {}
|
115
107
|
post_install_message:
|
116
108
|
rdoc_options: []
|
117
109
|
require_paths:
|
118
110
|
- lib
|
119
111
|
required_ruby_version: !ruby/object:Gem::Requirement
|
120
112
|
requirements:
|
121
|
-
- -
|
113
|
+
- - ">="
|
122
114
|
- !ruby/object:Gem::Version
|
123
|
-
segments:
|
124
|
-
- 0
|
125
|
-
hash: 1078915959922104396
|
126
115
|
version: '0'
|
127
|
-
none: false
|
128
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
117
|
requirements:
|
130
|
-
- -
|
118
|
+
- - ">="
|
131
119
|
- !ruby/object:Gem::Version
|
132
|
-
segments:
|
133
|
-
- 0
|
134
|
-
hash: 1078915959922104396
|
135
120
|
version: '0'
|
136
|
-
none: false
|
137
121
|
requirements: []
|
138
122
|
rubyforge_project:
|
139
|
-
rubygems_version:
|
123
|
+
rubygems_version: 2.2.2
|
140
124
|
signing_key:
|
141
|
-
specification_version:
|
125
|
+
specification_version: 4
|
142
126
|
summary: Inversion of Controll Container
|
143
127
|
test_files:
|
144
128
|
- spec/ioc_rb/container_spec.rb
|