mvz-live_ast 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.rdoc +14 -0
  3. data/Rakefile +48 -9
  4. data/devel/levitate.rb +5 -674
  5. data/lib/live_ast/common.rb +22 -21
  6. data/lib/live_ast/error.rb +2 -2
  7. data/lib/live_ast/irb_spy.rb +4 -6
  8. data/lib/live_ast/linker.rb +7 -7
  9. data/lib/live_ast/loader.rb +6 -6
  10. data/lib/live_ast/reader.rb +2 -2
  11. data/lib/live_ast/replace_eval.rb +27 -31
  12. data/lib/live_ast/replace_load.rb +1 -1
  13. data/lib/live_ast/ruby_parser.rb +24 -22
  14. data/lib/live_ast/ruby_parser/test.rb +183 -179
  15. data/lib/live_ast/ruby_parser/unparser.rb +10 -6
  16. data/lib/live_ast/to_ast.rb +1 -1
  17. data/lib/live_ast/version.rb +1 -1
  18. data/test/ast_eval/ast_eval_test.rb +11 -0
  19. data/test/ast_load/ast_load_test.rb +45 -0
  20. data/test/backtrace_test.rb +29 -28
  21. data/test/{noninvasive_test.rb → base/noninvasive_test.rb} +7 -5
  22. data/test/base/reload_test.rb +41 -0
  23. data/test/covert_define_method_test.rb +1 -1
  24. data/test/define_method_test.rb +5 -5
  25. data/test/encoding_test.rb +5 -5
  26. data/test/error_test.rb +6 -6
  27. data/test/eval_test.rb +7 -7
  28. data/test/flush_cache_test.rb +6 -6
  29. data/test/full/ast_reload_test.rb +39 -0
  30. data/test/{replace_eval_test.rb → full/replace_eval_test.rb} +31 -12
  31. data/test/irb_test.rb +1 -1
  32. data/test/lambda_test.rb +7 -0
  33. data/test/load_path_test.rb +12 -12
  34. data/test/load_test.rb +35 -35
  35. data/test/main.rb +19 -27
  36. data/test/nested_test.rb +1 -1
  37. data/test/readme_test.rb +1 -3
  38. data/test/recursive_eval_test.rb +2 -3
  39. data/test/redefine_method_test.rb +2 -2
  40. data/test/rubygems_test.rb +1 -1
  41. data/test/rubyspec_test.rb +3 -3
  42. data/test/stdlib_test.rb +1 -1
  43. data/test/thread_test.rb +1 -2
  44. data/test/to_ast/to_ast_feature_test.rb +11 -0
  45. data/test/to_ruby/to_ruby_feature_test.rb +11 -0
  46. data/test/{to_ruby_test.rb → to_ruby/to_ruby_test.rb} +2 -2
  47. metadata +93 -91
  48. data/test/ast_eval_feature_test.rb +0 -11
  49. data/test/ast_load_feature_test.rb +0 -11
  50. data/test/reload_test.rb +0 -105
  51. data/test/to_ast_feature_test.rb +0 -15
  52. data/test/to_ruby_feature_test.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 54c2bef5998513163fc9b5ab901c9a0736051980
4
- data.tar.gz: b9cde24a8e1daff48cf8f0554ae327fa001b36a6
3
+ metadata.gz: 897291ec9d3c788854d81ceac045a13bc0c3ce99
4
+ data.tar.gz: a435731330baaac2e536d96aeb04f22af1179fb2
5
5
  SHA512:
6
- metadata.gz: f7cba61dc5781d0d817804e024fe473c9f8c3a4c59c4a71d0b2d488a9a1e34528df1db5473166a43bf44f5fe37a7001c7517ad077efe57e865c6d0eba5e343ae
7
- data.tar.gz: 134c897d7ec68c3b633b5345bd59647f9fcbcdeec36c01c65667bb1fc3c496190fbf03b3a93c8c85cef92ce84e082ad98fa4f43aea8d491a291222db8bcfcb79
6
+ metadata.gz: dfeeab4452c22121bf20220b6b49e8b9fbcbe957697209891684edd418f6286b9a32489a872780bed0068cb3f7a79a83bef4bdbe2c7bcc24a80e03076a927bd2
7
+ data.tar.gz: bf06a3f0415e2462bc84248719ed7023afeceb58585fe5bac6780563b6152b6e356f13b5712723a679552e374d10a1784027e5304c46e062debdd58d7770ebfc
data/CHANGES.rdoc CHANGED
@@ -1,6 +1,20 @@
1
1
 
