punchout 0.0.4 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a28f37c6b1f21bf3390778bb0104757e9b1c2e81
4
- data.tar.gz: de7232745143ba047eb6220f26f4e61e2def2947
3
+ metadata.gz: 0d41e5e66093156e892f64ae4488e388d86788c7
4
+ data.tar.gz: bb7f6416d9b5f6f9328ee105064307825421de8b
5
5
  SHA512:
6
- metadata.gz: 4f2177f1aaceb39aeac074f449d4433fde323a6096348503abcc64e6d5f0030393d70a3183745424b41a5ebbd76a89f51f2c3a5b559267937faee0db4e3d9d33
7
- data.tar.gz: 23d3be7c90f197b9b6e9412cfc00216ec2ceb61948b64d03a09232f836a9504751a2b155937e81076d549bc23a6921da925ac28b9afe291337359d4e44749978
6
+ metadata.gz: f2f89a361ec05f13413aecece10fb3a100fa8d661d1f4874065e8943350b103b4982f6d49e3a6dac15e735f50d3d677fe49128dc73e5fcada8e53266cb98ae77
7
+ data.tar.gz: 791224925c8690f29ff5e498b252451458bec73964ea4ac7a47ce2c40202348c4b0929399cc7fdabe84d7eba7adc1ae60989283bd697923af9d74812b3c25b0d
@@ -0,0 +1,9 @@
1
+ require 'punchout/fabricator'
2
+
3
+ module Punchout
4
+ module Fabricable
5
+ def puncher
6
+ @puncher ||= Fabricator.new(factory)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,27 @@
1
+ module Punchout
2
+ class Fabricator
3
+ def initialize(factory)
4
+ @puncher = Puncher.new
5
+ @factory = factory
6
+ end
7
+
8
+ def add(matchable)
9
+ @puncher.add(matchable)
10
+ end
11
+
12
+ def can_punch?(type)
13
+ true
14
+ end
15
+
16
+ def punch(type)
17
+
18
+ if @puncher.can_punch?(type)
19
+ @puncher.punch(type)
20
+ else
21
+ matchable = @factory.build(type)
22
+ @puncher.add(matchable)
23
+ matchable.thing
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,69 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ require 'punchout/fabricable'
4
+ require 'punchout/matcher/class'
5
+
6
+ class Punchout::Fabricator::Test < ActiveSupport::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
+
@@ -0,0 +1,48 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ require 'punchout/fabricator'
4
+ require 'punchout/puncher'
5
+
6
+ class Punchout::FabricatorTest < ActiveSupport::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
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: punchout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.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: 2013-11-09 00:00:00.000000000 Z
11
+ date: 2013-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_support
@@ -61,6 +61,8 @@ executables: []
61
61
  extensions: []
62
62
  extra_rdoc_files: []
63
63
  files:
64
+ - lib/punchout/fabricable.rb
65
+ - lib/punchout/fabricator.rb
64
66
  - lib/punchout/matcher/ancestry.rb
65
67
  - lib/punchout/matcher/class.rb
66
68
  - lib/punchout/matcher/equal.rb
@@ -71,8 +73,10 @@ files:
71
73
  - lib/punchout/puncher/matchables.rb
72
74
  - lib/punchout/puncher.rb
73
75
  - lib/punchout.rb
76
+ - test/integration/punchout/fabricable_test.rb
74
77
  - test/integration/punchout_test.rb
75
78
  - test/integration/test_helper.rb
79
+ - test/unit/punchout/fabricator_test.rb
76
80
  - test/unit/punchout/matcher/ancestry_test.rb
77
81
  - test/unit/punchout/matcher/class_test.rb
78
82
  - test/unit/punchout/matcher/equal_test.rb