live_ast 0.7.0 → 0.7.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/CHANGES.rdoc CHANGED
@@ -1,11 +1,15 @@
1
1
 
2
2
  = live_ast Changes
3
3
 
4
+ == Version 0.7.1
5
+
6
+ * fix rubygems problem when parser not loaded after live_ast/full
7
+
4
8
  == Version 0.7.0
5
9
 
6
10
  * eval replacement option now included in the gem
7
11
  * new 'boc' gem for eval replacement -- no more syntax restrictions
8
- * add require 'live_ast/full' -- shortcut for 'live_ast' + 'live_ast/replace_eval'
12
+ * add require 'live_ast/full' -- shortcut for live_ast + live_ast/replace_eval
9
13
  * rubyspec conformance for require 'live_ast/full'
10
14
  * added required_ruby_version to gemspec
11
15
  * fixed error when IRB is partially required
data/MANIFEST CHANGED
@@ -57,6 +57,7 @@ test/recursive_eval_test.rb
57
57
  test/redefine_method_test.rb
58
58
  test/reload_test.rb
59
59
  test/replace_eval_test.rb
60
+ test/rubygems_test.rb
60
61
  test/rubyspec_test.rb
61
62
  test/stdlib_test.rb
62
63
  test/thread_test.rb
data/README.rdoc CHANGED
@@ -133,7 +133,7 @@ for AST-accessible objects. +ast_eval+ has the same semantics as
133
133
  p u.to_ast
134
134
  # => s(:iter, s(:call, nil, :lambda, s(:arglist)), nil, s(:str, "dynamic3"))
135
135
 
136
- == Full integration
136
+ == Full Integration
137
137
 
138
138
  In order for LiveAST to be transparent to the user, +eval+ must be
