ludy 0.0.3 → 0.0.4
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.
- data/CHANGES +17 -3
- data/lib/ludy/curry.rb +5 -1
- data/lib/ludy/ludy_ext.rb +34 -2
- data/ludy.gemspec +1 -1
- data/svk-commit8wxPX.tmp +1 -0
- data/test/tc_curry.rb +1 -1
- data/test/tc_ludy_ext.rb +5 -4
- metadata +3 -2
data/CHANGES
CHANGED
@@ -1,8 +1,21 @@
|
|
1
1
|
|
2
2
|
==============================
|
3
|
-
ludy 0.0.
|
3
|
+
ludy 0.0.4, 2007.08.12
|
4
|
+
|
5
|
+
1. ludy_ext:
|
6
|
+
renamed:
|
7
|
+
1. Proc#curry => Proc#__curry__
|
4
8
|
|
5
|
-
|
9
|
+
added:
|
10
|
+
1. Kernel#curry
|
11
|
+
|
12
|
+
strongly suggest that use Kernel#curry instead of Proc#__curry__,
|
13
|
+
see unit test for usage and changes
|
14
|
+
|
15
|
+
==============================
|
16
|
+
ludy 0.0.3, 2007.08.07
|
17
|
+
|
18
|
+
1. ludy_ext:
|
6
19
|
added:
|
7
20
|
1. Proc#curry
|
8
21
|
2. Proc#compose
|
@@ -19,8 +32,9 @@ ludy_ext:
|
|
19
32
|
1. ruby2ruby has NilClass#method_missing return nil,
|
20
33
|
so i can't just make it return blackhole
|
21
34
|
|
22
|
-
|
35
|
+
2. module Curry:
|
23
36
|
see test/tc_curry.rb for usage
|
24
37
|
|
25
38
|
see unit test for usage
|
39
|
+
|
26
40
|
==============================
|
data/lib/ludy/curry.rb
CHANGED
@@ -32,7 +32,7 @@ module Ludy
|
|
32
32
|
if args.size == method(:#{m}).arity
|
33
33
|
self.__send__ :#{m}, *args, &block
|
34
34
|
else
|
35
|
-
method(:c#{m}).to_proc.
|
35
|
+
method(:c#{m}).to_proc.send :__curry__, *args
|
36
36
|
end
|
37
37
|
end
|
38
38
|
END
|
@@ -42,3 +42,7 @@ module Ludy
|
|
42
42
|
end
|
43
43
|
|
44
44
|
end
|
45
|
+
|
46
|
+
=begin
|
47
|
+
method(:#{m}).to_proc.curry.call *args, &block
|
48
|
+
=end
|
data/lib/ludy/ludy_ext.rb
CHANGED
@@ -63,7 +63,7 @@ end
|
|
63
63
|
=end
|
64
64
|
|
65
65
|
class Symbol
|
66
|
-
def to_proc; lambda{|*args| args.shift.__send__ self, *args
|
66
|
+
def to_proc; lambda{|*args| args.shift.__send__ self, *args}; end
|
67
67
|
end
|
68
68
|
|
69
69
|
class Array
|
@@ -78,9 +78,11 @@ class Array
|
|
78
78
|
end
|
79
79
|
|
80
80
|
class Proc
|
81
|
-
def
|
81
|
+
def __curry__ *pre
|
82
82
|
lambda{ |*post| self[*(pre + post)] }
|
83
83
|
end
|
84
|
+
|
85
|
+
# missing traversal of chain
|
84
86
|
def chain *procs, &block
|
85
87
|
procs << block if block
|
86
88
|
lambda{ |*args|
|
@@ -100,3 +102,33 @@ class Proc
|
|
100
102
|
}
|
101
103
|
end
|
102
104
|
end
|
105
|
+
|
106
|
+
module Kernel
|
107
|
+
def curry
|
108
|
+
class << self
|
109
|
+
alias_method :orig_call, :call
|
110
|
+
def call *args, &block
|
111
|
+
if self.arity == -1
|
112
|
+
begin # let's try if arguments are ready
|
113
|
+
# is there any better way to determine this?
|
114
|
+
# it's hard to detect correct arity value when
|
115
|
+
# Symbol#to_proc happened
|
116
|
+
# e.g., :message_that_you_never_know.to_proc.arity => ?
|
117
|
+
# i'd tried put hacks in Symbol#to_proc, but it's
|
118
|
+
# difficult to implement in correct way
|
119
|
+
# i would try it again in other day
|
120
|
+
self.__send__ :orig_call, *args, &block
|
121
|
+
rescue ArgumentError # oops, let's curry it
|
122
|
+
method(:call).to_proc.__send__ :__curry__, *args
|
123
|
+
end
|
124
|
+
elsif args.size == self.arity
|
125
|
+
self.__send__ :orig_call, *args, &block
|
126
|
+
else
|
127
|
+
method(:call).to_proc.__send__ :__curry__, *args
|
128
|
+
end
|
129
|
+
end
|
130
|
+
alias_method :[], :call
|
131
|
+
end
|
132
|
+
self
|
133
|
+
end
|
134
|
+
end
|
data/ludy.gemspec
CHANGED
@@ -18,7 +18,7 @@ require 'rubygems'
|
|
18
18
|
|
19
19
|
spec = Gem::Specification.new{|s|
|
20
20
|
s.name = 'ludy'
|
21
|
-
s.version = '0.0.
|
21
|
+
s.version = '0.0.4'
|
22
22
|
s.author = 'Lin Jen-Shin(a.k.a. godfat)'
|
23
23
|
s.email = 'strip number: 135godfat7911@246gmail.890com'
|
24
24
|
s.homepage = 'http://ludy.rubyforge.org/'
|
data/svk-commit8wxPX.tmp
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
local ci?
|
data/test/tc_curry.rb
CHANGED
@@ -30,7 +30,7 @@ class TestCurry < Test::Unit::TestCase
|
|
30
30
|
func1 = [1,2,3].cfoldr[:-.to_proc]
|
31
31
|
assert_equal 2, func1[0]
|
32
32
|
|
33
|
-
assert_equal [8,10,12], [4,5,6].cmap(&:*.to_proc.curry
|
33
|
+
assert_equal [8,10,12], [4,5,6].cmap(&:*.to_proc.curry[2])
|
34
34
|
|
35
35
|
result = [2,3,4,5,6]
|
36
36
|
func2 = result.ctest_curry[2]
|
data/test/tc_ludy_ext.rb
CHANGED
@@ -64,14 +64,15 @@ class TestLudyExt < Test::Unit::TestCase
|
|
64
64
|
def test_proc_curry
|
65
65
|
multiply = lambda{|l,r| l*r}
|
66
66
|
|
67
|
-
double = multiply.curry
|
67
|
+
double = multiply.curry[2]
|
68
68
|
assert_equal 8, double[4]
|
69
69
|
assert_equal 6, double[3]
|
70
70
|
|
71
|
-
xd = multiply
|
72
|
-
assert_equal 'XDXDXDXDXD', xd
|
71
|
+
xd = multiply['XD', 5]
|
72
|
+
assert_equal 'XDXDXDXDXD', xd
|
73
73
|
|
74
|
-
assert_equal 29, :+.to_proc.curry
|
74
|
+
assert_equal 29, :+.to_proc.curry[18][11]
|
75
|
+
assert_equal (0..4).to_a, lambda{|a,b,c,d,e|[a,b,c,d,e]}.curry[0][1][2][3][4]
|
75
76
|
end
|
76
77
|
|
77
78
|
def test_proc_chain
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: ludy
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2007-08-
|
6
|
+
version: 0.0.4
|
7
|
+
date: 2007-08-12 00:00:00 +08:00
|
8
8
|
summary: Aims to extend Ruby standard library, providing some useful tools that's not existed in the standard library.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -62,6 +62,7 @@ files:
|
|
62
62
|
- ludy.gemspec
|
63
63
|
- NOTICE
|
64
64
|
- README
|
65
|
+
- svk-commit8wxPX.tmp
|
65
66
|
- test
|
66
67
|
test_files:
|
67
68
|
- test/ts_ludy.rb
|