ruse 0.0.2 → 0.0.3
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 +4 -4
- data/lib/ruse.rb +4 -0
- data/lib/ruse/activesupport.rb +10 -0
- data/lib/ruse/injector.rb +21 -0
- data/lib/ruse/version.rb +1 -1
- data/specs/injector_spec.rb +17 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eea82ddd26c784db349a59f881be20f9137061bc
|
4
|
+
data.tar.gz: a9612d3e8d4802eb5291a2615b2ebba9d8f76343
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba15491b3261228c622116eb269594b9bd77b5e1910e9146fc8821ddff10eff6c05c7a8fd691098b3952a5bc4e9894d0b6b7fd2018027e6124aade947fe29a5c
|
7
|
+
data.tar.gz: d6a1d5057fe6ffa7a144d5998402b92a53b5d487b51b19745c72730517243b5e0e3d7b8452ffb5b0022f204db2a5286f5402991c1a379f9a4db333b80b3a5558
|
data/lib/ruse.rb
CHANGED
@@ -0,0 +1,10 @@
|
|
1
|
+
module Ruse
|
2
|
+
# Eventually, the resolvers may be pluggable, in which case we could
|
3
|
+
# replace the normal TypeResolver with one specific to ActiveSupport.
|
4
|
+
# For now, we'll just monkeypatch.
|
5
|
+
class TypeResolver
|
6
|
+
def load_type(type_name)
|
7
|
+
type_name.safe_constantize
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
data/lib/ruse/injector.rb
CHANGED
@@ -28,6 +28,7 @@ module Ruse
|
|
28
28
|
@configuration ||= {
|
29
29
|
aliases:{},
|
30
30
|
values: {},
|
31
|
+
factories: {},
|
31
32
|
}
|
32
33
|
end
|
33
34
|
|
@@ -39,6 +40,10 @@ module Ruse
|
|
39
40
|
configuration[:values]
|
40
41
|
end
|
41
42
|
|
43
|
+
def factories
|
44
|
+
configuration[:factories]
|
45
|
+
end
|
46
|
+
|
42
47
|
def find_resolver(identifier)
|
43
48
|
resolvers.detect {|h|
|
44
49
|
h.can_build?(identifier)
|
@@ -47,6 +52,7 @@ module Ruse
|
|
47
52
|
|
48
53
|
def resolvers
|
49
54
|
@resolvers ||= [
|
55
|
+
ProcResolver.new(factories),
|
50
56
|
ValueResolver.new(values),
|
51
57
|
TypeResolver.new(self),
|
52
58
|
]
|
@@ -55,6 +61,21 @@ module Ruse
|
|
55
61
|
|
56
62
|
class UnknownServiceError < StandardError; end
|
57
63
|
|
64
|
+
class ProcResolver
|
65
|
+
attr_reader :factories
|
66
|
+
def initialize(factories)
|
67
|
+
@factories = factories
|
68
|
+
end
|
69
|
+
def can_build?(identifier)
|
70
|
+
factories.key? identifier
|
71
|
+
end
|
72
|
+
|
73
|
+
def build(identifier)
|
74
|
+
factory = factories.fetch(identifier)
|
75
|
+
factory.call
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
58
79
|
class ValueResolver
|
59
80
|
attr_reader :values
|
60
81
|
|
data/lib/ruse/version.rb
CHANGED
data/specs/injector_spec.rb
CHANGED
@@ -61,6 +61,16 @@ describe Ruse::Injector do
|
|
61
61
|
injector.get(:example).must_be_same_as(value_object)
|
62
62
|
end
|
63
63
|
|
64
|
+
it "can retrieve an object via delayed evaluation" do
|
65
|
+
the_value = 42
|
66
|
+
injector.configure factories: { example: -> { Delayed.new(the_value) } }
|
67
|
+
the_value = 88
|
68
|
+
instance = injector.get(:example)
|
69
|
+
instance.must_be_instance_of(Delayed)
|
70
|
+
instance.value.must_equal(88)
|
71
|
+
end
|
72
|
+
|
73
|
+
|
64
74
|
class ServiceA; end
|
65
75
|
class ServiceB; end
|
66
76
|
|
@@ -87,6 +97,13 @@ describe Ruse::Injector do
|
|
87
97
|
end
|
88
98
|
end
|
89
99
|
|
100
|
+
class Delayed
|
101
|
+
attr_reader :value
|
102
|
+
def initialize(value)
|
103
|
+
@value = value
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
90
107
|
module Deep
|
91
108
|
module Namespaced
|
92
109
|
class Service
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua Flanagan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -51,6 +51,7 @@ files:
|
|
51
51
|
- README.md
|
52
52
|
- Rakefile
|
53
53
|
- lib/ruse.rb
|
54
|
+
- lib/ruse/activesupport.rb
|
54
55
|
- lib/ruse/injector.rb
|
55
56
|
- lib/ruse/version.rb
|
56
57
|
- ruse.gemspec
|