eimxml 0.0.2 → 0.0.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,102 +1,31 @@
1
- require "rake/clean"
2
- require "rake/rdoctask"
3
- require "rake/gempackagetask"
4
- require "spec/rake/spectask"
5
-
6
- FILES = FileList["**/*"].exclude(/^pkg/, /\.html$/)
7
-
8
- task :default => :test
9
-
10
- ### Document ###
11
- RDOC_DIR = "./html/"
12
- RDOC_OPTS = ["-S", "-w", "3", "-c", "UTF-8", "-m", "README"]
13
- RDOC_OPTS << "-d" if ENV["DOT"]
14
- RDOC_FILES = FileList["lib/**/*.rb"]
15
- RDOC_EXTRAS = FileList["README"]
16
- ["", "ja", "en"].each do |l|
17
- dir = RDOC_DIR.dup
18
- dir << "#{l}/" unless l.empty?
19
- Rake::RDocTask.new("rdoc#{":"+l unless l.empty?}") do |rdoc|
20
- rdoc.title = "Easy IMplemented XML"
21
- rdoc.options = RDOC_OPTS.dup
22
- rdoc.options << "-l" << l unless l.empty?
23
- rdoc.rdoc_dir = dir
24
- rdoc.rdoc_files.include(RDOC_FILES, RDOC_EXTRAS)
25
- end
26
- end
27
- task "rdoc:all" => ["rdoc", "rdoc:ja", "rdoc:en"]
28
- task "rerdoc:all" => ["rerdoc", "rerdoc:ja", "rerdoc:en"]
29
-
30
-
31
- ### Publish document ###
32
- task :publish => [:clobber_rdoc, "rdoc:ja", "rdoc:en"] do
33
- require "rake/contrib/rubyforgepublisher"
34
- cp "index.html", "html/index.html"
35
- Rake::RubyForgePublisher.new("eimxml", "hiraku").upload
36
- end
37
-
38
- ### Test ###
39
- task :test => "test:lump"
40
- namespace :test do
41
- def set_spec_options(spec)
42
- spec.ruby_opts << "-rtest/unit"
43
- spec.spec_opts << "-c"
44
- spec.libs << "lib"
1
+ load "Rakefile.utirake"
2
+ VER = "0.0.3.1"
3
+
4
+ UtiRake.setup do
5
+ rdoc do |t|
6
+ t.title = "Easy IMplemented XML"
7
+ t.main = "README"
8
+ t.rdoc_files.include(FileList["lib/**/*.rb", "README"])
45
9
  end
46
- TEST_FILES = FileList["test/**/*_test.rb"]
47
- TEST_FILES.sort{|a,b| File.mtime(a)<=>File.mtime(b)}.reverse.each do |i|
48
- Spec::Rake::SpecTask.new(:apart) do |s|
49
- s.spec_files = [i]
50
- set_spec_options(s)
51
- end
52
- end
53
- task(:apart).comment = "Run tests separately"
54
10
 
55
- Spec::Rake::SpecTask.new(:lump) do |s|
56
- s.spec_files = TEST_FILES
57
- set_spec_options(s)
11
+ gemspec do |s|
12
+ s.name = "eimxml"
13
+ s.summary = "Easy IMplemented XML"
14
+ s.author = "KURODA Hiraku"
15
+ s.email = "hiraku@hinet.mydns.jp"
16
+ s.homepage = "http://eimxml.rubyforge.org/"
17
+ s.rubyforge_project = "eimxml"
18
+ s.version = VER
19
+ s.post_install_message = "*"*60 << "\n" << <<EOT << "*"*60
20
+ [DEPRECATION]
21
+ "eimxml" gem is deprecated.
22
+ Please use "eim_xml" gem instead.
23
+ EOT
58
24
  end
59
- task(:lump).comment = "Run all tests in a lump"
60
- end
61
25
 
62
- ### Build GEM ###
63
- GEM_DIR = "./pkg"
64
- directory GEM_DIR
65
- def build_gem(unstable=false)
66
- spec = Gem::Specification.new do |spec|
67
- spec.name = "eimxml"
68
- spec.rubyforge_project = "eimxml"
69
- spec.version = ENV["VER"] or raise "Need VER=x.y.z(.?)"
70
- spec.summary = "Easy IMplemented XML"
71
- spec.author = "KURODA Hiraku"
72
- spec.email = "hiraku@hinet.mydns.jp"
73
- spec.homepage = "http://eimxml.rubyforge.org/"
74
- spec.files = FILES
75
- spec.test_files = Dir.glob("test/*.rb")
76
- spec.has_rdoc = true
77
- spec.rdoc_options = RDOC_OPTS.dup
78
- spec.extra_rdoc_files = RDOC_EXTRAS
79
- end
80
-
81
- spec.version = spec.version.to_s << Time.now.strftime(".%Y.%m%d.%H%M") if unstable
82
- b = Gem::Builder.new(spec)
83
- gname = b.build
84
- mv gname, "#{GEM_DIR}/"
85
- end
26
+ publish("eimxml", "hiraku")
86
27
 
87
- desc "Build gem package"
88
- task :gem => GEM_DIR do
89
- build_gem
28
+ alias_task
90
29
  end
91
30
 
92
- desc "Build unstable version gem package"
93
- task "gem:unstable" do
94
- build_gem(true)
95
- end
96
-
97
-
98
- ### Build package ###
99
- package_task = Rake::PackageTask.new("eim_xml",ENV["VER"] || :noversion) do |t|
100
- t.package_files.include(FILES)
101
- t.need_tar_gz = true
102
- end
31
+ task :default => :spec
@@ -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