delegation 0.0.1

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.
@@ -0,0 +1,69 @@
1
+ require_relative 'test_helper'
2
+ require_relative '../lib/delegation.rb'
3
+
4
+ class TestPerson
5
+ module Greeter
6
+ def greet
7
+ 'hello'
8
+ end
9
+ end
10
+
11
+ module Verbose
12
+ def verbose(arg1, arg2)
13
+ %w{arg1 arg2}.join(',')
14
+ end
15
+ end
16
+ end
17
+
18
+ class Unrelated
19
+ end
20
+
21
+ describe Delegation do
22
+ it 'initializes with method name and object' do
23
+ assert Delegation.new('some_method', Object.new)
24
+ end
25
+
26
+ it 'raises an error when calling without an attendant object' do
27
+ delegation = Delegation.new('some_method', Object.new)
28
+ assert_raises(Delegation::MissingAttendant){
29
+ delegation.call
30
+ }
31
+ end
32
+
33
+ it 'raises an error when setting an invalid attendant type' do
34
+ delegation = Delegation.new('some_method', TestPerson.new)
35
+ assert_raises(ArgumentError){
36
+ delegation.to(Unrelated.new)
37
+ }
38
+ end
39
+
40
+ it 'calls a method defined on another object of the same type' do
41
+ client = TestPerson.new
42
+ attendant = TestPerson.new
43
+ attendant.extend(TestPerson::Greeter)
44
+ delegation = Delegation.new('greet', client).to(attendant)
45
+ assert_equal 'hello', delegation.call
46
+ end
47
+
48
+ it 'passes arguments to a delegated method' do
49
+ client = TestPerson.new
50
+ attendant = TestPerson.new
51
+ attendant.extend(TestPerson::Verbose)
52
+ delegation = Delegation.new('verbose', client).to(attendant).with('arg1','arg2')
53
+ assert_equal 'arg1,arg2', delegation.call
54
+ end
55
+
56
+ it 'delegates when given a module' do
57
+ client = TestPerson.new
58
+ delegation = Delegation.new('greet', client).to(TestPerson::Greeter)
59
+ assert_equal 'hello', delegation.call
60
+ end
61
+ end
62
+
63
+ describe Delegation::Client do
64
+ it 'adds a delegate method to return a Delegation' do
65
+ client = Object.new
66
+ client.extend(Delegation::Client)
67
+ assert_instance_of Delegation, client.delegate('id')
68
+ end
69
+ end
@@ -0,0 +1,2 @@
1
+ require 'minitest/spec'
2
+ require 'minitest/autorun'
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: delegation
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jim Gay
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-24 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Proper method delegation.
15
+ email:
16
+ - jim@saturnflyer.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - test/test_helper.rb
22
+ - test/delegation_test.rb
23
+ homepage: ''
24
+ licenses: []
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 1.8.11
44
+ signing_key:
45
+ specification_version: 3
46
+ summary: Proper method delegation.
47
+ test_files:
48
+ - test/test_helper.rb
49
+ - test/delegation_test.rb