2
2
  = live_ast Changes
3
3
 
4
+ == Version 1.1.2
5
+
6
+ * Update dependencies
7
+ * Improve test suite:
8
+ - Separate suites for different sets of loaded live_ast features
9
+ - Eliminate test run order dependencies
10
+ * Clean up code
11
+ * Fix error handling for nil file argument of instance_eval
12
+
13
+ == Version 1.1.1
14
+
15
+ * Support Ruby 2.0 and 2.1
16
+ * Update RubyParser dependency
17
+
4
18
  == Version 1.1.0
5
19
 
6
20
  * incorporate default parser in the main gem
data/Rakefile CHANGED
@@ -1,21 +1,60 @@
1
1
  require 'rake/clean'
2
- require "bundler/gem_tasks"
2
+ require 'bundler/gem_tasks'
3
3
  require 'rake/testtask'
4
4
  require 'rdoc/task'
5
5
 
6
- desc 'run tests'
7
- Rake::TestTask.new(:test) do |t|
8
- t.libs = ['lib']
9
- t.ruby_opts += ["-w -Itest"]
10
- t.test_files = FileList['test/**/*_test.rb']
6
+ namespace :test do
7
+ desc 'run tests'
8
+ Rake::TestTask.new(:main) do |t|
9
+ t.libs = ['lib']
10
+ t.ruby_opts += ["-w -Itest"]
11
+ t.test_files = FileList['test/*_test.rb']
12
+ end
13
+
14
+ Rake::TestTask.new(:base) do |t|
15
+ t.libs = ['lib']
16
+ t.ruby_opts += ["-w -Itest"]
17
+ t.test_files = FileList['test/base/*_test.rb']
18
+ end
19
+
20
+ Rake::TestTask.new(:ast_load) do |t|
21
+ t.libs = ['lib']
22
+ t.ruby_opts += ["-w -Itest"]
23
+ t.test_files = FileList['test/ast_load/*_test.rb']
24
+ end
25
+
26
+ Rake::TestTask.new(:ast_eval) do |t|
27
+ t.libs = ['lib']
28
+ t.ruby_opts += ["-w -Itest"]
29
+ t.test_files = FileList['test/ast_eval/*_test.rb']
30
+ end
31
+
32
+ Rake::TestTask.new(:to_ast) do |t|
33
+ t.libs = ['lib']
34
+ t.ruby_opts += ["-w -Itest"]
35
+ t.test_files = FileList['test/to_ast/*_test.rb']
36
+ end
37
+
38
+ Rake::TestTask.new(:to_ruby) do |t|
39
+ t.libs = ['lib']
40
+ t.ruby_opts += ["-w -Itest"]
41
+ t.test_files = FileList['test/to_ruby/*_test.rb']
42
+ end
43
+
44
+ Rake::TestTask.new(:full) do |t|
45
+ t.libs = ['lib']
46
+ t.ruby_opts += ["-w -Itest"]
47
+ t.test_files = FileList['test/full/*_test.rb']
48
+ end
49
+
50
+ task all: [:main, :base, :ast_load, :to_ast, :to_ruby, :full]
11
51
  end
12
52
 
13
53
  RDoc::Task.new(:rdoc) do |t|
14
54
  t.main = "README.rdoc"
15
55
  t.title = "LiveAST: Live Abstract Syntax Trees"
16
- t.options += ["--visibility", "private" ]
56
+ t.options += ["--visibility", "private"]
17
57
  t.rdoc_files.include("README.rdoc", "CHANGES.rdoc", "lib")
18
-
19
58
  end
20
59
 
21
- task default: :test
60
+ task default: 'test:all'
data/devel/levitate.rb CHANGED
@@ -1,596 +1,5 @@
1
-
2
1
  class Levitate
3
- include Rake::DSL if defined? Rake::DSL
4
-
5
- def initialize(gem_name)
6
- @gem_name = gem_name
7
-
8
- $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
9
-
10
- yield self
11
-
12
- self.class.instance_methods(false).sort.each do |name|
13
- if name.to_s =~ %r!\Adefine_!
14
- send(name)
15
- end
16
- end
17
- end
18
-
19
- attr_reader :gem_name
20
-
21
- def self.attribute(name, &block)
22
- var = :"@#{name}"
23
- define_method name do
24
- if instance_variable_defined?(var)
25
- instance_variable_get(var)
26
- else
27
- instance_variable_set(var, instance_eval(&block))
28
- end
29
- end
30
- attr_writer name
31
- end
32
-
33
- attribute :version_constant_name do
34
- "VERSION"
35
- end
36
-
37
- attribute :camel_name do
38
- to_camel_case(gem_name)
39
- end
40
-
41
- attribute :version do
42
- catch :bail do
43
- if File.file?(version_file = "./lib/#{gem_name}/version.rb")
44
- require version_file
45
- elsif File.file?("./lib/#{gem_name}.rb")
46
- require gem_name
47
- else
48
- throw :bail
49
- end
50
- mod = Kernel.const_get(camel_name)
51
- constants = mod.constants.map { |t| t.to_sym }
52
- unless constants.include?(version_constant_name.to_sym)
53
- throw :bail
54
- end
55
- mod.const_get(version_constant_name)
56
- end or "0.0.0"
57
- end
58
-
59
- attribute :required_ruby_version do
60
- ">= 0"
61
- end
62
-
63
- attribute :readme_file do
64
- "README.rdoc"
65
- end
66
-
67
- attribute :history_file do
68
- "CHANGES.rdoc"
69
- end
70
-
71
- attribute :doc_dir do
72
- "doc"
73
- end
74
-
75
- attribute :spec_files do
76
- Dir["./spec/*_{spec,example}.rb"]
77
- end
78
-
79
- attribute :test_files do
80
- (Dir["./test/test_*.rb"] + Dir["./test/*_test.rb"]).uniq
81
- end
82
-
83
- attribute :cov_dir do
84
- "coverage"
85
- end
86
-
87
- attribute :spec_output_dir do
88
- "rspec_output"
89
- end
90
-
91
- attribute :spec_output_file do
92
- "spec.html"
93
- end
94
-
95
- attribute :spec_output do
96
- "#{spec_output_dir}/#{spec_output_file}"
97
- end
98
-
99
- attribute :rcov_options do
100
- # workaround for the default rspec task
101
- Dir["*"].select { |f| File.directory? f }.inject(Array.new) { |acc, dir|
102
- if dir == "lib"
103
- acc
104
- else
105
- acc + ["--exclude", dir + "/"]
106
- end
107
- } + ["--text-report"]
108
- end
109
-
110
- attribute :generated_files do
111
- []
112
- end
113
-
114
- attribute :extra_gemspec do
115
- lambda { |spec| }
116
- end
117
-
118
- attribute :files do
119
- if source_control?
120
- IO.popen("git ls-files") { |pipe| pipe.read.split "\n" }
121
- end.to_a + generated_files
122
- end
123
-
124
- attribute :rdoc_files do
125
- files_in_require_paths
126
- end
127
-
128
- attribute :rdoc_title do
129
- "#{gem_name}: #{summary}".sub(/\.\Z/, "")
130
- end
131
-
132
- attribute :require_paths do
133
- ["lib"]
134
- end
135
-
136
- attribute :rdoc_options do
137
- if File.file?(readme_file)
138
- ["--main", readme_file]
139
- else
140
- []
141
- end + [
142
- "--title", rdoc_title,
143
- ] + (files_in_require_paths - rdoc_files).inject(Array.new) {
144
- |acc, file|
145
- acc + ["--exclude", file]
146
- }
147
- end
148
-
149
- attribute :extra_rdoc_files do
150
- [readme_file, history_file].select { |file| File.file?(file) }
151
- end
152
-
153
- attribute :browser do
154
- require 'rbconfig'
155
- if RbConfig::CONFIG["host"] =~ %r!darwin!
156
- "open"
157
- else
158
- "firefox"
159
- end
160
- end
161
-
162
- attribute :gemspec do
163
- Gem::Specification.new do |g|
164
- %w[
165
- summary
166
- version
167
- description
168
- files
169
- rdoc_options
170
- extra_rdoc_files
171
- require_paths
172
- required_ruby_version
173
- ].each do |param|
174
- t = send(param) and g.send("#{param}=", t)
175
- end
176
- g.name = gem_name
177
- g.homepage = url if url
178
- dependencies.each { |dep|
179
- g.add_dependency(*dep)
180
- }
181
- development_dependencies.each { |dep|
182
- g.add_development_dependency(*dep)
183
- }
184
- g.authors = developers.map { |d| d[0] }
185
- g.email = developers.map { |d| d[1] }
186
- extra_gemspec.call(g)
187
- end
188
- end
189
-
190
- attribute :readme_contents do
191
- File.read(readme_file) rescue "FIXME: readme_file"
192
- end
193
-
194
- attribute :sections do
195
- begin
196
- data = readme_contents.split(%r!^==\s*(.*?)\s*$!)
197
- pairs = data[1..-1].each_slice(2).map { |section, contents|
198
- [section.downcase, contents.strip]
199
- }
200
- Hash[*pairs.flatten]
201
- rescue
202
- nil
203
- end
204
- end
205
-
206
- attribute :description_section do
207
- "description"
208
- end
209
-
210
- attribute :summary_section do
211
- "summary"
212
- end
213
-
214
- attribute :description_sentences do
215
- 1
216
- end
217
-
218
- attribute :summary_sentences do
219
- 1
220
- end
221
-
222
- [:summary, :description].each { |section|
223
- attribute section do
224
- begin
225
- sections[send("#{section}_section")].
226
- gsub("\n", " ").
227
- split(%r!\.\s+!m).
228
- first(send("#{section}_sentences")).
229
- join(". ").
230
- concat(".").
231
- sub(%r!\.+\Z!, ".")
232
- rescue
233
- "FIXME: #{section}"
234
- end
235
- end
236
- }
237
-
238
- attribute :url do
239
- "http://#{username}.github.com/#{gem_name}"
240
- end
241
-
242
- attribute :username do
243
- raise "username not set"
244
- end
245
-
246
- attribute :rubyforge_info do
247
- nil
248
- end
249
-
250
- attribute :dependencies do
251
- []
252
- end
253
-
254
- attribute :development_dependencies do
255
- []
256
- end
257
-
258
- attribute :developers do
259
- []
260
- end
261
-
262
- attribute :remote_levitate do
263
- url = ENV["LEVITATE"] ||
264
- "https://raw.github.com/quix/levitate/master/levitate.rb"
265
- IO.popen("curl -s #{url}") { |f| f.read }
266
- end
267
-
268
- attribute :local_levitate do
269
- File.open(__FILE__, "rb") { |f| f.read }
270
- end
271
-
272
- #### tasks
273
-
274
- def define_clean
275
- require 'rake/clean'
276
- task :clean do
277
- Rake::Task[:clobber].invoke
278
- end
279
- end
280
-
281
- def define_package
282
- if source_control?
283
- require 'rubygems/package_task'
284
-
285
- task :package => :clean
286
- Gem::PackageTask.new(gemspec).define
287
- end
288
- end
289
-
290
- def define_spec
291
- unless spec_files.empty?
292
- no_warnings {
293
- require 'spec/rake/spectask'
294
- }
295
-
296
- desc "run specs"
297
- Spec::Rake::SpecTask.new('spec') do |t|
298
- t.spec_files = spec_files
299
- end
300
-
301
- desc "run specs with text output"
302
- Spec::Rake::SpecTask.new('text_spec') do |t|
303
- t.spec_files = spec_files
304
- t.spec_opts = ['-fs']
305
- end
306
-
307
- desc "run specs with html output"
308
- Spec::Rake::SpecTask.new('full_spec') do |t|
309
- t.spec_files = spec_files
310
- t.rcov = true
311
- t.rcov_opts = rcov_options
312
- t.spec_opts = ["-fh:#{spec_output}"]
313
- end
314
-
315
- suppress_task_warnings :spec, :full_spec, :text_spec
316
-
317
- desc "run full_spec then open browser"
318
- task :show_spec => :full_spec do
319
- open_browser(spec_output, cov_dir + "/index.html")
320
- end
321
-
322
- desc "run specs individually"
323
- task :spec_deps do
324
- run_each_file(*spec_files)
325
- end
326
-
327
- task :prerelease => [:spec, :spec_deps]
328
- task :default => :spec
329
-
330
- CLEAN.add spec_output_dir
331
- end
332
- end
333
-
334
- def define_test
335
- unless test_files.empty?
336
- desc "run tests"
337
- task :test do
338
- test_files.each { |file| require file }
339
-
340
- # if we use at_exit hook instead, it won't run before :release
341
- MiniTest::Unit.new.run ARGV
342
- end
343
-
344
- desc "run tests with coverage"
345
- if ruby_18?
346
- task :full_test do
347
- verbose(false) {
348
- sh("rcov", "-o", cov_dir, "--text-report",
349
- *(test_files + rcov_options)
350
- )
351
- }
352
- end
353
- else
354
- task :full_test do
355
- rm_rf cov_dir
356
- require 'simplecov'
357
- SimpleCov.start do
358
- add_filter "test/"
359
- add_filter "devel/"
360
- end
361
- Rake::Task[:test].invoke
362
- end
363
- end
364
-
365
- desc "run full_test then open browser"
366
- task :show_test => :full_test do
367
- show = lambda { open_browser(cov_dir + "/index.html") }
368
- if ruby_18?
369
- show.call
370
- else
371
- SimpleCov.at_exit do
372
- SimpleCov.result.format!
373
- show.call
374
- end
375
- end
376
- end
377
-
378
- desc "run tests individually"
379
- task :test_deps do
380
- run_each_file(*test_files)
381
- end
382
-
383
- task :prerelease => [:test, :test_deps]
384
- task :default => :test
385
-
386
- CLEAN.add cov_dir
387
- end
388
- end
389
-
390
- def define_doc
391
- desc "run rdoc"
392
- task :doc => :clean_doc do
393
- gem 'rdoc' rescue nil
394
- require 'rdoc/rdoc'
395
- args = (
396
- gemspec.rdoc_options +
397
- gemspec.require_paths.clone +
398
- gemspec.extra_rdoc_files +
399
- ["-o", doc_dir]
400
- ).flatten.map { |t| t.to_s }
401
- RDoc::RDoc.new.document args
402
- end
403
-
404
- task :clean_doc do
405
- # normally rm_rf, but mimic rake/clean output
406
- rm_r(doc_dir) rescue nil
407
- end
408
-
409
- desc "run rdoc then open browser"
410
- task :show_doc => :doc do
411
- open_browser(doc_dir + "/index.html")
412
- end
413
-
414
- task :rdoc => :doc
415
- task :clean => :clean_doc
416
- end
417
-
418
- def define_publish
419
- if source_control?
420
- desc "publish docs"
421
- task :publish => [:clean, :check_directory, :doc] do
422
- current_branch = `git branch`[/^\* (\S+)$/, 1] or raise "??? branch"
423
- if rubyforge_info
424
- user, project = rubyforge_info
425
- Dir.chdir(doc_dir) do
426
- sh "scp", "-r",
427
- ".",
428
- "#{user}@rubyforge.org:/var/www/gforge-projects/#{project}"
429
- end
430
- end
431
- git "branch", "-D", "gh-pages"
432
- git "checkout", "--orphan", "gh-pages"
433
- FileUtils.rm ".git/index"
434
- git "clean", "-fdx", "-e", "doc"
435
- Dir["doc/*"].each { |path|
436
- FileUtils.mv path, "."
437
- }
438
- FileUtils.rmdir "doc"
439
- git "add", "."
440
- git "commit", "-m", "generated by rdoc"
441
- git "checkout", current_branch
442
- git "push", "-f", "origin", "gh-pages"
443
- end
444
- end
445
- end
446
-
447
- def define_install
448
- desc "direct install (no gem)"
449
- task :install do
450
- Installer.new.install
451
- end
452
-
453
- desc "direct uninstall (no gem)"
454
- task :uninstall do
455
- Installer.new.uninstall
456
- end
457
- end
458
-
459
- def define_check_directory
460
- task :check_directory do
461
- unless `git status` =~ %r!nothing to commit \(working directory clean\)!
462
- raise "directory not clean"
463
- end
464
- end
465
- end
466
-
467
- def define_ping
468
- task :ping do
469
- require 'rbconfig'
470
- [
471
- "github.com",
472
- ("rubyforge.org" if rubyforge_info),
473
- ].compact.each do |server|
474
- cmd = "ping " + (
475
- if RbConfig::CONFIG["host"] =~ %r!darwin!
476
- "-c2 #{server}"
477
- else
478
- "#{server} 2 2"
479
- end
480
- )
481
- unless `#{cmd}` =~ %r!0% packet loss!
482
- raise "No ping for #{server}"
483
- end
484
- end
485
- end
486
- end
487
-
488
- def define_check_levitate
489
- task :check_levitate do
490
- unless local_levitate == remote_levitate
491
- raise "levitate is out of date"
492
- end
493
- end
494
- end
495
-
496
- def define_update_levitate
497
- task :update_levitate do
498
- if local_levitate == remote_levitate
499
- puts "Already up-to-date."
500
- else
501
- File.open(__FILE__, "w") { |f| f.print(remote_levitate) }
502
- git "commit", __FILE__, "-m", "update tools"
503
- puts "Updated levitate."
504
- end
505
- end
506
- end
507
-
508
- def define_changes
509
- task :changes do
510
- if File.read(history_file).index version
511
- raise "version not updated"
512
- end
513
-
514
- header = "\n\n== Version #{version}\n\n"
515
-
516
- bullets = `git log --format=%s #{last_release}..HEAD`.lines.map { |line|
517
- "* #{line}"
518
- }.join.chomp
519
-
520
- write_file(history_file) do
521
- File.read(history_file).sub(/(?<=#{gem_name} Changes)/) {
522
- header + bullets
523
- }
524
- end
525
- end
526
- end
527
-
528
- def define_release
529
- task :prerelease => [
530
- :clean,
531
- :check_directory,
532
- :check_levitate,
533
- :ping,
534
- history_file
535
- ]
536
-
537
- task :finish_release do
538
- git "tag", "#{gem_name}-" + version.to_s
539
- git "push", "--tags", "origin", "master"
540
- sh "gem", "push", "pkg/#{gem_name}-#{version}.gem"
541
- end
542
-
543
- task :release => [:prerelease, :package, :finish_release, :publish]
544
- end
545
-
546
- def define_debug_gem
547
- task :debug_gem do
548
- puts gemspec.to_ruby
549
- end
550
- end
551
-
552
- #### helpers
553
-
554
- def files_in_require_paths
555
- require_paths.inject([]) { |acc, dir|
556
- acc + Dir.glob("#{dir}/**/*.rb")
557
- }
558
- end
559
-
560
- def last_release
561
- `git tag`.lines.select { |t| t.index(gem_name) == 0 }.last.chomp
562
- end
563
-
564
- def git(*args)
565
- sh "git", *args
566
- end
567
-
568
- def open_browser(*files)
569
- sh(*([browser].flatten + files))
570
- end
571
-
572
- def suppress_task_warnings(*task_names)
573
- task_names.each { |task_name|
574
- Rake::Task[task_name].actions.map! { |action|
575
- lambda { |*args|
576
- no_warnings {
577
- action.call(*args)
578
- }
579
- }
580
- }
581
- }
582
- end
583
-
584
- def ruby_18?
585
- RUBY_VERSION =~ %r!\A1\.8!
586
- end
587
-
588
- def source_control?
589
- File.directory? ".git"
590
- end
591
-
592
2
  #### utility for instance and class
593
-
594
3
  module Util
595
4
  def ruby_bin
596
5
  require 'rbconfig'
@@ -647,7 +56,7 @@ class Levitate
647
56
  pipe.read
648
57
  }
649
58
  end
650
-
59
+
651
60
  def with_warnings(value = true)
652
61
  previous = $VERBOSE
653
62
  $VERBOSE = value
@@ -657,7 +66,7 @@ class Levitate
657
66
  $VERBOSE = previous
658
67
  end
659
68
  end
660
-
69
+
661
70
  def no_warnings(&block)
662
71
  with_warnings(nil, &block)
663
72
  end
@@ -676,7 +85,7 @@ class Levitate
676
85
 
677
86
  def instance_exec2(obj, *args, &block)
678
87
  method_name = ["_", obj.object_id, "_", Thread.current.object_id].join
679
- (class << obj ; self ; end).class_eval do
88
+ (class << obj; self; end).class_eval do
680
89
  define_method method_name, &block
681
90
  begin
682
91
  obj.send(method_name, *args)
@@ -692,22 +101,6 @@ class Levitate
692
101
  #### public helpers for testing
693
102
 
694
103
  class << self
695
- # From 'minitest' by Ryan Davis.
696
- def capture_io
697
- require 'stringio'
698
-
699
- orig_stdout, orig_stderr = $stdout, $stderr
700
- captured_stdout, captured_stderr = StringIO.new, StringIO.new
701
- $stdout, $stderr = captured_stdout, captured_stderr
702
-
703
- yield
704
-
705
- return captured_stdout.string, captured_stderr.string
706
- ensure
707
- $stdout = orig_stdout
708
- $stderr = orig_stderr
709
- end
710
-
711
104
  def run_doc_code(code, expected, index, instance, &block)
