mathml 0.8.1 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,121 +1,65 @@
1
- require "rake/clean"
2
- require "rake/testtask"
3
- require "rake/rdoctask"
4
- require "rake/gempackagetask"
1
+ load "Rakefile.utirake"
5
2
 
6
- FILES = FileList["**/*"].exclude("pkg", "html", "eim_xml")
7
- CLOBBER.include("eim_xml")
3
+ VER = "0.10.1"
8
4
 
9
- task :default => :test
5
+ UtiRake.setup do
6
+ external("https://hg.hinet.mydns.jp", %w[eim_xml])
10
7
 
11
-
12
- ### Document ###
13
- RDOC_DIR = "./html/"
14
- RDOC_OPTS = ["-S", "-w", "3", "-c", "UTF-8", "-m", "README"]
15
- RDOC_OPTS << "-d" if ENV["DOT"]
16
- RDOC_FILES = FileList["lib/**/*.rb"]
17
- RDOC_EXTRAS = FileList["README"]
18
- ["", "ja", "en"].each do |l|
19
- dir = RDOC_DIR.dup
20
- dir << "#{l}/" unless l.empty?
21
- Rake::RDocTask.new("rdoc#{":"+l unless l.empty?}") do |rdoc|
22
- rdoc.title = "MathML Library"
23
- rdoc.options = RDOC_OPTS.dup
24
- rdoc.options << "-l" << l unless l.empty?
25
- rdoc.rdoc_dir = dir
26
- rdoc.rdoc_files.include(RDOC_FILES, RDOC_EXTRAS)
8
+ rdoc do |t|
9
+ t.title = "MathML Library"
10
+ t.main = "README"
11
+ t.rdoc_files << FileList["lib/**/*.rb", "README"]
27
12
  end
28
- end
29
- task "rdoc:all" => ["rdoc", "rdoc:ja", "rdoc:en"]
30
- task "rerdoc:all" => ["rerdoc", "rerdoc:ja", "rerdoc:en"]
31
-
32
-
33
- ### Publish document ###
34
- task :publish => [:clobber_rdoc, "rdoc:ja", "rdoc:en"] do
35
- require "rake/contrib/rubyforgepublisher"
36
- cp "index.html", "html/index.html"
37
- Rake::RubyForgePublisher.new("mathml", "hiraku").upload
38
- end
39
13
 
40
-
41
- ### Clone external library ###
42
- EIMXML_DIR = "./eim_xml"
43
- file EIMXML_DIR do |t|
44
- sh "hg clone https://hg.hinet.mydns.jp/eim_xml #{t.name}"
45
- end
46
- task :eim_xml => EIMXML_DIR
47
-
48
-
49
- ### Test ###
50
- task :test => "test:apart"
51
- namespace :test do
52
- def add_libs_for_test(t)
53
- t.libs << "test" << "eim_xml/lib" << "../eim_xml/lib"
54
- end
55
- FileList["test/*_test.rb"].sort{|a,b| File.mtime(a)<=>File.mtime(b)}.reverse.each do |i|
56
- Rake::TestTask.new(:apart) do |t|
57
- t.test_files = [i]
58
- add_libs_for_test(t)
59
- end
14
+ publish("mathml", "hiraku") do
15
+ cp "index.html", "html/index.html"
60
16
  end
61
- task(:apart).comment = "Run tests separately"
62
17
 
63
- Rake::TestTask.new(:lump) do |t|
64
- t.test_files = FileList["test/*_test.rb"]
65
- add_libs_for_test(t)
18
+ gemspec do |s|
19
+ s.name = "mathml"
20
+ s.rubyforge_project = "mathml"
21
+ s.version = VER
22
+ s.summary = "MathML Library"
23
+ s.author = "KURODA Hiraku"
24
+ s.email = "hiraku@hinet.mydns.jp"
25
+ s.homepage = "http://mathml.rubyforge.org/"
26
+ s.add_dependency("eimxml")
27
+ s.post_install_message = "*"*60 << "\n" << <<EOT << "*"*60
28
+ [DEPRECATION]
29
+ "mathml" gem is deprecated.
30
+ Please use "math_ml" gem instead.
31
+ EOT
66
32
  end
