eimxml 0.0.2 → 0.0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +24 -95
- data/Rakefile.utirake +374 -0
- data/lib/eim_xml.rb +95 -220
- data/lib/eim_xml/dsl.rb +105 -0
- data/lib/eim_xml/formatter.rb +123 -0
- data/lib/eim_xml/formatter/element_wrapper.rb +7 -0
- data/lib/eim_xml/parser.rb +12 -40
- data/lib/eim_xml/xhtml.rb +84 -56
- data/lib/eim_xml/xhtml/dsl.rb +18 -0
- data/{test → spec}/assertions_test.rb +1 -0
- data/spec/dsl_spec.rb +217 -0
- data/spec/eim_xml_spec.rb +441 -0
- data/spec/formatter_spec.rb +260 -0
- data/spec/parser_spec.rb +102 -0
- data/spec/xhtml_spec.rb +524 -0
- metadata +52 -38
- data/README +0 -58
- data/test/eim_xml_test.rb +0 -648
- data/test/parser_test.rb +0 -102
- data/test/xhtml_test.rb +0 -340
data/Rakefile
CHANGED
@@ -1,102 +1,31 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
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
|
-
|
56
|
-
s.
|
57
|
-
|
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
|
-
|
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
|
-
|
88
|
-
task :gem => GEM_DIR do
|
89
|
-
build_gem
|
28
|
+
alias_task
|
90
29
|
end
|
91
30
|
|
92
|
-
|
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
|
data/Rakefile.utirake
ADDED
@@ -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
|