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 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