dependor 0.0.5 → 0.0.6
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 +7 -0
- data/.gitignore +1 -0
- data/Gemfile.lock +17 -1
- data/Guardfile +3 -15
- data/README.md +66 -0
- data/dependor.gemspec +1 -0
- data/lib/dependor.rb +1 -0
- data/lib/dependor/evaluating_injector.rb +9 -0
- data/lib/dependor/isolate.rb +14 -6
- data/lib/dependor/version.rb +1 -1
- data/spec/dependor/auto_inject_spec.rb +1 -1
- data/spec/dependor/class_name_resolver_spec.rb +1 -1
- data/spec/dependor/constructor_spec.rb +1 -1
- data/spec/dependor/evaluating_injector_spec.rb +21 -0
- data/spec/dependor/injectable_spec.rb +1 -1
- data/spec/dependor/instantiator_spec.rb +1 -1
- data/spec/dependor/isolate_spec.rb +15 -7
- data/spec/dependor/let_spec.rb +1 -1
- data/spec/dependor/shorty_spec.rb +1 -1
- data/spec/spec_helper.rb +11 -0
- metadata +35 -39
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 873e4358991c9c634508e0ed5f226259ad8ccb13
|
4
|
+
data.tar.gz: 84142cf6ec14a15c5ac7e5c00eab15342801b2e2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2a72421e7d881c4088df0b2c6e4bb294de0488360fe5415c76005d3d50cf62f1e052e8e98d27c68f61a440b73ea3179d317733abff48ebb2d726cede0df3c5b3
|
7
|
+
data.tar.gz: ae6e7afecf9210d6189883f1a4c2f53b388d29f239490bd655d84cb2c24c7a13ebd689102f21ad939eaf055ac6f727f79443b6a49c4b8a53e9b801542ec7c3c2
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,11 +1,18 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dependor (0.0.
|
4
|
+
dependor (0.0.6)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
8
8
|
specs:
|
9
|
+
colorize (0.5.8)
|
10
|
+
coveralls (0.6.7)
|
11
|
+
colorize
|
12
|
+
multi_json (~> 1.3)
|
13
|
+
rest-client
|
14
|
+
simplecov (>= 0.7)
|
15
|
+
thor
|
9
16
|
diff-lcs (1.1.2)
|
10
17
|
ffi (1.0.11)
|
11
18
|
growl (1.0.3)
|
@@ -15,7 +22,11 @@ GEM
|
|
15
22
|
guard-rspec (0.6.0)
|
16
23
|
guard (>= 0.10.0)
|
17
24
|
libnotify (0.7.2)
|
25
|
+
mime-types (1.23)
|
26
|
+
multi_json (1.7.3)
|
18
27
|
rake (0.9.2.2)
|
28
|
+
rest-client (1.6.7)
|
29
|
+
mime-types (>= 1.16)
|
19
30
|
rspec (2.5.0)
|
20
31
|
rspec-core (~> 2.5.0)
|
21
32
|
rspec-expectations (~> 2.5.0)
|
@@ -24,12 +35,17 @@ GEM
|
|
24
35
|
rspec-expectations (2.5.0)
|
25
36
|
diff-lcs (~> 1.1.2)
|
26
37
|
rspec-mocks (2.5.0)
|
38
|
+
simplecov (0.7.1)
|
39
|
+
multi_json (~> 1.0)
|
40
|
+
simplecov-html (~> 0.7.1)
|
41
|
+
simplecov-html (0.7.1)
|
27
42
|
thor (0.14.6)
|
28
43
|
|
29
44
|
PLATFORMS
|
30
45
|
ruby
|
31
46
|
|
32
47
|
DEPENDENCIES
|
48
|
+
coveralls
|
33
49
|
dependor!
|
34
50
|
growl
|
35
51
|
guard
|
data/Guardfile
CHANGED
@@ -1,18 +1,6 @@
|
|
1
|
-
# A sample Guardfile
|
2
|
-
# More info at https://github.com/guard/guard#readme
|
3
|
-
|
4
1
|
guard 'rspec', :version => 2 do
|
5
2
|
watch(%r{^spec/.+_spec\.rb$})
|
6
|
-
watch(%r{^lib/(.+)\.rb$})
|
7
|
-
watch('spec/spec_helper.rb')
|
8
|
-
|
9
|
-
# Rails example
|
10
|
-
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
11
|
-
watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
12
|
-
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
13
|
-
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
14
|
-
watch('config/routes.rb') { "spec/routing" }
|
15
|
-
watch('app/controllers/application_controller.rb') { "spec/controllers" }
|
16
|
-
# Capybara request specs
|
17
|
-
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
|
3
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
4
|
+
watch('spec/spec_helper.rb') { "spec" }
|
5
|
+
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
18
6
|
end
|
data/README.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# Dependor
|
2
2
|
|
3
3
|
[](http://travis-ci.org/psyho/dependor)
|
4
|
+
[](https://codeclimate.com/github/psyho/dependor)
|
5
|
+
[](https://coveralls.io/r/psyho/dependor)
|
6
|
+
[](http://badge.fury.io/rb/dependor)
|
7
|
+
[](https://gemnasium.com/psyho/dependor)
|
4
8
|
|
5
9
|
## What is Dependor
|
6
10
|
|
@@ -270,6 +274,68 @@ class PostsController < ApplicationController
|
|
270
274
|
end
|
271
275
|
```
|
272
276
|
|
277
|
+
## Testing
|
278
|
+
|
279
|
+
Dependor doesn't add any dependencies to your classes so you can test them any way you like.
|
280
|
+
|
281
|
+
Following class:
|
282
|
+
|
283
|
+
```ruby
|
284
|
+
class PostCreator
|
285
|
+
takes :post_repository
|
286
|
+
|
287
|
+
def publish(post)
|
288
|
+
post_repository.store(post)
|
289
|
+
end
|
290
|
+
end
|
291
|
+
```
|
292
|
+
|
293
|
+
can be tested:
|
294
|
+
|
295
|
+
```ruby
|
296
|
+
let(:post_repository) { stub }
|
297
|
+
let(:creator) { PostCreator.new(post_repository }
|
298
|
+
|
299
|
+
it "stores posts" do
|
300
|
+
post = Post.new
|
301
|
+
post_repository.expects(:store).with(post)
|
302
|
+
creator.publish(post)
|
303
|
+
end
|
304
|
+
```
|
305
|
+
|
306
|
+
## Dependor::Isolate
|
307
|
+
|
308
|
+
Dependor::Isolate provides `isolate` function that creates an instance of given class with dependencies taken from a local context. It can be easily integrated with rspec by requiring 'dependor/rspec'.
|
309
|
+
|
310
|
+
Previous example can be rewritten as:
|
311
|
+
|
312
|
+
```ruby
|
313
|
+
require 'dependor/rspec'
|
314
|
+
|
315
|
+
let(:post_repository) { stub }
|
316
|
+
let(:creator) { isolate(PostCreator) }
|
317
|
+
|
318
|
+
it "stores posts" do
|
319
|
+
post = Post.new
|
320
|
+
post_repository.expects(store).with(post)
|
321
|
+
creator.publish(post)
|
322
|
+
end
|
323
|
+
```
|
324
|
+
|
325
|
+
Dependencies are taken from methods available in local context, but they can be specified in paramaters as well:
|
326
|
+
|
327
|
+
```ruby
|
328
|
+
post_repository = stub
|
329
|
+
creator = isolate(PostCreator, post_repository: post_repository)
|
330
|
+
```
|
331
|
+
|
332
|
+
Or they can be captured from local variables when syntax with block is used:
|
333
|
+
|
334
|
+
```ruby
|
335
|
+
post_repository = stub
|
336
|
+
creator = isolate{PostCreator}
|
337
|
+
```
|
338
|
+
|
273
339
|
## License
|
274
340
|
|
275
341
|
MIT. See the MIT-LICENSE file.
|
data/dependor.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.add_development_dependency 'growl'
|
22
22
|
s.add_development_dependency 'libnotify'
|
23
23
|
s.add_development_dependency 'rake'
|
24
|
+
s.add_development_dependency 'coveralls'
|
24
25
|
|
25
26
|
s.files = `git ls-files`.split("\n")
|
26
27
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/dependor.rb
CHANGED
@@ -5,6 +5,7 @@ module Dependor
|
|
5
5
|
autoload :AutoInjector, 'dependor/auto_injector'
|
6
6
|
autoload :ClassNameResolver, 'dependor/class_name_resolver'
|
7
7
|
autoload :CustomizedInjector, 'dependor/customized_injector'
|
8
|
+
autoload :EvaluatingInjector, 'dependor/evaluating_injector'
|
8
9
|
autoload :Injectable, 'dependor/injectable'
|
9
10
|
autoload :Instantiator, 'dependor/instantiator'
|
10
11
|
autoload :Isolate, 'dependor/isolate'
|
data/lib/dependor/isolate.rb
CHANGED
@@ -1,8 +1,16 @@
|
|
1
|
-
module Dependor
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
module Dependor
|
2
|
+
module Isolate
|
3
|
+
def isolate(klass = nil, overrides = {}, &block)
|
4
|
+
if block_given?
|
5
|
+
klass = block.call
|
6
|
+
caller_binding = block.binding
|
7
|
+
injector = EvaluatingInjector.new(caller_binding)
|
8
|
+
else
|
9
|
+
sending_injector = SendingInjector.new(self)
|
10
|
+
injector = CustomizedInjector.new(sending_injector, overrides)
|
11
|
+
end
|
12
|
+
instantiator = Instantiator.new(injector)
|
13
|
+
instantiator.instantiate(klass)
|
14
|
+
end
|
7
15
|
end
|
8
16
|
end
|
data/lib/dependor/version.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Dependor::EvaluatingInjector do
|
4
|
+
it 'evaluates methods in given binding' do
|
5
|
+
def baz
|
6
|
+
"the method baz"
|
7
|
+
end
|
8
|
+
|
9
|
+
injector = Dependor::EvaluatingInjector.new(binding)
|
10
|
+
|
11
|
+
injector.get(:baz).should == "the method baz"
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'evaluates local variables in given binding' do
|
15
|
+
bar = "the local bar"
|
16
|
+
|
17
|
+
injector = Dependor::EvaluatingInjector.new(binding)
|
18
|
+
|
19
|
+
injector.get(:bar).should == "the local bar"
|
20
|
+
end
|
21
|
+
end
|
@@ -9,11 +9,16 @@ describe Dependor::Isolate do
|
|
9
9
|
include Dependor::Isolate
|
10
10
|
|
11
11
|
def subject
|
12
|
-
isolate
|
12
|
+
isolate{ExampleSubject}
|
13
13
|
end
|
14
14
|
|
15
15
|
def override
|
16
|
-
|
16
|
+
bar = "bar was overriden"
|
17
|
+
isolate{ExampleSubject}
|
18
|
+
end
|
19
|
+
|
20
|
+
def parameters
|
21
|
+
isolate(ExampleSubject, bar: "the parameter")
|
17
22
|
end
|
18
23
|
|
19
24
|
def foo
|
@@ -25,17 +30,20 @@ describe Dependor::Isolate do
|
|
25
30
|
end
|
26
31
|
end
|
27
32
|
|
28
|
-
|
29
|
-
context = ExampleContext.new
|
33
|
+
let(:context) { ExampleContext.new }
|
30
34
|
|
35
|
+
it "injects the subject's dependencies using methods on context" do
|
31
36
|
context.subject.foo.should == "the foo stub"
|
32
37
|
context.subject.bar.should == "the bar stub"
|
33
38
|
end
|
34
39
|
|
35
|
-
it "allows overriding dependencies" do
|
36
|
-
context = ExampleContext.new
|
37
|
-
|
40
|
+
it "allows overriding dependencies with variables" do
|
38
41
|
context.override.bar.should == "bar was overriden"
|
39
42
|
context.override.foo.should == "the foo stub"
|
40
43
|
end
|
44
|
+
|
45
|
+
it "allows overriding dependencies with parameters" do
|
46
|
+
context.parameters.bar.should == "the parameter"
|
47
|
+
context.parameters.foo.should == "the foo stub"
|
48
|
+
end
|
41
49
|
end
|
data/spec/dependor/let_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
require 'coveralls'
|
3
|
+
|
4
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
5
|
+
SimpleCov::Formatter::HTMLFormatter,
|
6
|
+
Coveralls::SimpleCov::Formatter]
|
7
|
+
|
8
|
+
SimpleCov.start do
|
9
|
+
add_filter "/spec/"
|
10
|
+
end
|
11
|
+
|
1
12
|
$:.push File.expand_path("../../lib", __FILE__)
|
2
13
|
|
3
14
|
require 'rubygems'
|
metadata
CHANGED
@@ -1,110 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.6
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Adam Pohorecki
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-06-12 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rspec
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: guard
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: guard-rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: growl
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: libnotify
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: rake
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - '>='
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: coveralls
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
108
109
|
- !ruby/object:Gem::Version
|
109
110
|
version: '0'
|
110
111
|
description: Dependor is not a framework for Dependency Injection, but something thatt
|
@@ -132,6 +133,7 @@ files:
|
|
132
133
|
- lib/dependor/class_name_resolver.rb
|
133
134
|
- lib/dependor/constructor.rb
|
134
135
|
- lib/dependor/customized_injector.rb
|
136
|
+
- lib/dependor/evaluating_injector.rb
|
135
137
|
- lib/dependor/exceptions.rb
|
136
138
|
- lib/dependor/injectable.rb
|
137
139
|
- lib/dependor/instantiator.rb
|
@@ -146,6 +148,7 @@ files:
|
|
146
148
|
- spec/dependor/class_name_resolver_spec.rb
|
147
149
|
- spec/dependor/constructor_spec.rb
|
148
150
|
- spec/dependor/customized_injector_spec.rb
|
151
|
+
- spec/dependor/evaluating_injector_spec.rb
|
149
152
|
- spec/dependor/injectable_spec.rb
|
150
153
|
- spec/dependor/instantiator_spec.rb
|
151
154
|
- spec/dependor/isolate_spec.rb
|
@@ -154,32 +157,25 @@ files:
|
|
154
157
|
- spec/spec_helper.rb
|
155
158
|
homepage: http://github.com/psyho/dependor
|
156
159
|
licenses: []
|
160
|
+
metadata: {}
|
157
161
|
post_install_message:
|
158
162
|
rdoc_options: []
|
159
163
|
require_paths:
|
160
164
|
- lib
|
161
165
|
required_ruby_version: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
166
|
requirements:
|
164
|
-
- -
|
167
|
+
- - '>='
|
165
168
|
- !ruby/object:Gem::Version
|
166
169
|
version: '0'
|
167
|
-
segments:
|
168
|
-
- 0
|
169
|
-
hash: 85109981727052297
|
170
170
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
171
|
-
none: false
|
172
171
|
requirements:
|
173
|
-
- -
|
172
|
+
- - '>='
|
174
173
|
- !ruby/object:Gem::Version
|
175
174
|
version: '0'
|
176
|
-
segments:
|
177
|
-
- 0
|
178
|
-
hash: 85109981727052297
|
179
175
|
requirements: []
|
180
176
|
rubyforge_project: dependor
|
181
|
-
rubygems_version:
|
177
|
+
rubygems_version: 2.0.0.rc.2
|
182
178
|
signing_key:
|
183
|
-
specification_version:
|
179
|
+
specification_version: 4
|
184
180
|
summary: A couple of classes and modules that simplify dependency injection in Ruby.
|
185
181
|
test_files: []
|