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.
@@ -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: []