casting 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/test/casting_test.rb +113 -0
  2. data/test/test_helper.rb +9 -0
  3. metadata +60 -0
@@ -0,0 +1,113 @@
1
+ require_relative 'test_helper'
2
+ require_relative '../lib/casting.rb'
3
+
4
+ class TestPerson
5
+ def name
6
+ 'name from TestPerson'
7
+ end
8
+
9
+ module Greeter
10
+ def greet
11
+ 'hello'
12
+ end
13
+ end
14
+
15
+ module Verbose
16
+ def verbose(arg1, arg2)
17
+ %w{arg1 arg2}.join(',')
18
+ end
19
+ end
20
+ end
21
+
22
+ class SubTestPerson < TestPerson
23
+ def sub_method
24
+ 'sub'
25
+ end
26
+ end
27
+
28
+ class Unrelated
29
+ end
30
+
31
+ describe Casting::Delegation do
32
+ it 'initializes with method name and object' do
33
+ assert Casting::Delegation.new('some_method', Object.new)
34
+ end
35
+
36
+ it 'raises an error when calling without an attendant object' do
37
+ delegation = Casting::Delegation.new('some_method', Object.new)
38
+ assert_raises(Casting::MissingAttendant){
39
+ delegation.call
40
+ }
41
+ end
42
+
43
+ it 'raises an error when setting an invalid attendant type' do
44
+ delegation = Casting::Delegation.new('some_method', TestPerson.new)
45
+ assert_raises(TypeError, 'poo'){
46
+ delegation.to(Unrelated.new)
47
+ }
48
+ end
49
+
50
+ it 'sets an attendant to an object of an ancestor class of the object class' do
51
+ attendant = TestPerson.new
52
+ client = SubTestPerson.new
53
+
54
+ delegation = Casting::Delegation.new('name', client)
55
+ assert delegation.to(attendant)
56
+ end
57
+
58
+ it 'calls a method defined on another object of the same type' do
59
+ client = TestPerson.new
60
+ attendant = TestPerson.new
61
+ attendant.extend(TestPerson::Greeter)
62
+ delegation = Casting::Delegation.new('greet', client).to(attendant)
63
+ assert_equal 'hello', delegation.call
64
+ end
65
+
66
+ it 'passes arguments to a delegated method' do
67
+ client = TestPerson.new
68
+ attendant = TestPerson.new
69
+ attendant.extend(TestPerson::Verbose)
70
+ delegation = Casting::Delegation.new('verbose', client).to(attendant).with('arg1','arg2')
71
+ assert_equal 'arg1,arg2', delegation.call
72
+ end
73
+
74
+ it 'delegates when given a module' do
75
+ client = TestPerson.new
76
+ delegation = Casting::Delegation.new('greet', client).to(TestPerson::Greeter)
77
+ assert_equal 'hello', delegation.call
78
+ end
79
+ end
80
+
81
+ describe Casting::Client do
82
+ it 'adds a delegate method to call a method on an attendant' do
83
+ client = TestPerson.new
84
+ client.extend(Casting::Client)
85
+ attendant = TestPerson.new
86
+ attendant.extend(TestPerson::Greeter)
87
+
88
+ assert_equal attendant.greet, client.delegate('greet', attendant)
89
+ end
90
+
91
+ it 'passes additional parameters to the attendant' do
92
+ client = TestPerson.new
93
+ client.extend(Casting::Client)
94
+ attendant = TestPerson.new
95
+ attendant.extend(TestPerson::Verbose)
96
+
97
+ attendant_output = attendant.verbose('hello', 'goodbye')
98
+ client_output = client.delegate('verbose', attendant, 'hello', 'goodbye')
99
+
100
+ assert_equal attendant_output, client_output
101
+ end
102
+
103
+ it 'passes the object as the client for delegation' do
104
+ client = Object.new
105
+ client.extend(Casting::Client)
106
+
107
+ delegation = client.delegation('id')
108
+
109
+ assert_equal client, delegation.client
110
+ end
111
+ end
112
+
113
+ CoverMe.complete!
@@ -0,0 +1,9 @@
1
+ require 'cover_me'
2
+
3
+ CoverMe.config do |c|
4
+ c.project.root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
5
+ c.file_pattern = [/#{CoverMe.config.project.root}\/lib\/.+\.rb/]
6
+ end
7
+
8
+ require 'minitest/spec'
9
+ require 'minitest/autorun'
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: casting
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jim Gay
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: cover_me
16
+ requirement: &70222871943440 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70222871943440
25
+ description: Proper method delegation.
26
+ email:
27
+ - jim@saturnflyer.com
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - test/test_helper.rb
33
+ - test/casting_test.rb
34
+ homepage: ''
35
+ licenses: []
36
+ post_install_message:
37
+ rdoc_options: []
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubyforge_project:
54
+ rubygems_version: 1.8.11
55
+ signing_key:
56
+ specification_version: 3
57
+ summary: Proper method delegation.
58
+ test_files:
59
+ - test/test_helper.rb
60
+ - test/casting_test.rb