139
139
  replaced. This requires the +boc+ gem (http://quix.github.com/boc)
@@ -165,7 +165,7 @@ Since LiveAST itself is pure ruby, any new platforms supported by
165
165
  == Limitations
166
166
 
167
167
  A method or block definition must not share a line with other methods
168
- or blocks in order for its AST to be available.
168
+ or blocks in order for its AST to be accessible.
169
169
 
170
170
  require 'live_ast'
171
171
 
@@ -176,16 +176,20 @@ or blocks in order for its AST to be available.
176
176
 
177
177
  a = lambda { } ; b = lambda { }
178
178
  a.to_ast # => raises LiveAST::MultipleDefinitionsOnSameLineError
179
-
179
+
180
180
  Code given to the <code>-e</code> command-line switch is not
181
181
  AST-accessible.
182
182
 
183
- ----
183
+ Evaled code appearing before <code>require 'live_ast/full'</code> is
184
+ not AST-accessible.
184
185
 
186
+ In some circumstances +ast_eval+ and the replaced +eval+ will not give
187
+ the same backtrace as the original +eval+ (next section).
188
+
189
+ ----
185
190
  == <em>Technical Issues</em>
186
191
 
187
192
  You can probably skip these next sections. Goodbye.
188
-
189
193
  ----
190
194
 
191
195
  == Backtraces
data/devel/levitate.rb CHANGED
@@ -5,79 +5,47 @@ class Levitate
5
5
  require 'fileutils'
6
6
  require 'rbconfig'
7
7
  require 'find'
8
- dest_root = RbConfig::CONFIG["sitelibdir"]
9
- sources = []
10
- Find.find("./lib") { |source|
11
- if install_file?(source)
12
- sources << source
13
- end
14
- }
15
- @spec = sources.inject(Array.new) { |acc, source|
16
- if source == "./lib"
17
- acc
18
- else
19
- dest = File.join(dest_root, source.sub(%r!\A\./lib!, ""))
20
-
21
- install = lambda {
22
- if File.directory?(source)
23
- unless File.directory?(dest)
24
- puts "mkdir #{dest}"
25
- FileUtils.mkdir(dest)
26
- end
27
- else
28
- puts "install #{source} --> #{dest}"
29
- FileUtils.install(source, dest)
30
- end
31
- }
32
-
33
- uninstall = lambda {
34
- if File.directory?(source)
35
- if File.directory?(dest)
36
- puts "rmdir #{dest}"
37
- FileUtils.rmdir(dest)
38
- end
39
- else
40
- if File.file?(dest)
41
- puts "rm #{dest}"
42
- FileUtils.rm(dest)
43
- end
44
- end
45
- }
46
-
47
- acc << {
48
- :source => source,
49
- :dest => dest,
50
- :install => install,
51
- :uninstall => uninstall,
52
- }
53
- end
54
- }
8
+
9
+ rb_root = RbConfig::CONFIG["sitelibdir"]
10
+ @spec = []
11
+
12
+ Find.find "lib" do |source|
13
+ next if source == "lib"
14
+ next unless File.directory?(source) || File.extname(source) == ".rb"
15
+ dest = File.join(rb_root, source.sub(%r!\Alib/!, ""))
16
+ @spec << { :source => source, :dest => dest }
17
+ end
55
18
  end
56
19
 
57
- def install_file?(source)
58
- File.directory?(source) or
59
- (File.file?(source) and File.extname(source) == ".rb")
60
- end
61
-
62
20
  def install
63
- @spec.each { |entry|
64
- entry[:install].call
65
- }
21
+ @spec.each do |entry|
22
+ source, dest = entry.values_at(:source, :dest)
23
+ if File.directory?(source)
24
+ unless File.directory?(dest)
25
+ puts "mkdir #{dest}"
26
+ FileUtils.mkdir(dest)
27
+ end
28
+ else
29
+ puts "install #{source} --> #{dest}"
30
+ FileUtils.install(source, dest)
31
+ end
32
+ end
66
33
  end
67
34
 
68
35
  def uninstall
69
- @spec.reverse.each { |entry|
70
- entry[:uninstall].call
71
- }
72
- end
73
-
74
- def run(args = ARGV)
75
- if args.empty?
76
- install
77
- elsif args.size == 1 and args.first == "--uninstall"
78
- uninstall
79
- else
80
- raise "unrecognized arguments: #{args.inspect}"
36
+ @spec.reverse.each do |entry|
37
+ source, dest = entry.values_at(:source, :dest)
38
+ if File.directory?(source)
39
+ if File.directory?(dest)
40
+ puts "rmdir #{dest}"
41
+ FileUtils.rmdir(dest)
42
+ end
43
+ else
44
+ if File.file?(dest)
45
+ puts "rm #{dest}"
46
+ FileUtils.rm(dest)
47
+ end
48
+ end
81
49
  end
82
50
  end
83
51
  end
@@ -522,6 +490,13 @@ class Levitate
522
490
  attribute :extensions do
523
491
  ["ext/#{gem_name}/extconf.rb"].select { |f| File.file? f }
524
492
  end
493
+
494
+ attribute :so_file do
495
+ unless extensions.empty?
496
+ require 'rbconfig'
497
+ "lib/" + gem_name + "." + RbConfig::CONFIG["DLEXT"]
498
+ end
499
+ end
525
500
 
526
501
  def define_clean
527
502
  require 'rake/clean'
@@ -699,12 +674,28 @@ class Levitate
699
674
  def define_install
700
675
  desc "direct install (no gem)"
701
676
  task :install do
702
- Installer.new.run([])
677
+ Installer.new.install
703
678
  end
704
679
 
705
680
  desc "direct uninstall (no gem)"
706
681
  task :uninstall do
707
- Installer.new.run(["--uninstall"])
682
+ Installer.new.uninstall
683
+ end
684
+
685
+ if so_file
686
+ dest = File.join(RbConfig::CONFIG["sitearchdir"], File.basename(so_file))
687
+
688
+ task :install => so_file do
689
+ puts "install #{so_file} --> #{dest}"
690
+ FileUtils.install(so_file, dest)
691
+ end
692
+
693
+ task :uninstall do
694
+ if File.file?(dest)
695
+ puts "rm #{dest}"
696
+ FileUtils.rm(dest)
697
+ end
698
+ end
708
699
  end
709
700
  end
710
701
 
@@ -804,7 +795,7 @@ class Levitate
804
795
  end
805
796
 
806
797
  def define_extension
807
- unless extensions.empty?
798
+ if so_file and (source_control? or !File.file?(so_file))
808
799
  require 'rbconfig'
809
800
  require 'rake/extensiontask'
810
801
 
@@ -817,9 +808,8 @@ class Levitate
817
808
  end
818
809
  end
819
810
 
820
- so = "lib/#{gem_name}.#{RbConfig::CONFIG["DLEXT"]}"
821
- if Rake::Task[so].needed?
822
- task :test => so
811
+ if Rake::Task[so_file].needed?
812
+ task :test => so_file
823
813
  end
824
814
 
825
815
  task :cross_native_gem do
@@ -917,6 +907,7 @@ class Levitate
917
907
  raise "parse error"
918
908
  end
919
909
  )