712
105
  lib = File.expand_path(File.dirname(__FILE__) + "/../lib")
713
106
  header = %{
@@ -736,7 +129,7 @@ class Levitate
736
129
  def run_doc_section(file, section, instance, &block)
737
130
  contents = File.read(file)
738
131
  re = %r!^=+[ \t]#{Regexp.quote(section)}.*?\n(.*?)^=!m
739
- if section_contents = contents[re, 1]
132
+ if (section_contents = contents[re, 1])
740
133
  index = 0
741
134
  section_contents.scan(%r!^( \S.*?)(?=(^\S|\Z))!m) { |indented, unused|
742
135
  code_sections = indented.split(%r!^ \#\#\#\# output:\s*$!)
@@ -759,29 +152,9 @@ class Levitate
759
152
  end
760
153
  end
761
154
 
762
- def doc_to_spec(file, *sections, &block)
763
- levitate = self
764
- describe file do
765
- sections.each { |section|
766
- describe "section `#{section}'" do
767
- it "should run as claimed" do
768
- if block
769
- levitate.run_doc_section(file, section, self, &block)
770
- else
771
- levitate.run_doc_section(file, section, self) {
772
- |expected, actual, index|
773
- actual.should == expected
774
- }
775
- end
776
- end
777
- end
778
- }
779
- end
780
- end
781
-
782
155
  def doc_to_test(file, *sections, &block)
783
156
  levitate = self
784
- klass = Class.new MiniTest::Unit::TestCase do
157
+ klass = Class.new MiniTest::Test do
785
158
  sections.each { |section|
786
159
  define_method "test_#{file}_#{section}" do
787
160
  if block
@@ -803,48 +176,6 @@ class Levitate
803
176
  end
804
177
  attr_writer :ruby_opts
805
178
  end
806
-
807
- #### raw install, bypass gems
808
-
809
- class Installer
810
- def initialize
811
- require 'fileutils'
812
- require 'rbconfig'
813
- require 'find'
814
-
815
- @fu = FileUtils::Verbose
816
- @spec = []
817
-
818
- rb_root = RbConfig::CONFIG["sitelibdir"]
819
-
820
- Find.find "lib" do |source|
821
- next if source == "lib"
822
- next unless File.directory?(source) || File.extname(source) == ".rb"
823
- dest = File.join(rb_root, source.sub(%r!\Alib/!, ""))
824
- @spec << [source, dest]
825
- end
826
- end
827
-
828
- def install
829
- @spec.each do |source, dest|
830
- if File.directory?(source)
831
- @fu.mkdir(dest) unless File.directory?(dest)
832
- else
833
- @fu.install(source, dest)
834
- end
835
- end
836
- end
837
-
838
- def uninstall
839
- @spec.reverse.each do |source, dest|
840
- if File.directory?(source)
841
- @fu.rmdir(dest) if File.directory?(dest)
842
- else
843
- @fu.rm(dest) if File.file?(dest)
844
- end
845
- end
846
- end
847
- end
848
179
  end
849
180
 
850
181
  lambda do