little_boxes 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 86e6644930011e5254977f6ab0809cafa6a22696
4
+ data.tar.gz: bc84eb541accd46a4f35a3eb3e13d51913f489ca
5
+ SHA512:
6
+ metadata.gz: efe43b09428af99ed51374d404f2d590ab135cba431fc7d53317d93d304befdb00db1ddb38f65aace6460d0bd684932d88d8cd26e0950e72ee551543eca5d531
7
+ data.tar.gz: 3fe8e90d9769f77b80b795eb939b5fc4b4779e4c61db4bc7ac6d84861c32824e1cfbc6650b3061f5dc009e415ae2eac4fbcbd8d266b1b521afd83dc243967379
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :test, :development do
6
+ gem 'rspec'
7
+ gem 'pry'
8
+ gem 'rerun'
9
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2014 Manuel Morales, et al.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # LittleBoxes
2
+
3
+ Dependancy injection framework in Ruby.
4
+
5
+
6
+ ## Contributing
7
+
8
+ Do not forget to run the tests with:
9
+
10
+ ```bash
11
+ rake
12
+ ```
13
+
14
+ And bump the version with any of:
15
+
16
+ ```bash
17
+ $ gem bump --version 1.1.1 # Bump the gem version to the given version number
18
+ $ gem bump --version major # Bump the gem version to the next major level (e.g. 0.0.1 to 1.0.0)
19
+ $ gem bump --version minor # Bump the gem version to the next minor level (e.g. 0.0.1 to 0.1.0)
20
+ $ gem bump --version patch # Bump the gem version to the next patch level (e.g. 0.0.1 to 0.0.2)
21
+ ```
22
+
23
+
24
+ ## License
25
+
26
+ Released under the MIT License.
27
+ See the [LICENSE](LICENSE.txt) file for further details.
28
+
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake'
3
+
4
+ require 'rspec/core/rake_task'
5
+ task :default => :spec
6
+ task :test => :spec
7
+ desc 'Run all specs'
8
+ RSpec::Core::RakeTask.new('spec') do |spec|
9
+ spec.rspec_opts = %w{}
10
+ end
@@ -0,0 +1,7 @@
1
+ module LittleBoxes
2
+ require 'little_boxes/registry'
3
+ require 'little_boxes/dependant_registry'
4
+ Dir.glob(File.dirname(__FILE__) + '/little_boxes/*').each{|p| require p }
5
+
6
+ class MissingDependency < RuntimeError; end
7
+ end
@@ -0,0 +1,19 @@
1
+ module LittleBoxes
2
+ class Box
3
+ include Registry
4
+
5
+ def get
6
+ self
7
+ end
8
+
9
+ def customize name, &block
10
+ ForwardingDsl.run self[name], &block
11
+ end
12
+
13
+ def box name, &block
14
+ s = self.class.new parent: self, name: name
15
+ self[name] = s
16
+ ForwardingDsl.run s, &block
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ module LittleBoxes
2
+ class DefinedDependant
3
+ include DependantRegistry
4
+
5
+ def get
6
+ run
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,44 @@
1
+ require 'mini_object'
2
+
3
+ module LittleBoxes
4
+ module Dependant
5
+ module ClassMethods
6
+ def dependency name, opts = {}
7
+ instance_dependencies[name] = opts
8
+ attr_injectable name
9
+ end
10
+
11
+ def class_dependency name, opts = {}
12
+ class_dependencies[name] = opts
13
+ cattr_injectable name
14
+ end
15
+
16
+ def instance_dependencies
17
+ @instance_dependencies ||= {}
18
+ end
19
+
20
+ def class_dependencies
21
+ @class_dependencies ||= {}
22
+ end
23
+
24
+ def dependencies
25
+ class_dependencies
26
+ end
27
+
28
+ def inherited klass
29
+ klass.class_dependencies.merge! class_dependencies
30
+ klass.instance_dependencies.merge! instance_dependencies
31
+ super
32
+ end
33
+ end
34
+
35
+ def self.included klass
36
+ klass.extend ClassMethods
37
+ klass.include MiniObject::Injectable
38
+ end
39
+
40
+ def dependencies
41
+ self.class.instance_dependencies
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ module LittleBoxes
2
+ module DependantRegistry
3
+ def self.included base
4
+ base.class_eval do
5
+ include Registry
6
+ attr_accessor :build_block
7
+
8
+ def initialize name: nil, parent: parent, &block
9
+ @build_block = block
10
+ @name = name
11
+ @parent = parent
12
+ end
13
+ end
14
+ end
15
+
16
+ def get
17
+ raise NotImplementedError
18
+ end
19
+
20
+ def build &block
21
+ @build_block = block
22
+ end
23
+
24
+ def get_dependency name, options = nil
25
+ options ||= {}
26
+
27
+ if d = self[name]; d.get
28
+ elsif s = options[:default]; s.call parent
29
+ else raise(MissingDependency.new "Could not find #{name}")
30
+ end
31
+ end
32
+
33
+ private
34
+ def run
35
+ ForwardingDsl.run(self, &build_block).tap do |subject|
36
+ if subject.respond_to? :dependencies
37
+ subject.dependencies.each do |name, options|
38
+ subject.send("#{name}"){ get_dependency(name, options) }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,9 @@
1
+ module LittleBoxes
2
+ class MemoizedDependant
3
+ include DependantRegistry
4
+
5
+ def get
6
+ @value ||= run
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ require 'logger'
2
+
3
+ module LittleBoxes
4
+ class NullLogger < Logger
5
+ def initialize; end
6
+ def add(*args); end
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ module LittleBoxes
2
+ class Obtained
3
+ include DependantRegistry
4
+
5
+ def get
6
+ run
7
+ end
8
+
9
+ def get
10
+ ForwardingDsl.run(self, &build_block)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,84 @@
1
+ require 'forwarding_dsl'
2
+
3
+ module LittleBoxes
4
+ module Registry
5
+ attr_accessor :parent
6
+ attr_accessor :name
7
+
8
+ def initialize parent: nil, name: self.class, &block
9
+ @parent = parent
10
+ @name = name
11
+ ForwardingDsl.run self, &block
12
+ end
13
+
14
+ def registry
15
+ @registry ||= {}
16
+ end
17
+
18
+ def method_missing name, *args, &block
19
+ if self[name]
20
+ self[name].get
21
+ else
22
+ super
23
+ end
24
+ end
25
+
26
+ def respond_to_missing? name, *args
27
+ !!self[name] || super
28
+ end
29
+
30
+ def [] name
31
+ registry[name] || (parent && parent[name])
32
+ end
33
+
34
+ def []= name, value
35
+ registry[name]= value
36
+ end
37
+
38
+ def clear
39
+ @registry = {}
40
+ end
41
+
42
+ def let name, &block
43
+ self[name] = MemoizedDependant.new name: name, parent: self, &block
44
+ end
45
+
46
+ def define name, &block
47
+ self[name] = DefinedDependant.new name: name, parent: self, &block
48
+ end
49
+
50
+ def obtain name, &block
51
+ self[name] = Obtained.new name: name, parent: self, &block
52
+ end
53
+
54
+ def inspect
55
+ "<#{name} box: #{registry.keys.join(" ")}>"
56
+ end
57
+
58
+ alias to_s inspect
59
+
60
+ def name
61
+ @name || self.class.name
62
+ end
63
+
64
+ def path
65
+ if parent
66
+ parent.path + [self]
67
+ else
68
+ [self]
69
+ end
70
+ end
71
+
72
+ def root
73
+ path.first
74
+ end
75
+
76
+ def reset
77
+ @value = nil
78
+
79
+ registry.each do |name, register|
80
+ register.reset
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,3 @@
1
+ module LittleBoxes
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ gem_name = "little_boxes" # TODO: Rename this
3
+
4
+ lib = File.expand_path('../lib', __FILE__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+ require "#{gem_name}/version"
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = gem_name
10
+ spec.version = LittleBoxes::VERSION
11
+ spec.authors = ["Workshare's dev team"]
12
+ spec.email = ['_Development@workshare.com']
13
+ spec.description = File.read('README.md').split("\n").reject{|l| l.length == 0 || l =~ /^[#=]+/ }.first
14
+ spec.summary = spec.description
15
+ spec.homepage = "https://github.com/worshare/#{spec.name.gsub('_','-')}"
16
+ spec.license = "Copyright"
17
+
18
+ spec.files = `git ls-files`.split($/)
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_runtime_dependency "forwarding_dsl"
26
+ spec.add_runtime_dependency "mini_object"
27
+ end
@@ -0,0 +1,341 @@
1
+ require_relative '../spec_helper'
2
+ require 'ostruct'
3
+
4
+ describe LittleBoxes::Box do
5
+ subject{ described_class.new }
6
+
7
+ describe '#customize' do
8
+ it 'allows customizing dependencies' do
9
+ subject.let(:loglevel) { 0 }
10
+ subject.let(:logger) { double('logger', loglevel: loglevel) }
11
+
12
+ subject.customize(:logger) do |l|
13
+ l.let(:loglevel) { 1 }
14
+ end
15
+
16
+ expect(subject.logger.loglevel).to eq 1
17
+ end
18
+
19
+ it 'supports overriding lets attributes from the outside' do
20
+ server_class = Class.new do
21
+ include LittleBoxes::Dependant
22
+ dependency :logger
23
+ end
24
+
25
+ subject.let(:logger) { :logger }
26
+
27
+ subject.let(:server) { server_class.new }
28
+
29
+ subject.customize(:server) do
30
+ let(:logger) { :new_logger }
31
+ end
32
+
33
+ expect(subject.server.logger).to be :new_logger
34
+ end
35
+ end
36
+
37
+ describe '#let' do
38
+ it 'has freely defined registers with just a lambda' do
39
+ subject.let(:loglevel) { 0 }
40
+ expect(subject.loglevel).to eq 0
41
+ end
42
+
43
+ it 'memoizes the result' do
44
+ n = 0
45
+ subject.let(:loglevel) { n = n + 1 }
46
+
47
+ expect(subject.loglevel).to eq 1
48
+ expect(subject.loglevel).to eq 1
49
+ end
50
+
51
+ it 'allows referencing other dependencies within such lambda' do
52
+ subject.let(:loglevel) { 0 }
53
+ subject.let(:logger) { double('logger', loglevel: loglevel) }
54
+ expect(subject.logger.loglevel).to eq 0
55
+ end
56
+
57
+ it 'has instances that have dependencies' do
58
+ server_class = Class.new do
59
+ include LittleBoxes::Dependant
60
+ dependency :logger
61
+ end
62
+
63
+ subject.let(:logger) { double('logger') }
64
+ subject.let(:server) { server_class.new }
65
+ expect(subject.server.logger).to be subject.logger
66
+ end
67
+
68
+ it 'unknown dependencies raise exception' do
69
+ server_class = Class.new do
70
+ include LittleBoxes::Dependant
71
+ dependency :unknown_dep
72
+ end
73
+
74
+ subject.let(:server) { server_class.new }
75
+ expect{ subject.server.unknown_dep }.to raise_error(LittleBoxes::MissingDependency)
76
+ end
77
+
78
+ it 'has classes that have class dependencies' do
79
+ server_class = Class.new do
80
+ include LittleBoxes::Dependant
81
+ class_dependency :host
82
+ end
83
+
84
+ subject.let(:host) { 'localhost' }
85
+ subject.let(:server_class) { server_class }
86
+ expect(subject.server_class.host).to eq 'localhost'
87
+ end
88
+
89
+ it 'supports defaults' do
90
+ server_class = Class.new do
91
+ include LittleBoxes::Dependant
92
+ dependency :log, default: ->(d){ d.logger }
93
+ end
94
+
95
+ subject.let(:logger) { :logger }
96
+
97
+ subject.let(:server) { server_class.new }
98
+
99
+ expect(subject.server.log).to be :logger
100
+ end
101
+
102
+ it 'assigns dependencies with lambdas' do
103
+ server_class = Class.new do
104
+ include LittleBoxes::Dependant
105
+
106
+ dependency :logger
107
+ end
108
+
109
+ subject.let(:server) { server_class.new }
110
+
111
+ subject.let(:logger) { :old }
112
+ expect(subject.server.logger).to be :old
113
+
114
+ subject.let(:logger) { :new }
115
+ expect(subject.server.logger).to be :new
116
+ end
117
+
118
+ it 'supports overriding specific attributes' do
119
+ server_class = Class.new do
120
+ include LittleBoxes::Dependant
121
+ dependency :logger
122
+ end
123
+
124
+ subject.let(:logger) { :logger }
125
+ subject.let(:new_logger) { :new_logger }
126
+
127
+ subject.let(:server) do
128
+ build { server_class.new }
129
+ let(:logger) { new_logger }
130
+ end
131
+
132
+ expect(subject.server.logger).to be :new_logger
133
+ end
134
+ end
135
+
136
+ describe '#obtain' do
137
+ it 'does not memoize the result' do
138
+ n = 0
139
+ subject.obtain(:loglevel) { n = n + 1 }
140
+
141
+ expect(subject.loglevel).to eq 1
142
+ expect(subject.loglevel).to eq 2
143
+ end
144
+
145
+ it 'doesn not inject anything' do
146
+ server_class = Class.new do
147
+ include LittleBoxes::Dependant
148
+ dependency :logger
149
+ end
150
+
151
+ subject.let(:logger) { double('logger') }
152
+ subject.obtain(:server) { server_class.new.tap { |s| s.logger = :old_logger } }
153
+ expect(subject.server.logger).to be :old_logger
154
+ end
155
+ end
156
+
157
+ describe '#define' do
158
+ it 'does not memoize the result' do
159
+ n = 0
160
+ subject.define(:loglevel) { n = n + 1 }
161
+
162
+ expect(subject.loglevel).to eq 1
163
+ expect(subject.loglevel).to eq 2
164
+ end
165
+
166
+ it 'has instances that have dependencies' do
167
+ server_class = Class.new do
168
+ include LittleBoxes::Dependant
169
+ dependency :logger
170
+ end
171
+
172
+ subject.let(:logger) { double('logger') }
173
+ subject.define(:server) { server_class.new }
174
+ expect(subject.server.logger).to be subject.logger
175
+ end
176
+
177
+ it 'unknown dependencies raise exception' do
178
+ server_class = Class.new do
179
+ include LittleBoxes::Dependant
180
+ dependency :unknown_dep
181
+ end
182
+
183
+ subject.define(:server) { server_class.new }
184
+ expect{ subject.server.unknown_dep }.to raise_error(LittleBoxes::MissingDependency)
185
+ end
186
+
187
+ it 'has classes that have class dependencies' do
188
+ server_class = Class.new do
189
+ include LittleBoxes::Dependant
190
+ class_dependency :host
191
+ end
192
+
193
+ subject.let(:host) { 'localhost' }
194
+ subject.define(:server_class) { server_class }
195
+ expect(subject.server_class.host).to eq 'localhost'
196
+ end
197
+
198
+ it 'supports defaults' do
199
+ server_class = Class.new do
200
+ include LittleBoxes::Dependant
201
+ dependency :log, default: ->(d){ d.logger }
202
+ end
203
+
204
+ subject.let(:logger) { :logger }
205
+
206
+ subject.define(:server) { server_class.new }
207
+
208
+ expect(subject.server.log).to be :logger
209
+ end
210
+
211
+ it 'assigns dependencies with lambdas' do
212
+ server_class = Class.new do
213
+ include LittleBoxes::Dependant
214
+
215
+ dependency :logger
216
+ end
217
+
218
+ subject.define(:server) { server_class.new }
219
+
220
+ subject.let(:logger) { :old }
221
+ expect(subject.server.logger).to be :old
222
+
223
+ subject.let(:logger) { :new }
224
+ expect(subject.server.logger).to be :new
225
+ end
226
+ end
227
+
228
+ describe '#box' do
229
+ it 'supports boxes' do
230
+ subject.box :loggers do
231
+ let(:null) { :null_logger }
232
+ let(:file) { :file_logger }
233
+ end
234
+
235
+ expect(subject.loggers.null).to be :null_logger
236
+ end
237
+
238
+ it 'supports finding dependencies upwards in the ancestry' do
239
+ server_class = Class.new do
240
+ include LittleBoxes::Dependant
241
+ dependency :logger
242
+ end
243
+
244
+ subject.let(:logger) { :logger }
245
+
246
+ subject.box :servers do
247
+ let(:one) { server_class.new }
248
+ end
249
+
250
+ expect(subject.servers.one.logger).to be :logger
251
+ end
252
+
253
+ it 'defaults within boxes' do
254
+ server_class = Class.new do
255
+ include LittleBoxes::Dependant
256
+ dependency :log, default: ->(a){ a.logger }
257
+ end
258
+
259
+ subject.let(:logger) { :logger }
260
+
261
+ subject.box :servers do
262
+ let(:apache) { server_class.new }
263
+ end
264
+
265
+ expect(subject.servers.apache.log).to be :logger
266
+ end
267
+ end
268
+
269
+ describe '#inspect' do
270
+ it 'has nice inspect' do
271
+ subject.let(:loglevel) { 0 }
272
+ subject.let(:logger) { 0 }
273
+ expect(subject.inspect).to eq "<LittleBoxes::Box box: loglevel logger>"
274
+ end
275
+ end
276
+
277
+ describe '#path' do
278
+ it 'has a path' do
279
+ subject.box :second do
280
+ box :third do
281
+ end
282
+ end
283
+
284
+ expect(subject.second.third.path).to eq [subject, subject.second, subject.second.third]
285
+ end
286
+ end
287
+
288
+ describe '#name' do
289
+ it 'names boxes' do
290
+ subject.name = :first
291
+
292
+ subject.box :second do
293
+ box :third do
294
+ end
295
+ end
296
+
297
+ expect(subject.second.third.path.map(&:name)).to eq [:first, :second, :third]
298
+ end
299
+ end
300
+
301
+ describe '#reset' do
302
+ it 'has a reset' do
303
+ first = subject
304
+
305
+ first.box :second do
306
+ let(:logger) { Object.new }
307
+ end
308
+
309
+ old_logger = first.second.logger
310
+
311
+ first.reset
312
+ expect(first.second.logger).not_to be old_logger
313
+ end
314
+ end
315
+
316
+ describe '#root' do
317
+ it 'has a root' do
318
+ first = subject
319
+
320
+ first.box :second do
321
+ box(:third) { }
322
+ end
323
+
324
+ expect(first.second.third.root).to eq first
325
+ end
326
+ end
327
+
328
+ describe '.new' do
329
+ it 'executes block on initialize' do
330
+ subject = described_class.new do
331
+ let(:loglevel) { 0 }
332
+ end
333
+
334
+ expect(subject.loglevel).to eq 0
335
+ end
336
+
337
+ it 'can build instances' do
338
+ expect(subject).to be_a(described_class)
339
+ end
340
+ end
341
+ end
@@ -0,0 +1,28 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe LittleBoxes::Dependant do
4
+ let(:box) { LittleBoxes::Box.new }
5
+
6
+ describe 'Dependant' do
7
+ it 'can be inherited' do
8
+ class_one = Class.new do
9
+ include LittleBoxes::Dependant
10
+ dependency :one
11
+ end
12
+
13
+ class_two = Class.new class_one do
14
+ include LittleBoxes::Dependant
15
+ dependency :two
16
+ end
17
+
18
+ box.let(:one) { :one }
19
+ box.let(:two) { :two }
20
+ box.let(:dependant_one) { class_one.new }
21
+ box.let(:dependant_two) { class_two.new }
22
+
23
+ expect(box.dependant_one.one).to be :one
24
+ expect(box.dependant_two.one).to be :one
25
+ expect(box.dependant_two.two).to be :two
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe LittleBoxes do
4
+ it 'has a version' do
5
+ expect(LittleBoxes::VERSION).not_to be_nil
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ require 'pry'
4
+
5
+ RSpec.configure do |config|
6
+ config.color = true
7
+ config.tty = true
8
+ config.formatter = :documentation # :documentation, :progress, :html, :textmate
9
+ end
10
+
11
+ $LOAD_PATH.unshift File.expand_path('lib')
12
+ require 'little_boxes'
13
+
14
+ $LOAD_PATH.unshift File.expand_path('spec/support')
15
+
metadata ADDED
@@ -0,0 +1,125 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: little_boxes
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Workshare's dev team
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: forwarding_dsl
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mini_object
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Dependancy injection framework in Ruby.
70
+ email:
71
+ - _Development@workshare.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - Gemfile
78
+ - LICENSE.txt
79
+ - README.md
80
+ - Rakefile
81
+ - lib/little_boxes.rb
82
+ - lib/little_boxes/box.rb
83
+ - lib/little_boxes/defined_dependant.rb
84
+ - lib/little_boxes/dependant.rb
85
+ - lib/little_boxes/dependant_registry.rb
86
+ - lib/little_boxes/memoized_dependant.rb
87
+ - lib/little_boxes/null_logger.rb
88
+ - lib/little_boxes/obtained.rb
89
+ - lib/little_boxes/registry.rb
90
+ - lib/little_boxes/version.rb
91
+ - little_boxes.gemspec
92
+ - spec/little_boxes/box_spec.rb
93
+ - spec/little_boxes/dependant_spec.rb
94
+ - spec/little_boxes_spec.rb
95
+ - spec/spec_helper.rb
96
+ homepage: https://github.com/worshare/little-boxes
97
+ licenses:
98
+ - Copyright
99
+ metadata: {}
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project:
116
+ rubygems_version: 2.2.2
117
+ signing_key:
118
+ specification_version: 4
119
+ summary: Dependancy injection framework in Ruby.
120
+ test_files:
121
+ - spec/little_boxes/box_spec.rb
122
+ - spec/little_boxes/dependant_spec.rb
123
+ - spec/little_boxes_spec.rb
124
+ - spec/spec_helper.rb
125
+ has_rdoc: