ludy 0.0.9 → 0.1.0

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 (117) hide show
  1. data/CHANGES +88 -57
  2. data/Manifest.txt +96 -0
  3. data/NOTICE +10 -23
  4. data/README +173 -10
  5. data/Rakefile +33 -0
  6. data/TODO +5 -0
  7. data/bin/ludy +11 -0
  8. data/lib/ludy/all.rb +3 -0
  9. data/lib/ludy/array/body.rb +9 -0
  10. data/lib/ludy/array/combine.rb +16 -0
  11. data/lib/ludy/array/combos.rb +23 -0
  12. data/lib/ludy/array/filter.rb +4 -0
  13. data/lib/ludy/array/foldl.rb +5 -0
  14. data/lib/ludy/array/foldr.rb +8 -0
  15. data/lib/ludy/array/reverse_map.rb +7 -0
  16. data/lib/ludy/array/rotate.rb +22 -0
  17. data/lib/ludy/array.rb +3 -0
  18. data/lib/ludy/blackhole.rb +17 -0
  19. data/lib/ludy/class/undef_all_methods.rb +9 -0
  20. data/lib/ludy/class.rb +3 -0
  21. data/lib/ludy/deprecated/aspect.rb +26 -0
  22. data/lib/ludy/deprecated/callstack.rb +24 -0
  23. data/lib/ludy/deprecated/curry.rb +29 -0
  24. data/lib/ludy/deprecated/rambda.rb +23 -0
  25. data/lib/ludy/deprecated/this.rb +14 -0
  26. data/lib/ludy/deprecated/untranspose.rb +12 -0
  27. data/lib/ludy/deprecated/unzip.rb +7 -0
  28. data/lib/ludy/{dice.rb → dices.rb} +18 -22
  29. data/lib/ludy/kernel/defun.rb +10 -0
  30. data/lib/ludy/kernel/ergo.rb +16 -0
  31. data/lib/ludy/kernel/id.rb +6 -0
  32. data/lib/ludy/kernel/if_else.rb +14 -0
  33. data/lib/ludy/kernel/m.rb +5 -0
  34. data/lib/ludy/kernel/public_send.rb +13 -0
  35. data/lib/ludy/kernel/singleton_method.rb +13 -0
  36. data/lib/ludy/kernel/tap.rb +10 -0
  37. data/lib/ludy/kernel.rb +3 -0
  38. data/lib/ludy/lazy.rb +9 -16
  39. data/lib/ludy/message_dispatcher.rb +58 -0
  40. data/lib/ludy/pattern_matcher.rb +41 -0
  41. data/lib/ludy/proc/bind.rb +21 -0
  42. data/lib/ludy/proc/chain.rb +17 -0
  43. data/lib/ludy/proc/compose.rb +9 -0
  44. data/lib/ludy/proc/curry.rb +39 -0
  45. data/lib/ludy/proc.rb +3 -0
  46. data/lib/ludy/symbol/curry.rb +10 -0
  47. data/lib/ludy/symbol/to_msg.rb +10 -0
  48. data/lib/ludy/symbol/to_proc.rb +7 -0
  49. data/lib/ludy/symbol.rb +3 -0
  50. data/lib/ludy/tasks/erb_cpp/attr_builder.rb +49 -0
  51. data/lib/ludy/tasks/erb_cpp/header_guard.rb +12 -0
  52. data/lib/ludy/tasks/erb_cpp/template_forward_parameters.rb +43 -0
  53. data/lib/ludy/tasks/erb_cpp.rb +35 -0
  54. data/lib/ludy/tasks.rb +3 -0
  55. data/lib/ludy/test/helper.rb +3 -0
  56. data/lib/ludy/variable.rb +9 -17
  57. data/lib/ludy/y_combinator.rb +3 -22
  58. data/lib/ludy/z_combinator.rb +2 -16
  59. data/lib/ludy.rb +74 -23
  60. data/lib/puzzle_generator/chain.rb +2 -2
  61. data/lib/puzzle_generator/chained_map.rb +7 -10
  62. data/lib/puzzle_generator/colored_map.rb +2 -2
  63. data/lib/puzzle_generator/map.rb +8 -12
  64. data/lib/puzzle_generator/misc.rb +5 -4
  65. data/lib/puzzle_generator/puzzle.rb +4 -4
  66. data/lib/puzzle_generator.rb +2 -2
  67. data/spec/ludy_spec.rb +22 -0
  68. data/tasks/annotations.rake +30 -0
  69. data/tasks/doc.rake +50 -0
  70. data/tasks/gem.rake +89 -0
  71. data/tasks/manifest.rake +41 -0
  72. data/tasks/rubyforge.rake +57 -0
  73. data/tasks/setup.rb +151 -0
  74. data/tasks/spec.rake +40 -0
  75. data/tasks/svn.rake +44 -0
  76. data/tasks/test.rake +40 -0
  77. data/test/deprecated/callstack.rb +18 -0
  78. data/test/deprecated/curry.rb +34 -0
  79. data/test/deprecated/rambda.rb +15 -0
  80. data/test/{tc_this.rb → deprecated/this.rb} +2 -18
  81. data/test/{ts_ludy.rb → deprecated/ts_ludy.rb} +2 -17
  82. data/test/deprecated/unzip_and_untranspose.rb +13 -0
  83. data/test/{test_puzzle.rb → example_puzzle.rb} +3 -2
  84. data/test/test_all.rb +21 -0
  85. data/test/test_array.rb +47 -0
  86. data/test/test_class.rb +13 -0
  87. data/test/test_defun.rb +37 -0
  88. data/test/test_dices.rb +32 -0
  89. data/test/test_kernel.rb +36 -0
  90. data/test/test_lazy.rb +18 -0
  91. data/test/test_proc.rb +57 -0
  92. data/test/test_symbol.rb +15 -0
  93. data/test/test_variable.rb +29 -0
  94. data/test/test_y_combinator.rb +21 -0
  95. data/test/test_z_combinator.rb +20 -0
  96. metadata +134 -51
  97. data/lib/lib/amulti.rb +0 -40
  98. data/lib/lib/multi.rb +0 -139
  99. data/lib/lib/smulti.rb +0 -56
  100. data/lib/ludy/aspect.rb +0 -41
  101. data/lib/ludy/bind.rb +0 -31
  102. data/lib/ludy/callstack.rb +0 -39
  103. data/lib/ludy/curry.rb +0 -49
  104. data/lib/ludy/ludy_ext.rb +0 -145
  105. data/lib/ludy/rambda.rb +0 -42
  106. data/lib/ludy/this.rb +0 -34
  107. data/ludy.gemspec +0 -44
  108. data/test/tc_bind.rb +0 -29
  109. data/test/tc_callstack.rb +0 -34
  110. data/test/tc_curry.rb +0 -51
  111. data/test/tc_dice.rb +0 -48
  112. data/test/tc_lazy.rb +0 -34
  113. data/test/tc_ludy_ext.rb +0 -154
  114. data/test/tc_rambda.rb +0 -31
  115. data/test/tc_variable.rb +0 -45
  116. data/test/tc_y_combinator.rb +0 -37
  117. data/test/tc_z_combinator.rb +0 -36
data/CHANGES CHANGED
@@ -1,95 +1,126 @@
1
+ = ludy changes history
1
2
 
2
- ==============================
3
- ludy TODO
4
- multi
5
- chain travel
6
- method hook
3
+ == ludy 0.1.0, 2008.01.08
7
4
 
8
- ==============================
9
- ludy 0.0.9, 2008.01.07
5
+ * directory structure rearranged
6
+ now you would like to require something like:
7
+ require 'ludy/proc/bind'
8
+ require 'ludy/lazy'
9
+ require 'ludy/kernel/defun'
10
+ require 'puzzle_generator'
11
+ ...
12
+ the load path is now manipulated by ludy.rb, with require guard,
13
+ to make sure that all .rb is only required once. (all the same require path.)
10
14
 
11
- Proc#bind added, see test/tc_bind.rb
15
+ * you can now:
16
+ require 'ludy/kernel' # for all kernel method
17
+ require 'ludy/all' # for all ludy things
12
18
 
13
- ==============================
14
- ludy 0.0.8, 2007.12.06
19
+ * there's no require_ludy anymore.
15
20
 
16
- 1. ludy_ext:
21
+ * project skeleton is now built through Mr Bones 1.3.0, see NOTICE
22
+
23
+ * many things are now deprecated. they are hard to implemented correctly,
24
+ or useless, or easy to be replaced, or for some other reasons.
25
+
26
+ * ludy is now compatible with ruby 1.9. and a few ruby 1.9's features are
27
+ now added in ludy to help improve compatibility between ruby versions.
28
+
29
+ * ludy executable is added. it simply call rake with ludy tasks, so:
30
+ $ ludy test # to run all tests
31
+ $ ludy doc # generate rdoc
32
+ $ ludy # see all ludy tasks
33
+
34
+ * ludy_ext.rb is split into many other .rb
35
+
36
+ * C++ ERB meta-programming is added.
37
+
38
+ * multi re-implementation is done. the new one is called defun.
39
+ it supports overloading(ad-hoc polymorphism), multi-method,
40
+ pattern matching, and perhaps others?
41
+
42
+ * rdoc support is added.
43
+
44
+ * http://ludy.rubyforge.org would now insist on the latest rdoc.
45
+
46
+ * Array#reverse_map, Array#body, Array#rotate, Array#combos, etc. is added.
47
+
48
+ == ludy 0.0.9, 2008.01.07
49
+
50
+ * Proc#bind added, see test/tc_bind.rb
51
+
52
+ == ludy 0.0.8, 2007.12.06
53
+
54
+ * ludy_ext:
17
55
  added:
18
- 1. Array#untranspose!
19
- 2. Array#unzip!
56
+ * Array#untranspose!
57
+ * Array#unzip!
20
58
 
21
59
  changed:
22
- 1. Kernel#curry support Symbol
60
+ * Kernel#curry support Symbol
23
61
 
24
- 2. puzzle_generator added...
62
+ * puzzle_generator added...
25
63
 
26
- ==============================
27
- ludy 0.0.7, 2007.10.08
64
+ == ludy 0.0.7, 2007.10.08
28
65
 
29
- 1. ludy_ext:
66
+ * ludy_ext:
30
67
  added:
31
- 1. Array#untranspose
32
- 2. Array#unzip
33
- 3. Array#combine!
34
- 4. Object#m
35
- 5. Kernel#id
68
+ * Array#untranspose
69
+ * Array#unzip
70
+ * Array#combine!
71
+ * Object#m
72
+ * Kernel#id
36
73
 
37
- ==============================
38
- ludy 0.0.6, 2007.09.15
74
+ == ludy 0.0.6, 2007.09.15
39
75
 
40
- 1. ludy_ext:
76
+ * ludy_ext:
41
77
  added:
42
- 1. Array#combine
78
+ * Array#combine
43
79
 
44
80
  moved:
45
- 1. move Symbol#to_proc to Symbol#to_msg,
81
+ * move Symbol#to_proc to Symbol#to_msg,
46
82
  and take back the original Symbol#to_proc implementation.
47
83
 
48
- 2. change the way we require
84
+ * change the way we require
49
85
 
50
- ==============================
51
- ludy 0.0.5, 2007.09.15
86
+ == ludy 0.0.5, 2007.09.15
52
87
 
53
- i forgot what i'd done... (days ago)
54
- but sure there's Symbol#to_proc and Symbol#to_msg,
55
- also, please read unit test.
88
+ i forgot what i'd done... (days ago)
89
+ but sure there's Symbol#to_proc and Symbol#to_msg,
90
+ also, please read unit test.
56
91
 
57
- ==============================
58
- ludy 0.0.4, 2007.08.12
92
+ == ludy 0.0.4, 2007.08.12
59
93
 
60
- 1. ludy_ext:
94
+ * ludy_ext:
61
95
  renamed:
62
- 1. Proc#curry => Proc#__curry__
96
+ * Proc#curry => Proc#__curry__
63
97
 
64
98
  added:
