dim 1.2.7 → 1.2.8
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 +6 -14
- data/Gemfile +0 -1
- data/README.markdown +9 -1
- data/Rakefile +3 -0
- data/dim.gemspec +2 -2
- data/lib/dim.rb +28 -11
- data/lib/version.rb +1 -1
- data/spec/dim_spec.rb +173 -133
- metadata +13 -15
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
MzQ4ZmU3ZGY0NDFkZGU3YTI4MGJlNGQ2MDBjZDIxOGIxNzZmNDBjOWE3MmE0
|
10
|
-
MmJlNjZiNTRjNmI5ZGVmODQ2ZGQ0ZDBlZmJiNGM5ODViMGJjOGJjM2U2MmNl
|
11
|
-
YTJlYWYyOWY0ZGRjOTQ0Zjg3YThhNDhkYzZhODgwMDA3NTJmYWY=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NTUzMWJhNmJlYzczNTAwNDQzZjhhMmI5MmJmMDI3MjAxMjEzODhmMmZiMjJm
|
14
|
-
MmQyNGI0ZTdiYWFlZDM4ZjI5YzJhMWQ5ZDkxODU1NTQzZmQ5OTc4Yzk5ZjM0
|
15
|
-
OTY5MTFlNjc5OTY0Y2MxZmYxYWUwYzg4MjEyNTA4MGY0MzY3M2E=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c4782eddd2362acb00039030ff666c5adf30e3fa
|
4
|
+
data.tar.gz: 11cc13c319a4de4aede04ee05baadabee3c8021b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ba10c081a2d720b3a076cf6ff8e89f2d16e888cff4857fc74ef90ed8b920593a8265bc9940fb87e848b737e143060473b19e5471fd0a4bcf3e30bcca041d5409
|
7
|
+
data.tar.gz: 8357f2778456f69a4d357a736eeff7072719543ad759803ad6d87623ca1e00f95304f382c727e8fe5d7a820e9eaa9080186c70636f82805e8d3c1f28a3664600
|
data/Gemfile
CHANGED
data/README.markdown
CHANGED
@@ -13,6 +13,7 @@ When testing your code, you can either stub out services on the container, or yo
|
|
13
13
|
|
14
14
|
The following could be in a "lib.init.rb" file or in a Rails app, "config/initializers/container.rb":
|
15
15
|
|
16
|
+
```ruby
|
16
17
|
require "dim"
|
17
18
|
require "logger"
|
18
19
|
require 'game'
|
@@ -57,19 +58,26 @@ The following could be in a "lib.init.rb" file or in a Rails app, "config/initia
|
|
57
58
|
# attempts to read ENV["API_PASSWORD"], otherwise makes sure that the parent container has
|
58
59
|
# a service named api_password registered
|
59
60
|
ServerContainer.register_env(:api_password)
|
60
|
-
|
61
|
+
```
|
62
|
+
|
61
63
|
Using the above code elsewhere in the app, when you want a reference to the app's logger object:
|
62
64
|
|
65
|
+
```ruby
|
63
66
|
ServerContainer.logger.info("I didn't have to setup my own logger")
|
67
|
+
```
|
64
68
|
|
65
69
|
Or if you wanted access to the game instance created during setup (which already is configured with everything it needs):
|
66
70
|
|
71
|
+
```ruby
|
67
72
|
current_game = ServerContainer.game
|
73
|
+
```
|
68
74
|
|
69
75
|
If you don't like creating even the one dependency on the global constant ServerContainer, you could
|
70
76
|
inject ServerContainer itself into your objects like so:
|
71
77
|
|
78
|
+
```ruby
|
72
79
|
World.new(GameContainer)
|
80
|
+
```
|
73
81
|
|
74
82
|
## More Background
|
75
83
|
|
data/Rakefile
CHANGED
@@ -9,3 +9,6 @@ task :default => :spec
|
|
9
9
|
task :spec do
|
10
10
|
sh "rspec spec"
|
11
11
|
end
|
12
|
+
|
13
|
+
desc "Build the gem, create a git tag, and push to git. If the build passes, CircleCI will publish to packagecloud"
|
14
|
+
task :release, [:remote] => %w(build release:guard_clean release:source_control_push)
|
data/dim.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.summary = %q{Minimalistic dependency injection framework}
|
16
16
|
s.description = %q{Minimalistic dependency injection framework keeps all of your object setup code in one place.}
|
17
17
|
s.test_files = `git ls-files spec`.split("\n")
|
18
|
-
s.add_development_dependency
|
19
|
-
s.add_development_dependency
|
18
|
+
s.add_development_dependency "rspec"
|
19
|
+
s.add_development_dependency "rake"
|
20
20
|
s.license = "MIT"
|
21
21
|
end
|
data/lib/dim.rb
CHANGED
@@ -58,9 +58,14 @@ module Dim
|
|
58
58
|
# create the service on demand. It is recommended that symbols be
|
59
59
|
# used as the name of a service.
|
60
60
|
def register(name,raise_error_on_duplicate = true,&block)
|
61
|
-
if @services[name]
|
62
|
-
|
61
|
+
if @services[name]
|
62
|
+
if raise_error_on_duplicate
|
63
|
+
fail DuplicateServiceError, "Duplicate Service Name '#{name}'"
|
64
|
+
else # delete the service from the cache
|
65
|
+
@cache.delete(name)
|
66
|
+
end
|
63
67
|
end
|
68
|
+
|
64
69
|
@services[name] = block
|
65
70
|
|
66
71
|
self.class.send(:define_method, name) do
|
@@ -72,15 +77,6 @@ module Dim
|
|
72
77
|
register(name,false,&block)
|
73
78
|
end
|
74
79
|
|
75
|
-
# Given a list of services, check to see if they are available, returning true or false.
|
76
|
-
def verify_dependencies(*names)
|
77
|
-
names.all? do |name|
|
78
|
-
respond_to?(name) || service_block(name)
|
79
|
-
end
|
80
|
-
rescue Dim::MissingServiceError
|
81
|
-
false
|
82
|
-
end
|
83
|
-
|
84
80
|
# Lookup a service from ENV variables, or use a default if given; fall back to searching the container and its parents for a default value
|
85
81
|
def register_env(name,default = nil)
|
86
82
|
if value = ENV[name.to_s.upcase]
|
@@ -128,5 +124,26 @@ module Dim
|
|
128
124
|
def self.service_block(name)
|
129
125
|
fail(MissingServiceError, "Unknown Service '#{name}'")
|
130
126
|
end
|
127
|
+
|
128
|
+
# Check to see if a custom method or service has been registered, returning true or false.
|
129
|
+
def service_exists?(name)
|
130
|
+
respond_to?(name) || service_block(name)
|
131
|
+
rescue Dim::MissingServiceError
|
132
|
+
false
|
133
|
+
end
|
134
|
+
|
135
|
+
# Given a list of services, check to see if they are available, returning true or false.
|
136
|
+
def verify_dependencies(*names)
|
137
|
+
names.all? { |name| service_exists?(name) }
|
138
|
+
end
|
139
|
+
|
140
|
+
# Given a list of services, check to see if they are available or raise an exception.
|
141
|
+
def verify_dependencies!(*names)
|
142
|
+
missing_dependencies = names.reject { |name| service_exists?(name) }
|
143
|
+
|
144
|
+
unless missing_dependencies.empty?
|
145
|
+
fail Dim::MissingServiceError, "Missing dependencies #{missing_dependencies.join(", ")}"
|
146
|
+
end
|
147
|
+
end
|
131
148
|
end
|
132
149
|
end
|
data/lib/version.rb
CHANGED
data/spec/dim_spec.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
require
|
2
|
-
require 'rspec/given'
|
1
|
+
require "dim"
|
3
2
|
|
4
3
|
class ConsoleAppender
|
5
4
|
end
|
@@ -28,192 +27,233 @@ end
|
|
28
27
|
describe Dim::Container do
|
29
28
|
let(:container) { Dim::Container.new }
|
30
29
|
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
context "creating objects" do
|
31
|
+
before { container.register(:app) { App.new } }
|
32
|
+
specify { expect(container.app).to be_a(App) }
|
34
33
|
end
|
35
34
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
context "returning the same object every time" do
|
36
|
+
let(:app) { container.app }
|
37
|
+
before { container.register(:app) { App.new } }
|
38
|
+
specify { expect(container.app).to be(app) }
|
40
39
|
end
|
41
40
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
context "overriding previously-registered objects" do
|
42
|
+
before do
|
43
|
+
container.register(:some_value) { "A" }
|
44
|
+
container.override(:some_value) { "B" }
|
45
|
+
end
|
46
|
+
|
47
|
+
specify { expect(container.some_value).to eq("B") }
|
46
48
|
end
|
47
49
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
context "explicitly clearing cache" do
|
51
|
+
before do
|
52
|
+
container.register(:app) { App.new }
|
53
|
+
end
|
54
|
+
|
55
|
+
specify "returns new object" do
|
56
|
+
expect {
|
57
|
+
container.clear_cache! }.
|
58
|
+
to change { container.app }
|
59
|
+
end
|
54
60
|
end
|
55
61
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
62
|
+
context "contructing dependent objects" do
|
63
|
+
let(:app) { container.app }
|
64
|
+
|
65
|
+
before do
|
66
|
+
container.register(:app) { |c| App.new(c.logger) }
|
67
|
+
container.register(:logger) { Logger.new }
|
68
|
+
end
|
69
|
+
|
70
|
+
specify { expect(app.logger).to be(container.logger) }
|
61
71
|
end
|
62
72
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
}
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
Given(:app) { container.app }
|
73
|
+
context "constructing dependent objects with setters" do
|
74
|
+
let(:app) { container.app }
|
75
|
+
|
76
|
+
before do
|
77
|
+
container.register(:app) do |c|
|
78
|
+
App.new.tap { |obj| obj.db = c.database }
|
79
|
+
end
|
80
|
+
container.register(:database) { MockDB.new }
|
81
|
+
end
|
73
82
|
|
74
|
-
|
83
|
+
specify { expect(app.db).to be(container.database) }
|
75
84
|
end
|
76
85
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
}
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
86
|
+
context "constructing multiple dependent objects" do
|
87
|
+
let(:app) { container.app }
|
88
|
+
|
89
|
+
before do
|
90
|
+
container.register(:app) do |c|
|
91
|
+
App.new(c.logger).tap { |obj| obj.db = c.database }
|
92
|
+
end
|
93
|
+
container.register(:logger) { Logger.new }
|
94
|
+
container.register(:database) { MockDB.new }
|
95
|
+
end
|
96
|
+
|
97
|
+
specify { expect(app.logger).to be(container.logger) }
|
98
|
+
specify { expect(app.db).to be(container.database) }
|
90
99
|
end
|
91
100
|
|
92
|
-
|
93
|
-
|
94
|
-
Given {
|
95
|
-
container.register(:logger) { |c|
|
96
|
-
Logger.new.tap { |obj|
|
97
|
-
obj.appender = c.logger_appender
|
98
|
-
}
|
99
|
-
}
|
100
|
-
}
|
101
|
-
Given { container.register(:logger_appender) { ConsoleAppender.new } }
|
102
|
-
Given { container.register(:database) { MockDB.new } }
|
103
|
-
Given(:logger) { container.app.logger }
|
101
|
+
context "constructing chains of dependencies" do
|
102
|
+
let(:logger) { container.app.logger }
|
104
103
|
|
105
|
-
|
104
|
+
before do
|
105
|
+
container.register(:app) { |c| App.new(c.logger) }
|
106
|
+
container.register(:logger) do |c|
|
107
|
+
Logger.new.tap { |obj| obj.appender = c.logger_appender }
|
108
|
+
end
|
109
|
+
container.register(:logger_appender) { ConsoleAppender.new }
|
110
|
+
container.register(:database) { MockDB.new }
|
111
|
+
end
|
112
|
+
|
113
|
+
specify { expect(logger.appender).to be(container.logger_appender) }
|
106
114
|
end
|
107
115
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
116
|
+
context "constructing literals" do
|
117
|
+
let(:db) { container.database }
|
118
|
+
|
119
|
+
before do
|
120
|
+
container.register(:database) { |c| RealDB.new(c.username, c.userpassword) }
|
121
|
+
container.register(:username) { "user_name_value" }
|
122
|
+
container.register(:userpassword) { "password_value" }
|
123
|
+
end
|
113
124
|
|
114
|
-
|
115
|
-
|
125
|
+
specify { expect(db.username).to eq("user_name_value") }
|
126
|
+
specify { expect(db.password).to eq("password_value") }
|
116
127
|
end
|
117
128
|
|
118
129
|
describe "Errors" do
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
lambda {
|
130
|
+
specify "raise missing service error" do
|
131
|
+
expect {
|
132
|
+
container.undefined_service_name
|
133
|
+
}.to raise_error(Dim::MissingServiceError, /undefined_service_name/)
|
134
|
+
end
|
135
|
+
|
136
|
+
context "duplicate service names" do
|
137
|
+
before { container.register(:duplicate_name) { 0 } }
|
138
|
+
|
139
|
+
specify do
|
140
|
+
expect {
|
131
141
|
container.register(:duplicate_name) { 0 }
|
132
|
-
}.
|
133
|
-
|
142
|
+
}.to raise_error(Dim::DuplicateServiceError, /duplicate_name/)
|
143
|
+
end
|
134
144
|
end
|
135
145
|
end
|
136
146
|
|
137
147
|
describe "Parent/Child Container Interaction" do
|
138
|
-
|
139
|
-
|
148
|
+
let(:parent) { container }
|
149
|
+
let(:child) { Dim::Container.new(parent) }
|
140
150
|
|
141
|
-
|
142
|
-
|
143
|
-
|
151
|
+
before do
|
152
|
+
parent.register(:cell) { :parent_cell }
|
153
|
+
parent.register(:gene) { :parent_gene }
|
154
|
+
child.register(:gene) { :child_gene }
|
155
|
+
end
|
144
156
|
|
145
|
-
|
146
|
-
|
157
|
+
context "reusing a service from the parent" do
|
158
|
+
specify { expect(child.cell).to eq(:parent_cell) }
|
147
159
|
end
|
148
160
|
|
149
|
-
|
150
|
-
|
151
|
-
child.gene.
|
161
|
+
context "overiding a service from the parent" do
|
162
|
+
specify "the child service overrides the parent" do
|
163
|
+
expect(child.gene).to eq(:child_gene)
|
152
164
|
end
|
153
165
|
end
|
154
166
|
|
155
|
-
|
156
|
-
|
157
|
-
|
167
|
+
context "wrapping a service from a parent" do
|
168
|
+
before { child.register(:cell) { |c| [c.parent.cell] } }
|
169
|
+
specify { expect(child.cell).to eq([:parent_cell]) }
|
158
170
|
end
|
159
171
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
172
|
+
context "overriding an indirect dependency" do
|
173
|
+
before do
|
174
|
+
parent.register(:wrapped_cell) { |c| [c.cell] }
|
175
|
+
child.register(:cell) { :child_cell }
|
176
|
+
end
|
177
|
+
|
178
|
+
specify { expect(child.wrapped_cell).to eq([:child_cell]) }
|
164
179
|
end
|
165
180
|
|
166
|
-
|
167
|
-
|
181
|
+
context "parent / child service conflicts from parents view" do
|
182
|
+
specify { expect(parent.gene).to eq(:parent_gene) }
|
168
183
|
end
|
169
184
|
|
170
|
-
|
171
|
-
|
172
|
-
|
185
|
+
context "child / child service name conflicts" do
|
186
|
+
let(:other_child) { Dim::Container.new(parent) }
|
187
|
+
|
188
|
+
before { other_child.register(:gene) { :other_child_gene } }
|
173
189
|
|
174
|
-
|
175
|
-
|
190
|
+
specify { expect(child.gene).to eq(:child_gene) }
|
191
|
+
specify { expect(other_child.gene).to eq(:other_child_gene) }
|
176
192
|
end
|
177
193
|
end
|
178
194
|
|
179
195
|
describe "Registering env variables" do
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
196
|
+
context "which exist in ENV" do
|
197
|
+
before do
|
198
|
+
ENV["SHAZ"] = "bot"
|
199
|
+
container.register_env(:shaz)
|
200
|
+
end
|
201
|
+
|
202
|
+
specify { expect(container.shaz).to eq("bot") }
|
184
203
|
end
|
185
204
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
Given(:child) { Dim::Container.new(parent) }
|
205
|
+
context "which only exist in parent" do
|
206
|
+
let(:parent) { container }
|
207
|
+
let(:child) { Dim::Container.new(parent) }
|
190
208
|
|
191
|
-
|
192
|
-
|
193
|
-
|
209
|
+
before do
|
210
|
+
parent.register(:foo) { "bar" }
|
211
|
+
ENV["FOO"] = nil
|
212
|
+
child.register_env(:foo)
|
213
|
+
end
|
214
|
+
|
215
|
+
specify { expect(container.foo).to eq("bar") }
|
194
216
|
end
|
195
217
|
|
196
|
-
|
197
|
-
|
198
|
-
|
218
|
+
context "which don't exist in ENV but have a default" do
|
219
|
+
before { container.register_env(:abc,"123") }
|
220
|
+
specify { expect(container.abc).to eq("123") }
|
199
221
|
end
|
200
222
|
|
201
|
-
|
202
|
-
|
203
|
-
|
223
|
+
context "which don't exist in optional hash" do
|
224
|
+
specify do
|
225
|
+
expect {
|
204
226
|
container.register_env(:dont_exist_in_env_or_optional_hash)
|
205
|
-
}.
|
206
|
-
|
227
|
+
}.to raise_error(Dim::EnvironmentVariableNotFound)
|
228
|
+
end
|
207
229
|
end
|
208
230
|
end
|
209
231
|
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
232
|
+
context "verifying dependencies" do
|
233
|
+
before { container.register(:app) { :app } }
|
234
|
+
|
235
|
+
specify { expect(container.verify_dependencies(:app)).to be_true }
|
236
|
+
specify { expect(container.verify_dependencies(:app,:frobosh)).to be_false }
|
237
|
+
end
|
238
|
+
|
239
|
+
context "check if service exists" do
|
240
|
+
before do
|
241
|
+
container.register(:app) { :app }
|
242
|
+
def container.custom_method; end
|
243
|
+
end
|
244
|
+
|
245
|
+
specify { expect(container.service_exists?(:app)).to be_true }
|
246
|
+
specify { expect(container.service_exists?(:custom_method)).to be_true }
|
247
|
+
specify { expect(container.service_exists?(:missing_app)).to be_false }
|
248
|
+
end
|
249
|
+
|
250
|
+
context "dangerously verifying dependencies" do
|
251
|
+
before { container.register(:app) { :app } }
|
252
|
+
|
253
|
+
specify { expect(container.verify_dependencies!(:app)).to be_nil }
|
254
|
+
|
255
|
+
specify "raise error with list of missing services" do
|
256
|
+
expect{ container.verify_dependencies!(:app,:missing_app) }.to raise_error(Dim::MissingServiceError,/missing_app/)
|
257
|
+
end
|
218
258
|
end
|
219
259
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Weirich
|
@@ -9,34 +9,34 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-08-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
29
|
+
name: rake
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
description: Minimalistic dependency injection framework keeps all of your object
|
@@ -47,9 +47,8 @@ extensions: []
|
|
47
47
|
extra_rdoc_files:
|
48
48
|
- README.markdown
|
49
49
|
files:
|
50
|
-
- .gitignore
|
51
|
-
- .rspec
|
52
|
-
- .ruby-version
|
50
|
+
- ".gitignore"
|
51
|
+
- ".rspec"
|
53
52
|
- Gemfile
|
54
53
|
- LICENSE
|
55
54
|
- README.markdown
|
@@ -64,25 +63,24 @@ licenses:
|
|
64
63
|
metadata: {}
|
65
64
|
post_install_message:
|
66
65
|
rdoc_options:
|
67
|
-
- --charset=UTF-8
|
66
|
+
- "--charset=UTF-8"
|
68
67
|
require_paths:
|
69
68
|
- lib
|
70
69
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
70
|
requirements:
|
72
|
-
- -
|
71
|
+
- - ">="
|
73
72
|
- !ruby/object:Gem::Version
|
74
73
|
version: '0'
|
75
74
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
75
|
requirements:
|
77
|
-
- -
|
76
|
+
- - ">="
|
78
77
|
- !ruby/object:Gem::Version
|
79
78
|
version: '0'
|
80
79
|
requirements: []
|
81
80
|
rubyforge_project:
|
82
|
-
rubygems_version: 2.
|
81
|
+
rubygems_version: 2.6.12
|
83
82
|
signing_key:
|
84
83
|
specification_version: 4
|
85
84
|
summary: Minimalistic dependency injection framework
|
86
85
|
test_files:
|
87
86
|
- spec/dim_spec.rb
|
88
|
-
has_rdoc:
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
ruby-1.9.3
|