dependor 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -1,5 +1,6 @@
1
1
  pkg/*
2
2
  *.gem
3
+ coverage/
3
4
  .bundle
4
5
  .rvmrc
5
6
  tags
@@ -1,11 +1,18 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dependor (0.0.5)
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$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
- watch('spec/spec_helper.rb') { "spec" }
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
  [![build status](https://secure.travis-ci.org/psyho/dependor.png)](http://travis-ci.org/psyho/dependor)
4
+ [![Code Climate](https://codeclimate.com/github/psyho/dependor.png)](https://codeclimate.com/github/psyho/dependor)
5
+ [![Coverage Status](https://coveralls.io/repos/psyho/dependor/badge.png)](https://coveralls.io/r/psyho/dependor)
6
+ [![Gem Version](https://badge.fury.io/rb/dependor.png)](http://badge.fury.io/rb/dependor)
7
+ [![Dependency Status](https://gemnasium.com/psyho/dependor.png)](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.
@@ -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")
@@ -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'
@@ -0,0 +1,9 @@
1
+ class Dependor::EvaluatingInjector
2
+ def initialize(binding)
3
+ @binding = binding
4
+ end
5
+
6
+ def get(name)
7
+ @binding.eval(name.to_s)
8
+ end
9
+ end
@@ -1,8 +1,16 @@
1
- module Dependor::Isolate
2
- def isolate(klass, overrides = {})
3
- injector = Dependor::SendingInjector.new(self)
4
- customized_injector = Dependor::CustomizedInjector.new(injector, overrides)
5
- instantiator = Dependor::Instantiator.new(customized_injector)
6
- instantiator.instantiate(klass)
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
@@ -1,3 +1,3 @@
1
1
  module Dependor
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -1,4 +1,4 @@
1
- require_relative '../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  require 'dependor/shorty'
4
4
 
@@ -1,4 +1,4 @@
1
- require_relative '../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Dependor::ClassNameResolver do
4
4
  class FooBarBaz
@@ -1,4 +1,4 @@
1
- require_relative '../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Dependor::Constructor' do
4
4
  class SampleClassUsingConstructor
@@ -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
@@ -1,4 +1,4 @@
1
- require_relative '../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Dependor::Injectable do
4
4
  class SampleInjector
@@ -1,4 +1,4 @@
1
- require_relative '../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Dependor::Instantiator do
4
4
  let(:injector) { stub(:injector) }
@@ -9,11 +9,16 @@ describe Dependor::Isolate do
9
9
  include Dependor::Isolate
10
10
 
11
11
  def subject
12
- isolate(ExampleSubject)
12
+ isolate{ExampleSubject}
13
13
  end
14
14
 
15
15
  def override
16
- isolate(ExampleSubject, bar: "bar was overriden")
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
- it "injects the subject's dependencies using methods on context" do
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
@@ -1,4 +1,4 @@
1
- require_relative '../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Dependor::Let do
4
4
  class SampleClassUsingLet
@@ -1,4 +1,4 @@
1
- require_relative '../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  require 'dependor/shorty'
4
4
 
@@ -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
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: 2012-07-23 00:00:00.000000000 Z
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: 1.8.24
177
+ rubygems_version: 2.0.0.rc.2
182
178
  signing_key:
183
- specification_version: 3
179
+ specification_version: 4
184
180
  summary: A couple of classes and modules that simplify dependency injection in Ruby.
185
181
  test_files: []