ludy 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +26 -0
- data/Manifest.txt +28 -15
- data/NOTICE +9 -1
- data/README +7 -4
- data/Rakefile +11 -7
- data/lib/ludy.rb +3 -4
- data/lib/ludy/array/choice.rb +14 -0
- data/lib/ludy/array/combine.rb +1 -1
- data/lib/ludy/array/combos.rb +28 -19
- data/lib/ludy/array/count.rb +7 -0
- data/lib/ludy/array/head.rb +4 -0
- data/lib/ludy/array/pad.rb +13 -0
- data/lib/ludy/array/product.rb +14 -0
- data/lib/ludy/array/rotate.rb +3 -4
- data/lib/ludy/array/tail.rb +1 -0
- data/lib/ludy/hash.rb +3 -0
- data/lib/ludy/hash/reverse_merge.rb +11 -0
- data/lib/ludy/kernel/deep_copy.rb +6 -0
- data/lib/ludy/kernel/maybe.rb +6 -0
- data/lib/ludy/paginator.rb +1 -1
- data/lib/ludy/timer.rb +29 -0
- data/lib/puzzle_generator.rb +7 -5
- data/lib/puzzle_generator/chain.rb +5 -3
- data/lib/puzzle_generator/chained_map.rb +11 -11
- data/lib/puzzle_generator/map.rb +7 -7
- data/lib/puzzle_generator/misc.rb +7 -6
- data/lib/puzzle_generator/puzzle.rb +1 -4
- data/spec/ludy_spec.rb +8 -0
- data/spec/spec_helper.rb +17 -0
- data/tasks/doc.rake +1 -3
- data/tasks/gem.rake +2 -2
- data/tasks/manifest.rake +16 -2
- data/tasks/post_load.rake +18 -0
- data/tasks/setup.rb +47 -9
- data/tasks/spec.rake +3 -0
- data/test/example_puzzle.rb +7 -7
- data/test/helper.rb +3 -0
- data/test/{test_array.rb → ludy/test_array.rb} +12 -2
- data/test/{test_class.rb → ludy/test_class.rb} +1 -1
- data/test/{test_defun.rb → ludy/test_defun.rb} +1 -1
- data/test/{test_dices.rb → ludy/test_dices.rb} +1 -1
- data/test/ludy/test_hash.rb +13 -0
- data/test/{test_kernel.rb → ludy/test_kernel.rb} +1 -1
- data/test/{test_lazy.rb → ludy/test_lazy.rb} +1 -1
- data/test/{test_paginator.rb → ludy/test_paginator.rb} +2 -2
- data/test/{test_proc.rb → ludy/test_proc.rb} +2 -1
- data/test/{test_require_all.rb → ludy/test_require_all.rb} +1 -1
- data/test/{test_symbol.rb → ludy/test_symbol.rb} +1 -1
- data/test/{test_variable.rb → ludy/test_variable.rb} +1 -1
- data/test/{test_y_combinator.rb → ludy/test_y_combinator.rb} +1 -1
- data/test/{test_z_combinator.rb → ludy/test_z_combinator.rb} +1 -1
- data/test/multiruby.sh +2 -0
- metadata +54 -41
- data/lib/ludy/array/reverse_map.rb +0 -7
- data/lib/ludy/test/helper.rb +0 -3
data/CHANGES
CHANGED
@@ -1,5 +1,31 @@
|
|
1
1
|
= ludy changes history
|
2
2
|
|
3
|
+
== ludy 0.1.9, 2008.02.07
|
4
|
+
|
5
|
+
* fixed a bug in RailsPaginator, which ignored opts for count.
|
6
|
+
* fixed a possible bug in puzzle_generator... (not happened before?)
|
7
|
+
* fixed a stupid timeout message bug...
|
8
|
+
|
9
|
+
* added multiruby test (from ZenTest) with ruby 1.8.6-p111, 1.9.0-0, svn
|
10
|
+
* added Array#head, Array#choice!, Array#count
|
11
|
+
* added Array#product, which came from ruby 1.9 (implemented by combos in ruby 1.8)
|
12
|
+
* added Kernel#deep_copy, by Marshal idiom
|
13
|
+
* added Hash#reverse_merge
|
14
|
+
* added a simple and stupid timer........
|
15
|
+
|
16
|
+
* removed Array#reverse_map, use reverse.map instead
|
17
|
+
* renamed test_helper to helper
|
18
|
+
|
19
|
+
* puzzle_generator was never always dependent on facets now!
|
20
|
+
* ludy was never always dependent on rake now!
|
21
|
+
|
22
|
+
* change my nickname to binary string... for ruby-svn
|
23
|
+
* updated tasks from bones 1.3.2
|
24
|
+
* better Rakefile support, with version automatic extraction from README and
|
25
|
+
better way to display tasks for default task. (no sh 'rake --tasks' now)
|
26
|
+
* rake clean now clean out the *.rbc for rubinius
|
27
|
+
* Array#rotate is re-implemented.
|
28
|
+
|
3
29
|
== ludy 0.1.8, 2008.01.31
|
4
30
|
|
5
31
|
* change the way displaying debug message
|
data/Manifest.txt
CHANGED
@@ -10,13 +10,17 @@ lib/ludy.rb
|
|
10
10
|
lib/ludy/all.rb
|
11
11
|
lib/ludy/array.rb
|
12
12
|
lib/ludy/array/body.rb
|
13
|
+
lib/ludy/array/choice.rb
|
13
14
|
lib/ludy/array/combine.rb
|
14
15
|
lib/ludy/array/combos.rb
|
16
|
+
lib/ludy/array/count.rb
|
15
17
|
lib/ludy/array/filter.rb
|
16
18
|
lib/ludy/array/foldl.rb
|
17
19
|
lib/ludy/array/foldr.rb
|
20
|
+
lib/ludy/array/head.rb
|
18
21
|
lib/ludy/array/map_with_index.rb
|
19
|
-
lib/ludy/array/
|
22
|
+
lib/ludy/array/pad.rb
|
23
|
+
lib/ludy/array/product.rb
|
20
24
|
lib/ludy/array/rotate.rb
|
21
25
|
lib/ludy/array/tail.rb
|
22
26
|
lib/ludy/blackhole.rb
|
@@ -30,13 +34,17 @@ lib/ludy/deprecated/this.rb
|
|
30
34
|
lib/ludy/deprecated/untranspose.rb
|
31
35
|
lib/ludy/deprecated/unzip.rb
|
32
36
|
lib/ludy/dices.rb
|
37
|
+
lib/ludy/hash.rb
|
38
|
+
lib/ludy/hash/reverse_merge.rb
|
33
39
|
lib/ludy/helpers/check_box.rb
|
34
40
|
lib/ludy/kernel.rb
|
41
|
+
lib/ludy/kernel/deep_copy.rb
|
35
42
|
lib/ludy/kernel/defun.rb
|
36
43
|
lib/ludy/kernel/ergo.rb
|
37
44
|
lib/ludy/kernel/id.rb
|
38
45
|
lib/ludy/kernel/if_else.rb
|
39
46
|
lib/ludy/kernel/m.rb
|
47
|
+
lib/ludy/kernel/maybe.rb
|
40
48
|
lib/ludy/kernel/public_send.rb
|
41
49
|
lib/ludy/kernel/singleton_method.rb
|
42
50
|
lib/ludy/kernel/tap.rb
|
@@ -61,7 +69,7 @@ lib/ludy/tasks/preprocess_cpp/attr_builder.rb
|
|
61
69
|
lib/ludy/tasks/preprocess_cpp/debug_hook.rb
|
62
70
|
lib/ludy/tasks/preprocess_cpp/header_guard.rb
|
63
71
|
lib/ludy/tasks/preprocess_cpp/template_forward_parameters.rb
|
64
|
-
lib/ludy/
|
72
|
+
lib/ludy/timer.rb
|
65
73
|
lib/ludy/variable.rb
|
66
74
|
lib/ludy/y_combinator.rb
|
67
75
|
lib/ludy/z_combinator.rb
|
@@ -73,10 +81,12 @@ lib/puzzle_generator/map.rb
|
|
73
81
|
lib/puzzle_generator/misc.rb
|
74
82
|
lib/puzzle_generator/puzzle.rb
|
75
83
|
spec/ludy_spec.rb
|
84
|
+
spec/spec_helper.rb
|
76
85
|
tasks/annotations.rake
|
77
86
|
tasks/doc.rake
|
78
87
|
tasks/gem.rake
|
79
88
|
tasks/manifest.rake
|
89
|
+
tasks/post_load.rake
|
80
90
|
tasks/rubyforge.rake
|
81
91
|
tasks/setup.rb
|
82
92
|
tasks/spec.rake
|
@@ -89,16 +99,19 @@ test/deprecated/this.rb
|
|
89
99
|
test/deprecated/ts_ludy.rb
|
90
100
|
test/deprecated/unzip_and_untranspose.rb
|
91
101
|
test/example_puzzle.rb
|
92
|
-
test/
|
93
|
-
test/
|
94
|
-
test/
|
95
|
-
test/
|
96
|
-
test/
|
97
|
-
test/
|
98
|
-
test/
|
99
|
-
test/
|
100
|
-
test/
|
101
|
-
test/
|
102
|
-
test/
|
103
|
-
test/
|
104
|
-
test/
|
102
|
+
test/helper.rb
|
103
|
+
test/ludy/test_array.rb
|
104
|
+
test/ludy/test_class.rb
|
105
|
+
test/ludy/test_defun.rb
|
106
|
+
test/ludy/test_dices.rb
|
107
|
+
test/ludy/test_hash.rb
|
108
|
+
test/ludy/test_kernel.rb
|
109
|
+
test/ludy/test_lazy.rb
|
110
|
+
test/ludy/test_paginator.rb
|
111
|
+
test/ludy/test_proc.rb
|
112
|
+
test/ludy/test_require_all.rb
|
113
|
+
test/ludy/test_symbol.rb
|
114
|
+
test/ludy/test_variable.rb
|
115
|
+
test/ludy/test_y_combinator.rb
|
116
|
+
test/ludy/test_z_combinator.rb
|
117
|
+
test/multiruby.sh
|
data/NOTICE
CHANGED
@@ -4,10 +4,18 @@
|
|
4
4
|
gem install bones
|
5
5
|
http://codeforpeople.rubyforge.org/bones/
|
6
6
|
|
7
|
-
* for puzzle_generator, Ruby Facets is needed:
|
7
|
+
* for puzzle_generator, Ruby Facets is needed: (no longer needed now!)
|
8
8
|
gem install facets
|
9
9
|
http://facets.rubyforge.org/
|
10
10
|
|
11
11
|
* defun is re-implemented gem multi:
|
12
12
|
gem install multi
|
13
13
|
http://multi.rubyforge.org/
|
14
|
+
|
15
|
+
* preprocessing tools with erubis:
|
16
|
+
gem install erubis
|
17
|
+
http://www.kuwata-lab.com/erubis/
|
18
|
+
|
19
|
+
* multiruby test with ZenTest (test for ruby 1.8.6-p111, 1.9.0-0, svn trunk)
|
20
|
+
gem install ZenTest
|
21
|
+
http://www.zenspider.com/ZSS/Products/ZenTest/
|
data/README
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
= ludy 0.1.
|
1
|
+
= ludy 0.1.9
|
2
2
|
by Lin Jen-Shin (a.k.a. godfat 真常)
|
3
3
|
strip any number: 18god29fat7029 (at] godfat32 -dooot- 20org
|
4
4
|
http://ludy.rubyforge.org
|
5
|
+
http://rubyforge.org/projects/ludy
|
5
6
|
http://godfat.org
|
6
7
|
|
7
8
|
== DESCRIPTION:
|
@@ -170,7 +171,7 @@ template_forward_parameters:
|
|
170
171
|
<% } %>
|
171
172
|
|
172
173
|
# run preprocessing task
|
173
|
-
$ rake
|
174
|
+
$ rake preprocess
|
174
175
|
|
175
176
|
# one of the produce: (can't list all...)
|
176
177
|
template <class T0, class T1, class T2, class T3>
|
@@ -181,9 +182,11 @@ template_forward_parameters:
|
|
181
182
|
== REQUIREMENTS:
|
182
183
|
|
183
184
|
* ruby 1.8/1.9 (1.9 is prefered...)
|
184
|
-
* rake
|
185
|
-
*
|
185
|
+
* rake in some features
|
186
|
+
* erb in task preprocess:erb
|
186
187
|
* gem erubis if you are using preprocess:erubis
|
188
|
+
* gem facets is recommended if you are using puzzle_generator
|
189
|
+
* gem ZenTest if you are running multiruby.sh in test
|
187
190
|
|
188
191
|
== INSTALL:
|
189
192
|
|
data/Rakefile
CHANGED
@@ -8,26 +8,30 @@ ensure_in_path 'lib'
|
|
8
8
|
require 'ludy'
|
9
9
|
require 'ludy/tasks'
|
10
10
|
|
11
|
+
CLEAN.include Dir['**/*.rbc']
|
12
|
+
|
11
13
|
task :default do
|
12
|
-
|
14
|
+
Rake.application.options.show_task_pattern = /./
|
15
|
+
Rake.application.display_tasks_and_comments
|
13
16
|
end
|
14
17
|
|
15
18
|
PROJ.name = 'ludy'
|
16
|
-
PROJ.
|
17
|
-
PROJ.authors = 'Lin Jen-Shin (a.k.a. godfat 真常)'
|
19
|
+
PROJ.authors = "Lin Jen-Shin (a.k.a. godfat \347\234\237\345\270\270)"
|
18
20
|
PROJ.email = 'strip any number: 18god29fat7029 (at] godfat32 -dooot- 20org'
|
19
21
|
PROJ.url = 'http://ludy.rubyforge.org/'
|
20
|
-
PROJ.description = paragraphs_of('README',
|
22
|
+
PROJ.description = PROJ.summary = paragraphs_of('README', 'description').join("\n\n")
|
21
23
|
PROJ.changes = paragraphs_of('CHANGES', 0..1).join("\n\n")
|
22
24
|
PROJ.rubyforge_name = 'ludy'
|
23
25
|
|
24
|
-
PROJ.version = '0.1
|
25
|
-
PROJ.exclude << '.DS_Store' << '^tmp'
|
26
|
-
PROJ.dependencies << 'rake'
|
26
|
+
PROJ.version = paragraphs_of('README', 0).first.split("\n").first[7..-1]
|
27
|
+
PROJ.exclude << '.DS_Store' << '^tmp' << '\.rbc$'
|
28
|
+
# PROJ.dependencies << 'rake'
|
27
29
|
|
28
30
|
PROJ.rdoc_main = 'README'
|
29
31
|
PROJ.rdoc_exclude << 'deprecated' << 'Manifest' << 'Rakefile' << 'tmp$' << '^tmp'
|
30
32
|
PROJ.rdoc_include << '\w+'
|
33
|
+
PROJ.rdoc_opts << '--diagram' if !WIN32 and `which dot` =~ %r/\/dot/
|
34
|
+
PROJ.rdoc_opts << '--charset=utf-8' << '--inline-source' << '--line-numbers' << '--promiscuous'
|
31
35
|
|
32
36
|
PROJ.spec_opts << '--color'
|
33
37
|
|
data/lib/ludy.rb
CHANGED
@@ -6,13 +6,10 @@ unless defined? LudyHeaderGuard
|
|
6
6
|
module LudyHeaderGuard # :nodoc:
|
7
7
|
end
|
8
8
|
|
9
|
-
require 'rubygems'
|
10
|
-
require 'rake'
|
11
|
-
|
12
9
|
module Ludy
|
13
10
|
|
14
11
|
# :stopdoc:
|
15
|
-
VERSION = '0.1.
|
12
|
+
VERSION = '0.1.9'
|
16
13
|
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
17
14
|
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
18
15
|
$LOAD_PATH << LIBPATH
|
@@ -56,6 +53,8 @@ module Ludy
|
|
56
53
|
# require all files in the dir, only work for ludy.
|
57
54
|
# i.e., Ludy.require_all_in 'proc' => require 'ludy/proc/*.rb'
|
58
55
|
def self.require_all_in dir
|
56
|
+
require 'rubygems' if RUBY_VERSION < '1.9.0'
|
57
|
+
require 'rake'
|
59
58
|
Dir.glob("#{LIBPATH}ludy/#{dir}/*.rb").each{ |i|
|
60
59
|
require(if dir == '.'
|
61
60
|
i.pathmap('ludy/%n')
|
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
class Array
|
3
|
+
# it would be defined if RUBY_VERSION < '1.9.0', see rdoc in ruby 1.9
|
4
|
+
def choice
|
5
|
+
self[rand(size)]
|
6
|
+
end if RUBY_VERSION < '1.9.0'
|
7
|
+
# the choosen element would be deleted. return the choosen
|
8
|
+
def choice!
|
9
|
+
i = rand size
|
10
|
+
r = self[i]
|
11
|
+
self.delete_at i
|
12
|
+
r
|
13
|
+
end
|
14
|
+
end
|
data/lib/ludy/array/combine.rb
CHANGED
data/lib/ludy/array/combos.rb
CHANGED
@@ -1,23 +1,32 @@
|
|
1
1
|
|
2
|
-
require 'ludy/array/reverse_map'
|
3
|
-
require 'ludy/symbol/to_proc'
|
4
|
-
require 'ludy/array/foldr'
|
5
|
-
|
6
2
|
class Array
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
result
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
3
|
+
if RUBY_VERSION < '1.9.0'
|
4
|
+
require 'ludy/array/foldr'
|
5
|
+
require 'ludy/symbol/to_proc' if RUBY_VERSION < '1.9.0'
|
6
|
+
# for each combos
|
7
|
+
# [[0,1],[2,3]].combos
|
8
|
+
# => [[0,2],[0,3],[1,2],[1,3]]
|
9
|
+
def combos
|
10
|
+
result = []
|
11
|
+
radixs = reverse.map(&:size)
|
12
|
+
inject(1){|r, i| r * i.size}.times{ |step|
|
13
|
+
result << foldr(lambda{ |i, r|
|
14
|
+
radix = radixs[r.size]
|
15
|
+
r.unshift i[step % radix]
|
16
|
+
step /= radix unless radix.nil?
|
17
|
+
r
|
18
|
+
}, [])
|
19
|
+
}
|
20
|
+
result
|
21
|
+
end
|
22
|
+
else
|
23
|
+
require 'ludy/array/tail'
|
24
|
+
# for each combos
|
25
|
+
# [[0,1],[2,3]].combos
|
26
|
+
# => [[0,2],[0,3],[1,2],[1,3]]
|
27
|
+
# simply: array.first.product *array.tail
|
28
|
+
def combos
|
29
|
+
first.product(*tail)
|
30
|
+
end
|
22
31
|
end
|
23
32
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
class Array
|
3
|
+
# ensure the size is at least n, pad with n, default nil
|
4
|
+
def pad n, t = nil
|
5
|
+
return self if n <= size
|
6
|
+
self + [t]*(n-size)
|
7
|
+
end
|
8
|
+
# inplace version of pad
|
9
|
+
def pad! n, t = nil
|
10
|
+
return self if n <= size
|
11
|
+
concat([t]*(n-size))
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
if RUBY_VERSION < '1.9.0'
|
3
|
+
begin
|
4
|
+
require 'facets/enumerable/combos'
|
5
|
+
rescue LoadError
|
6
|
+
require 'ludy/array/combos'
|
7
|
+
end
|
8
|
+
class Array
|
9
|
+
# it would be defined if RUBY_VERSION < '1.9.0', see rdoc in ruby 1.9
|
10
|
+
def product *args
|
11
|
+
args.unshift(self).combos
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/ludy/array/rotate.rb
CHANGED
@@ -10,10 +10,9 @@ class Array
|
|
10
10
|
#
|
11
11
|
# [1,2,3].rotate 2
|
12
12
|
# => [2,3,1]
|
13
|
-
def rotate
|
14
|
-
|
15
|
-
|
16
|
-
head + tail
|
13
|
+
def rotate n = 1
|
14
|
+
return self if empty? or n == 0
|
15
|
+
self[-n..-1] + self[0...-n]
|
17
16
|
end
|
18
17
|
# in-place version of rotate
|
19
18
|
def rotate!
|
data/lib/ludy/array/tail.rb
CHANGED
data/lib/ludy/hash.rb
ADDED
data/lib/ludy/paginator.rb
CHANGED
@@ -101,7 +101,7 @@ module Ludy
|
|
101
101
|
super(lambda{ |offset, per_page|
|
102
102
|
@model_class.find :all, opts.merge(:offset => offset, :limit => per_page)
|
103
103
|
}, lambda{
|
104
|
-
@model_class.count
|
104
|
+
@model_class.count opts
|
105
105
|
})
|
106
106
|
end
|
107
107
|
# it simply call super(page.to_i), so RailsPaginator also eat string.
|
data/lib/ludy/timer.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
module Ludy
|
3
|
+
# whenever a Timer was timeout, it was thrown
|
4
|
+
class Timeout < Exception; end
|
5
|
+
# simple and stupid timer for puzzle_generator...
|
6
|
+
class Timer
|
7
|
+
def initialize timeout
|
8
|
+
@timeout = timeout
|
9
|
+
end
|
10
|
+
# start ticking
|
11
|
+
def start
|
12
|
+
@now = Time.now
|
13
|
+
@parent = Thread.current
|
14
|
+
@thread = Thread.new{
|
15
|
+
sleep @timeout
|
16
|
+
@parent.raise Timeout.new("timeout for #{@timeout} seconds.")
|
17
|
+
}
|
18
|
+
self
|
19
|
+
end
|
20
|
+
# total time until start ticking
|
21
|
+
def total_time
|
22
|
+
Time.now - @now
|
23
|
+
end
|
24
|
+
# stop ticking
|
25
|
+
def stop
|
26
|
+
@thread.kill
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|