ludy 0.1.8 → 0.1.9
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 +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
|