smithy 0.0.1 → 1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm use ruby-1.9.3-p194@smithy
1
+ rvm use ruby-1.9.3-p374@smithy
data/README.md CHANGED
@@ -26,7 +26,8 @@ Or install it yourself as:
26
26
 
27
27
  ## Usage
28
28
 
29
- require "rubygems/setup"
29
+ require "rubygems"
30
+ require "bundler/setup"
30
31
 
31
32
  require "logger"
32
33
  require "smithy"
@@ -13,7 +13,11 @@ module Smithy
13
13
 
14
14
  def register(name, component, *dependency)
15
15
  if component.respond_to?(:new)
16
- @definitions[name] = [component, dependency]
16
+ if dependency.any?
17
+ @definitions[name] = [component, dependency]
18
+ else
19
+ @definitions[name] = [component, infer_dependency(component)]
20
+ end
17
21
  else
18
22
  @instances[name] = component
19
23
  end
@@ -26,5 +30,13 @@ module Smithy
26
30
  args = dependency.map {|service| self.instance(service) }
27
31
  @instances[name] = component.new(*args)
28
32
  end
33
+
34
+ private
35
+
36
+ def infer_dependency(component)
37
+ component.instance_method(:initialize).parameters.map do |_, name|
38
+ name
39
+ end
40
+ end
29
41
  end
30
42
  end
@@ -1,3 +1,3 @@
1
1
  module Smithy
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0"
3
3
  end
@@ -15,7 +15,29 @@ module Smithy
15
15
  end
16
16
  end
17
17
 
18
- context "name is registered to a class with dependencies" do
18
+ context "name is registered to a class with inferred dependencies" do
19
+ let(:dependency) { Object.new }
20
+ let(:component_class) do
21
+ Class.new do
22
+ attr_reader :dependency
23
+
24
+ def initialize(dependency)
25
+ @dependency = dependency
26
+ end
27
+ end
28
+ end
29
+
30
+ before do
31
+ subject.register(:component, component_class)
32
+ subject.register(:dependency, dependency)
33
+ end
34
+
35
+ it "infers the dependency by parameter name" do
36
+ subject.instance(:component).dependency.should == dependency
37
+ end
38
+ end
39
+
40
+ context "name is registered to a class with explicit dependencies" do
19
41
  let(:dependency) { Object.new }
20
42
 
21
43
  let(:component_class) do
@@ -29,8 +51,8 @@ module Smithy
29
51
  end
30
52
 
31
53
  before do
32
- subject.register(:dependency, dependency)
33
- subject.register(:component, component_class, :dependency)
54
+ subject.register(:component, component_class, :explicit_dependency)
55
+ subject.register(:explicit_dependency, dependency)
34
56
  end
35
57
 
36
58
  it "injects the dependent object into the constructor" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smithy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: '1.0'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-19 00:00:00.000000000 Z
12
+ date: 2013-03-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec