tzu_mock 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 419dbae2ed2de5cc46a247e62a5aa6b9ab805d53
4
- data.tar.gz: 20d5d86f2ab59cd5a8b53d15cf299e0f8bad46e5
3
+ metadata.gz: a374a7e23ecbd322adc0388add8d727efdaf0f39
4
+ data.tar.gz: d37787c1dc7664177fefa8e6e0b8d65f4a801106
5
5
  SHA512:
6
- metadata.gz: 8b9ee161714fa8aa290365294a0adbf1b4d8b4d7a615f4bcc5db5cbfc08445fa965d11364c031f9afc2a349fd3303cb2c639f919b8ebcc5eb3c6f186fbb532fd
7
- data.tar.gz: 41bb409ad881e216d901149649d396f93ad176c9d625ca6444c1defd3a54e6454f553647cd0e8fb47841ee33e65d39a62857560236317d32c091881686740b08
6
+ metadata.gz: 2a8c33e3c20f176ef1125ce3c98c2a74f3d737d6736b27b0ef3317db0cf41743c5d6451ce61f5d7d78ba31f0278c0ac8645499ae4c273e2b6036a825c5fb94a4
7
+ data.tar.gz: 1760d50fcc90d31cff53ea5c449d56f1d0f85d6879e077912ad0dc1398a23641ee762a50d0c1200494d852728e4306e7a1d0a220135d78c56f78b4e938c05fe3
data/lib/tzu_mock.rb CHANGED
@@ -1,65 +1,8 @@
1
1
  require 'binding_of_caller'
2
+ require 'tzu_mock/class_methods'
3
+ require 'tzu_mock/mocker'
4
+ require 'tzu_mock/configuration'
2
5
 
3
- class TzuMock
4
- MOCK_METHODS = [:run, :run!]
5
-
6
- class << self
7
- def method_missing(method, *args)
8
- return super(method) unless [:success, :invalid, :failure].include? method
9
- prepare(method, *args)
10
- end
11
-
12
- def prepare(type, klass, result, method = nil)
13
- # Get the rspec block context. Will not work if you call TzuMock#prepare directly.
14
- # Call TzuMock#success, TzuMock#invalid, or TzuMock#failure instead
15
- rspec_context = binding.of_caller(2).eval('self')
16
-
17
- new(type, klass, result, rspec_context, method).mock
18
- end
19
- end
20
-
21
- def initialize(type, klass, result, rspec_context, method)
22
- @type, @klass, @result, @rspec_context, @method = type, klass, result, rspec_context, method
23
- end
24
-
25
- def mock
26
- @rspec_context.instance_eval(&mock_proc(@klass, mock_methods, success?, @result, error_type))
27
- end
28
-
29
- private
30
-
31
- # Need to pass variables in explicity to give the Proc access to them
32
- def mock_proc(klass, methods, success, result, type)
33
- Proc.new do
34
- methods.each do |method|
35
- allow(klass).to receive(method) do |&block|
36
- outcome = Tzu::Outcome.new(success, result, type)
37
- outcome.handle(&block) if block
38
- outcome
39
- end
40
- end
41
- end
42
- end
43
-
44
- def mock_methods
45
- return [@method] if @method
46
- MOCK_METHODS
47
- end
48
-
49
- def success?
50
- @type == :success
51
- end
52
-
53
- def error_type
54
- case @type
55
- when :success
56
- nil
57
- when :invalid
58
- :validation
59
- when :failure
60
- :execution
61
- else
62
- raise ArgumentError.new('Invalid type, must be :success, :invalid, or :failure')
63
- end
64
- end
6
+ module TzuMock
7
+ extend ClassMethods, Configuration
65
8
  end
@@ -0,0 +1,16 @@
1
+ module TzuMock
2
+ module ClassMethods
3
+ def method_missing(method, *args)
4
+ return super(method) unless [:success, :invalid, :failure].include? method
5
+ prepare(method, *args)
6
+ end
7
+
8
+ def prepare(type, klass, result, method = nil)
9
+ # Get the rspec block context. Will not work if you call TzuMock#prepare directly.
10
+ # Call TzuMock#success, TzuMock#invalid, or TzuMock#failure instead
11
+ rspec_context = binding.of_caller(2).eval('self')
12
+
13
+ Mocker.new(type, klass, result, rspec_context, method).mock
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ module TzuMock
2
+ module Configuration
3
+ def configuration
4
+ @configuration ||= Config.new
5
+ end
6
+
7
+ def configure
8
+ yield(configuration)
9
+ end
10
+ end
11
+
12
+ class Config
13
+ DEFAULT_MOCK_METHODS = [:run, :run!]
14
+
15
+ def stub_methods
16
+ @stub_methods ||= DEFAULT_MOCK_METHODS
17
+ end
18
+
19
+ def stub_methods=(methods)
20
+ @stub_methods = stub_methods + methods
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,48 @@
1
+ module TzuMock
2
+ class Mocker
3
+ def initialize(type, klass, result, rspec_context, method)
4
+ @type, @klass, @result, @rspec_context, @method = type, klass, result, rspec_context, method
5
+ end
6
+
7
+ def mock
8
+ @rspec_context.instance_eval(&mock_proc(@klass, mock_methods, success?, @result, error_type))
9
+ end
10
+
11
+ private
12
+
13
+ # Need to pass variables in explicity to give the Proc access to them
14
+ def mock_proc(klass, methods, success, result, type)
15
+ Proc.new do
16
+ methods.each do |method|
17
+ allow(klass).to receive(method) do |&block|
18
+ outcome = Tzu::Outcome.new(success, result, type)
19
+ outcome.handle(&block) if block
20
+ outcome
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ def mock_methods
27
+ return [@method] if @method
28
+ TzuMock.configuration.stub_methods
29
+ end
30
+
31
+ def success?
32
+ @type == :success
33
+ end
34
+
35
+ def error_type
36
+ case @type
37
+ when :success
38
+ nil
39
+ when :invalid
40
+ :validation
41
+ when :failure
42
+ :execution
43
+ else
44
+ raise ArgumentError.new('Invalid type, must be :success, :invalid, or :failure')
45
+ end
46
+ end
47
+ end
48
+ end
@@ -34,6 +34,26 @@ describe TzuMock do
34
34
  end
35
35
  end
36
36
 
37
+ context 'configuration' do
38
+ context 'when no stub methods have been added' do
39
+ it 'configures the default stub methods' do
40
+ expect(TzuMock.configuration.stub_methods).to eq TzuMock::Config::DEFAULT_MOCK_METHODS
41
+ end
42
+ end
43
+
44
+ context 'when stub methods have been added' do
45
+ let(:stub_methods) { [:go, :go!] }
46
+
47
+ before do
48
+ TzuMock.configure { |config| config.stub_methods = stub_methods }
49
+ end
50
+
51
+ it 'appends the configured methods to the default stub methods' do
52
+ expect(TzuMock.configuration.stub_methods.sort).to eq (TzuMock::Config::DEFAULT_MOCK_METHODS + stub_methods).sort
53
+ end
54
+ end
55
+ end
56
+
37
57
  context 'when invocation does not have a block' do
38
58
  context 'success' do
39
59
  before { TzuMock.success(UpdateUser, result) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tzu_mock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blake Turner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-22 00:00:00.000000000 Z
11
+ date: 2015-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: binding_of_caller
@@ -75,6 +75,9 @@ files:
75
75
  - LICENSE.txt
76
76
  - README.md
77
77
  - lib/tzu_mock.rb
78
+ - lib/tzu_mock/class_methods.rb
79
+ - lib/tzu_mock/configuration.rb
80
+ - lib/tzu_mock/mocker.rb
78
81
  - spec/spec_helper.rb
79
82
  - spec/tzu_mock_spec.rb
80
83
  homepage: https://github.com/onfido/tzu_mock