little_boxes 0.1.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 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: