dyoder-functor 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/functor.rb +11 -14
  2. metadata +1 -1
data/lib/functor.rb CHANGED
@@ -11,7 +11,7 @@ class Functor
11
11
  klass = self.name ; module_eval <<-CODE
12
12
  def #{name}( *args, &block )
13
13
  begin
14
- rval = #{klass}.functors[ :#{name} ].apply( self, *args, &block )
14
+ #{klass}.functors[ :#{name} ].apply( self, *args, &block )
15
15
  rescue ArgumentError => e
16
16
  begin
17
17
  super
@@ -19,11 +19,6 @@ class Functor
19
19
  raise e
20
20
  end
21
21
  end
22
- if rval.is_a? Continuation
23
- super ; rval.call
24
- else
25
- rval
26
- end
27
22
  end
28
23
  CODE
29
24
  end
@@ -42,23 +37,21 @@ class Functor
42
37
  end
43
38
 
44
39
  def apply( object, *args, &block )
45
- object.instance_exec( *args, &match( *args, &block ) )
40
+ object.instance_exec( *args, &match( args, &block ) )
46
41
  end
47
42
 
48
43
  def call( *args, &block )
49
- args.push( block ) if block_given?
50
- match( *args, &block ).call( *args )
44
+ match( args, &block ).call( *args )
51
45
  end
52
46
 
53
47
  def to_proc ; lambda { |*args| self.call( *args ) } ; end
54
48
 
55
49
  private
56
50
 
57
- def match( *args, &block )
58
- args.push( block ) if block_given?
59
- pattern, action = @rules.find { | pattern, action | match?( args, pattern ) }
60
- raise ArgumentError.new( "argument mismatch for argument(s): #{ args.map { |arg| arg.inspect }.join(', ') }." ) unless action
61
- return action
51
+ def match( args, &block )
52
+ args << block if block_given?
53
+ pattern, action = @rules.find { | p, a | match?( args, p ) }
54
+ action or raise argument_error( args )
62
55
  end
63
56
 
64
57
  def match?( args, pattern )
@@ -69,4 +62,8 @@ class Functor
69
62
  ( rule.is_a?( Proc ) and rule.call( arg ) ) or rule === arg or rule == arg
70
63
  end
71
64
 
65
+ def argument_error( args )
66
+ ArgumentError.new( "argument mismatch for argument(s): #{ args.map{ |arg| arg.inspect }.join(', ') }." )
67
+ end
68
+
72
69
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dyoder-functor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Yoder