67
- task(:lump).comment = "Run all tests in a lump"
68
33
 
69
- Rake::TestTask.new(:symbol) do |t|
70
- t.test_files = FileList["symbols/*_test.rb"]
71
- add_libs_for_test(t)
34
+ rcov_spec do |s|
35
+ s.ruby_opts = %w[-rubygems]
36
+ s.pattern ||= %w[spec/util.rb spec/**/*_spec.rb]
37
+ s.pattern = [s.pattern] unless s.pattern.is_a?(Array)
38
+ # s.pattern << "symbols/**/*_spec.rb"
72
39
  end
73
- end
74
-
75
40
 
76
- ### Build GEM ###
77
- GEM_DIR = "./pkg"
78
- directory GEM_DIR
79
- def build_gem(unstable=false)
80
- spec = Gem::Specification.new do |spec|
81
- spec.name = "mathml"
82
- spec.rubyforge_project = "mathml"
83
- spec.version = ENV["VER"] or raise "Need VER=x.y.z(.?)"
84
- spec.summary = "MathML Library"
85
- spec.author = "KURODA Hiraku"
86
- spec.email = "hiraku@hinet.mydns.jp"
87
- spec.homepage = "http://mathml.rubyforge.org/"
88
- spec.add_dependency("eimxml")
89
- spec.files = FILES
90
- spec.test_files = Dir.glob("test/*.rb")
91
- spec.has_rdoc = true
92
- spec.rdoc_options = RDOC_OPTS.dup
93
- spec.extra_rdoc_files = RDOC_EXTRAS
41
+ spec do |s|
42
+ # s.spec_opts << "-b"
94
43
  end
95
-
96
- spec.version = spec.version.to_s << Time.now.strftime(".%Y.%m%d.%H%M") if unstable
97
- b = Gem::Builder.new(spec)
98
- gname = b.build
99
- mv gname, "#{GEM_DIR}/"
100
- end
101
-
102
- desc "Build gem package"
103
- task :gem => GEM_DIR do
104
- build_gem
44
+ alias_task
105
45
  end
106
46
 
107
- desc "Build unstable version gem package"
108
- task "gem:unstable" => GEM_DIR do
109
- build_gem(true)
47
+ namespace :spec do
48
+ RSpec::Core::RakeTask.new(:symbols) do |s|
49
+ s.pattern = "./symbols/**/*_spec.rb"
50
+ s.rspec_opts = %w[-c -I lib -I external/lib]
51
+ end
110
52
  end
111
53
 
112
-
113
- ### Build package ###
114
- package_task = Rake::PackageTask.new("math_ml",ENV["VER"] || :noversion) do |t|
115
- t.package_files.include(FILES)
116
- t.need_tar_gz = true
54
+ task :package do
55
+ name = "math_ml-#{VER}"
56
+ cp "external/eim_xml/lib/eim_xml.rb", "pkg/#{name}/lib/"
57
+ Dir.chdir "pkg" do
58
+ rm "#{name}.tar.gz"
59
+ sh "tar zcf #{name}.tar.gz #{name}/"
60
+ end
117
61
  end
118
62
 
119
- file "#{package_task.package_dir_path}" => EIMXML_DIR do |t|
120
- cp "#{EIMXML_DIR}/lib/eim_xml.rb", "#{t.name}/lib/"
121
- end
63
+ task :default => :spec
64
+ task "spec:no_here" => "spec:apart"
65
+ task :all => [:spec, "spec:symbols"]
@@ -0,0 +1,374 @@
1
+ # Utility for Rake
2
+ #
3
+ # Copyright (C) 2008, KURODA Hiraku <hiraku@hinet.mydns.jp>
4
+ # You can redistribute it and/or modify it under GPL3.
5
+
6
+ require "rake/clean"
7
+ require "rake/testtask"
8
+ require "rdoc/task"
9
+ require "rake/contrib/rubyforgepublisher"
10
+ require "rubygems/package_task"
11
+
12
+ class UtiRake
13
+ include Rake::DSL
14
+
15
+ def self.setup(opt={}, &proc)
16
+ ur = new
17
+ ur.setup(opt, &proc)
18
+ rescue
19
+ puts $!.class, $!.message, $!.backtrace
20
+ end
21
+
22
+ attr_reader :opt, :spec_proc, :cucumber_proc, :rdoc_proc, :gemspec_proc, :package_proc, :rcov_spec_proc
23
+
24
+ def setup(opt={}, &proc)
25
+ @opt = opt
26
+ directory "external"
27
+ CLEAN << "coverage" << "coverage.spec" << "coverage.cuke" << "doc"
28
+ CLOBBER << "external"
29
+
30
+ instance_eval(&proc) if proc
31
+
32
+ if need_spec?
33
+ begin
34
+ @rspec2_flg = false
35
+ require "rspec/core/rake_task"
36
+ @rspec2_flg = true
37
+ rescue LoadError
38
+ require "spec/rake/spectask"
39
+ end
40
+ define_spec_task
41
+ end
42
+
43
+ if need_cucumber?
44
+ require "cucumber/rake/task"
45
+ define_cucumber_task
46
+ end
47
+
48
+ define_rdoc_task
49
+ define_rcov_task
50
+ define_package_task
51
+ define_here_dependency
52
+ define_alias_task if @alias_task
53
+ end
54
+
55
+ def rspec2?; @rspec2_flg; end
56
+
57
+ def spec_task
58
+ rspec2? ? RSpec::Core::RakeTask : Spec::Rake::SpecTask
59
+ end
60
+
61
+ def need_spec?
62
+ File.directory?("spec")
63
+ end
64
+
65
+ def need_cucumber?
66
+ File.directory?("features")
67
+ end
68
+
69
+ def spec(&proc)
70
+ @spec_proc = proc
71
+ end
72
+
73
+ def cucumber(&proc)
74
+ @cucumber_proc = proc
75
+ end
76
+
77
+ def rdoc(&proc)
78
+ @rdoc_proc = proc
79
+ end
80
+
81
+ def gemspec(&proc)
82
+ @gemspec_proc = proc
83
+ end
84
+
85
+ def rcov_spec(&proc)
86
+ @rcov_spec_proc = proc
87
+ end
88
+
89
+ def package(&proc)
90
+ @package_proc = proc
91
+ end
92
+
93
+ def no_here(task)
94
+ @no_here_task = task
95
+ end
96
+
97
+ def no_here_task
98
+ @no_here_task || "spec:lump"
99
+ end
100
+
101
+ def alias_task
102
+ @alias_task = true
103
+ end
104
+
105
+ def hg(cmd)
106
+ sh "hg #{cmd.to_s}"
107
+ end
108
+
109
+ def external(base_url, *libs)
110
+ libs = libs.first if libs.first.is_a?(Array)
111
+ namespace :external do
112
+ directory "external/lib"
113
+ libs.each do |lib|
114
+ libdir = "external/#{lib}"
115
+ file libdir => "external/lib" do
116
+ if File.exist?("../#{lib}")
117
+ Dir.chdir("external") do
118
+ ln_s "../../#{lib}", "./", :force=>true
119
+ end
120
+ end
121
+ hg "clone #{File.join(base_url, lib)} #{libdir}" unless File.exist?(libdir)
122
+ Dir["#{libdir}/lib/*"].each do |f|
123
+ base = File.basename(f)
124
+ cd "external/lib" do
125
+ ln_s "../#{lib}/lib/#{base}", "./"
126
+ end
127
+ end
128
+ end
129
+
130
+ if File.exist?(libdir)
131
+ Dir["#{libdir}/lib/*"].each do |f|
132
+ base = File.basename(f)
133
+ file "external/lib/#{base}" => "external/lib" do
134
+ cd "external/lib" do
135
+ ln_s "../#{lib}/lib/#{base}", "./"
136
+ end
137
+ end
138
+ task :setup => "external/lib/#{base}"
139
+ end
140
+ end
141
+
142
+ desc "Setup external libraries"
143
+ task :setup=>libdir
144
+ end
145
+
146
+ task :rake => :setup do
147
+ libs.each do |lib|
148
+ Dir.chdir "external/#{lib}" do
149
+ sh "rake"
150
+ end
151
+ end
152
+ end
153
+ end
154
+ @external = true
155
+ end
156
+
157
+ def external?; @external; end
158
+
159
+ def define_rdoc_task
160
+ Rake::RDocTask.new(:rdoc) do |rdoc|
161
+ rdoc.options << "-S"
162
+ rdoc.options << "-w" << "3"
163
+ rdoc.options << "-c" << "UTF-8"
164
+ rdoc.rdoc_files.include("lib/**/*.rb")
165
+ rdoc_proc.call(rdoc) if rdoc_proc
166
+ end
167
+ task :doc do
168
+ remove_entry_secure "doc" if File.directory?("doc")
169
+ sh "rdoc -S -w 3 -c UTF-8 -d -x external"
170
+ end
171
+ end
172
+
173
+ def define_package_task
174
+ spec = Gem::Specification.new do |s|
175
+ s.platform = Gem::Platform::RUBY
176
+ s.files = FileList["Rakefile*", "lib/**/*", "spec/**/*"]
177
+ s.version = "0.0.0.noversion"
178
+ gemspec_proc.call(s) if gemspec_proc
179
+ end
180
+
181
+ gem = Gem::PackageTask.new(spec) do |t|
182
+ t.need_tar_gz = true
183
+ package_proc.call(t) if package_proc
184
+ end
185
+
186
+ task "utirake:copy_for_package" do
187
+ mv "Rakefile.utirake", "Rakefile.utirake_#{$$}"
188
+ cp "external/utirake/utirake.rb", "Rakefile.utirake"
189
+ end
190
+
191
+ file gem.package_dir_path => "utirake:copy_for_package"
192
+
193
+ task :gem do
194
+ rm "Rakefile.utirake"
195
+ mv "Rakefile.utirake_#{$$}", "Rakefile.utirake"
196
+ end
197
+ end
198
+
199
+ def publish(project_name, user_id)
200
+ task :publish => "rdoc" do
201
+ yield if block_given?
202
+ Rake::RubyForgePublisher.new(project_name, user_id).upload
203
+ end
204
+ end
205
+
206
+ FILE_SORT = lambda{|a, b| File.mtime(a)<=>File.mtime(b)}
207
+
208
+ def spec_files
209
+ @spec_files ||= FileList["./spec/**/*_spec.rb"].sort(&FILE_SORT).reverse
210
+ end
211
+
212
+ def set_spec_opts(spec)
213
+ spec.verbose = false
214
+ if rspec2?
215
+ spec.rspec_opts ||= []
216
+ spec.rspec_opts << "-c"
217
+ spec.rspec_opts << "-I" << "." << "-I" << "./lib" << "-I" << "./external/lib"
218
+ else
219
+ spec.spec_opts << "-c"
220
+ spec.libs << "." << "./lib" << "./external/lib"
221
+ end
222
+ end
223
+
224
+ def define_spec_task
225
+ task :spec => "spec:apart"
226
+ namespace :spec do
227
+ spec_files.each do |f|
228
+ desc ""
229
+ spec_task.new(:apart) do |s|
230
+ if rspec2?
231
+ s.pattern = f
232
+ else
233
+ s.spec_files = FileList[f]
234
+ end
235
+ set_spec_opts(s)
236
+ spec_proc.call(s) if spec_proc
237
+ end
238
+ end
239
+ task(:apart).comment = "Run all specs separately"
240
+
241
+ desc "Run all specs in a lump"
242
+ spec_task.new(:lump) do |s|
243
+ s.spec_files = spec_files unless rspec2?
244
+ set_spec_opts(s)
245
+ spec_proc.call(s) if spec_proc
246
+ end
247
+
248
+ desc "Run all specs to profile"
249
+ spec_task.new(:profile) do |s|
250
+ set_spec_opts(s)
251
+ if rspec2?
252
+ s.rspec_opts << "-p"
253
+ else
254
+ s.spec_opts << "-f" << "profile"
255
+ end
256
+ end
257
+
258
+ `grep -sRn '#[[:space:]]*here\\([[:space:]]\\|$\\)' --include='*.rb' spec`.split(/\n/).map{|l|
259
+ next nil unless l=~/\A(.*?):(\d+):/
260
+ [$1, $2.to_i]
261
+ }.compact.sort{|a, b| FILE_SORT.call(a[0], b[0])}.reverse.each do |file, line|
262
+ desc ""
263
+ spec_task.new(:here) do |s|
264
+ set_spec_opts(s)
265
+ if rspec2?
266
+ s.pattern = file
267
+ s.rspec_opts << "-l#{line}"
268
+ else
269
+ s.spec_files = [file]
270
+ s.spec_opts << "-l#{line}"
271
+ end
272
+ spec_proc.call(s) if spec_proc
273
+ end
274
+ end
275
+ task :no_here => no_here_task
276
+ end
277
+ end
278
+
279
+ def set_cucumber_opts(task)
280
+ task.libs << "."
281
+ cucumber_proc.call(task) if cucumber_proc
282
+ end
283
+
284
+ def define_cucumber_task
285
+ Cucumber::Rake::Task.new do |t|
286
+ set_cucumber_opts(t)
287
+ end
288
+
289
+ unless `grep -sRn '^[[:space:]]*@here$' features`.empty?
290
+ Cucumber::Rake::Task.new("cucumber:here") do |t|
291
+ t.cucumber_opts = %w[--tags @here]
292
+ set_cucumber_opts(t)
293
+ end
294
+ end
295
+ task "cucumber:no_here" => :cucumber
296
+ end
297
+
298
+ def define_here_dependency
299
+ unless Rake::Task.task_defined?("spec:here") || Rake::Task.task_defined?("cucumber:here")
300
+ task "spec:here" => "spec:no_here" if need_spec? && !Rake::Task.task_defined?("spec:here")
301
+ task "cucumber:here" => "cucumber:no_here" if need_cucumber? && !Rake::Task.task_defined?("cucumber:here")
302
+ end
303
+
304
+ task("spec:here").comment = "Run spec only marked '# here'"
305
+ task("cucumber:here").comment = "only tagged '@here'"
306
+ end
307
+
308
+ def rcov_opts(t, aggregation)
309
+ t.rcov_opts ||= []
310
+ t.rcov_opts << "-I" << "./spec:./lib:./external/lib"
311
+ t.rcov_opts << "--exclude" << "gems\/,features\/,external\/"
312
+ t.rcov_opts << "--aggregate" << "coverage.data" if aggregation
313
+ t.rcov = true
314
+ end
315
+
316
+ def define_rcov_each_task(aggregation)
317
+ if need_spec?
318
+ spec_task.new do |t|
319
+ t.verbose = false
320
+ rcov_opts(t, aggregation)
321
+ if rspec2?
322
+ t.rcov_opts << "-o" << "coverage.spec" unless aggregation
323
+ else
324
+ set_spec_opts(t)
325
+ t.spec_files = spec_files
326
+ t.rcov_dir = "coverage.spec" unless aggregation
327
+ end
328
+ rcov_spec_proc.call(t) if rcov_spec_proc
329
+ end
330
+ else
331
+ task "spec"
332
+ end
333
+
334
+ if need_cucumber?
335
+ Cucumber::Rake::Task.new do |t|
336
+ set_cucumber_opts(t)
337
+ rcov_opts(t, aggregation)
338
+ t.rcov_opts << "-o" << "coverage.cuke" unless aggregation
339
+ end
340
+ else
341
+ task "cucumber"
342
+ end
343
+ end
344
+
345
+ def define_rcov_task
346
+ namespace :rcov do
347
+ define_rcov_each_task(false)
348
+ end
349
+
350
+ desc "Run specs and Cucumber using RCov"
351
+ task "rcov:lump" do
352
+ rm "coverage.data" if File.exist?("coverage.data")
353
+ ns = namespace do
354
+ define_rcov_each_task(true)
355
+ end
356
+ ns.tasks.each do |t|
357
+ t.invoke
358
+ end
359
+ rm "coverage.data"
360
+ end
361
+
362
+ task "rcov:all" => %w[rcov:spec rcov:cucumber rcov:lump]
363
+ end
364
+
365
+ def define_alias_task
366
+ if Rake::Task.task_defined?("spec:apart")
367
+ task :apart => "spec:apart"
368
+ task :lump => "spec:lump"
369
+ task :here => "spec:here"
370
+ task :profile => "spec:profile"
371
+ end
372
+ task :here => "cucumber:here" if Rake::Task.task_defined?("cucumber:here")
373
+ end
374
+ end