dependor 0.0.6 → 1.0.0

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