dependor 0.0.6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -3,4 +3,6 @@ pkg/*
3
3
  coverage/
4
4
  .bundle
5
5
  .rvmrc
6
+ .ruby-version
6
7
  tags
8
+ tmp
@@ -1,11 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dependor (0.0.6)
4
+ dependor (1.0.0)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
8
8
  specs:
9
+ coderay (1.0.9)
9
10
  colorize (0.5.8)
10
11
  coveralls (0.6.7)
11
12
  colorize
@@ -13,33 +14,55 @@ GEM
13
14
  rest-client
14
15
  simplecov (>= 0.7)
15
16
  thor
16
- diff-lcs (1.1.2)
17
- ffi (1.0.11)
17
+ diff-lcs (1.2.4)
18
+ ffi (1.9.0)
19
+ formatador (0.2.4)
18
20
  growl (1.0.3)
19
- guard (1.0.1)
21
+ guard (1.8.2)
22
+ formatador (>= 0.2.4)
23
+ listen (>= 1.0.0)
24
+ lumberjack (>= 1.0.2)
25
+ pry (>= 0.9.10)
26
+ thor (>= 0.14.6)
27
+ guard-rspec (3.0.2)
28
+ guard (>= 1.8)
29
+ rspec (~> 2.13)
30
+ libnotify (0.8.1)
31
+ ffi (>= 1.0.11)
32
+ listen (1.3.0)
33
+ rb-fsevent (>= 0.9.3)
34
+ rb-inotify (>= 0.9)
35
+ rb-kqueue (>= 0.2)
36
+ lumberjack (1.0.4)
37
+ method_source (0.8.2)
38
+ mime-types (1.24)
39
+ multi_json (1.7.9)
40
+ pry (0.9.12.2)
41
+ coderay (~> 1.0.5)
42
+ method_source (~> 0.8)
43
+ slop (~> 3.4)
44
+ rake (10.1.0)
45
+ rb-fsevent (0.9.3)
46
+ rb-inotify (0.9.1)
47
+ ffi (>= 0.5.0)
48
+ rb-kqueue (0.2.0)
20
49
  ffi (>= 0.5.0)
21
- thor (~> 0.14.6)
22
- guard-rspec (0.6.0)
23
- guard (>= 0.10.0)
24
- libnotify (0.7.2)
25
- mime-types (1.23)
26
- multi_json (1.7.3)
27
- rake (0.9.2.2)
28
50
  rest-client (1.6.7)
29
51
  mime-types (>= 1.16)
30
- rspec (2.5.0)
31
- rspec-core (~> 2.5.0)
32
- rspec-expectations (~> 2.5.0)
33
- rspec-mocks (~> 2.5.0)
34
- rspec-core (2.5.1)
35
- rspec-expectations (2.5.0)
36
- diff-lcs (~> 1.1.2)
37
- rspec-mocks (2.5.0)
52
+ rspec (2.14.1)
53
+ rspec-core (~> 2.14.0)
54
+ rspec-expectations (~> 2.14.0)
55
+ rspec-mocks (~> 2.14.0)
56
+ rspec-core (2.14.5)
57
+ rspec-expectations (2.14.2)
58
+ diff-lcs (>= 1.1.3, < 2.0)
59
+ rspec-mocks (2.14.3)
38
60
  simplecov (0.7.1)
39
61
  multi_json (~> 1.0)
40
62
  simplecov-html (~> 0.7.1)
41
63
  simplecov-html (0.7.1)
42
- thor (0.14.6)
64
+ slop (3.4.6)
65
+ thor (0.18.1)
43
66
 
44
67
  PLATFORMS
45
68
  ruby
data/Guardfile CHANGED
@@ -1,4 +1,4 @@
1
- guard 'rspec', :version => 2 do
1
+ guard 'rspec' do
2
2
  watch(%r{^spec/.+_spec\.rb$})
3
3
  watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
4
  watch('spec/spec_helper.rb') { "spec" }
@@ -15,11 +15,11 @@ module Dependor
15
15
  end
16
16
 
17
17
  def method_missing(name, *args, &block)
18
- auto_injector.get(name)
18
+ auto_injector.get_by_class_name(name)
19
19
  end
20
20
 
21
- def respond_to?(name)
22
- auto_injector.resolvable?(name)
21
+ def respond_to_missing?(name, include_private = false)
22
+ auto_injector.class_exists?(name)
23
23
  end
24
24
 
25
25
  def inject(klass, overrides = {})
@@ -8,37 +8,33 @@ module Dependor
8
8
  end
9
9
 
10
10
  def get(name)
11
- ensure_resolvable!(name)
12
-
13
- if has_method?(name)
14
- return @injector.send(name) if no_arguments?(name)
15
- return @injector.method(name).to_proc
16
- end
11
+ return @injector.send(name)
12
+ rescue ArgumentError
13
+ return @injector.method(name).to_proc
14
+ rescue NameError
15
+ get_by_class_name(name)
16
+ end
17
17
 
18
+ def get_by_class_name(name)
19
+ ensure_class_exists!(name)
18
20
  klass = @class_name_resolver.for_name(name)
19
- @instantiator.instantiate(klass)
21
+ instantiator = @instantiator
22
+ @injector.define_singleton_method(name) do
23
+ instantiator.instantiate(klass)
24
+ end
25
+ @injector.send(name)
20
26
  end
21
27
 
22
- def resolvable?(name)
23
- has_method?(name) || !!@class_name_resolver.for_name(name)
28
+ def class_exists?(name)
29
+ !!@class_name_resolver.for_name(name)
24
30
  end
25
31
 
26
32
  private
27
33
 
28
- def ensure_resolvable!(name)
29
- unless resolvable?(name)
34
+ def ensure_class_exists!(name)
35
+ unless class_exists?(name)
30
36
  raise UnknownObject.new("Injector does not know how to create object: #{name}")
31
37
  end
32
38
  end
33
-
34
- def has_method?(name)
35
- @injector.methods.include?(name)
36
- end
37
-
38
- def no_arguments?(name)
39
- @injector.method(name).arity == 0
40
- end
41
-
42
39
  end
43
-
44
40
  end
@@ -8,7 +8,7 @@ module Dependor
8
8
 
9
9
  def for_name(name)
10
10
  class_name = camelize(name)
11
- modules = search_modules.concat([Object])
11
+ modules = search_modules + [Object]
12
12
  klass = nil
13
13
 
14
14
  modules.each do |mod|
@@ -2,13 +2,23 @@ module Dependor
2
2
  class Instantiator
3
3
  def initialize(injector)
4
4
  @injector = injector
5
+ @constructor_params = {}
5
6
  end
6
7
 
7
8
  def instantiate(klass)
8
- params = klass.instance_method(:initialize).parameters
9
- dependency_names = params.select{|type, name| type == :req}.map{|type, name| name}
10
- dependencies = dependency_names.map{|name| @injector.get(name)}
9
+ dependencies = dependecy_names_for(klass).map{|name| @injector.get(name)}
11
10
  return klass.new(*dependencies)
12
11
  end
12
+
13
+ private
14
+
15
+ def dependecy_names_for(klass)
16
+ @constructor_params[klass] ||= get_constructor_params(klass)
17
+ end
18
+
19
+ def get_constructor_params(klass)
20
+ params = klass.instance_method(:initialize).parameters
21
+ params.select{|type, name| type == :req}.map{|type, name| name}
22
+ end
13
23
  end
14
24
  end
@@ -1,3 +1,3 @@
1
1
  module Dependor
2
- VERSION = "0.0.6"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -40,4 +40,11 @@ describe Dependor::ClassNameResolver do
40
40
 
41
41
  resolver.for_name(:foo_bar_baz_2).should == FooBarBaz2
42
42
  end
43
+
44
+ it "doesnt have Object in search modules after calling for_name" do
45
+ resolver = Dependor::ClassNameResolver.new([])
46
+
47
+ resolver.for_name(:something)
48
+ resolver.search_modules.should_not include(Object)
49
+ end
43
50
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Dependor::CustomizedInjector do
4
- let(:other_injector) { stub }
4
+ let(:other_injector) { double }
5
5
 
6
6
  it "returns the customized dependency if given" do
7
7
  injector = Dependor::CustomizedInjector.new(other_injector, foo: 'hello')
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Dependor::Instantiator do
4
- let(:injector) { stub(:injector) }
4
+ let(:injector) { double(:injector) }
5
5
  let(:instantiator) { Dependor::Instantiator.new(injector) }
6
6
 
7
7
  it "instantiates objects with no-arg constructors" do
metadata CHANGED
@@ -1,111 +1,126 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 1.0.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Adam Pohorecki
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-06-12 00:00:00.000000000 Z
12
+ date: 2013-08-27 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rspec
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: '0'
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - '>='
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0'
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: guard
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - '>='
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: '0'
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - '>='
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
45
  version: '0'
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: guard-rspec
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - '>='
51
+ - - ! '>='
46
52
  - !ruby/object:Gem::Version
47
53
  version: '0'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - '>='
59
+ - - ! '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: growl
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
- - - '>='
67
+ - - ! '>='
60
68
  - !ruby/object:Gem::Version
61
69
  version: '0'
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
- - - '>='
75
+ - - ! '>='
67
76
  - !ruby/object:Gem::Version
68
77
  version: '0'
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: libnotify
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
- - - '>='
83
+ - - ! '>='
74
84
  - !ruby/object:Gem::Version
75
85
  version: '0'
76
86
  type: :development
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
- - - '>='
91
+ - - ! '>='
81
92
  - !ruby/object:Gem::Version
82
93
  version: '0'
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: rake
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
- - - '>='
99
+ - - ! '>='
88
100
  - !ruby/object:Gem::Version
89
101
  version: '0'
90
102
  type: :development
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
- - - '>='
107
+ - - ! '>='
95
108
  - !ruby/object:Gem::Version
96
109
  version: '0'
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: coveralls
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
- - - '>='
115
+ - - ! '>='
102
116
  - !ruby/object:Gem::Version
103
117
  version: '0'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
107
122
  requirements:
108
- - - '>='
123
+ - - ! '>='
109
124
  - !ruby/object:Gem::Version
110
125
  version: '0'
111
126
  description: Dependor is not a framework for Dependency Injection, but something thatt
@@ -157,25 +172,32 @@ files:
157
172
  - spec/spec_helper.rb
158
173
  homepage: http://github.com/psyho/dependor
159
174
  licenses: []
160
- metadata: {}
161
175
  post_install_message:
162
176
  rdoc_options: []
163
177
  require_paths:
164
178
  - lib
165
179
  required_ruby_version: !ruby/object:Gem::Requirement
180
+ none: false
166
181
  requirements:
167
- - - '>='
182
+ - - ! '>='
168
183
  - !ruby/object:Gem::Version
169
184
  version: '0'
185
+ segments:
186
+ - 0
187
+ hash: -1538921079382714093
170
188
  required_rubygems_version: !ruby/object:Gem::Requirement
189
+ none: false
171
190
  requirements:
172
- - - '>='
191
+ - - ! '>='
173
192
  - !ruby/object:Gem::Version
174
193
  version: '0'
194
+ segments:
195
+ - 0
196
+ hash: -1538921079382714093
175
197
  requirements: []
176
198
  rubyforge_project: dependor
177
- rubygems_version: 2.0.0.rc.2
199
+ rubygems_version: 1.8.25
178
200
  signing_key:
179
- specification_version: 4
201
+ specification_version: 3
180
202
  summary: A couple of classes and modules that simplify dependency injection in Ruby.
181
203
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 873e4358991c9c634508e0ed5f226259ad8ccb13
4
- data.tar.gz: 84142cf6ec14a15c5ac7e5c00eab15342801b2e2
5
- SHA512:
6
- metadata.gz: 2a72421e7d881c4088df0b2c6e4bb294de0488360fe5415c76005d3d50cf62f1e052e8e98d27c68f61a440b73ea3179d317733abff48ebb2d726cede0df3c5b3
7
- data.tar.gz: ae6e7afecf9210d6189883f1a4c2f53b388d29f239490bd655d84cb2c24c7a13ebd689102f21ad939eaf055ac6f727f79443b6a49c4b8a53e9b801542ec7c3c2