expectable 0.1.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/expectable.rb +44 -0
  3. metadata +66 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e7a93d9c5deb286fe892d0c610db7c1171d3534e
4
+ data.tar.gz: 1de9c2772d4beb4825b8b5c715a53bfc7b73c6b1
5
+ SHA512:
6
+ metadata.gz: 4ce6bba7bfcd6ffa55ee05db6437b09b8fc35962e0eb63a24da69d9f03170266cf40826b873c1b0e091aca96f688ceadb4b303ebac065ac6e8d45e761b87fe93
7
+ data.tar.gz: 2a8ade1091ff1ade32d1f24c20b78f84b555722a8a875e002d9ab36af64659ea42fbcfd7a0e5a2f894e523d953c883593c097cc425f3487ab64c4da5748a5836
data/lib/expectable.rb ADDED
@@ -0,0 +1,44 @@
1
+ require 'minitest'
2
+ require 'minitest/mock'
3
+
4
+ module Expectable
5
+ def expect(method_name, return_value = nil, expected_args = nil)
6
+ mock = expect_helper(return_value, expected_args)
7
+
8
+ stub(method_name, mock) do
9
+ yield
10
+ end
11
+
12
+ begin
13
+ mock.verify
14
+ rescue
15
+ raise ExpectationError, "Expected method #{method_name} to be called on object " \
16
+ "<#{self.class} ##{object_id}>"
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def expect_helper(return_value = nil, expected_args = nil)
23
+ mock = Minitest::Mock.new
24
+
25
+ # Expected arguments can either be an array or a Proc
26
+ if expected_args && expected_args.is_a?(Array)
27
+ mock.expect :call, return_value, expected_args
28
+ # Note: In Ruby lambdas have class Proc
29
+ elsif expected_args && expected_args.class == Proc
30
+ mock.expect :call, return_value, &expected_args
31
+ else
32
+ # Allows us to run expect without caring about which args are given
33
+ # I know that this isn't Minitest behaviour, but it's prettier
34
+ mock.expect :call, return_value do
35
+ true
36
+ end
37
+ end
38
+
39
+ mock
40
+ end
41
+
42
+ class ExpectationError < StandardError
43
+ end
44
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: expectable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ben Lewis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-05-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.11'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: '5.11'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '5.11'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '5.11'
33
+ description: This gem extends MiniTest by allowing you to simply include this class
34
+ on any given class dynamically and expect calls to methods on that class.
35
+ email: hello@blewis.me
36
+ executables: []
37
+ extensions: []
38
+ extra_rdoc_files: []
39
+ files:
40
+ - lib/expectable.rb
41
+ homepage: http://rubygems.org/gems/expectable
42
+ licenses:
43
+ - MIT
44
+ metadata: {}
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 2.2.2
62
+ signing_key:
63
+ specification_version: 4
64
+ summary: The Expectable gem allows you to expect methods to be called on objects that
65
+ are not MiniTest::Mock
66
+ test_files: []