ludy 0.1.10 → 0.1.11
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +7 -0
- data/Manifest.txt +4 -0
- data/README +1 -1
- data/Rakefile +2 -2
- data/TODO +2 -0
- data/lib/ludy.rb +3 -2
- data/lib/ludy/array/choice.rb +3 -1
- data/lib/ludy/array/combine.rb +1 -1
- data/lib/ludy/array/combos.rb +4 -2
- data/lib/ludy/array/count.rb +3 -1
- data/lib/ludy/array/product.rb +3 -1
- data/lib/ludy/kernel/id.rb +3 -1
- data/lib/ludy/kernel/public_send.rb +3 -1
- data/lib/ludy/kernel/singleton_method.rb +3 -1
- data/lib/ludy/kernel/tap.rb +3 -1
- data/lib/ludy/message_dispatcher.rb +1 -3
- data/lib/ludy/namespace.rb +71 -0
- data/lib/ludy/paginator.rb +3 -2
- data/lib/ludy/proc/curry.rb +31 -28
- data/lib/ludy/symbol/to_proc.rb +3 -1
- data/lib/ludy/tasks/preprocess_cpp.rb +1 -1
- data/lib/ludy/tasks/preprocess_cpp/attr_builder.rb +2 -2
- data/lib/ludy/tasks/preprocess_cpp/debug_hook.rb +3 -2
- data/lib/ludy/tasks/preprocess_cpp/header_guard.rb +2 -2
- data/lib/ludy/tasks/preprocess_cpp/template_forward_parameters.rb +2 -2
- data/lib/ludy/variable.rb +1 -1
- data/lib/ludy/version.rb +9 -0
- data/lib/puzzle_generator/chained_map.rb +1 -1
- data/lib/puzzle_generator/map.rb +2 -2
- data/tasks/ann.rake +76 -0
- data/tasks/annotations.rake +6 -14
- data/tasks/bones.rake +40 -0
- data/tasks/doc.rake +1 -2
- data/tasks/gem.rake +29 -2
- data/tasks/manifest.rake +15 -21
- data/tasks/post_load.rake +22 -8
- data/tasks/setup.rb +52 -14
- data/tasks/spec.rake +13 -0
- data/tasks/test.rake +4 -6
- metadata +8 -2
data/CHANGES
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
= ludy changes history
|
2
2
|
|
3
|
+
== ludy 0.1.11, 2008-03-25
|
4
|
+
|
5
|
+
* fixed tasks function into private method of Kernel.
|
6
|
+
* fixed version comparison.
|
7
|
+
* fixed encoding using # -*- coding: utf-8 -*- instead of $KCODE
|
8
|
+
* updated tasks/preprocess_cpp/debug_hook from std::cerr to std::clog.
|
9
|
+
|
3
10
|
== ludy 0.1.10, 2008.02.07
|
4
11
|
|
5
12
|
* fixed an offset bug in paginator. if the offset was equal to the count,
|
data/Manifest.txt
CHANGED
@@ -51,6 +51,7 @@ lib/ludy/kernel/tap.rb
|
|
51
51
|
lib/ludy/lazy.rb
|
52
52
|
lib/ludy/list.rb
|
53
53
|
lib/ludy/message_dispatcher.rb
|
54
|
+
lib/ludy/namespace.rb
|
54
55
|
lib/ludy/paginator.rb
|
55
56
|
lib/ludy/pattern_matcher.rb
|
56
57
|
lib/ludy/proc.rb
|
@@ -71,6 +72,7 @@ lib/ludy/tasks/preprocess_cpp/header_guard.rb
|
|
71
72
|
lib/ludy/tasks/preprocess_cpp/template_forward_parameters.rb
|
72
73
|
lib/ludy/timer.rb
|
73
74
|
lib/ludy/variable.rb
|
75
|
+
lib/ludy/version.rb
|
74
76
|
lib/ludy/y_combinator.rb
|
75
77
|
lib/ludy/z_combinator.rb
|
76
78
|
lib/puzzle_generator.rb
|
@@ -82,7 +84,9 @@ lib/puzzle_generator/misc.rb
|
|
82
84
|
lib/puzzle_generator/puzzle.rb
|
83
85
|
spec/ludy_spec.rb
|
84
86
|
spec/spec_helper.rb
|
87
|
+
tasks/ann.rake
|
85
88
|
tasks/annotations.rake
|
89
|
+
tasks/bones.rake
|
86
90
|
tasks/doc.rake
|
87
91
|
tasks/gem.rake
|
88
92
|
tasks/manifest.rake
|
data/README
CHANGED
data/Rakefile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
# Look in the tasks/setup.rb file for the various options that can be
|
2
3
|
# configured in this Rakefile. The .rake files in the tasks directory
|
3
4
|
# are where the options are used.
|
4
|
-
|
5
5
|
load 'tasks/setup.rb'
|
6
6
|
|
7
7
|
ensure_in_path 'lib'
|
@@ -16,7 +16,7 @@ task :default do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
PROJ.name = 'ludy'
|
19
|
-
PROJ.authors =
|
19
|
+
PROJ.authors = 'Lin Jen-Shin (a.k.a. godfat 真常)'
|
20
20
|
PROJ.email = 'strip any number: 18god29fat7029 (at] godfat32 -dooot- 20org'
|
21
21
|
PROJ.url = 'http://ludy.rubyforge.org/'
|
22
22
|
PROJ.description = PROJ.summary = paragraphs_of('README', 'description').join("\n\n")
|
data/TODO
CHANGED
data/lib/ludy.rb
CHANGED
@@ -3,13 +3,14 @@
|
|
3
3
|
# Equivalent to a header guard in C/C++
|
4
4
|
# Used to prevent the class/module from being loaded more than once
|
5
5
|
unless defined? LudyHeaderGuard
|
6
|
+
|
6
7
|
module LudyHeaderGuard # :nodoc:
|
7
8
|
end
|
8
9
|
|
9
10
|
module Ludy
|
10
11
|
|
11
12
|
# :stopdoc:
|
12
|
-
VERSION = '0.1.
|
13
|
+
VERSION = '0.1.11'
|
13
14
|
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
14
15
|
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
15
16
|
$LOAD_PATH << LIBPATH
|
@@ -53,7 +54,7 @@ module Ludy
|
|
53
54
|
# require all files in the dir, only work for ludy.
|
54
55
|
# i.e., Ludy.require_all_in 'proc' => require 'ludy/proc/*.rb'
|
55
56
|
def self.require_all_in dir
|
56
|
-
require 'rubygems'
|
57
|
+
require 'rubygems'
|
57
58
|
require 'rake'
|
58
59
|
Dir.glob("#{LIBPATH}ludy/#{dir}/*.rb").each{ |i|
|
59
60
|
require(if dir == '.'
|
data/lib/ludy/array/choice.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
|
2
|
+
require 'ludy/version'
|
3
|
+
|
2
4
|
class Array
|
3
5
|
# it would be defined if RUBY_VERSION < '1.9.0', see rdoc in ruby 1.9
|
4
6
|
def choice
|
5
7
|
self[rand(size)]
|
6
|
-
end if
|
8
|
+
end if Ludy::ruby_before '1.9.0'
|
7
9
|
# the choosen element would be deleted. return the choosen
|
8
10
|
def choice!
|
9
11
|
i = rand size
|
data/lib/ludy/array/combine.rb
CHANGED
data/lib/ludy/array/combos.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
|
2
|
+
require 'ludy/version'
|
3
|
+
|
2
4
|
class Array
|
3
|
-
if
|
5
|
+
if Ludy::ruby_before '1.9.0'
|
4
6
|
require 'ludy/array/foldr'
|
5
|
-
require 'ludy/symbol/to_proc' if
|
7
|
+
require 'ludy/symbol/to_proc' if Ludy::ruby_before '1.9.0'
|
6
8
|
# for each combos
|
7
9
|
# [[0,1],[2,3]].combos
|
8
10
|
# => [[0,2],[0,3],[1,2],[1,3]]
|
data/lib/ludy/array/count.rb
CHANGED
data/lib/ludy/array/product.rb
CHANGED
data/lib/ludy/kernel/id.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
|
2
|
+
require 'ludy/version'
|
3
|
+
|
2
4
|
module Kernel
|
3
|
-
if
|
5
|
+
if Ludy::ruby_before '1.9.0'
|
4
6
|
# it would be defined if RUBY_VERSION < '1.9.0', see rdoc in ruby 1.9
|
5
7
|
def define_singleton_method msg, &block
|
6
8
|
self.class.__send__ :define_method, msg, &block
|
data/lib/ludy/kernel/tap.rb
CHANGED
@@ -0,0 +1,71 @@
|
|
1
|
+
|
2
|
+
# module Ludy
|
3
|
+
# def use_module mod
|
4
|
+
# user = self.class
|
5
|
+
# mod.constants.each{ |const|
|
6
|
+
# target = mod.const_get const
|
7
|
+
# if user.const_defined? const
|
8
|
+
# origin = user.const_get const
|
9
|
+
# if origin.kind_of? Class and target.kind_of? Class
|
10
|
+
# # TODO: don't just override it!
|
11
|
+
# target.instance_methods.sort.each{ |method|
|
12
|
+
# origin.class.module_eval do
|
13
|
+
# # define_method method, target.instance_method(method)
|
14
|
+
# end
|
15
|
+
# }
|
16
|
+
# else
|
17
|
+
# # TODO: don't just override it!
|
18
|
+
# user.__send__ :remove_const, const
|
19
|
+
# user.const_set const, target
|
20
|
+
# end
|
21
|
+
# else
|
22
|
+
# user.const_set const, target
|
23
|
+
# end
|
24
|
+
# }
|
25
|
+
# end
|
26
|
+
# def unuse_module mod
|
27
|
+
# mod.constants.each{ |const|
|
28
|
+
# self.class.__send__ :remove_const, const
|
29
|
+
# }
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# module Std
|
34
|
+
# N = 29
|
35
|
+
# class Array
|
36
|
+
# def orz
|
37
|
+
# puts 'orz'
|
38
|
+
# end
|
39
|
+
# end
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# # module M
|
43
|
+
# # Ludy::using_module Std
|
44
|
+
# # end
|
45
|
+
#
|
46
|
+
# require 'test/unit'
|
47
|
+
# class ContantsTest < Test::Unit::TestCase
|
48
|
+
# include Ludy
|
49
|
+
# def test_a_global
|
50
|
+
# assert_raise NameError do
|
51
|
+
# N
|
52
|
+
# end
|
53
|
+
# end
|
54
|
+
# def test_b_std
|
55
|
+
# assert_equal 29, Std::N
|
56
|
+
# end
|
57
|
+
# def test_c_using_std
|
58
|
+
# use_module Std
|
59
|
+
# assert_equal 29, N
|
60
|
+
# assert [].respond_to?(:orz)
|
61
|
+
# end
|
62
|
+
# def test_d_using_nil
|
63
|
+
# unuse_module Std
|
64
|
+
# assert 29, Std::N
|
65
|
+
# end
|
66
|
+
# def test_e_global
|
67
|
+
# assert_raise NameError do
|
68
|
+
# N
|
69
|
+
# end
|
70
|
+
# end
|
71
|
+
# end
|
data/lib/ludy/paginator.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
|
2
|
-
require 'ludy/
|
2
|
+
require 'ludy/version'
|
3
|
+
require 'ludy/kernel/public_send'
|
3
4
|
|
4
5
|
module Ludy
|
5
6
|
# which was produced by Paginator#page / Paginator#[],
|
@@ -9,7 +10,7 @@ module Ludy
|
|
9
10
|
# was fetched, it won't fetch again. it you need refetch,
|
10
11
|
# call Page#fetch
|
11
12
|
class Page
|
12
|
-
undef_method :to_a if
|
13
|
+
undef_method :to_a if Ludy::ruby_before '1.9.0'
|
13
14
|
# pager to get the original pager; page to get the number of this page
|
14
15
|
attr_reader :pager, :page
|
15
16
|
# don't create a page instance yourself unless you have to
|
data/lib/ludy/proc/curry.rb
CHANGED
@@ -1,39 +1,42 @@
|
|
1
1
|
|
2
|
-
require 'ludy/
|
2
|
+
require 'ludy/version'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
if Ludy::ruby_before '1.9.0'
|
5
|
+
require 'ludy/kernel/public_send'
|
6
|
+
class Proc
|
7
|
+
def __curry__ *pre # :nodoc:
|
8
|
+
lambda{ |*post| self[*(pre + post)] }
|
9
|
+
end
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
11
|
+
# make the caller be a curried function
|
12
|
+
# lambda{|a,b,c| [a,b,c]}.curry[1][2][3]
|
13
|
+
# => [1,2,3]
|
14
|
+
def curry
|
15
|
+
class << self
|
16
|
+
alias_method :__call__, :call
|
17
|
+
def call *args, &block # :nodoc:
|
18
|
+
if self.arity == -1
|
19
|
+
begin # let's try if arguments are ready
|
20
|
+
# is there any better way to determine this?
|
21
|
+
# it's hard to detect correct arity value when
|
22
|
+
# Symbol#to_proc happened
|
23
|
+
# e.g., :message_that_you_never_know.to_proc.arity => ?
|
24
|
+
# i'd tried put hacks in Symbol#to_proc, but it's
|
25
|
+
# difficult to implement in correct way
|
26
|
+
# i would try it again in other day
|
27
|
+
self.public_send :__call__, *args, &block
|
28
|
+
rescue ArgumentError # oops, let's curry it
|
29
|
+
method(:call).to_proc.public_send :__curry__, *args
|
30
|
+
end
|
31
|
+
elsif args.size == self.arity
|
25
32
|
self.public_send :__call__, *args, &block
|
26
|
-
|
33
|
+
else
|
27
34
|
method(:call).to_proc.public_send :__curry__, *args
|
28
35
|
end
|
29
|
-
elsif args.size == self.arity
|
30
|
-
self.public_send :__call__, *args, &block
|
31
|
-
else
|
32
|
-
method(:call).to_proc.public_send :__curry__, *args
|
33
36
|
end
|
37
|
+
alias_method :[], :call
|
34
38
|
end
|
35
|
-
|
39
|
+
self
|
36
40
|
end
|
37
|
-
self
|
38
41
|
end
|
39
42
|
end
|
data/lib/ludy/symbol/to_proc.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
module Kernel
|
3
|
-
|
3
|
+
private
|
4
4
|
# just like attr_accessor for c++
|
5
5
|
def accessor type, *pros
|
6
6
|
(reader_only type, *pros) +
|
@@ -46,4 +46,4 @@ def member_only type, *pros
|
|
46
46
|
result << "#{@prefix}#{@indent}#{type} #{pros.map{|p|"#{p}_"}.join(", ")};\n"
|
47
47
|
end
|
48
48
|
|
49
|
-
end # of
|
49
|
+
end # of Kernel
|
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'ludy/tasks/common'
|
3
3
|
|
4
4
|
module Kernel
|
5
|
+
private
|
5
6
|
# it simply output:
|
6
7
|
# #ifndef NDEBUG
|
7
8
|
# #include <iostream>
|
@@ -28,8 +29,8 @@ module Kernel
|
|
28
29
|
block.call
|
29
30
|
Ludy::erbout "
|
30
31
|
#ifndef NDEBUG
|
31
|
-
std::
|
32
|
+
std::clog << \"method #{name} called, for \" << this << \" at #{@file}: #{eval '__LINE__', block.binding}\\n\";
|
32
33
|
#endif
|
33
34
|
", block.binding
|
34
35
|
end
|
35
|
-
end
|
36
|
+
end # of Kernel
|
@@ -2,7 +2,7 @@
|
|
2
2
|
require 'ludy/tasks/common'
|
3
3
|
|
4
4
|
module Kernel
|
5
|
-
|
5
|
+
private
|
6
6
|
# C/C++ header guard generator, you shold provide the final #endif yourself,
|
7
7
|
# and you should provide PROJ name for header guard prefix
|
8
8
|
def header_guard random_suffix = nil, &block
|
@@ -14,4 +14,4 @@ def header_guard random_suffix = nil, &block
|
|
14
14
|
Ludy::erbout '#endif', block.binding
|
15
15
|
end
|
16
16
|
|
17
|
-
end # of
|
17
|
+
end # of Kernel
|
@@ -4,7 +4,7 @@ require 'ludy/array/map_with_index'
|
|
4
4
|
require 'ludy/array/tail'
|
5
5
|
|
6
6
|
module Kernel
|
7
|
-
|
7
|
+
private
|
8
8
|
# forward template functions' generator
|
9
9
|
def for_template_parameters_within range, modifiers = ['volatile', 'const volatile']
|
10
10
|
modifiers = ['', 'const'] + modifiers
|
@@ -42,4 +42,4 @@ def arguments args_list
|
|
42
42
|
}.join(', ')
|
43
43
|
end
|
44
44
|
|
45
|
-
end # of
|
45
|
+
end # of Kernel
|
data/lib/ludy/variable.rb
CHANGED
data/lib/ludy/version.rb
ADDED
data/lib/puzzle_generator/map.rb
CHANGED
@@ -3,8 +3,8 @@ require 'puzzle_generator/misc'
|
|
3
3
|
require 'puzzle_generator/chain'
|
4
4
|
|
5
5
|
require 'ludy/kernel/maybe'
|
6
|
-
require 'ludy/array/count'
|
7
|
-
require 'ludy/array/product'
|
6
|
+
require 'ludy/array/count'
|
7
|
+
require 'ludy/array/product'
|
8
8
|
|
9
9
|
module PuzzleGenerator
|
10
10
|
|
data/tasks/ann.rake
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'bones/smtp_tls'
|
5
|
+
rescue LoadError
|
6
|
+
require 'net/smtp'
|
7
|
+
end
|
8
|
+
require 'time'
|
9
|
+
|
10
|
+
namespace :ann do
|
11
|
+
|
12
|
+
file PROJ.ann_file do
|
13
|
+
puts "Generating #{PROJ.ann_file}"
|
14
|
+
File.open(PROJ.ann_file,'w') do |fd|
|
15
|
+
fd.puts("#{PROJ.name} version #{PROJ.version}")
|
16
|
+
fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
|
17
|
+
fd.puts(" #{PROJ.url}") if PROJ.url
|
18
|
+
fd.puts(" (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
|
19
|
+
fd.puts
|
20
|
+
fd.puts("== DESCRIPTION")
|
21
|
+
fd.puts
|
22
|
+
fd.puts(PROJ.description)
|
23
|
+
fd.puts
|
24
|
+
fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
|
25
|
+
fd.puts
|
26
|
+
PROJ.ann_paragraphs.each do |p|
|
27
|
+
fd.puts "== #{p.upcase}"
|
28
|
+
fd.puts
|
29
|
+
fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
|
30
|
+
fd.puts
|
31
|
+
end
|
32
|
+
fd.puts PROJ.ann_text if PROJ.ann_text
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
desc "Create an announcement file"
|
37
|
+
task :announcement => PROJ.ann_file
|
38
|
+
|
39
|
+
desc "Send an email announcement"
|
40
|
+
task :email => PROJ.ann_file do
|
41
|
+
from = PROJ.ann_email[:from] || PROJ.email
|
42
|
+
to = Array(PROJ.ann_email[:to])
|
43
|
+
|
44
|
+
### build a mail header for RFC 822
|
45
|
+
rfc822msg = "From: #{from}\n"
|
46
|
+
rfc822msg << "To: #{to.join(',')}\n"
|
47
|
+
rfc822msg << "Subject: [ANN] #{PROJ.name} #{PROJ.version}"
|
48
|
+
rfc822msg << " (#{PROJ.release_name})" if PROJ.release_name
|
49
|
+
rfc822msg << "\n"
|
50
|
+
rfc822msg << "Date: #{Time.new.rfc822}\n"
|
51
|
+
rfc822msg << "Message-Id: "
|
52
|
+
rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{PROJ.ann_email[:domain]}>\n\n"
|
53
|
+
rfc822msg << File.read(PROJ.ann_file)
|
54
|
+
|
55
|
+
params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
|
56
|
+
PROJ.ann_email[key]
|
57
|
+
end
|
58
|
+
|
59
|
+
params[3] = PROJ.email if params[3].nil?
|
60
|
+
|
61
|
+
if params[4].nil?
|
62
|
+
STDOUT.write "Please enter your e-mail password (#{params[3]}): "
|
63
|
+
params[4] = STDIN.gets.chomp
|
64
|
+
end
|
65
|
+
|
66
|
+
### send email
|
67
|
+
Net::SMTP.start(*params) {|smtp| smtp.sendmail(rfc822msg, from, to)}
|
68
|
+
end
|
69
|
+
end # namespace :ann
|
70
|
+
|
71
|
+
desc 'Alias to ann:announcement'
|
72
|
+
task :ann => 'ann:announcement'
|
73
|
+
|
74
|
+
CLOBBER << PROJ.ann_file
|
75
|
+
|
76
|
+
# EOF
|
data/tasks/annotations.rake
CHANGED
@@ -5,23 +5,15 @@ if HAVE_BONES
|
|
5
5
|
desc "Enumerate all annotations"
|
6
6
|
task :notes do
|
7
7
|
Bones::AnnotationExtractor.enumerate(
|
8
|
-
PROJ,
|
8
|
+
PROJ, PROJ.annotation_tags.join('|'), :tag => true)
|
9
9
|
end
|
10
10
|
|
11
11
|
namespace :notes do
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
desc "Enumerate all FIXME annotations"
|
18
|
-
task :fixme do
|
19
|
-
Bones::AnnotationExtractor.enumerate(PROJ, "FIXME")
|
20
|
-
end
|
21
|
-
|
22
|
-
desc "Enumerate all TODO annotations"
|
23
|
-
task :todo do
|
24
|
-
Bones::AnnotationExtractor.enumerate(PROJ, "TODO")
|
12
|
+
PROJ.annotation_tags.each do |tag|
|
13
|
+
desc "Enumerate all #{tag} annotations"
|
14
|
+
task tag.downcase.to_sym do
|
15
|
+
Bones::AnnotationExtractor.enumerate(PROJ, tag)
|
16
|
+
end
|
25
17
|
end
|
26
18
|
end
|
27
19
|
|
data/tasks/bones.rake
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
require 'pp'
|
4
|
+
require 'stringio'
|
5
|
+
|
6
|
+
namespace :bones do
|
7
|
+
|
8
|
+
desc 'Show the PROJ open struct'
|
9
|
+
task :debug do |t|
|
10
|
+
atr = if ARGV.length == 2
|
11
|
+
t.application.top_level_tasks.pop
|
12
|
+
end
|
13
|
+
sio = StringIO.new
|
14
|
+
sep = "\n" + ' '*27
|
15
|
+
fmt = "%23s => %s"
|
16
|
+
|
17
|
+
if atr
|
18
|
+
PP.pp(PROJ.send(atr.to_sym), sio, 49)
|
19
|
+
sio.seek 0
|
20
|
+
val = sio.read
|
21
|
+
val = val.split("\n").join(sep)
|
22
|
+
|
23
|
+
puts fmt % [atr, val]
|
24
|
+
else
|
25
|
+
h = PROJ.instance_variable_get(:@table)
|
26
|
+
h.keys.map {|k| k.to_s}.sort.each do |k|
|
27
|
+
sio.truncate 0
|
28
|
+
PP.pp(h[k.to_sym], sio, 49)
|
29
|
+
sio.seek 0
|
30
|
+
val = sio.read
|
31
|
+
val = val.split("\n").join(sep)
|
32
|
+
|
33
|
+
puts fmt % [k, val]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end # namespace :bones
|
39
|
+
|
40
|
+
# EOF
|
data/tasks/doc.rake
CHANGED
@@ -31,7 +31,6 @@ namespace :doc do
|
|
31
31
|
sh "#{RDOC} --ri -o ri ."
|
32
32
|
end
|
33
33
|
|
34
|
-
desc 'Remove ri products'
|
35
34
|
task :clobber_ri do
|
36
35
|
rm_r 'ri' rescue nil
|
37
36
|
end
|
@@ -44,6 +43,6 @@ task :doc => 'doc:rdoc'
|
|
44
43
|
desc 'Remove all build products'
|
45
44
|
task :clobber => %w(doc:clobber_rdoc doc:clobber_ri)
|
46
45
|
|
47
|
-
remove_desc_for_task %w(doc:clobber_rdoc
|
46
|
+
remove_desc_for_task %w(doc:clobber_rdoc)
|
48
47
|
|
49
48
|
# EOF
|
data/tasks/gem.rake
CHANGED
@@ -12,6 +12,7 @@ namespace :gem do
|
|
12
12
|
s.email = PROJ.email
|
13
13
|
s.homepage = Array(PROJ.url).first
|
14
14
|
s.rubyforge_project = PROJ.rubyforge_name
|
15
|
+
s.post_install_message = PROJ.post_install_message
|
15
16
|
|
16
17
|
s.description = PROJ.description
|
17
18
|
|
@@ -62,9 +63,29 @@ namespace :gem do
|
|
62
63
|
puts PROJ.spec.to_ruby
|
63
64
|
end
|
64
65
|
|
65
|
-
Rake::
|
66
|
+
pkg = Rake::PackageTask.new(PROJ.name, PROJ.version) do |pkg|
|
66
67
|
pkg.need_tar = PROJ.need_tar
|
67
68
|
pkg.need_zip = PROJ.need_zip
|
69
|
+
pkg.package_files += PROJ.spec.files
|
70
|
+
end
|
71
|
+
Rake::Task['gem:package'].instance_variable_set(:@full_comment, nil)
|
72
|
+
|
73
|
+
gem_file = if PROJ.spec.platform == Gem::Platform::RUBY
|
74
|
+
"#{pkg.package_name}.gem"
|
75
|
+
else
|
76
|
+
"#{pkg.package_name}-#{PROJ.spec.platform}.gem"
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "Build the gem file #{gem_file}"
|
80
|
+
task :package => "#{pkg.package_dir}/#{gem_file}"
|
81
|
+
|
82
|
+
file "#{pkg.package_dir}/#{gem_file}" => [pkg.package_dir] + PROJ.spec.files do
|
83
|
+
when_writing("Creating GEM") {
|
84
|
+
Gem::Builder.new(PROJ.spec).build
|
85
|
+
verbose(true) {
|
86
|
+
mv gem_file, "#{pkg.package_dir}/#{gem_file}"
|
87
|
+
}
|
88
|
+
}
|
68
89
|
end
|
69
90
|
|
70
91
|
desc 'Install the gem'
|
@@ -74,9 +95,15 @@ namespace :gem do
|
|
74
95
|
|
75
96
|
desc 'Uninstall the gem'
|
76
97
|
task :uninstall do
|
77
|
-
|
98
|
+
installed_list = Gem.source_index.find_name(PROJ.name)
|
99
|
+
if installed_list and installed_list.collect { |s| s.version.to_s}.include?(PROJ.version) then
|
100
|
+
sh "#{SUDO} #{GEM} uninstall -v '#{PROJ.version}' -i -x #{PROJ.name}"
|
101
|
+
end
|
78
102
|
end
|
79
103
|
|
104
|
+
desc 'Reinstall the gem'
|
105
|
+
task :reinstall => [:uninstall, :install]
|
106
|
+
|
80
107
|
end # namespace :gem
|
81
108
|
|
82
109
|
desc 'Alias to gem:package'
|
data/tasks/manifest.rake
CHANGED
@@ -6,18 +6,11 @@ namespace :manifest do
|
|
6
6
|
|
7
7
|
desc 'Verify the manifest'
|
8
8
|
task :check do
|
9
|
-
fn = '
|
10
|
-
files =
|
11
|
-
exclude = Regexp.new(PROJ.exclude.join('|'))
|
12
|
-
Find.find '.' do |path|
|
13
|
-
path.sub! %r/^(\.\/|\/)/o, ''
|
14
|
-
next unless test ?f, path
|
15
|
-
next if path =~ exclude
|
16
|
-
files << path
|
17
|
-
end
|
9
|
+
fn = PROJ.manifest_file + '.tmp'
|
10
|
+
files = manifest_files
|
18
11
|
|
19
|
-
File.open(fn, 'w') {|fp| fp.puts files
|
20
|
-
lines = %x(#{DIFF} -du
|
12
|
+
File.open(fn, 'w') {|fp| fp.puts files}
|
13
|
+
lines = %x(#{DIFF} -du #{PROJ.manifest_file} #{fn}).split("\n")
|
21
14
|
if HAVE_FACETS_ANSICODE and ENV.has_key?('TERM')
|
22
15
|
lines.map! do |line|
|
23
16
|
case line
|
@@ -34,19 +27,20 @@ namespace :manifest do
|
|
34
27
|
|
35
28
|
desc 'Create a new manifest'
|
36
29
|
task :create do
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
path.sub! %r/^(\.\/|\/)/o, ''
|
42
|
-
next unless test ?f, path
|
43
|
-
next if path =~ exclude
|
44
|
-
files << path
|
30
|
+
files = manifest_files
|
31
|
+
unless test(?f, PROJ.manifest_file)
|
32
|
+
files << PROJ.manifest_file
|
33
|
+
files.sort!
|
45
34
|
end
|
35
|
+
File.open(PROJ.manifest_file, 'w') {|fp| fp.puts files}
|
36
|
+
end
|
46
37
|
|
47
|
-
|
48
|
-
|
38
|
+
task :assert do
|
39
|
+
files = manifest_files
|
40
|
+
manifest = File.read(PROJ.manifest_file).split($/)
|
41
|
+
raise "ERROR: #{PROJ.manifest_file} is out of date" unless files == manifest
|
49
42
|
end
|
43
|
+
|
50
44
|
end # namespace :manifest
|
51
45
|
|
52
46
|
desc 'Alias to manifest:check'
|
data/tasks/post_load.rake
CHANGED
@@ -3,16 +3,30 @@
|
|
3
3
|
# This file does not define any rake tasks. It is used to load some project
|
4
4
|
# settings if they are not defined by the user.
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
end
|
6
|
+
PROJ.rdoc_exclude << "^#{Regexp.escape(PROJ.manifest_file)}$"
|
7
|
+
PROJ.exclude << "^#{Regexp.escape(PROJ.ann_file)}$"
|
9
8
|
|
10
|
-
|
11
|
-
|
9
|
+
PROJ.instance_variable_get(:@table).each do |key,val|
|
10
|
+
next unless val.instance_of? Array
|
11
|
+
next if key == :dependencies
|
12
|
+
val.flatten!
|
12
13
|
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
PROJ.changes ||= paragraphs_of(PROJ.history_file, 0..1).join("\n\n")
|
16
|
+
|
17
|
+
PROJ.description ||= paragraphs_of(PROJ.readme_file, 'description').join("\n\n")
|
18
|
+
|
19
|
+
PROJ.summary ||= PROJ.description.split('.').first
|
20
|
+
|
21
|
+
PROJ.files ||=
|
22
|
+
if test(?f, PROJ.manifest_file)
|
23
|
+
files = File.readlines(PROJ.manifest_file).map {|fn| fn.chomp.strip}
|
24
|
+
files.delete ''
|
25
|
+
files
|
26
|
+
else [] end
|
27
|
+
|
28
|
+
PROJ.executables ||= PROJ.files.find_all {|fn| fn =~ %r/^bin/}
|
29
|
+
|
30
|
+
PROJ.rdoc_main ||= PROJ.readme_file
|
17
31
|
|
18
32
|
# EOF
|
data/tasks/setup.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'rake'
|
5
|
+
require 'rake/clean'
|
5
6
|
require 'fileutils'
|
6
7
|
require 'ostruct'
|
7
8
|
|
@@ -17,6 +18,10 @@ PROJ.url = nil
|
|
17
18
|
PROJ.version = ENV['VERSION'] || '0.0.0'
|
18
19
|
PROJ.rubyforge_name = nil
|
19
20
|
PROJ.exclude = %w(tmp$ bak$ ~$ CVS .svn/ ^pkg/ ^doc/)
|
21
|
+
PROJ.release_name = ENV['RELEASE']
|
22
|
+
PROJ.history_file = 'History.txt'
|
23
|
+
PROJ.manifest_file = 'Manifest.txt'
|
24
|
+
PROJ.readme_file = 'README.txt'
|
20
25
|
|
21
26
|
# Rspec
|
22
27
|
PROJ.specs = FileList['spec/**/*_spec.rb']
|
@@ -28,13 +33,16 @@ PROJ.test_file = 'test/all.rb'
|
|
28
33
|
PROJ.test_opts = []
|
29
34
|
|
30
35
|
# Rcov
|
31
|
-
PROJ.
|
36
|
+
PROJ.rcov_dir = 'coverage'
|
37
|
+
PROJ.rcov_opts = %w[--sort coverage -T]
|
38
|
+
PROJ.rcov_threshold = 90.0
|
39
|
+
PROJ.rcov_threshold_exact = false
|
32
40
|
|
33
41
|
# Rdoc
|
34
42
|
PROJ.rdoc_opts = []
|
35
43
|
PROJ.rdoc_include = %w(^lib/ ^bin/ ^ext/ .txt$)
|
36
|
-
PROJ.rdoc_exclude = %w(extconf.rb$
|
37
|
-
PROJ.rdoc_main =
|
44
|
+
PROJ.rdoc_exclude = %w(extconf.rb$)
|
45
|
+
PROJ.rdoc_main = nil
|
38
46
|
PROJ.rdoc_dir = 'doc'
|
39
47
|
PROJ.rdoc_remote_dir = nil
|
40
48
|
|
@@ -45,20 +53,17 @@ PROJ.libs = []
|
|
45
53
|
%w(lib ext).each {|dir| PROJ.libs << dir if test ?d, dir}
|
46
54
|
|
47
55
|
# Gem Packaging
|
48
|
-
PROJ.files =
|
49
|
-
|
50
|
-
files = File.readlines('Manifest.txt').map {|fn| fn.chomp.strip}
|
51
|
-
files.delete ''
|
52
|
-
files
|
53
|
-
else [] end
|
54
|
-
PROJ.executables = PROJ.files.find_all {|fn| fn =~ %r/^bin/}
|
56
|
+
PROJ.files = nil
|
57
|
+
PROJ.executables = nil
|
55
58
|
PROJ.dependencies = []
|
56
59
|
PROJ.need_tar = true
|
57
60
|
PROJ.need_zip = false
|
61
|
+
PROJ.post_install_message = nil
|
58
62
|
|
59
63
|
# File Annotations
|
60
|
-
PROJ.annotation_exclude =
|
64
|
+
PROJ.annotation_exclude = %w(^tasks/setup.rb$)
|
61
65
|
PROJ.annotation_extensions = %w(.txt .rb .erb) << ''
|
66
|
+
PROJ.annotation_tags = %w(FIXME OPTIMIZE TODO)
|
62
67
|
|
63
68
|
# Subversion Repository
|
64
69
|
PROJ.svn = false
|
@@ -67,6 +72,21 @@ PROJ.svn_trunk = 'trunk'
|
|
67
72
|
PROJ.svn_tags = 'tags'
|
68
73
|
PROJ.svn_branches = 'branches'
|
69
74
|
|
75
|
+
# Announce
|
76
|
+
PROJ.ann_file = 'announcement.txt'
|
77
|
+
PROJ.ann_text = nil
|
78
|
+
PROJ.ann_paragraphs = []
|
79
|
+
PROJ.ann_email = {
|
80
|
+
:from => nil,
|
81
|
+
:to => %w(ruby-talk@ruby-lang.org),
|
82
|
+
:server => 'localhost',
|
83
|
+
:port => 25,
|
84
|
+
:domain => ENV['HOSTNAME'],
|
85
|
+
:acct => nil,
|
86
|
+
:passwd => nil,
|
87
|
+
:authtype => :plain
|
88
|
+
}
|
89
|
+
|
70
90
|
# Load the other rake files in the tasks folder
|
71
91
|
rakefiles = Dir.glob('tasks/*.rake').sort
|
72
92
|
rakefiles.unshift(rakefiles.delete('tasks/post_load.rake')).compact!
|
@@ -99,8 +119,8 @@ SUDO = if WIN32 then ''
|
|
99
119
|
else '' end
|
100
120
|
end
|
101
121
|
|
102
|
-
RCOV = WIN32 ? 'rcov.
|
103
|
-
GEM = WIN32 ? 'gem.
|
122
|
+
RCOV = WIN32 ? 'rcov.bat' : 'rcov'
|
123
|
+
GEM = WIN32 ? 'gem.bat' : 'gem'
|
104
124
|
|
105
125
|
%w(rcov spec/rake/spectask rubyforge bones facets/ansicode).each do |lib|
|
106
126
|
begin
|
@@ -149,7 +169,10 @@ def depend_on( name, version = nil )
|
|
149
169
|
spec = Gem.source_index.find_name(name).last
|
150
170
|
version = spec.version.to_s if version.nil? and !spec.nil?
|
151
171
|
|
152
|
-
PROJ.dependencies <<
|
172
|
+
PROJ.dependencies << case version
|
173
|
+
when nil; [name]
|
174
|
+
when %r/^\d/; [name, ">= #{version}"]
|
175
|
+
else [name, version] end
|
153
176
|
end
|
154
177
|
|
155
178
|
# Adds the given arguments to the include path if they are not already there
|
@@ -186,4 +209,19 @@ def in_directory( dir, &block )
|
|
186
209
|
end
|
187
210
|
end
|
188
211
|
|
212
|
+
# Scans the current working directory and creates a list of files that are
|
213
|
+
# candidates to be in the manifest.
|
214
|
+
#
|
215
|
+
def manifest_files
|
216
|
+
files = []
|
217
|
+
exclude = Regexp.new(PROJ.exclude.join('|'))
|
218
|
+
Find.find '.' do |path|
|
219
|
+
path.sub! %r/^(\.\/|\/)/o, ''
|
220
|
+
next unless test ?f, path
|
221
|
+
next if path =~ exclude
|
222
|
+
files << path
|
223
|
+
end
|
224
|
+
files.sort!
|
225
|
+
end
|
226
|
+
|
189
227
|
# EOF
|
data/tasks/spec.rake
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
# $Id$
|
2
2
|
|
3
3
|
if HAVE_SPEC_RAKE_SPECTASK
|
4
|
+
require 'spec/rake/verify_rcov'
|
4
5
|
|
5
6
|
namespace :spec do
|
6
7
|
|
7
8
|
desc 'Run all specs with basic output'
|
8
9
|
Spec::Rake::SpecTask.new(:run) do |t|
|
10
|
+
t.ruby_opts = PROJ.ruby_opts
|
9
11
|
t.spec_opts = PROJ.spec_opts
|
10
12
|
t.spec_files = PROJ.specs
|
11
13
|
t.libs += PROJ.libs
|
@@ -13,6 +15,7 @@ namespace :spec do
|
|
13
15
|
|
14
16
|
desc 'Run all specs with text output'
|
15
17
|
Spec::Rake::SpecTask.new(:specdoc) do |t|
|
18
|
+
t.ruby_opts = PROJ.ruby_opts
|
16
19
|
t.spec_opts = PROJ.spec_opts + ['--format', 'specdoc']
|
17
20
|
t.spec_files = PROJ.specs
|
18
21
|
t.libs += PROJ.libs
|
@@ -21,12 +24,22 @@ namespace :spec do
|
|
21
24
|
if HAVE_RCOV
|
22
25
|
desc 'Run all specs with RCov'
|
23
26
|
Spec::Rake::SpecTask.new(:rcov) do |t|
|
27
|
+
t.ruby_opts = PROJ.ruby_opts
|
24
28
|
t.spec_opts = PROJ.spec_opts
|
25
29
|
t.spec_files = PROJ.specs
|
26
30
|
t.libs += PROJ.libs
|
27
31
|
t.rcov = true
|
32
|
+
t.rcov_dir = PROJ.rcov_dir
|
28
33
|
t.rcov_opts = PROJ.rcov_opts + ['--exclude', 'spec']
|
29
34
|
end
|
35
|
+
|
36
|
+
RCov::VerifyTask.new(:verify) do |t|
|
37
|
+
t.threshold = PROJ.rcov_threshold
|
38
|
+
t.index_html = File.join(PROJ.rcov_dir, 'index.html')
|
39
|
+
t.require_exact_threshold = PROJ.rcov_threshold_exact
|
40
|
+
end
|
41
|
+
|
42
|
+
task :verify => :rcov
|
30
43
|
end
|
31
44
|
|
32
45
|
end # namespace :spec
|
data/tasks/test.rake
CHANGED
@@ -6,7 +6,7 @@ namespace :test do
|
|
6
6
|
|
7
7
|
Rake::TestTask.new(:run) do |t|
|
8
8
|
t.libs = PROJ.libs
|
9
|
-
t.test_files = if test
|
9
|
+
t.test_files = if test(?f, PROJ.test_file) then [PROJ.test_file]
|
10
10
|
else PROJ.tests end
|
11
11
|
t.ruby_opts += PROJ.ruby_opts
|
12
12
|
t.ruby_opts += PROJ.test_opts
|
@@ -15,14 +15,14 @@ namespace :test do
|
|
15
15
|
if HAVE_RCOV
|
16
16
|
desc 'Run rcov on the unit tests'
|
17
17
|
task :rcov => :clobber_rcov do
|
18
|
-
opts = PROJ.rcov_opts.
|
19
|
-
|
18
|
+
opts = PROJ.rcov_opts.dup << '-o' << PROJ.rcov_dir
|
19
|
+
opts = opts.join(' ')
|
20
|
+
files = if test(?f, PROJ.test_file) then [PROJ.test_file]
|
20
21
|
else PROJ.tests end
|
21
22
|
files = files.join(' ')
|
22
23
|
sh "#{RCOV} #{files} #{opts}"
|
23
24
|
end
|
24
25
|
|
25
|
-
desc 'Remove rcov products'
|
26
26
|
task :clobber_rcov do
|
27
27
|
rm_r 'coverage' rescue nil
|
28
28
|
end
|
@@ -35,6 +35,4 @@ task :test => 'test:run'
|
|
35
35
|
|
36
36
|
task :clobber => 'test:clobber_rcov' if HAVE_RCOV
|
37
37
|
|
38
|
-
remove_desc_for_task %w(test:clobber_rcov)
|
39
|
-
|
40
38
|
# EOF
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ludy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Lin Jen-Shin (a.k.a. godfat \xE7\x9C\x9F\xE5\xB8\xB8)"
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-03-25 00:00:00 +08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -26,7 +26,9 @@ extra_rdoc_files:
|
|
26
26
|
- README
|
27
27
|
- TODO
|
28
28
|
- bin/ludy
|
29
|
+
- tasks/ann.rake
|
29
30
|
- tasks/annotations.rake
|
31
|
+
- tasks/bones.rake
|
30
32
|
- tasks/doc.rake
|
31
33
|
- tasks/gem.rake
|
32
34
|
- tasks/manifest.rake
|
@@ -90,6 +92,7 @@ files:
|
|
90
92
|
- lib/ludy/lazy.rb
|
91
93
|
- lib/ludy/list.rb
|
92
94
|
- lib/ludy/message_dispatcher.rb
|
95
|
+
- lib/ludy/namespace.rb
|
93
96
|
- lib/ludy/paginator.rb
|
94
97
|
- lib/ludy/pattern_matcher.rb
|
95
98
|
- lib/ludy/proc.rb
|
@@ -110,6 +113,7 @@ files:
|
|
110
113
|
- lib/ludy/tasks/preprocess_cpp/template_forward_parameters.rb
|
111
114
|
- lib/ludy/timer.rb
|
112
115
|
- lib/ludy/variable.rb
|
116
|
+
- lib/ludy/version.rb
|
113
117
|
- lib/ludy/y_combinator.rb
|
114
118
|
- lib/ludy/z_combinator.rb
|
115
119
|
- lib/puzzle_generator.rb
|
@@ -121,7 +125,9 @@ files:
|
|
121
125
|
- lib/puzzle_generator/puzzle.rb
|
122
126
|
- spec/ludy_spec.rb
|
123
127
|
- spec/spec_helper.rb
|
128
|
+
- tasks/ann.rake
|
124
129
|
- tasks/annotations.rake
|
130
|
+
- tasks/bones.rake
|
125
131
|
- tasks/doc.rake
|
126
132
|
- tasks/gem.rake
|
127
133
|
- tasks/manifest.rake
|