diftw 1.0.0.pre.rc2 → 1.0.0.pre.rc3

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: 2fdc140e5795f103a584d7a7799acd59e40000e3
4
- data.tar.gz: 03e40f06fb27bc8e20ecdc03711bb8043dc75de6
3
+ metadata.gz: fa3e5cdd05bb21570dce716695928161bb60de29
4
+ data.tar.gz: c43c0ce2a92cc85dd6163970ed31ed915101efc8
5
5
  SHA512:
6
- metadata.gz: ec92e112aec09c21bcafe39a73a8b9aa623aa2917a26ca730e4047d68a5d8c4fbd0ef8061e0f59290931ec07cc287ab102e5a391ffd0daccce9b51fdfe98ae2a
7
- data.tar.gz: c3e1f46d4b45018dbcf5289acba1362e5f54f2a4d0f83c06de8dd099cbcedb5f1bca42905c2cb363820d5de5eedc28e61ff6e1d2dbac0ad8ce210505f33b97c6
6
+ metadata.gz: 161f0b4c19fb676274d1bfc3b45e5d3d1b6479ae8e8778d2db18cbef3353b1212d30773287d15a01938ace911095c5e68c819088ea1d72035d05c39e9f67b14d
7
+ data.tar.gz: 2cbb70d0f199d131cbea1650f9f62a936fc6c51f6ec4de9b75b4ca3aa86e90c979f7ae2e8bbfb61c795ae6696b1ab68ae9a69bd78980fa8e9fab0ce5d706c7b7
data/README.md CHANGED
@@ -9,9 +9,9 @@ If your only concern is testing, mocks/stubs and `webmock` might be all you need
9
9
  ### Features
10
10
 
11
11
  * DI container w/dead-simple registration
12
+ * Inject singletons or factories
12
13
  * Lazy injection (by default)
13
14
  * Inject into each of a class's instances, a single instance, a class itself, or a module
14
- * Inject singletons or factories
15
15
  * Uses parent-child injectors for max flexibility
16
16
  * Threadsafe, after registration
17
17
 
@@ -89,19 +89,6 @@ Lazy injection is usually fine. But if it isn't, use `inject!`:
89
89
  puts SomeModule.baz.message
90
90
  => 'Baz'
91
91
 
92
- ## Optionally injects singletons
93
-
94
- DI = DiFtw::Injector.new do
95
- singleton :bar do
96
- OpenStruct.new(message: 'Bar')
97
- end
98
- end
99
-
100
- Widget.new.bar.object_id == Widget.new.bar.object_id
101
- => true
102
-
103
- Accessing injected singletons **is thread safe**. However, registering them is not.
104
-
105
92
  ## Parent-Child injectors
106
93
 
107
94
  This is **maybe the coolest part**. Each time you call `inject` (or `inject_instance`) you're creating a fresh, empty child `DiFtw::Injector`. It will recursively look up dependencies through the parent chain until it finds the nearest registration of that dependency.
data/lib/diftw/builder.rb CHANGED
@@ -35,22 +35,17 @@ module DiFtw
35
35
  end
36
36
  nil
37
37
  end
38
-
39
- # Define instance accessor methods
40
- di_mod._diftw_dependencies.each do |dep|
41
- define_method dep do
42
- var = "@_diftw_#{dep}"
43
- instance_variable_get(var) || instance_variable_set(var, self.injector[dep])
44
- end
45
- end
46
38
  end
39
+
40
+ # Define instance accessor methods. Do as a string so we get/set instance variables directly.
41
+ base.class_eval _diftw_dependencies.map { |dep|
42
+ "def #{dep}; @_diftw_#{dep} ||= self.injector[:#{dep}]; end"
43
+ }.join $/
47
44
  end
48
45
 
49
46
  def self.extended(base)
50
47
  di_mod = self
51
- base.singleton_class.class_eval do
52
- include di_mod
53
- end
48
+ base.singleton_class.class_eval { include di_mod }
54
49
  end
55
50
  }.tap { |mod|
56
51
  mod.injector = Injector.new(parent: parent_injector)
data/lib/diftw/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module DiFtw
2
2
  # Library version
3
- VERSION = '1.0.0-rc2'.freeze
3
+ VERSION = '1.0.0-rc3'.freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diftw
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.rc2
4
+ version: 1.0.0.pre.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Hollinger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-09 00:00:00.000000000 Z
11
+ date: 2017-09-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A small dependency injection library for Ruby
14
14
  email: jordan.hollinger@gmail.com