65
- 1. Kernel#curry
99
+ * Kernel#curry
66
100
 
67
- strongly suggest that use Kernel#curry instead of Proc#__curry__,
68
- see unit test for usage and changes
101
+ strongly suggest that use Kernel#curry instead of Proc#__curry__,
102
+ see unit test for usage and changes
69
103
 
70
- ==============================
71
- ludy 0.0.3, 2007.08.07
104
+ == ludy 0.0.3, 2007.08.07
72
105
 
73
- 1. ludy_ext:
106
+ * ludy_ext:
74
107
  added:
75
- 1. Proc#curry
76
- 2. Proc#compose
77
- 3. Proc#chain
78
- 4. Symbol#to_proc
79
- 5. Array#foldl
80
- 6. Array#foldr
81
- 7. Array#filter
108
+ * Proc#curry
109
+ * Proc#compose
110
+ * Proc#chain
111
+ * Symbol#to_proc
112
+ * Array#foldl
113
+ * Array#foldr
114
+ * Array#filter
82
115
 
83
116
  removed:
84
- 1. Fixnum#collect # see tc_ludy_ext.rb#test_fixnum_collect for reason
117
+ * Fixnum#collect # see tc_ludy_ext.rb#test_fixnum_collect for reason
85
118
 
86
119
  info:
87
- 1. ruby2ruby has NilClass#method_missing return nil,
120
+ * ruby2ruby has NilClass#method_missing return nil,
88
121
  so i can't just make it return blackhole
89
122
 
90
- 2. module Curry:
123
+ * module Curry:
91
124
  see test/tc_curry.rb for usage
92
125
 
93
- see unit test for usage
94
-
95
- ==============================
126
+ see unit test for usage
data/Manifest.txt ADDED
@@ -0,0 +1,96 @@
1
+ CHANGES
2
+ LICENSE
3
+ Manifest.txt
4
+ NOTICE
5
+ README
6
+ Rakefile
7
+ TODO
8
+ bin/ludy
9
+ lib/ludy.rb
10
+ lib/ludy/all.rb
11
+ lib/ludy/array.rb
12
+ lib/ludy/array/body.rb
13
+ lib/ludy/array/combine.rb
14
+ lib/ludy/array/combos.rb
15
+ lib/ludy/array/filter.rb
16
+ lib/ludy/array/foldl.rb
17
+ lib/ludy/array/foldr.rb
18
+ lib/ludy/array/reverse_map.rb
19
+ lib/ludy/array/rotate.rb
20
+ lib/ludy/blackhole.rb
21
+ lib/ludy/class.rb
22
+ lib/ludy/class/undef_all_methods.rb
23
+ lib/ludy/deprecated/aspect.rb
24
+ lib/ludy/deprecated/callstack.rb
25
+ lib/ludy/deprecated/curry.rb
26
+ lib/ludy/deprecated/rambda.rb
27
+ lib/ludy/deprecated/this.rb
28
+ lib/ludy/deprecated/untranspose.rb
29
+ lib/ludy/deprecated/unzip.rb
30
+ lib/ludy/dices.rb
31
+ lib/ludy/kernel.rb
32
+ lib/ludy/kernel/defun.rb
33
+ lib/ludy/kernel/ergo.rb
34
+ lib/ludy/kernel/id.rb
35
+ lib/ludy/kernel/if_else.rb
36
+ lib/ludy/kernel/m.rb
37
+ lib/ludy/kernel/public_send.rb
38
+ lib/ludy/kernel/singleton_method.rb
39
+ lib/ludy/kernel/tap.rb
40
+ lib/ludy/lazy.rb
41
+ lib/ludy/message_dispatcher.rb
42
+ lib/ludy/pattern_matcher.rb
43
+ lib/ludy/proc.rb
44
+ lib/ludy/proc/bind.rb
45
+ lib/ludy/proc/chain.rb
46
+ lib/ludy/proc/compose.rb
47
+ lib/ludy/proc/curry.rb
48
+ lib/ludy/symbol.rb
49
+ lib/ludy/symbol/curry.rb
50
+ lib/ludy/symbol/to_msg.rb
51
+ lib/ludy/symbol/to_proc.rb
52
+ lib/ludy/tasks.rb
53
+ lib/ludy/tasks/erb_cpp.rb
54
+ lib/ludy/tasks/erb_cpp/attr_builder.rb
55
+ lib/ludy/tasks/erb_cpp/header_guard.rb
56
+ lib/ludy/tasks/erb_cpp/template_forward_parameters.rb
57
+ lib/ludy/test/helper.rb
58
+ lib/ludy/variable.rb
59
+ lib/ludy/y_combinator.rb
60
+ lib/ludy/z_combinator.rb
61
+ lib/puzzle_generator.rb
62
+ lib/puzzle_generator/chain.rb
63
+ lib/puzzle_generator/chained_map.rb
64
+ lib/puzzle_generator/colored_map.rb
65
+ lib/puzzle_generator/map.rb
66
+ lib/puzzle_generator/misc.rb
67
+ lib/puzzle_generator/puzzle.rb
68
+ spec/ludy_spec.rb
69
+ tasks/annotations.rake
70
+ tasks/doc.rake
71
+ tasks/gem.rake
72
+ tasks/manifest.rake
73
+ tasks/rubyforge.rake
74
+ tasks/setup.rb
75
+ tasks/spec.rake
76
+ tasks/svn.rake
77
+ tasks/test.rake
78
+ test/deprecated/callstack.rb
79
+ test/deprecated/curry.rb
80
+ test/deprecated/rambda.rb
81
+ test/deprecated/this.rb
82
+ test/deprecated/ts_ludy.rb
83
+ test/deprecated/unzip_and_untranspose.rb
84
+ test/example_puzzle.rb
85
+ test/test_all.rb
86
+ test/test_array.rb
87
+ test/test_class.rb
88
+ test/test_defun.rb
89
+ test/test_dices.rb
90
+ test/test_kernel.rb
91
+ test/test_lazy.rb
92
+ test/test_proc.rb
93
+ test/test_symbol.rb
94
+ test/test_variable.rb
95
+ test/test_y_combinator.rb
96
+ test/test_z_combinator.rb
data/NOTICE CHANGED
@@ -1,26 +1,13 @@
1
+ = notice for other stuffs
1
2
 
