dyoder-functor 0.4.1 → 0.4.2

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.
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