punchout 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/lib/punchout.rb +18 -0
- data/lib/punchout/matcher.rb +4 -1
- data/lib/punchout/matcher/ancestry.rb +7 -4
- data/lib/punchout/matcher/class.rb +6 -5
- data/lib/punchout/matcher/equal.rb +5 -4
- data/lib/punchout/matcher/progeny.rb +8 -4
- data/lib/punchout/puncher.rb +18 -0
- data/lib/punchout/puncher/matchables.rb +5 -0
- metadata +16 -32
- data/lib/punchout/puncher/matchable/resolver.rb +0 -15
- data/test/integration/punchout/fabricable_test.rb +0 -69
- data/test/integration/punchout_test.rb +0 -57
- data/test/integration/test_helper.rb +0 -16
- data/test/unit/punchout/fabricator_test.rb +0 -48
- data/test/unit/punchout/matcher/ancestry_test.rb +0 -46
- data/test/unit/punchout/matcher/class_test.rb +0 -48
- data/test/unit/punchout/matcher/equal_test.rb +0 -17
- data/test/unit/punchout/matcher/progeny_test.rb +0 -47
- data/test/unit/punchout/matcher_test.rb +0 -22
- data/test/unit/punchout/puncher/matchable_test.rb +0 -29
- data/test/unit/punchout/puncher/matchables_test.rb +0 -73
- data/test/unit/punchout/puncher_test.rb +0 -59
- data/test/unit/punchout_test.rb +0 -74
- data/test/unit/test_helper.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be5727176805496ca238cc6392b0ac750e5d2244
|
4
|
+
data.tar.gz: 84513d9d9a99629c94e6401f8423c50fc639be57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9552aee91cf84f2fdaad856951387519cc3e6a74a0401afa4d9d900883ef1b813d5801a1ad7f020454746c6a6410c4a0af53c87d826d49ae4e7066c8ff54ecc3
|
7
|
+
data.tar.gz: de32f2de50b3256552ca1f119cbaacd244be7b92abb5584ccec9278d62c22f40fcf4d89520d4e81c7508e41cd41621594ad562eec06fcb85aab103a75f809026
|
data/lib/punchout.rb
CHANGED
@@ -2,17 +2,35 @@ require 'punchout/puncher'
|
|
2
2
|
require 'punchout/matcher/class'
|
3
3
|
|
4
4
|
module Punchout
|
5
|
+
# Classes that include this module become punchable.
|
6
|
+
#
|
7
|
+
# Calling `Instance#punch(obj)`, will return a class, the
|
8
|
+
# class of which is determined by one or more characteristics of `obj`
|
5
9
|
module Punchable
|
10
|
+
|
11
|
+
# Indicates whether this module is punchable
|
12
|
+
#
|
13
|
+
# TODO: This method might become an indication of whether any punchers are
|
14
|
+
# registered. Or it just might die. Not sure yet.
|
6
15
|
def punchable?
|
7
16
|
true
|
8
17
|
end
|
9
18
|
|
19
|
+
# An instance of something that acts like a {Matcher}
|
10
20
|
attr_accessor :matcher
|
11
21
|
|
22
|
+
# The {Puncher} assocated with this punchable.
|
23
|
+
#
|
24
|
+
# @return [Puncher] a {Puncher}
|
12
25
|
def puncher
|
13
26
|
@puncher ||= Puncher.new
|
14
27
|
end
|
15
28
|
|
29
|
+
# Punches a class based on the object passed and the {Matcher}s tied to
|
30
|
+
# this {Punchable}
|
31
|
+
#
|
32
|
+
# @param obj The object that determines what we punch
|
33
|
+
# @return [Class] The {Class} that matched against `obj`
|
16
34
|
def punch(obj)
|
17
35
|
puncher.punch(obj)
|
18
36
|
end
|
data/lib/punchout/matcher.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
require 'punchout/puncher/matchable'
|
2
2
|
|
3
3
|
module Punchout
|
4
|
-
|
4
|
+
# When a user calls {Punchable#punch} with a `candidate`, each {Matchable} will call {Matcher#matches?} until one returns true.
|
5
|
+
module Matcher
|
5
6
|
def initialize(subject)
|
6
7
|
@subject = subject
|
7
8
|
end
|
8
9
|
|
10
|
+
# Creates a {Matchable} assocating this matcher with the thing it should
|
11
|
+
# return.
|
9
12
|
def punches(thing)
|
10
13
|
Punchout::Puncher::Matchable.new(self, thing)
|
11
14
|
end
|
@@ -1,11 +1,14 @@
|
|
1
1
|
require 'punchout/matcher'
|
2
2
|
|
3
3
|
module Punchout
|
4
|
-
|
5
|
-
class
|
6
|
-
|
4
|
+
module Matcher
|
5
|
+
# Matches when the candidate's class matches the subject class of this matcher, or any
|
6
|
+
# ancestor of that subject.
|
7
|
+
#
|
8
|
+
# `Matcher::Ancestry.new([]).matches?(Enumerable) => true`
|
9
|
+
class Ancestry
|
7
10
|
|
8
|
-
|
11
|
+
include Punchout::Matcher
|
9
12
|
|
10
13
|
def matches?(candidate)
|
11
14
|
(@subject >= candidate.class) == true
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'punchout/matcher'
|
2
2
|
|
3
3
|
module Punchout
|
4
|
-
|
5
|
-
class
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
module Matcher
|
5
|
+
# Matches when the candidate's class matches the class of the subject of
|
6
|
+
# this matcher
|
7
|
+
class Klass
|
8
|
+
|
9
|
+
include Punchout::Matcher
|
9
10
|
|
10
11
|
def matches?(candidate)
|
11
12
|
@subject == candidate.class
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'punchout/matcher'
|
2
2
|
|
3
3
|
module Punchout
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
module Matcher
|
5
|
+
# Matches when the candidate matches the subject of this matcher, or any
|
6
|
+
# ancestor of that subject.
|
7
|
+
class Equal
|
7
8
|
|
8
|
-
|
9
|
+
include Punchout::Matcher
|
9
10
|
|
10
11
|
def matches?(candidate)
|
11
12
|
@subject == candidate
|
@@ -1,11 +1,15 @@
|
|
1
1
|
require 'punchout/matcher'
|
2
2
|
|
3
3
|
module Punchout
|
4
|
-
|
5
|
-
class
|
6
|
-
|
4
|
+
module Matcher
|
5
|
+
# Matches when the candidate's class matches the subject class of this matcher, or any
|
6
|
+
# *descendant* of that subject.
|
7
|
+
#
|
8
|
+
# This Matcher is handy for punching against a set of classes that all
|
9
|
+
# mixin the same module.
|
10
|
+
class Progeny
|
7
11
|
|
8
|
-
|
12
|
+
include Punchout::Matcher
|
9
13
|
|
10
14
|
def matches?(candidate)
|
11
15
|
(@subject <= candidate.class) == true
|
data/lib/punchout/puncher.rb
CHANGED
@@ -2,11 +2,20 @@ require 'punchout/puncher/matchable'
|
|
2
2
|
require 'punchout/puncher/matchables'
|
3
3
|
|
4
4
|
module Punchout
|
5
|
+
# Every {Punchable} has a {Puncher}, which keeps the details of
|
6
|
+
# implementation from littering the namespace of the {Punchable}
|
5
7
|
class Puncher
|
6
8
|
def initialize
|
7
9
|
@matchables = Matchables.new
|
8
10
|
end
|
9
11
|
|
12
|
+
# Adds passed {Matchable} to the list of things this {Puncher} can punch
|
13
|
+
#
|
14
|
+
# @param matchable [Matchable] a thing this puncher can match on and punch
|
15
|
+
# on behalf of
|
16
|
+
# @raise [StandardError] if matchable isn't a {Matchable}
|
17
|
+
#
|
18
|
+
#
|
10
19
|
def add(matchable)
|
11
20
|
if !matchable.kind_of?(Matchable)
|
12
21
|
raise
|
@@ -15,10 +24,15 @@ module Punchout
|
|
15
24
|
@matchables.add(matchable)
|
16
25
|
end
|
17
26
|
|
27
|
+
# Indicates whether passed {::Class} is something this {Puncher} would punch
|
28
|
+
# if stimulated appropriately
|
18
29
|
def can_punch?(type)
|
19
30
|
@matchables.include?(type)
|
20
31
|
end
|
21
32
|
|
33
|
+
|
34
|
+
#
|
35
|
+
# @return [Array] all of the {::Class}es that can be produced by this {Puncher}
|
22
36
|
def all
|
23
37
|
@matchables.all.map do |m|
|
24
38
|
m.thing
|
@@ -33,6 +47,10 @@ module Punchout
|
|
33
47
|
match.thing
|
34
48
|
end
|
35
49
|
end
|
50
|
+
|
51
|
+
def punch!(type)
|
52
|
+
punch(type) or raise
|
53
|
+
end
|
36
54
|
end
|
37
55
|
end
|
38
56
|
|
metadata
CHANGED
@@ -1,92 +1,76 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: punchout
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ed Carrel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-unit
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: mocha
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: simplecov
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: A flexible implementation of the Registry pattern, with an extensible
|
56
56
|
finder/matcher mechanism.
|
57
57
|
email:
|
58
58
|
- edward@carrel.org
|
59
|
-
- ed@pocketchange.com
|
60
59
|
executables: []
|
61
60
|
extensions: []
|
62
61
|
extra_rdoc_files: []
|
63
62
|
files:
|
64
63
|
- lib/punchout.rb
|
64
|
+
- lib/punchout/fabricable.rb
|
65
65
|
- lib/punchout/fabricator.rb
|
66
|
-
- lib/punchout/puncher/matchable.rb
|
67
|
-
- lib/punchout/puncher/matchables.rb
|
68
|
-
- lib/punchout/puncher/matchable/resolver.rb
|
69
66
|
- lib/punchout/matcher.rb
|
70
|
-
- lib/punchout/matcher/equal.rb
|
71
|
-
- lib/punchout/matcher/class.rb
|
72
67
|
- lib/punchout/matcher/ancestry.rb
|
68
|
+
- lib/punchout/matcher/class.rb
|
69
|
+
- lib/punchout/matcher/equal.rb
|
73
70
|
- lib/punchout/matcher/progeny.rb
|
74
71
|
- lib/punchout/puncher.rb
|
75
|
-
- lib/punchout/
|
76
|
-
-
|
77
|
-
- test/unit/test_helper.rb
|
78
|
-
- test/unit/punchout/puncher/matchables_test.rb
|
79
|
-
- test/unit/punchout/puncher/matchable_test.rb
|
80
|
-
- test/unit/punchout/matcher/ancestry_test.rb
|
81
|
-
- test/unit/punchout/matcher/equal_test.rb
|
82
|
-
- test/unit/punchout/matcher/class_test.rb
|
83
|
-
- test/unit/punchout/matcher/progeny_test.rb
|
84
|
-
- test/unit/punchout/matcher_test.rb
|
85
|
-
- test/unit/punchout/fabricator_test.rb
|
86
|
-
- test/unit/punchout/puncher_test.rb
|
87
|
-
- test/integration/punchout_test.rb
|
88
|
-
- test/integration/test_helper.rb
|
89
|
-
- test/integration/punchout/fabricable_test.rb
|
72
|
+
- lib/punchout/puncher/matchable.rb
|
73
|
+
- lib/punchout/puncher/matchables.rb
|
90
74
|
homepage:
|
91
75
|
licenses:
|
92
76
|
- MIT
|
@@ -97,17 +81,17 @@ require_paths:
|
|
97
81
|
- lib
|
98
82
|
required_ruby_version: !ruby/object:Gem::Requirement
|
99
83
|
requirements:
|
100
|
-
- -
|
84
|
+
- - ">="
|
101
85
|
- !ruby/object:Gem::Version
|
102
86
|
version: '0'
|
103
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
88
|
requirements:
|
105
|
-
- -
|
89
|
+
- - ">="
|
106
90
|
- !ruby/object:Gem::Version
|
107
91
|
version: '0'
|
108
92
|
requirements: []
|
109
93
|
rubyforge_project:
|
110
|
-
rubygems_version: 2.
|
94
|
+
rubygems_version: 2.5.1
|
111
95
|
signing_key:
|
112
96
|
specification_version: 4
|
113
97
|
summary: A flexible registry pattern gem
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require File.expand_path('../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
require 'punchout/fabricable'
|
4
|
-
require 'punchout/matcher/class'
|
5
|
-
|
6
|
-
class Punchout::Fabricator::Test < Test::Unit::TestCase
|
7
|
-
class Factory
|
8
|
-
def initialize(pairings)
|
9
|
-
@pairings = pairings
|
10
|
-
end
|
11
|
-
|
12
|
-
def build(thing)
|
13
|
-
matcher = Punchout::Matcher::Klass.new(thing)
|
14
|
-
punchable = @pairings.find {|p| p[:match] == thing.class}[:punchable]
|
15
|
-
matcher.punches(punchable)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
setup do
|
20
|
-
punchout_klass = Class.new do
|
21
|
-
include Punchout::Fabricable
|
22
|
-
|
23
|
-
attr_accessor :factory
|
24
|
-
end
|
25
|
-
|
26
|
-
@pairings = 3.times.map {
|
27
|
-
{match: Class.new, punchable: Class.new}
|
28
|
-
}
|
29
|
-
|
30
|
-
fabricator = punchout_klass.new
|
31
|
-
fabricator.factory = Factory.new(@pairings)
|
32
|
-
|
33
|
-
@puncher = fabricator.puncher
|
34
|
-
end
|
35
|
-
|
36
|
-
|
37
|
-
test "#punch exists" do
|
38
|
-
@pairings.each do |p|
|
39
|
-
matcher = Punchout::Matcher::Klass.new(p[:match])
|
40
|
-
|
41
|
-
matchable = matcher.punches(p[:punchable])
|
42
|
-
|
43
|
-
@puncher.add(matchable)
|
44
|
-
end
|
45
|
-
|
46
|
-
expected = @pairings.first
|
47
|
-
|
48
|
-
expected_matching_instance = expected[:match].new
|
49
|
-
|
50
|
-
result = @puncher.can_punch?(expected_matching_instance)
|
51
|
-
assert result, "#{@puncher.inspect} CAN NOT PUNCH #{expected[:match]}"
|
52
|
-
|
53
|
-
result = @puncher.punch(expected_matching_instance)
|
54
|
-
assert_equal expected[:punchable],result
|
55
|
-
end
|
56
|
-
|
57
|
-
test "#punch does not exists" do
|
58
|
-
expected = @pairings.first
|
59
|
-
|
60
|
-
expected_matching_instance = expected[:match].new
|
61
|
-
|
62
|
-
result = @puncher.can_punch?(expected_matching_instance)
|
63
|
-
assert result, "#{@puncher.inspect} CAN NOT PUNCH #{expected[:match]}"
|
64
|
-
|
65
|
-
result = @puncher.punch(expected_matching_instance)
|
66
|
-
assert_equal expected[:punchable],result
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
@@ -1,57 +0,0 @@
|
|
1
|
-
require File.expand_path('../test_helper', __FILE__)
|
2
|
-
|
3
|
-
require 'punchout'
|
4
|
-
require 'punchout/matcher/class'
|
5
|
-
|
6
|
-
class Punchout::Test < Test::Unit::TestCase
|
7
|
-
setup do
|
8
|
-
@punchout_klass = Class.new do
|
9
|
-
include Punchout::Punchable
|
10
|
-
end
|
11
|
-
|
12
|
-
@pairings = 3.times.map {
|
13
|
-
{match: Class.new, punchable: Class.new}
|
14
|
-
}
|
15
|
-
end
|
16
|
-
|
17
|
-
test "#punch" do
|
18
|
-
punchout = @punchout_klass.new
|
19
|
-
puncher = punchout.puncher
|
20
|
-
|
21
|
-
@pairings.each do |p|
|
22
|
-
matcher = Punchout::Matcher::Klass.new(p[:match])
|
23
|
-
|
24
|
-
matchable = matcher.punches(p[:punchable])
|
25
|
-
|
26
|
-
puncher.add(matchable)
|
27
|
-
end
|
28
|
-
|
29
|
-
expected = @pairings.first
|
30
|
-
|
31
|
-
expected_matching_instance = expected[:match].new
|
32
|
-
|
33
|
-
result = puncher.can_punch?(expected_matching_instance)
|
34
|
-
assert result, "#{punchout.puncher.inspect} CAN NOT PUNCH #{expected[:match]}"
|
35
|
-
|
36
|
-
result = puncher.punch(expected_matching_instance)
|
37
|
-
assert_equal expected[:punchable],result
|
38
|
-
end
|
39
|
-
|
40
|
-
test "#all" do
|
41
|
-
punchout = @punchout_klass.new
|
42
|
-
puncher = punchout.puncher
|
43
|
-
|
44
|
-
@pairings.each do |p|
|
45
|
-
matcher = Punchout::Matcher::Klass.new(p[:match])
|
46
|
-
|
47
|
-
matchable = matcher.punches(p[:punchable])
|
48
|
-
|
49
|
-
puncher.add(matchable)
|
50
|
-
end
|
51
|
-
|
52
|
-
expected = @pairings.map {|p| p[:punchable]}
|
53
|
-
|
54
|
-
result = puncher.all
|
55
|
-
assert_equal expected,result
|
56
|
-
end
|
57
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
$:.push('lib')
|
2
|
-
|
3
|
-
require 'coveralls'
|
4
|
-
Coveralls.wear!
|
5
|
-
|
6
|
-
if ENV["ENABLE_SIMPLE_COV"]
|
7
|
-
require 'simplecov'
|
8
|
-
# require File.expand_path('../simplecov_helper', __FILE__)
|
9
|
-
SimpleCov.start do
|
10
|
-
add_filter "test"
|
11
|
-
add_group 'API', "lib"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
require 'test/unit/testcase'
|
16
|
-
require 'mocha/setup'
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require File.expand_path('../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
require 'punchout/fabricator'
|
4
|
-
require 'punchout/puncher'
|
5
|
-
|
6
|
-
class Punchout::FabricatorTest < Test::Unit::TestCase
|
7
|
-
setup do
|
8
|
-
@mock_factory = mock
|
9
|
-
@mock_puncher = mock
|
10
|
-
|
11
|
-
Punchout::Puncher.expects(:new).returns(@mock_puncher)
|
12
|
-
|
13
|
-
@fabricator = Punchout::Fabricator.new(@mock_factory)
|
14
|
-
|
15
|
-
@mock_type = mock
|
16
|
-
end
|
17
|
-
|
18
|
-
test '#punch no match' do
|
19
|
-
@mock_puncher.expects(:can_punch?).with(@mock_type).returns(false)
|
20
|
-
|
21
|
-
mock_matchable = mock
|
22
|
-
@mock_factory.expects(:build).with(@mock_type).returns(mock_matchable)
|
23
|
-
|
24
|
-
@mock_puncher.expects(:add).with(mock_matchable)
|
25
|
-
|
26
|
-
mock_thing = mock
|
27
|
-
mock_matchable.expects(:thing).returns(mock_thing)
|
28
|
-
|
29
|
-
result = @fabricator.punch(@mock_type)
|
30
|
-
|
31
|
-
assert_equal mock_thing, result
|
32
|
-
end
|
33
|
-
|
34
|
-
test '#punch match located' do
|
35
|
-
mock_thing = mock
|
36
|
-
|
37
|
-
@mock_puncher.expects(:can_punch?).with(@mock_type).returns(true)
|
38
|
-
|
39
|
-
@mock_puncher.expects(:punch).with(@mock_type).returns(mock_thing)
|
40
|
-
|
41
|
-
@fabricator.instance_variable_set(:@matchables, @mock_matchables)
|
42
|
-
|
43
|
-
result = @fabricator.punch(@mock_type)
|
44
|
-
|
45
|
-
assert_equal mock_thing, result
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require File.expand_path('../../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
require 'punchout/matcher/ancestry'
|
4
|
-
|
5
|
-
class Punchout::Matcher::AncestryTest < Test::Unit::TestCase
|
6
|
-
setup do
|
7
|
-
@ancestor_klass = Class.new
|
8
|
-
|
9
|
-
@base_klass = Class.new(@ancestor_klass)
|
10
|
-
|
11
|
-
@derived_klass = Class.new(@base_klass)
|
12
|
-
|
13
|
-
@independent_klass = Class.new
|
14
|
-
|
15
|
-
@mock_thing = mock
|
16
|
-
end
|
17
|
-
|
18
|
-
test "#match none" do
|
19
|
-
matcher = Punchout::Matcher::Ancestry.new(@derived_klass)
|
20
|
-
result = matcher.matches?(@independent_klass.new)
|
21
|
-
|
22
|
-
assert_equal false, result
|
23
|
-
end
|
24
|
-
|
25
|
-
test "#match should match equivalence" do
|
26
|
-
matcher = Punchout::Matcher::Ancestry.new(@base_klass)
|
27
|
-
result = matcher.matches?(@base_klass.new)
|
28
|
-
|
29
|
-
assert_equal true, result
|
30
|
-
end
|
31
|
-
|
32
|
-
test "#match should match descendant" do
|
33
|
-
matcher = Punchout::Matcher::Ancestry.new(@base_klass)
|
34
|
-
result = matcher.matches?(@derived_klass.new)
|
35
|
-
|
36
|
-
assert_equal true, result
|
37
|
-
end
|
38
|
-
|
39
|
-
test "#match should not match ancestor" do
|
40
|
-
matcher = Punchout::Matcher::Ancestry.new(@derived_klass)
|
41
|
-
result = matcher.matches?(@base_klass.new)
|
42
|
-
|
43
|
-
assert_equal false, result
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
@@ -1,48 +0,0 @@
|
|
1
|
-
|
2
|
-
require File.expand_path('../../../test_helper', __FILE__)
|
3
|
-
|
4
|
-
require 'punchout/matcher/class'
|
5
|
-
|
6
|
-
class Punchout::Matcher::KlassTest < Test::Unit::TestCase
|
7
|
-
setup do
|
8
|
-
@ancestor_klass = Class.new
|
9
|
-
|
10
|
-
@base_klass = Class.new(@ancestor_klass)
|
11
|
-
|
12
|
-
@derived_klass = Class.new(@base_klass)
|
13
|
-
|
14
|
-
@independent_klass = Class.new
|
15
|
-
|
16
|
-
@mock_thing = mock
|
17
|
-
end
|
18
|
-
|
19
|
-
test "#match none" do
|
20
|
-
matcher = Punchout::Matcher::Klass.new(@derived_klass)
|
21
|
-
result = matcher.matches?(@independent_klass.new)
|
22
|
-
|
23
|
-
assert_equal false, result
|
24
|
-
end
|
25
|
-
|
26
|
-
test "#match should match equivalence" do
|
27
|
-
matcher = Punchout::Matcher::Klass.new(@base_klass)
|
28
|
-
result = matcher.matches?(@base_klass.new)
|
29
|
-
|
30
|
-
assert_equal true, result
|
31
|
-
end
|
32
|
-
|
33
|
-
test "#match should match descendant" do
|
34
|
-
matcher = Punchout::Matcher::Klass.new(@base_klass)
|
35
|
-
result = matcher.matches?(@derived_klass.new)
|
36
|
-
|
37
|
-
assert_equal false, result
|
38
|
-
end
|
39
|
-
|
40
|
-
test "#match should not match ancestor" do
|
41
|
-
matcher = Punchout::Matcher::Klass.new(@derived_klass)
|
42
|
-
result = matcher.matches?(@base_klass.new)
|
43
|
-
|
44
|
-
assert_equal false, result
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
|
@@ -1,17 +0,0 @@
|
|
1
|
-
|
2
|
-
require File.expand_path('../../../test_helper', __FILE__)
|
3
|
-
|
4
|
-
require 'punchout/matcher/equal'
|
5
|
-
|
6
|
-
class Punchout::Matcher::EqualTest < Test::Unit::TestCase
|
7
|
-
test "#match none" do
|
8
|
-
matcher = Punchout::Matcher::Equal.new("foo")
|
9
|
-
assert_equal false, matcher.matches?("bar")
|
10
|
-
end
|
11
|
-
|
12
|
-
test "#match should match equivalence" do
|
13
|
-
matcher = Punchout::Matcher::Equal.new("foo")
|
14
|
-
assert_equal true, matcher.matches?("foo")
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require File.expand_path('../../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
require 'punchout/matcher/progeny'
|
4
|
-
|
5
|
-
class Punchout::Matcher::ProgenyTest < Test::Unit::TestCase
|
6
|
-
setup do
|
7
|
-
@ancestor_klass = Class.new
|
8
|
-
|
9
|
-
@base_klass = Class.new(@ancestor_klass)
|
10
|
-
|
11
|
-
@derived_klass = Class.new(@base_klass)
|
12
|
-
|
13
|
-
@independent_klass = Class.new
|
14
|
-
|
15
|
-
@mock_thing = mock
|
16
|
-
end
|
17
|
-
|
18
|
-
test "#match none" do
|
19
|
-
matcher = Punchout::Matcher::Progeny.new(@derived_klass)
|
20
|
-
result = matcher.matches?(@independent_klass.new)
|
21
|
-
|
22
|
-
assert_equal false, result
|
23
|
-
end
|
24
|
-
|
25
|
-
test "#match should match equivalence" do
|
26
|
-
matcher = Punchout::Matcher::Progeny.new(@base_klass)
|
27
|
-
result = matcher.matches?(@base_klass.new)
|
28
|
-
|
29
|
-
assert_equal true, result
|
30
|
-
end
|
31
|
-
|
32
|
-
test "#match should match descendant" do
|
33
|
-
matcher = Punchout::Matcher::Progeny.new(@base_klass)
|
34
|
-
result = matcher.matches?(@derived_klass.new)
|
35
|
-
|
36
|
-
assert_equal false, result
|
37
|
-
end
|
38
|
-
|
39
|
-
test "#match should not match ancestor" do
|
40
|
-
matcher = Punchout::Matcher::Progeny.new(@derived_klass)
|
41
|
-
result = matcher.matches?(@base_klass.new)
|
42
|
-
|
43
|
-
assert_equal true, result
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require File.expand_path('../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
require 'punchout/matcher'
|
4
|
-
|
5
|
-
class Punchout::MatcherTest < Test::Unit::TestCase
|
6
|
-
setup do
|
7
|
-
@mock_subject = mock
|
8
|
-
@matcher = Punchout::Matcher.new(@mock_subject)
|
9
|
-
end
|
10
|
-
|
11
|
-
test "#punches" do
|
12
|
-
mock_thing = mock
|
13
|
-
|
14
|
-
mock_matchable = mock
|
15
|
-
|
16
|
-
Punchout::Puncher::Matchable.expects(:new).returns(mock_matchable)
|
17
|
-
|
18
|
-
result = @matcher.punches(mock_thing)
|
19
|
-
|
20
|
-
assert_equal result, mock_matchable
|
21
|
-
end
|
22
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require File.expand_path('../../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
require 'punchout/puncher/matchable'
|
4
|
-
|
5
|
-
class Punchout::Puncher::MatchableTest < Test::Unit::TestCase
|
6
|
-
test "#matches? true" do
|
7
|
-
mock_matcher = mock
|
8
|
-
mock_thing = mock
|
9
|
-
|
10
|
-
mock_matcher.expects(:matches?).with(mock_thing).returns(true)
|
11
|
-
matchable = Punchout::Puncher::Matchable.new(mock_matcher, mock_thing)
|
12
|
-
|
13
|
-
result = matchable.matches?(mock_thing)
|
14
|
-
|
15
|
-
assert_equal true, result
|
16
|
-
end
|
17
|
-
|
18
|
-
test "#matches? false" do
|
19
|
-
mock_matcher = mock
|
20
|
-
mock_thing = mock
|
21
|
-
|
22
|
-
mock_matcher.expects(:matches?).with(mock_thing).returns(false)
|
23
|
-
matchable = Punchout::Puncher::Matchable.new(mock_matcher, mock_thing)
|
24
|
-
|
25
|
-
result = matchable.matches?(mock_thing)
|
26
|
-
|
27
|
-
assert_equal false, result
|
28
|
-
end
|
29
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
require File.expand_path('../../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
require 'punchout/puncher/matchables'
|
4
|
-
|
5
|
-
class Punchout::Puncher::MatchablesTest < Test::Unit::TestCase
|
6
|
-
setup do
|
7
|
-
|
8
|
-
@mock_matchables = 5.times.map {|x|
|
9
|
-
mock_matchable = mock
|
10
|
-
mock_matchable.expects(:conflicts?).at_least_once.returns(false)
|
11
|
-
mock_matchable
|
12
|
-
}
|
13
|
-
|
14
|
-
@matchables = Punchout::Puncher::Matchables.new
|
15
|
-
|
16
|
-
@mock_matchables.each {|p|
|
17
|
-
@matchables.add(p)
|
18
|
-
}
|
19
|
-
|
20
|
-
@mock_type = mock
|
21
|
-
end
|
22
|
-
|
23
|
-
test '#include? no match' do
|
24
|
-
@mock_matchables.each {|p|
|
25
|
-
p.expects(:matches?).with(@mock_type).returns(false)
|
26
|
-
}
|
27
|
-
|
28
|
-
result = @matchables.include?(@mock_type)
|
29
|
-
|
30
|
-
assert_equal false, result
|
31
|
-
end
|
32
|
-
|
33
|
-
test '#include? match located' do
|
34
|
-
@mock_matchables.take(4).each {|p|
|
35
|
-
p.expects(:matches?).with(@mock_type).returns(false)
|
36
|
-
}
|
37
|
-
|
38
|
-
|
39
|
-
@mock_matchables.last.expects(:matches?).with(@mock_type).returns(true)
|
40
|
-
|
41
|
-
result = @matchables.include?(@mock_type)
|
42
|
-
|
43
|
-
assert_equal true, result
|
44
|
-
end
|
45
|
-
|
46
|
-
test '#fetch no match' do
|
47
|
-
@mock_matchables.each {|p|
|
48
|
-
p.expects(:matches?).with(@mock_type).returns(false)
|
49
|
-
}
|
50
|
-
|
51
|
-
result = @matchables.find(@mock_type)
|
52
|
-
|
53
|
-
assert_equal nil, result
|
54
|
-
end
|
55
|
-
|
56
|
-
test '#fetch match located' do
|
57
|
-
@mock_matchables.take(4).each {|p|
|
58
|
-
p.expects(:matches?).with(@mock_type).returns(false)
|
59
|
-
}
|
60
|
-
|
61
|
-
|
62
|
-
@mock_matchables.last.expects(:matches?).with(@mock_type).returns(true)
|
63
|
-
|
64
|
-
result = @matchables.find(@mock_type)
|
65
|
-
|
66
|
-
assert_equal @mock_matchables.last, result
|
67
|
-
end
|
68
|
-
|
69
|
-
test '#all' do
|
70
|
-
result = @matchables.all
|
71
|
-
assert_equal @mock_matchables, result
|
72
|
-
end
|
73
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require File.expand_path('../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
require 'punchout/puncher'
|
4
|
-
|
5
|
-
class Punchout::PuncherTest < Test::Unit::TestCase
|
6
|
-
setup do
|
7
|
-
|
8
|
-
@mock_matchables = mock
|
9
|
-
|
10
|
-
@puncher = Punchout::Puncher.new
|
11
|
-
|
12
|
-
@mock_type = mock
|
13
|
-
end
|
14
|
-
|
15
|
-
test '#punch no match' do
|
16
|
-
@mock_matchables.expects(:find).with(@mock_type).returns(nil)
|
17
|
-
|
18
|
-
@puncher.instance_variable_set(:@matchables, @mock_matchables)
|
19
|
-
|
20
|
-
result = @puncher.punch(@mock_type)
|
21
|
-
|
22
|
-
assert_equal nil, result
|
23
|
-
end
|
24
|
-
|
25
|
-
test '#punch match located' do
|
26
|
-
mock_matchable = mock
|
27
|
-
|
28
|
-
@mock_matchables.expects(:find).with(@mock_type).returns(mock_matchable)
|
29
|
-
|
30
|
-
mock_thing = mock
|
31
|
-
mock_matchable.expects(:thing).returns(mock_thing)
|
32
|
-
|
33
|
-
@puncher.instance_variable_set(:@matchables, @mock_matchables)
|
34
|
-
|
35
|
-
result = @puncher.punch(@mock_type)
|
36
|
-
|
37
|
-
assert_equal mock_thing, result
|
38
|
-
end
|
39
|
-
|
40
|
-
test '#all' do
|
41
|
-
mock_things = 5.times.map do
|
42
|
-
mock
|
43
|
-
end
|
44
|
-
|
45
|
-
mock_matchable_arr = mock_things.map do |thing|
|
46
|
-
mock_matchable = mock
|
47
|
-
mock_matchable.expects(:thing).returns(thing)
|
48
|
-
mock_matchable
|
49
|
-
end
|
50
|
-
|
51
|
-
@mock_matchables.expects(:all).returns(mock_matchable_arr)
|
52
|
-
|
53
|
-
@puncher.instance_variable_set(:@matchables, @mock_matchables)
|
54
|
-
|
55
|
-
result = @puncher.all
|
56
|
-
|
57
|
-
assert_equal mock_things, result
|
58
|
-
end
|
59
|
-
end
|
data/test/unit/punchout_test.rb
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
require File.expand_path('../test_helper', __FILE__)
|
2
|
-
|
3
|
-
require 'punchout'
|
4
|
-
|
5
|
-
class Punchout::PunchableTest < Test::Unit::TestCase
|
6
|
-
test "#include" do
|
7
|
-
@klass = Class.new do
|
8
|
-
include Punchout::Punchable
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
test "#puncher greenfield" do
|
13
|
-
@klass = Class.new do
|
14
|
-
include Punchout::Punchable
|
15
|
-
end
|
16
|
-
|
17
|
-
instance = @klass.new
|
18
|
-
|
19
|
-
mock_matcher_klass = mock
|
20
|
-
|
21
|
-
mock_puncher = mock
|
22
|
-
Punchout::Puncher.expects(:new).returns(mock_puncher)
|
23
|
-
|
24
|
-
instance.matcher = mock_matcher_klass
|
25
|
-
|
26
|
-
result = instance.puncher
|
27
|
-
|
28
|
-
assert_equal mock_puncher, result
|
29
|
-
end
|
30
|
-
|
31
|
-
test "#puncher cached" do
|
32
|
-
@klass = Class.new do
|
33
|
-
include Punchout::Punchable
|
34
|
-
end
|
35
|
-
|
36
|
-
instance = @klass.new
|
37
|
-
|
38
|
-
mock_matcher_klass = mock
|
39
|
-
|
40
|
-
mock_puncher = mock
|
41
|
-
|
42
|
-
instance.matcher = mock_matcher_klass
|
43
|
-
instance.instance_variable_set(:@puncher, mock_puncher)
|
44
|
-
|
45
|
-
result = instance.puncher
|
46
|
-
|
47
|
-
assert_equal mock_puncher, result
|
48
|
-
end
|
49
|
-
|
50
|
-
test "#punch" do
|
51
|
-
@klass = Class.new do
|
52
|
-
include Punchout::Punchable
|
53
|
-
end
|
54
|
-
|
55
|
-
instance = @klass.new
|
56
|
-
|
57
|
-
mock_matcher_klass = mock
|
58
|
-
|
59
|
-
mock_puncher = mock
|
60
|
-
|
61
|
-
instance.matcher = mock_matcher_klass
|
62
|
-
instance.instance_variable_set(:@puncher, mock_puncher)
|
63
|
-
|
64
|
-
mock_obj = mock
|
65
|
-
|
66
|
-
mock_punched = mock
|
67
|
-
mock_puncher.expects(:punch).with(mock_obj).returns(mock_punched)
|
68
|
-
|
69
|
-
result = instance.punch(mock_obj)
|
70
|
-
|
71
|
-
assert_equal mock_punched, result
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
data/test/unit/test_helper.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
$:.push('lib')
|
2
|
-
|
3
|
-
require 'coveralls'
|
4
|
-
Coveralls.wear!
|
5
|
-
|
6
|
-
if ENV["ENABLE_SIMPLE_COV"]
|
7
|
-
require 'simplecov'
|
8
|
-
SimpleCov.start do
|
9
|
-
add_filter "test"
|
10
|
-
add_group 'API', "lib"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
require 'test/unit/testcase'
|
15
|
-
require 'mocha/setup'
|