2
- ludy project
3
+ * this project skeleton is built through Mr Bones 1.3.0:
4
+ gem install bones
5
+ http://codeforpeople.rubyforge.org/bones/
3
6
 
4
- Aims to extend Ruby standard library,
5
- providing some useful tools that's not existed in the standard library.
7
+ * for puzzle_generator, Ruby Facets is needed:
8
+ gem install facets
9
+ http://facets.rubyforge.org/
6
10
 
7
- http://ludy.rubyforge.org/
8
- http://rubyforge.org/projects/ludy/
9
-
10
- Programs under lib/lib/* are not licensed under Apache License 2.0,
11
- instead they all licensed under the license they originated.
12
- Some of them were modified by Lin Jen-Shin (author of ludy).
13
- See each file for more information.
14
-
15
- *file which is modified.
16
-
17
- == prgorams belows belong to
18
- Christopher Cyll and licensed under MIT license ==
19
-
20
- http://multi.rubyforge.org/
21
- http://rubyforge.org/projects/multi/
22
-
23
- lib/lib/amulti.rb
24
- lib/lib/multi.rb
25
- lib/lib/smulti.rb
26
- ==
11
+ * defun is re-implemented gem multi:
12
+ gem install multi
13
+ http://multi.rubyforge.org/
data/README CHANGED
@@ -1,17 +1,180 @@
1
+ = ludy 0.1.0
2
+ by Lin Jen-Shin (a.k.a. godfat 真常)
3
+ strip any number: 18god29fat7029 (at] godfat32 -dooot- 20org
4
+ http://ludy.rubyforge.org
5
+ http://godfat.org
1
6
 
2
- always require "ludy" first when you use any tool of ludy
3
- (although there are tools that needn't this init)
7
+ == DESCRIPTION:
8
+
9
+ Aims to extend Ruby standard library, providing some useful tools that's not existed in the standard library.
4
10
 
5
- e.g.
11
+ == FEATURES:
6
12
 
7
- require 'ludy' # when you're using ludy gem
8
- require path_of_ludy # when you aren't using ludy gem
13
+ * ludy standard library extension
14
+ * puzzle_generator
15
+ * c++ erb meta-programming
9
16
 
10
- then you could require other ludy tools
17
+ == SYNOPSIS:
11
18
 
12
- e.g. for use of Ludy::this
19
+ please see unit test for all examples.
13
20
 
14
- require 'ludy/this' # for a common way when you're using ludy gem
15
- require path_of_this # for a common way when you aren't using ludy gem
21
+ $ ludy test # run all ludy tests
22
+ $ ludy # see all tasks related to ludy
16
23
 
17
- require_ludy 'this' # tool in ludy that help ludy handle the requirement
24
+ please don't run any task about release... contact me first
25
+ if you would like to make changes into official ludy release.
26
+
27
+ require 'ludy/all' # for all ludy things
28
+ require 'ludy/kernel' # for all kernel methods
29
+ require 'ludy/tasks' # for all ludy tasks
30
+ require 'ludy/proc/curry' # for proc's method curry
31
+
32
+ you can make any change and then $ ludy gem:install on your local machine.
33
+ below is some example extracted from unit test.
34
+
35
+ curry:
36
+ require 'ludy/proc/curry'
37
+ assert_equal 29, :+.to_proc.curry[18][11]
38
+
39
+ bind:
40
+ require 'ludy/proc/bind'
41
+ assert_equal [9,8,7], ([1,2,3].map &(lambda{|lhs, rhs| lhs-rhs}.bind 10, :_1))
42
+
43
+ defun:
44
+ require 'ludy/kernel/defun'
45
+ defun :fact, 0 do |n|
46
+ 1
47
+ end
48
+
49
+ defun :fact, Integer do |n|
50
+ n * fact(n-1)
51
+ end
52
+
53
+ assert_equal 3628800, fact(10)
54
+
55
+ defun :f, Integer do |n| 1; end
56
+ defun :f, String do |n| '2'; end
57
+ defun(:f, Integer, Integer) do |n,g| 3; end
58
+
59
+ assert_equal 1, f(10)
60
+ assert_equal '2', f('')
61
+ assert_equal 3, f(1,1)
62
+ assert_raise NoMethodError do f('1', 2); end
63
+
64
+ lazy:
65
+ require 'ludy/lazy'
66
+ Y = lambda{|f|
67
+ lambda{|x| lazy{f[x[x]]} }[lambda{|x| lazy{f[x[x]]} }]
68
+ }
69
+
70
+ y_combinator:
71
+ require 'ludy/y_combinator'
72
+ fact = Y[lambda{|this|
73
+ lambda{|n| n==1 ? 1 : n*this[n-1]}
74
+ }]
75
+ assert_equal(3628800, fact[10])
76
+
77
+
78
+ ludy tasks:
79
+
80
+
81
+ header_guard:
82
+ require 'ludy/tasks/erb_cpp/header_guard'
83
+ PROJ = 'header_sample' # remember to set project name
84
+
85
+ # in utils/SimpleTest.hpp.erb
86
+ <%= header_guard %>
87
+
88
+ # run preprocessing task
89
+ $ rake erb:preprocessing
90
+
91
+ # produce:
92
+ #ifndef _HEADER_SAMPLE_UTILS_SIMPLETEST_
93
+ #define _HEADER_SAMPLE_UTILS_SIMPLETEST_
94
+
95
+ attr_builder:
96
+ require 'ludy/tasks/erb_cpp' # it would require all erb_cpp tasks.
97
+
98
+ # in MapSetting.hpp.erb
99
+ class MapSetting{
100
+ <%= accessor :int, :frequency %>
101
+ <%= accessor :double, :speed, :damage_factor %>
102
+ <%= reader :int, :width, :height, :size %>
103
+ };
104
+
105
+ # run preprocessing task
106
+ $ rake erb:preprocessing
107
+
108
+ # produce:
109
+ class MapSetting{
110
+ public:
111
+ int frequency() const{ return frequency_; }
112
+ public:
113
+ MapSetting& frequency(int const& new_frequency){ frequency_ = new_frequency; return *this; }
114
+ private:
115
+ int frequency_;
116
+
117
+ public:
118
+ double speed() const{ return speed_; }
119
+ double damage_factor() const{ return damage_factor_; }
120
+ public:
121
+ MapSetting& speed(double const& new_speed){ speed_ = new_speed; return *this; }
122
+ MapSetting& damage_factor(double const& new_damage_factor){ damage_factor_ = new_damage_factor; return *this; }
123
+ private:
124
+ double speed_, damage_factor_;
125
+
126
+ public:
127
+ int width() const{ return width_; }
128
+ int height() const{ return height_; }
129
+ int size() const{ return size_; }
130
+ private:
131
+ int width_, height_, size_;
132
+ };
133
+
134
+ template_forward_parameters:
135
+ require 'ludy/tasks/erb_cpp/template_forward_parameters'
136
+
137
+ # in test.hpp.erb
138
+ <% for_template_parameters_within(1..5, []){ |args_list| %>
139
+ template <%= template_parameters args_list %>
140
+ static element_type create(<%= forward_parameters args_list %>){
141
+ return element_type(SPool::Instance().construct(<%= arguments args_list %>), Deleter());
142
+ }
143
+ <% } %>
144
+
145
+ # run preprocessing task
146
+ $ rake erb:preprocessing
147
+
148
+ # one of the produce: (can't list all...)
149
+ template <class T0, class T1, class T2, class T3>
150
+ static element_type create(T0 const& a, T1 const& b, T2 & c, T3 const& d){
151
+ return element_type(SPool::Instance().construct(a, b, c, d), Deleter());
152
+ }
153
+
154
+ == REQUIREMENTS:
155
+
156
+ * ruby 1.8/1.9 (1.9 is prefered...)
157
+ * rake
158
+ * gem facets if you are using puzzle_generator
159
+
160
+ == INSTALL:
161
+
162
+ * sudo gem install ludy
163
+
164
+ == LICENSE:
165
+
166
+ Apache License 2.0
167
+
168
+ Copyright (c) 2008, Lin Jen-Shin (a.k.a. godfat 真常)
169
+
170
+ Licensed under the Apache License, Version 2.0 (the "License");
171
+ you may not use this file except in compliance with the License.
172
+ You may obtain a copy of the License at
173
+
174
+ http://www.apache.org/licenses/LICENSE-2.0
175
+
176
+ Unless required by applicable law or agreed to in writing, software
177
+ distributed under the License is distributed on an "AS IS" BASIS,
178
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
179
+ See the License for the specific language governing permissions and
180
+ limitations under the License.
data/Rakefile ADDED
@@ -0,0 +1,33 @@
1
+ # Look in the tasks/setup.rb file for the various options that can be
2
+ # configured in this Rakefile. The .rake files in the tasks directory
3
+ # are where the options are used.
4
+
5
+ load 'tasks/setup.rb'
6
+
7
+ ensure_in_path 'lib'
8
+ require 'ludy'
9
+
10
+ task :default do
11
+ sh 'rake --tasks'
12
+ end
13
+
14
+ PROJ.name = 'ludy'
15
+ PROJ.summary = 'Aims to extend Ruby standard library, providing some useful tools that\'s not existed in the standard library.'
16
+ PROJ.authors = 'Lin Jen-Shin (a.k.a. godfat 真常)'
17
+ PROJ.email = 'strip any number: 18god29fat7029 (at] godfat32 -dooot- 20org'
18
+ PROJ.url = 'http://ludy.rubyforge.org/'
19
+ PROJ.description = paragraphs_of('README', 1).join("\n\n")
20
+ PROJ.changes = paragraphs_of('CHANGES', 0..1).join("\n\n")
21
+ PROJ.rubyforge_name = 'ludy'
22
+
23
+ PROJ.version = '0.1.0'
24
+ PROJ.exclude << '.DS_Store' << '^tmp'
25
+ PROJ.dependencies << 'rake'
26
+
27
+ PROJ.rdoc_main = 'README'
28
+ PROJ.rdoc_exclude << 'deprecated' << 'Manifest' << 'Rakefile' << 'tmp$' << '^tmp'
29
+ PROJ.rdoc_include << '\w+'
30
+
31
+ PROJ.spec_opts << '--color'
32
+
33
+ # EOF
data/TODO ADDED
@@ -0,0 +1,5 @@
1
+ = ludy todo list
2
+
3
+ * chain travel
4
+ * method hook
5
+ * more rdoc
data/bin/ludy ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(
4
+ File.join(File.dirname(__FILE__), '..', 'lib', 'ludy'))
5
+
6
+ # Put your code here
7
+
8
+ Dir.chdir Ludy.path
9
+ puts `rake #{ARGV.join(' ')}`
10
+
11
+ # EOF
data/lib/ludy/all.rb ADDED
@@ -0,0 +1,3 @@
1
+
2
+ require 'ludy'
3
+ Ludy.require_all_in '.'
@@ -0,0 +1,9 @@
1
+
2
+ class Array
3
+ # strip the last element
4
+ # [1,2,3].body
5
+ # => [1,2]
6
+ def body
7
+ self[0..-2]
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+
2
+ require 'ludy/symbol/to_proc'
3
+
4
+ class Array
5
+ # [1,2,3].combine [2,4,6]
6
+ # => [3,6,9]
7
+ #
8
+ # [1,2].combine [1,2], [1,2]
9
+ # => [3,6]
10
+ #
11
+ # ['a','b'].combine ['b','a']
12
+ # => ['ab','ba']
13
+ def combine *target; zip(*target).map{|i|i.inject(&:+)}; end
14
+ # in-place version of combine
15
+ def combine! *target; replace combine(*target); end
16
+ end
@@ -0,0 +1,23 @@
1
+
2
+ require 'ludy/array/reverse_map'
3
+ require 'ludy/symbol/to_proc'
4
+ require 'ludy/array/foldr'
5
+
6
+ class Array
7
+ # for each combos
8
+ # [[0,1],[2,3]].combos
9
+ # => [[0,2],[0,3],[1,2],[1,3]]
10
+ def combos
11
+ result = []
12
+ radixs = reverse_map(&:size)
13
+ inject(1){|r, i| r * i.size}.times{ |step|
14
+ result << foldr(lambda{ |i, r|
15
+ radix = radixs[r.size]
16
+ r.unshift i[step % radix]
17
+ step /= radix unless radix.nil?
18
+ r
19
+ }, [])
20
+ }
21
+ result
22
+ end
23
+ end
@@ -0,0 +1,4 @@
1
+
2
+ class Array
3
+ alias_method :filter, :select
4
+ end
@@ -0,0 +1,5 @@
1
+
2
+ class Array
3
+ # fold from left to right (it just like inject)
4
+ def foldl func, init; inject init, &func; end
5
+ end
@@ -0,0 +1,8 @@
1
+
2
+ class Array
3
+ # fold from right to left
4
+ def foldr func, init
5
+ reverse_each{ |i| init = func[i, init] }
6
+ init
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+
2
+ class Array
3
+ # synonymy for reverse.map
4
+ def reverse_map &block
5
+ reverse.map(&block)
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+
2
+ class Array
3
+ # rotate right with size.
4
+ # if the size is negative, rotate left.
5
+ # [1,2,3].rotate
6
+ # => [3,1,2]
7
+ #
8
+ # [1,2,3].rotate -1
9
+ # => [2,3,1]
10
+ #
11
+ # [1,2,3].rotate 2
12
+ # => [2,3,1]
13
+ def rotate size = 1
14
+ head = size > 0 ? last(size) : self[(-size)..-1]
15
+ tail = self - head
16
+ head + tail
17
+ end
18
+ # in-place version of rotate
19
+ def rotate!
20
+ replace rotate
21
+ end
22
+ end
data/lib/ludy/array.rb ADDED
@@ -0,0 +1,3 @@
1
+
2
+ require 'ludy'
3
+ Ludy.require_all_in 'array'