|
1 #!/usr/bin/env rake |
|
2 # |
|
3 |
|
4 require 'rubygems' |
|
5 require 'pathname' |
|
6 |
|
7 require 'rake' |
|
8 require 'rspec' |
|
9 require 'rspec/core/rake_task' |
|
10 require 'rake/packagetask' |
|
11 require 'rake/gempackagetask' |
|
12 require 'rubygems/installer' |
|
13 require 'rubygems/uninstaller' |
|
14 |
|
15 |
|
16 ###################################################################### |
|
17 ### P A T H S A N D F I L E S |
|
18 ###################################################################### |
|
19 |
|
20 BASEDIR = Pathname.new( __FILE__ ).expand_path.dirname.relative_path_from( Pathname.getwd ) |
|
21 |
|
22 TEXT_FILES = %w{ Rakefile README LICENSE }.collect {|f| BASEDIR + f } |
|
23 |
|
24 SPECDIR = BASEDIR + 'spec' |
|
25 SPEC_FILES = Pathname.glob( SPECDIR + '**/*_spec.rb' ) |
|
26 |
|
27 LIBDIR = BASEDIR + 'lib' |
|
28 LIB_FILES = Pathname.glob( LIBDIR + '**/*.rb') |
|
29 |
|
30 RELEASE_FILES = TEXT_FILES + LIB_FILES + SPEC_FILES |
|
31 |
|
32 |
|
33 ###################################################################### |
|
34 ### H E L P E R S |
|
35 ###################################################################### |
|
36 |
|
37 ### Given a +file+ path, find the first captured match of +pattern+, |
|
38 ### or the string 'UNKNOWN' if not found. (easy to notice something is wrong.) |
|
39 ### |
|
40 def find_pattern( file, pattern ) |
|
41 ver = nil |
|
42 File.open( file ) do |f| |
|
43 ver = f.each do |line| |
|
44 break $1 if line =~ pattern |
|
45 end |
|
46 end |
|
47 return ver.is_a?( String ) ? ver : 'UNKNOWN' |
|
48 end |
|
49 |
|
50 |
|
51 ###################################################################### |
|
52 ### P A C K A G E C O N S T A N T S |
|
53 ###################################################################### |
|
54 |
|
55 PKG_NAME = 'chunker' |
|
56 PKG_VERSION = find_pattern( LIBDIR + 'chunker.rb', /VERSION = ['"](.+)['"]/ ) |
|
57 PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}" |
|
58 |
|
59 |
|
60 ###################################################################### |
|
61 ### T A S K S |
|
62 ###################################################################### |
|
63 |
|
64 task :test => 'test:spec' |
|
65 task :default => :test |
|
66 # task :default => [ :test, :package ] |
|
67 |
|
68 |
|
69 ### Tasks: testing via rspec |
|
70 ### |
|
71 namespace :test do |
|
72 desc 'Generate verbose and pretty output' |
|
73 RSpec::Core::RakeTask.new( :spec ) do |task| |
|
74 task.pattern = SPEC_FILES |
|
75 task.rspec_opts = ['-b', '-fd', '-c'] |
|
76 end |
|
77 |
|
78 desc 'Generate quiet non-colored plain-text output' |
|
79 RSpec::Core::RakeTask.new( :quiet ) do |task| |
|
80 task.pattern = SPEC_FILES |
|
81 task.rspec_opts = ['-f', 'p'] |
|
82 end |
|
83 end |
|
84 |
|
85 |
|
86 ### Task: generate ctags |
|
87 ### This assumes exuberant ctags, since ctags 'native' doesn't support ruby anyway. |
|
88 ### |
|
89 desc "Generate a ctags 'tags' file from Chunker source" |
|
90 task :ctags do |
|
91 sh "ctags -R #{LIBDIR}" |
|
92 end |
|
93 |
|
94 |
|
95 ### Task: Create gem from source |
|
96 ### |
|
97 gem = Gem::Specification.new do |gem| |
|
98 gem.summary = "A convenience library for parsing __END__ tokens consistently." |
|
99 gem.name = PKG_NAME |
|
100 gem.version = PKG_VERSION |
|
101 gem.author = 'Mahlon E. Smith' |
|
102 gem.email = 'mahlon@martini.nu' |
|
103 gem.homepage = 'http://projects.martini.nu/ruby-modules/wiki/Chunker' |
|
104 gem.has_rdoc = true |
|
105 gem.extra_rdoc_files = ['README'] |
|
106 gem.rdoc_options << '--main' << 'README' |
|
107 |
|
108 |
|
109 gem.files = RELEASE_FILES. |
|
110 collect {|f| f.relative_path_from(BASEDIR).to_s } |
|
111 gem.test_files = SPEC_FILES. |
|
112 collect {|f| f.relative_path_from(BASEDIR).to_s } |
|
113 |
|
114 gem.description = "Embed arbitrary data and multiple, distinct documents within ruby files." |
|
115 end |
|
116 |
|
117 Rake::GemPackageTask.new( gem ) do |pkg| |
|
118 pkg.need_zip = true |
|
119 pkg.need_tar = true |
|
120 pkg.need_tar_bz2 = true |
|
121 end |
|
122 |
|
123 |
|
124 ### Task: install |
|
125 ### |
|
126 task :install_gem => [ :package ] do |
|
127 $stderr.puts |
|
128 installer = Gem::Installer.new( "pkg/#{PKG_FILE_NAME}.gem" ) |
|
129 installer.install |
|
130 end |
|
131 task :install => [ :install_gem ] |
|
132 |
|
133 |
|
134 ### Task: uninstall |
|
135 ### |
|
136 task :uninstall_gem do |
|
137 uninstaller = Gem::Uninstaller.new( PKG_NAME ) |
|
138 uninstaller.uninstall |
|
139 end |
|
140 task :uninstall => [ :uninstall_gem ] |
|
141 |