mvz-live_ast 1.1.1 → 1.1.2

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.
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