ludy 0.1.11 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,5 +1,14 @@
1
1
  = ludy changes history
2
2
 
3
+ == ludy 0.1.13, 2008-06-14
4
+
5
+ * fixed the package... i am so dumb
6
+
7
+ == ludy 0.1.12, 2008-06-14
8
+
9
+ * added NullPaginator and NullPage for represent 0 page.
10
+ * changed repository from svn to git.
11
+
3
12
  == ludy 0.1.11, 2008-03-25
4
13
 
5
14
  * fixed tasks function into private method of Kernel.
data/README CHANGED
@@ -1,8 +1,10 @@
1
- = ludy 0.1.11
1
+ = ludy 0.1.13
2
2
  by Lin Jen-Shin (a.k.a. godfat-真常[http://godfat.org])
3
3
  strip any number: 18god29fat7029 (at] godfat32 -dooot- 20org
4
4
  * rdoc[http://ludy.rubyforge.org]
5
5
  * rubyforge-project[http://rubyforge.org/projects/ludy]
6
+ * github-project[http://github.com/godfat/ludy]
7
+ * redmine-project[https://redmine.godfat.org/projects/show/ludy]
6
8
 
7
9
  == DESCRIPTION:
8
10
 
data/Rakefile CHANGED
@@ -15,24 +15,42 @@ task :default do
15
15
  Rake.application.display_tasks_and_comments
16
16
  end
17
17
 
18
+ namespace :gem do
19
+ desc 'create ludy.gemspec'
20
+ task 'gemspec' do
21
+ puts 'rake gem:debug > ludy.gemspec'
22
+ File.open('ludy.gemspec', 'w'){|spec| spec << `rake gem:debug`.sub(/.*/, '')}
23
+ end
24
+ end
25
+
26
+ namespace :git do
27
+ desc 'push to rubyforge and github'
28
+ task 'push' do
29
+ sh 'git push rubyforge master'
30
+ puts
31
+ sh 'git push github master'
32
+ end
33
+ end
34
+
18
35
  PROJ.name = 'ludy'
19
36
  PROJ.authors = 'Lin Jen-Shin (a.k.a. godfat 真常)'
20
37
  PROJ.email = 'strip any number: 18god29fat7029 (at] godfat32 -dooot- 20org'
21
38
  PROJ.url = 'http://ludy.rubyforge.org/'
22
39
  PROJ.description = PROJ.summary = paragraphs_of('README', 'description').join("\n\n")
23
40
  PROJ.changes = paragraphs_of('CHANGES', 0..1).join("\n\n")
24
- PROJ.rubyforge_name = 'ludy'
25
-
41
+ PROJ.rubyforge.name = 'ludy'
26
42
  PROJ.version = paragraphs_of('README', 0).first.split("\n").first[7..-1]
27
- PROJ.exclude << '.DS_Store' << '^tmp' << '\.rbc$'
28
- # PROJ.dependencies << 'rake'
29
43
 
30
- PROJ.rdoc_main = 'README'
31
- PROJ.rdoc_exclude << 'deprecated' << 'Manifest' << 'Rakefile' << 'tmp$' << '^tmp'
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'
44
+ PROJ.gem.executables = 'bin/ludy'
45
+ PROJ.gem.files = []
46
+ Dir.glob('**/*'){ |file| PROJ.gem.files << file if file !~ /^pkg|^tmp|^doc/ }
47
+
48
+ PROJ.rdoc.main = 'README'
49
+ PROJ.rdoc.exclude << 'Manifest' << 'Rakefile' << 'tmp$' << '^tmp'
50
+ PROJ.rdoc.include << '\w+'
51
+ PROJ.rdoc.opts << '--diagram' if !WIN32 and `which dot` =~ %r/\/dot/
52
+ PROJ.rdoc.opts << '--charset=utf-8' << '--inline-source' << '--line-numbers' << '--promiscuous'
35
53
 
36
- PROJ.spec_opts << '--color'
54
+ PROJ.spec.opts << '--color'
37
55
 
38
56
  # EOF
data/TODO CHANGED
@@ -18,4 +18,4 @@
18
18
  * refactor tasks...
19
19
  * make switch between template engine easier
20
20
 
21
- * rails paginator, change model class, change opts...
21
+ * <del>rails paginator, change model class, change opts...</del>
@@ -1,6 +1,7 @@
1
1
 
2
2
  require 'ludy/version'
3
3
  require 'ludy/kernel/public_send'
4
+ require 'singleton'
4
5
 
5
6
  module Ludy
6
7
  # which was produced by Paginator#page / Paginator#[],
@@ -15,6 +16,8 @@ module Ludy
15
16
  attr_reader :pager, :page
16
17
  # don't create a page instance yourself unless you have to
17
18
  def initialize pager, page; @pager, @page = pager, page; end
19
+ # return a null page that stubs anything to 0
20
+ def self.null; NullPage.instance; end
18
21
  # return the page instance next to this page
19
22
  def next; @pager.page(@page+1); end
20
23
  # return the page instance prev to this page
@@ -57,6 +60,8 @@ module Ludy
57
60
  @fetcher = fetcher
58
61
  @counter = counter
59
62
  end
63
+ # return a null pager that stubs anything to 0
64
+ def self.null; NullPaginator.instance; end
60
65
  # if two paginators are equal, then the properties of
61
66
  # per_page, fetcher, counter are all equal.
62
67
  def == rhs
@@ -125,4 +130,16 @@ module Ludy
125
130
  })
126
131
  end
127
132
  end
133
+
134
+ # a null page that stubs anything to 0 or [], etc.
135
+ class NullPage < Page
136
+ include Singleton
137
+ def initialize; super(NullPaginator.instance, 0); end
138
+ end
139
+ # a null paginator that stubs any page into a null page.
140
+ class NullPaginator < Paginator
141
+ include Singleton
142
+ def initialize; super(lambda{|*a|[]}, lambda{0}); end
143
+ def page page; page == 0 ? NullPage.instance : nil; end
144
+ end
128
145
  end
data/lib/ludy.rb CHANGED
@@ -10,7 +10,7 @@ end
10
10
  module Ludy
11
11
 
12
12
  # :stopdoc:
13
- VERSION = '0.1.11'
13
+ VERSION = '0.1.13'
14
14
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
15
15
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
16
16
  $LOAD_PATH << LIBPATH
data/ludy.gemspec ADDED
@@ -0,0 +1,25 @@
1
+
2
+ Gem::Specification.new do |s|
3
+ s.name = %q{ludy}
4
+ s.version = "0.1.13"
5
+
6
+ s.specification_version = 2 if s.respond_to? :specification_version=
7
+
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
+ s.authors = ["Lin Jen-Shin (a.k.a. godfat \347\234\237\345\270\270)"]
10
+ s.date = %q{2008-06-14}
11
+ s.default_executable = %q{ludy}
12
+ s.description = %q{Aims to extend Ruby standard library, providing some useful tools that's not existed in the standard library, especially for functional programming.}
13
+ s.email = %q{strip any number: 18god29fat7029 (at] godfat32 -dooot- 20org}
14
+ s.executables = ["ludy"]
15
+ s.extra_rdoc_files = ["bin/ludy", "lib/ludy", "lib/ludy/array", "lib/ludy/class", "lib/ludy/deprecated", "lib/ludy/hash", "lib/ludy/helpers", "lib/ludy/kernel", "lib/ludy/proc", "lib/ludy/symbol", "lib/ludy/tasks", "lib/ludy/tasks/preprocess_cpp", "lib/ludy/test", "lib/puzzle_generator"]
16
+ s.files = ["bin", "bin/ludy", "CHANGES", "lib", "lib/ludy", "lib/ludy/all.rb", "lib/ludy/array", "lib/ludy/array/body.rb", "lib/ludy/array/choice.rb", "lib/ludy/array/combine.rb", "lib/ludy/array/combos.rb", "lib/ludy/array/count.rb", "lib/ludy/array/filter.rb", "lib/ludy/array/foldl.rb", "lib/ludy/array/foldr.rb", "lib/ludy/array/head.rb", "lib/ludy/array/map_with_index.rb", "lib/ludy/array/pad.rb", "lib/ludy/array/product.rb", "lib/ludy/array/rotate.rb", "lib/ludy/array/tail.rb", "lib/ludy/array.rb", "lib/ludy/blackhole.rb", "lib/ludy/class", "lib/ludy/class/undef_all_methods.rb", "lib/ludy/class.rb", "lib/ludy/deprecated", "lib/ludy/deprecated/aspect.rb", "lib/ludy/deprecated/callstack.rb", "lib/ludy/deprecated/curry.rb", "lib/ludy/deprecated/rambda.rb", "lib/ludy/deprecated/this.rb", "lib/ludy/deprecated/untranspose.rb", "lib/ludy/deprecated/unzip.rb", "lib/ludy/dices.rb", "lib/ludy/hash", "lib/ludy/hash/reverse_merge.rb", "lib/ludy/hash.rb", "lib/ludy/helpers", "lib/ludy/helpers/check_box.rb", "lib/ludy/kernel", "lib/ludy/kernel/deep_copy.rb", "lib/ludy/kernel/defun.rb", "lib/ludy/kernel/ergo.rb", "lib/ludy/kernel/id.rb", "lib/ludy/kernel/if_else.rb", "lib/ludy/kernel/m.rb", "lib/ludy/kernel/maybe.rb", "lib/ludy/kernel/public_send.rb", "lib/ludy/kernel/singleton_method.rb", "lib/ludy/kernel/tap.rb", "lib/ludy/kernel.rb", "lib/ludy/lazy.rb", "lib/ludy/list.rb", "lib/ludy/message_dispatcher.rb", "lib/ludy/namespace.rb", "lib/ludy/paginator.rb", "lib/ludy/pattern_matcher.rb", "lib/ludy/proc", "lib/ludy/proc/bind.rb", "lib/ludy/proc/chain.rb", "lib/ludy/proc/compose.rb", "lib/ludy/proc/curry.rb", "lib/ludy/proc.rb", "lib/ludy/symbol", "lib/ludy/symbol/curry.rb", "lib/ludy/symbol/to_msg.rb", "lib/ludy/symbol/to_proc.rb", "lib/ludy/symbol.rb", "lib/ludy/tasks", "lib/ludy/tasks/common.rb", "lib/ludy/tasks/preprocess_cpp", "lib/ludy/tasks/preprocess_cpp/attr_builder.rb", "lib/ludy/tasks/preprocess_cpp/debug_hook.rb", "lib/ludy/tasks/preprocess_cpp/header_guard.rb", "lib/ludy/tasks/preprocess_cpp/template_forward_parameters.rb", "lib/ludy/tasks/preprocess_cpp.rb", "lib/ludy/tasks.rb", "lib/ludy/test", "lib/ludy/timer.rb", "lib/ludy/variable.rb", "lib/ludy/version.rb", "lib/ludy/y_combinator.rb", "lib/ludy/z_combinator.rb", "lib/ludy.rb", "lib/puzzle_generator", "lib/puzzle_generator/chain.rb", "lib/puzzle_generator/chained_map.rb", "lib/puzzle_generator/colored_map.rb", "lib/puzzle_generator/map.rb", "lib/puzzle_generator/misc.rb", "lib/puzzle_generator/puzzle.rb", "lib/puzzle_generator.rb", "LICENSE", "ludy.gemspec", "NOTICE", "Rakefile", "README", "spec", "spec/ludy_spec.rb", "spec/spec_helper.rb", "tasks", "tasks/ann.rake", "tasks/bones.rake", "tasks/gem.rake", "tasks/git.rake", "tasks/manifest.rake", "tasks/notes.rake", "tasks/post_load.rake", "tasks/rdoc.rake", "tasks/rubyforge.rake", "tasks/setup.rb", "tasks/spec.rake", "tasks/svn.rake", "tasks/test.rake", "test", "test/deprecated", "test/deprecated/callstack.rb", "test/deprecated/curry.rb", "test/deprecated/rambda.rb", "test/deprecated/this.rb", "test/deprecated/ts_ludy.rb", "test/deprecated/unzip_and_untranspose.rb", "test/example_puzzle.rb", "test/helper.rb", "test/ludy", "test/ludy/test_array.rb", "test/ludy/test_class.rb", "test/ludy/test_defun.rb", "test/ludy/test_dices.rb", "test/ludy/test_hash.rb", "test/ludy/test_kernel.rb", "test/ludy/test_lazy.rb", "test/ludy/test_paginator.rb", "test/ludy/test_proc.rb", "test/ludy/test_require_all.rb", "test/ludy/test_symbol.rb", "test/ludy/test_variable.rb", "test/ludy/test_y_combinator.rb", "test/ludy/test_z_combinator.rb", "test/multiruby.sh", "TODO"]
17
+ s.has_rdoc = true
18
+ s.homepage = %q{http://ludy.rubyforge.org/}
19
+ s.rdoc_options = ["--diagram", "--charset=utf-8", "--inline-source", "--line-numbers", "--promiscuous", "--main", "README"]
20
+ s.require_paths = ["lib"]
21
+ s.rubyforge_project = %q{ludy}
22
+ s.rubygems_version = %q{1.1.1}
23
+ s.summary = %q{Aims to extend Ruby standard library, providing some useful tools that's not existed in the standard library, especially for functional programming.}
24
+ s.test_files = ["test/ludy/test_array.rb", "test/ludy/test_class.rb", "test/ludy/test_defun.rb", "test/ludy/test_dices.rb", "test/ludy/test_hash.rb", "test/ludy/test_kernel.rb", "test/ludy/test_lazy.rb", "test/ludy/test_paginator.rb", "test/ludy/test_proc.rb", "test/ludy/test_require_all.rb", "test/ludy/test_symbol.rb", "test/ludy/test_variable.rb", "test/ludy/test_y_combinator.rb", "test/ludy/test_z_combinator.rb"]
25
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # $Id$
2
2
 
3
3
  require File.expand_path(
4
- File.join(File.dirname(__FILE__), %w[.. lib tmp]))
4
+ File.join(File.dirname(__FILE__), %w[.. lib ludy]))
5
5
 
6
6
  Spec::Runner.configure do |config|
7
7
  # == Mock Framework
data/tasks/ann.rake CHANGED
@@ -9,12 +9,16 @@ require 'time'
9
9
 
10
10
  namespace :ann do
11
11
 
12
- file PROJ.ann_file do
13
- puts "Generating #{PROJ.ann_file}"
14
- File.open(PROJ.ann_file,'w') do |fd|
12
+ # A prerequisites task that all other tasks depend upon
13
+ task :prereqs
14
+
15
+ file PROJ.ann.file do
16
+ ann = PROJ.ann
17
+ puts "Generating #{ann.file}"
18
+ File.open(ann.file,'w') do |fd|
15
19
  fd.puts("#{PROJ.name} version #{PROJ.version}")
16
20
  fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
17
- fd.puts(" #{PROJ.url}") if PROJ.url
21
+ fd.puts(" #{PROJ.url}") if PROJ.url.valid?
18
22
  fd.puts(" (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
19
23
  fd.puts
20
24
  fd.puts("== DESCRIPTION")
@@ -23,23 +27,24 @@ namespace :ann do
23
27
  fd.puts
24
28
  fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
25
29
  fd.puts
26
- PROJ.ann_paragraphs.each do |p|
30
+ ann.paragraphs.each do |p|
27
31
  fd.puts "== #{p.upcase}"
28
32
  fd.puts
29
33
  fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
30
34
  fd.puts
31
35
  end
32
- fd.puts PROJ.ann_text if PROJ.ann_text
36
+ fd.puts ann.text if ann.text
33
37
  end
34
38
  end
35
39
 
36
40
  desc "Create an announcement file"
37
- task :announcement => PROJ.ann_file
41
+ task :announcement => ['ann:prereqs', PROJ.ann.file]
38
42
 
39
43
  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])
44
+ task :email => ['ann:prereqs', PROJ.ann.file] do
45
+ ann = PROJ.ann
46
+ from = ann.email[:from] || PROJ.email
47
+ to = Array(ann.email[:to])
43
48
 
44
49
  ### build a mail header for RFC 822
45
50
  rfc822msg = "From: #{from}\n"
@@ -49,11 +54,11 @@ namespace :ann do
49
54
  rfc822msg << "\n"
50
55
  rfc822msg << "Date: #{Time.new.rfc822}\n"
51
56
  rfc822msg << "Message-Id: "
52
- rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{PROJ.ann_email[:domain]}>\n\n"
53
- rfc822msg << File.read(PROJ.ann_file)
57
+ rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{ann.email[:domain]}>\n\n"
58
+ rfc822msg << File.read(ann.file)
54
59
 
55
60
  params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
56
- PROJ.ann_email[key]
61
+ ann.email[key]
57
62
  end
58
63
 
59
64
  params[3] = PROJ.email if params[3].nil?
@@ -71,6 +76,6 @@ end # namespace :ann
71
76
  desc 'Alias to ann:announcement'
72
77
  task :ann => 'ann:announcement'
73
78
 
74
- CLOBBER << PROJ.ann_file
79
+ CLOBBER << PROJ.ann.file
75
80
 
76
81
  # EOF
data/tasks/bones.rake CHANGED
@@ -1,40 +1,21 @@
1
1
  # $Id$
2
2
 
3
- require 'pp'
4
- require 'stringio'
3
+ if HAVE_BONES
5
4
 
6
5
  namespace :bones do
7
6
 
8
7
  desc 'Show the PROJ open struct'
9
8
  task :debug do |t|
10
- atr = if ARGV.length == 2
9
+ atr = if t.application.top_level_tasks.length == 2
11
10
  t.application.top_level_tasks.pop
12
11
  end
13
- sio = StringIO.new
14
- sep = "\n" + ' '*27
15
- fmt = "%23s => %s"
16
12
 
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
13
+ if atr then Bones::Debug.show_attr(PROJ, atr)
14
+ else Bones::Debug.show PROJ end
36
15
  end
37
16
 
38
17
  end # namespace :bones
39
18
 
19
+ end # HAVE_BONES
20
+
40
21
  # EOF
data/tasks/gem.rake CHANGED
@@ -4,84 +4,86 @@ require 'rake/gempackagetask'
4
4
 
5
5
  namespace :gem do
6
6
 
7
- PROJ.spec = Gem::Specification.new do |s|
7
+ PROJ.gem._spec = Gem::Specification.new do |s|
8
8
  s.name = PROJ.name
9
9
  s.version = PROJ.version
10
10
  s.summary = PROJ.summary
11
11
  s.authors = Array(PROJ.authors)
12
12
  s.email = PROJ.email
13
13
  s.homepage = Array(PROJ.url).first
14
- s.rubyforge_project = PROJ.rubyforge_name
15
- s.post_install_message = PROJ.post_install_message
14
+ s.rubyforge_project = PROJ.rubyforge.name
16
15
 
17
16
  s.description = PROJ.description
18
17
 
19
- PROJ.dependencies.each do |dep|
18
+ PROJ.gem.dependencies.each do |dep|
20
19
  s.add_dependency(*dep)
21
20
  end
22
21
 
23
- s.files = PROJ.files
24
- s.executables = PROJ.executables.map {|fn| File.basename(fn)}
25
- s.extensions = PROJ.files.grep %r/extconf\.rb$/
22
+ s.files = PROJ.gem.files
23
+ s.executables = PROJ.gem.executables.map {|fn| File.basename(fn)}
24
+ s.extensions = PROJ.gem.files.grep %r/extconf\.rb$/
26
25
 
27
26
  s.bindir = 'bin'
28
27
  dirs = Dir["{#{PROJ.libs.join(',')}}"]
29
28
  s.require_paths = dirs unless dirs.empty?
30
29
 
31
- incl = Regexp.new(PROJ.rdoc_include.join('|'))
32
- excl = PROJ.rdoc_exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
30
+ incl = Regexp.new(PROJ.rdoc.include.join('|'))
31
+ excl = PROJ.rdoc.exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
33
32
  excl = Regexp.new(excl.join('|'))
34
- rdoc_files = PROJ.files.find_all do |fn|
33
+ rdoc_files = PROJ.gem.files.find_all do |fn|
35
34
  case fn
36
35
  when excl; false
37
36
  when incl; true
38
37
  else false end
39
38
  end
40
- s.rdoc_options = PROJ.rdoc_opts + ['--main', PROJ.rdoc_main]
39
+ s.rdoc_options = PROJ.rdoc.opts + ['--main', PROJ.rdoc.main]
41
40
  s.extra_rdoc_files = rdoc_files
42
41
  s.has_rdoc = true
43
42
 
44
- if test ?f, PROJ.test_file
45
- s.test_file = PROJ.test_file
43
+ if test ?f, PROJ.test.file
44
+ s.test_file = PROJ.test.file
46
45
  else
47
- s.test_files = PROJ.tests.to_a
46
+ s.test_files = PROJ.test.files.to_a
48
47
  end
49
48
 
50
49
  # Do any extra stuff the user wants
51
- # spec_extras.each do |msg, val|
52
- # case val
53
- # when Proc
54
- # val.call(s.send(msg))
55
- # else
56
- # s.send "#{msg}=", val
57
- # end
58
- # end
59
- end
50
+ PROJ.gem.extras.each do |msg, val|
51
+ case val
52
+ when Proc
53
+ val.call(s.send(msg))
54
+ else
55
+ s.send "#{msg}=", val
56
+ end
57
+ end
58
+ end # Gem::Specification.new
59
+
60
+ # A prerequisites task that all other tasks depend upon
61
+ task :prereqs
60
62
 
61
63
  desc 'Show information about the gem'
62
- task :debug do
63
- puts PROJ.spec.to_ruby
64
+ task :debug => 'gem:prereqs' do
65
+ puts PROJ.gem._spec.to_ruby
64
66
  end
65
67
 
66
68
  pkg = Rake::PackageTask.new(PROJ.name, PROJ.version) do |pkg|
67
- pkg.need_tar = PROJ.need_tar
68
- pkg.need_zip = PROJ.need_zip
69
- pkg.package_files += PROJ.spec.files
69
+ pkg.need_tar = PROJ.gem.need_tar
70
+ pkg.need_zip = PROJ.gem.need_zip
71
+ pkg.package_files += PROJ.gem._spec.files
70
72
  end
71
73
  Rake::Task['gem:package'].instance_variable_set(:@full_comment, nil)
72
74
 
73
- gem_file = if PROJ.spec.platform == Gem::Platform::RUBY
75
+ gem_file = if PROJ.gem._spec.platform == Gem::Platform::RUBY
74
76
  "#{pkg.package_name}.gem"
75
77
  else
76
- "#{pkg.package_name}-#{PROJ.spec.platform}.gem"
78
+ "#{pkg.package_name}-#{PROJ.gem._spec.platform}.gem"
77
79
  end
78
80
 
79
81
  desc "Build the gem file #{gem_file}"
80
- task :package => "#{pkg.package_dir}/#{gem_file}"
82
+ task :package => ['gem:prereqs', "#{pkg.package_dir}/#{gem_file}"]
81
83
 
82
- file "#{pkg.package_dir}/#{gem_file}" => [pkg.package_dir] + PROJ.spec.files do
84
+ file "#{pkg.package_dir}/#{gem_file}" => [pkg.package_dir] + PROJ.gem._spec.files do
83
85
  when_writing("Creating GEM") {
84
- Gem::Builder.new(PROJ.spec).build
86
+ Gem::Builder.new(PROJ.gem._spec).build
85
87
  verbose(true) {
86
88
  mv gem_file, "#{pkg.package_dir}/#{gem_file}"
87
89
  }
@@ -89,21 +91,29 @@ namespace :gem do
89
91
  end
90
92
 
91
93
  desc 'Install the gem'
92
- task :install => [:clobber, :package] do
93
- sh "#{SUDO} #{GEM} install pkg/#{PROJ.spec.full_name}"
94
+ task :install => [:clobber, 'gem:package'] do
95
+ sh "#{SUDO} #{GEM} install --local pkg/#{PROJ.gem._spec.full_name}"
96
+
97
+ # use this version of the command for rubygems > 1.0.0
98
+ #sh "#{SUDO} #{GEM} install --no-update-sources pkg/#{PROJ.gem._spec.full_name}"
94
99
  end
95
100
 
96
101
  desc 'Uninstall the gem'
97
102
  task :uninstall do
98
103
  installed_list = Gem.source_index.find_name(PROJ.name)
99
104
  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}"
105
+ sh "#{SUDO} #{GEM} uninstall --version '#{PROJ.version}' --ignore-dependencies --executables #{PROJ.name}"
101
106
  end
102
107
  end
103
108
 
104
109
  desc 'Reinstall the gem'
105
110
  task :reinstall => [:uninstall, :install]
106
111
 
112
+ desc 'Cleanup the gem'
113
+ task :cleanup do
114
+ sh "#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}"
115
+ end
116
+
107
117
  end # namespace :gem
108
118
 
109
119
  desc 'Alias to gem:package'
data/tasks/git.rake ADDED
@@ -0,0 +1,41 @@
1
+ # $Id$
2
+
3
+ if HAVE_GIT
4
+
5
+ namespace :git do
6
+
7
+ # A prerequisites task that all other tasks depend upon
8
+ task :prereqs
9
+
10
+ desc 'Show tags from the Git repository'
11
+ task :show_tags => 'git:prereqs' do |t|
12
+ puts %x/git tag/
13
+ end
14
+
15
+ desc 'Create a new tag in the Git repository'
16
+ task :create_tag => 'git:prereqs' do |t|
17
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
18
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
19
+
20
+ tag = "%s-%s" % [PROJ.name, PROJ.version]
21
+ msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
22
+
23
+ puts "Creating Git tag '#{tag}'"
24
+ unless system "git tag -a -m '#{msg}' #{tag}"
25
+ abort "Tag creation failed"
26
+ end
27
+
28
+ if %x/git remote/ =~ %r/^origin\s*$/
29
+ unless system "git push origin #{tag}"
30
+ abort "Could not push tag to remote Git repository"
31
+ end
32
+ end
33
+ end
34
+
35
+ end # namespace :git
36
+
37
+ task 'gem:release' => 'git:create_tag'
38
+
39
+ end # if HAVE_GIT
40
+
41
+ # EOF
data/tasks/notes.rake ADDED
@@ -0,0 +1,28 @@
1
+ # $Id$
2
+
3
+ if HAVE_BONES
4
+
5
+ desc "Enumerate all annotations"
6
+ task :notes do |t|
7
+ id = if t.application.top_level_tasks.length > 1
8
+ t.application.top_level_tasks.slice!(1..-1).join(' ')
9
+ end
10
+ Bones::AnnotationExtractor.enumerate(
11
+ PROJ, PROJ.notes.tags.join('|'), id, :tag => true)
12
+ end
13
+
14
+ namespace :notes do
15
+ PROJ.notes.tags.each do |tag|
16
+ desc "Enumerate all #{tag} annotations"
17
+ task tag.downcase.to_sym do |t|
18
+ id = if t.application.top_level_tasks.length > 1
19
+ t.application.top_level_tasks.slice!(1..-1).join(' ')
20
+ end
21
+ Bones::AnnotationExtractor.enumerate(PROJ, tag, id)
22
+ end
23
+ end
24
+ end
25
+
26
+ end # if HAVE_BONES
27
+
28
+ # EOF
data/tasks/post_load.rake CHANGED
@@ -3,14 +3,21 @@
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
- PROJ.rdoc_exclude << "^#{Regexp.escape(PROJ.manifest_file)}$"
7
- PROJ.exclude << "^#{Regexp.escape(PROJ.ann_file)}$"
8
-
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!
13
- end
6
+ PROJ.rdoc.exclude << "^#{Regexp.escape(PROJ.manifest_file)}$"
7
+ PROJ.exclude << ["^#{Regexp.escape(PROJ.ann.file)}$",
8
+ "^#{Regexp.escape(PROJ.rdoc.dir)}/",
9
+ "^#{Regexp.escape(PROJ.rcov.dir)}/"]
10
+
11
+ flatten_arrays = lambda do |this,os|
12
+ os.instance_variable_get(:@table).each do |key,val|
13
+ next if key == :dependencies
14
+ case val
15
+ when Array; val.flatten!
16
+ when OpenStruct; this.call(this,val)
17
+ end
18
+ end
19
+ end
20
+ flatten_arrays.call(flatten_arrays,PROJ)
14
21
 
15
22
  PROJ.changes ||= paragraphs_of(PROJ.history_file, 0..1).join("\n\n")
16
23
 
@@ -18,15 +25,15 @@ PROJ.description ||= paragraphs_of(PROJ.readme_file, 'description').join("\n\n")
18
25
 
19
26
  PROJ.summary ||= PROJ.description.split('.').first
20
27
 
21
- PROJ.files ||=
28
+ PROJ.gem.files ||=
22
29
  if test(?f, PROJ.manifest_file)
23
30
  files = File.readlines(PROJ.manifest_file).map {|fn| fn.chomp.strip}
24
31
  files.delete ''
25
32
  files
26
33
  else [] end
27
34
 
28
- PROJ.executables ||= PROJ.files.find_all {|fn| fn =~ %r/^bin/}
35
+ PROJ.gem.executables ||= PROJ.gem.files.find_all {|fn| fn =~ %r/^bin/}
29
36
 
30
- PROJ.rdoc_main ||= PROJ.readme_file
37
+ PROJ.rdoc.main ||= PROJ.readme_file
31
38
 
32
39
  # EOF
@@ -6,12 +6,13 @@ namespace :doc do
6
6
 
7
7
  desc 'Generate RDoc documentation'
8
8
  Rake::RDocTask.new do |rd|
9
- rd.main = PROJ.rdoc_main
10
- rd.rdoc_dir = PROJ.rdoc_dir
9
+ rdoc = PROJ.rdoc
10
+ rd.main = rdoc.main
11
+ rd.rdoc_dir = rdoc.dir
11
12
 
12
- incl = Regexp.new(PROJ.rdoc_include.join('|'))
13
- excl = Regexp.new(PROJ.rdoc_exclude.join('|'))
14
- files = PROJ.files.find_all do |fn|
13
+ incl = Regexp.new(rdoc.include.join('|'))
14
+ excl = Regexp.new(rdoc.exclude.join('|'))
15
+ files = PROJ.gem.files.find_all do |fn|
15
16
  case fn
16
17
  when excl; false
17
18
  when incl; true
@@ -20,10 +21,12 @@ namespace :doc do
20
21
  rd.rdoc_files.push(*files)
21
22
 
22
23
  title = "#{PROJ.name}-#{PROJ.version} Documentation"
23
- title = "#{PROJ.rubyforge_name}'s " + title if PROJ.rubyforge_name != title
24
+
25
+ rf_name = PROJ.rubyforge.name
26
+ title = "#{rf_name}'s " + title if rf_name.valid? and rf_name != title
24
27
 
25
28
  rd.options << "-t #{title}"
26
- rd.options.concat(PROJ.rdoc_opts)
29
+ rd.options.concat(rdoc.opts)
27
30
  end
28
31
 
29
32
  desc 'Generate ri locally for testing'