910
+ code.gsub!(/^\s*%.*$/, "") # ignore shell command examples
920
911
  run_doc_code(code, expected, index, instance, &block)
921
912
  index += 1
922
913
  }
@@ -45,6 +45,9 @@ module LiveAST
45
45
  end
46
46
  end
47
47
  end
48
+
49
+ # ensure the parser is loaded -- rubygems calls eval
50
+ parser
48
51
  end
49
52
 
50
53
  module Kernel
@@ -1,3 +1,3 @@
1
1
  module LiveAST
2
- VERSION = "0.7.0"
2
+ VERSION = "0.7.1"
3
3
  end
@@ -1,34 +1,23 @@
1
1
  require_relative 'main'
2
2
 
3
- require_relative 'encoding_test/default.rb'
4
- require_relative 'encoding_test/usascii.rb'
5
- require_relative 'encoding_test/utf8.rb'
6
- require_relative 'encoding_test/utf8bom.rb'
7
- require_relative 'encoding_test/utf8bom_only.rb'
8
- require_relative 'encoding_test/usascii_with_utf8bom.rb'
9
- require_relative 'encoding_test/koi8_with_utf8bom.rb'
10
- require_relative 'encoding_test/cp932.rb'
11
- require_relative 'encoding_test/eucjp.rb'
12
- require_relative 'encoding_test/koi8.rb'
13
- require_relative 'encoding_test/koi8_shebang.rb'
14
-
15
3
  class AllEncodingTest < RegularTest
16
- include EncodingTest
17
-
18
- %w[
19
-
4
+ ENC_TESTS = Hash[*%w[
20
5
  default US-ASCII
21
6
  usascii US-ASCII
22
7
  utf8 UTF-8
23
8
  utf8bom UTF-8
9
+ utf8bom_only UTF-8
24
10
  usascii_with_utf8bom US-ASCII
25
11
  koi8_with_utf8bom KOI8-R
26
12
  cp932 Windows-31J
27
13
  eucjp EUC-JP
28
14
  koi8 KOI8-R
29
15
  koi8_shebang KOI8-R
16
+ ]]
17
+
18
+ ENC_TESTS.each_pair do |abbr, name|
19
+ require_relative "encoding_test/#{abbr}"
30
20
 
31
- ].each_slice(2) do |abbr, name|
32
21
  define_method "test_#{abbr}" do
33
22
  str = send("#{abbr}_string")
34
23
  assert_equal name, str.encoding.to_s
@@ -43,6 +32,8 @@ class AllEncodingTest < RegularTest
43
32
  end
44
33
  end
45
34
 
35
+ include EncodingTest
36
+
46
37
  def test_bad
47
38
  orig = assert_raises ArgumentError do
48
39
  live_ast_original_load "./test/encoding_test/bad.rb"
data/test/readme_test.rb CHANGED
@@ -8,6 +8,7 @@ if LiveAST.parser::Test.respond_to?(:unified_sexp?) and
8
8
  "+to_ruby+",
9
9
  "Noninvasive Interface",
10
10
  "Pure Ruby and +ast_eval+",
11
+ "Full Integration",
11
12
  ]
12
13
 
13
14
  Levitate.doc_to_test("README.rdoc", *sections)
@@ -0,0 +1,18 @@
1
+ require_relative 'main'
2
+ require_relative '../devel/levitate'
3
+
4
+ class RubygemsTest < RegularTest
5
+ def test_rubygems
6
+ lib = File.expand_path(File.dirname(__FILE__) + "/../lib")
7
+ result = Levitate::Ruby.run_code_and_capture %{
8
+ $LOAD_PATH.unshift '#{lib}'
9
+ require 'live_ast/full'
10
+ defined?(LiveASTRipper) and LiveASTRipper.steamroll = true
11
+ f = eval %{
12
+ lambda { 'abc' }
13
+ }
14
+ p f.to_ast
15
+ }
16
+ assert_equal no_arg_block(:lambda, 'abc').to_s, result.chomp
17
+ end
18
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: live_ast
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.7.0
5
+ version: 0.7.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - James M. Lawrence
@@ -93,6 +93,7 @@ files:
93
93
  - test/redefine_method_test.rb
94
94
  - test/reload_test.rb
95
95
  - test/replace_eval_test.rb
96
+ - test/rubygems_test.rb
96
97
  - test/rubyspec_test.rb
97
98
  - test/stdlib_test.rb
98
99
  - test/thread_test.rb