ruse 0.0.2 → 0.0.3

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: c0271481168d1bc9a40d546611f6d3f142eda19a
4
- data.tar.gz: 530a4e863f7820be1970720975f57136332ddc0c
3
+ metadata.gz: eea82ddd26c784db349a59f881be20f9137061bc
4
+ data.tar.gz: a9612d3e8d4802eb5291a2615b2ebba9d8f76343
5
5
  SHA512:
6
- metadata.gz: 885a610f5011e855d770749cfb4582115139b6d1a129dc27dba412ee8c0fb6f467fe8e2141bfd1a2549bdec3966cdb1d46a7126f9b83a1363d5f517f07553528
7
- data.tar.gz: 251011507aea85f2d8b2417edc9a0b7527167b9db4356ec8d3101b64ad4bb22cd24114eaa39312e3cad6c1072bd228c232bb3d1afc51544e3fd55a73ca30e0d8
6
+ metadata.gz: ba15491b3261228c622116eb269594b9bd77b5e1910e9146fc8821ddff10eff6c05c7a8fd691098b3952a5bc4e9894d0b6b7fd2018027e6124aade947fe29a5c
7
+ data.tar.gz: d6a1d5057fe6ffa7a144d5998402b92a53b5d487b51b19745c72730517243b5e0e3d7b8452ffb5b0022f204db2a5286f5402991c1a379f9a4db333b80b3a5558
@@ -1,6 +1,10 @@
1
1
  require "ruse/injector"
2
2
  require "ruse/version"
3
3
 
4
+ if defined? ActiveSupport::Dependencies::ModuleConstMissing
5
+ require "ruse/activesupport"
6
+ end
7
+
4
8
  module Ruse
5
9
  def self.create_injector(config=nil)
6
10
  Ruse::Injector.new.tap do |i|
@@ -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
@@ -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
 
@@ -1,3 +1,3 @@
1
1
  module Ruse
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -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.2
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-27 00:00:00.000000000 Z
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