mvz-live_ast 1.3.0 → 2.1.0
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.
- checksums.yaml +4 -4
- data/CHANGES.rdoc +21 -1
- data/README.rdoc +17 -3
- data/lib/live_ast/ast_eval.rb +3 -1
- data/lib/live_ast/ast_load.rb +3 -1
- data/lib/live_ast/base.rb +20 -19
- data/lib/live_ast/common.rb +11 -1
- data/lib/live_ast/error.rb +2 -0
- data/lib/live_ast/evaler.rb +5 -3
- data/lib/live_ast/full.rb +4 -2
- data/lib/live_ast/irb_spy.rb +7 -5
- data/lib/live_ast/linker.rb +6 -2
- data/lib/live_ast/loader.rb +7 -2
- data/lib/live_ast/reader.rb +4 -3
- data/lib/live_ast/replace_caller.rb +14 -0
- data/lib/live_ast/replace_eval.rb +15 -14
- data/lib/live_ast/replace_load.rb +3 -1
- data/lib/live_ast/replace_raise.rb +5 -3
- data/lib/live_ast/ruby_parser/test.rb +13 -0
- data/lib/live_ast/ruby_parser/unparser.rb +3 -1
- data/lib/live_ast/ruby_parser.rb +6 -4
- data/lib/live_ast/to_ast.rb +15 -18
- data/lib/live_ast/to_ruby.rb +10 -18
- data/lib/live_ast/version.rb +3 -1
- data/lib/live_ast.rb +6 -4
- metadata +106 -134
- data/Rakefile +0 -60
- data/devel/levitate.rb +0 -184
- data/devel/levitate_config.rb +0 -4
- data/test/alias_test.rb +0 -23
- data/test/ast_eval/ast_eval_test.rb +0 -11
- data/test/ast_load/ast_load_test.rb +0 -45
- data/test/attr_test.rb +0 -24
- data/test/backtrace_test.rb +0 -159
- data/test/base/noninvasive_test.rb +0 -53
- data/test/base/reload_test.rb +0 -41
- data/test/covert_define_method_test.rb +0 -23
- data/test/def_test.rb +0 -35
- data/test/define_method_test.rb +0 -67
- data/test/define_singleton_method_test.rb +0 -15
- data/test/encoding_test/bad.rb +0 -1
- data/test/encoding_test/cp932.rb +0 -6
- data/test/encoding_test/default.rb +0 -5
- data/test/encoding_test/eucjp.rb +0 -6
- data/test/encoding_test/koi8.rb +0 -6
- data/test/encoding_test/koi8_shebang.rb +0 -7
- data/test/encoding_test/koi8_with_utf8bom.rb +0 -6
- data/test/encoding_test/usascii.rb +0 -6
- data/test/encoding_test/usascii_with_utf8bom.rb +0 -6
- data/test/encoding_test/utf8.rb +0 -6
- data/test/encoding_test/utf8bom.rb +0 -6
- data/test/encoding_test/utf8bom_only.rb +0 -5
- data/test/encoding_test/utf8dos.rb +0 -6
- data/test/encoding_test/utf8mac.rb +0 -6
- data/test/encoding_test/utf8mac_alt.rb +0 -6
- data/test/encoding_test/utf8unix.rb +0 -6
- data/test/encoding_test.rb +0 -52
- data/test/error_test.rb +0 -116
- data/test/eval_test.rb +0 -269
- data/test/flush_cache_test.rb +0 -98
- data/test/full/ast_reload_test.rb +0 -39
- data/test/full/replace_eval_test.rb +0 -431
- data/test/irb_test.rb +0 -41
- data/test/lambda_test.rb +0 -63
- data/test/load_path_test.rb +0 -75
- data/test/load_test.rb +0 -123
- data/test/main.rb +0 -129
- data/test/nested_test.rb +0 -29
- data/test/readme_test.rb +0 -14
- data/test/recursive_eval_test.rb +0 -51
- data/test/redefine_method_test.rb +0 -83
- data/test/rubygems_test.rb +0 -25
- data/test/rubyspec_test.rb +0 -37
- data/test/singleton_test.rb +0 -25
- data/test/stdlib_test.rb +0 -13
- data/test/thread_test.rb +0 -43
- data/test/to_ast/to_ast_feature_test.rb +0 -11
- data/test/to_ruby/to_ruby_feature_test.rb +0 -11
- data/test/to_ruby/to_ruby_test.rb +0 -99
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mvz-live_ast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James M. Lawrence
|
8
8
|
- Matijs van Zuijlen
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-02-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ruby2ruby
|
@@ -31,88 +31,159 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 3.
|
34
|
+
version: '3.14'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 3.
|
41
|
+
version: '3.14'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: bindings
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 0.
|
48
|
+
version: 1.0.0
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 0.
|
55
|
+
version: 1.0.0
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
57
|
+
name: minitest
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
62
|
+
version: '5.0'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '5.0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: rake
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: '
|
76
|
+
version: '13.0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
81
|
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
83
|
+
version: '13.0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
|
-
name: rake
|
85
|
+
name: rake-manifest
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- - "
|
88
|
+
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: 0.2.0
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- - "
|
95
|
+
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
97
|
+
version: 0.2.0
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: rdoc
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- - "
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '6.2'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '6.2'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: rubocop
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
103
117
|
- !ruby/object:Gem::Version
|
104
|
-
version: '
|
118
|
+
version: '1.25'
|
105
119
|
type: :development
|
106
120
|
prerelease: false
|
107
121
|
version_requirements: !ruby/object:Gem::Requirement
|
108
122
|
requirements:
|
109
|
-
- - "
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.25'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: rubocop-minitest
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 0.17.1
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: 0.17.1
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: rubocop-packaging
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 0.5.0
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: 0.5.0
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: rubocop-performance
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - "~>"
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '1.13'
|
161
|
+
type: :development
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - "~>"
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '1.13'
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: rubocop-rake
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - "~>"
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: 0.6.0
|
175
|
+
type: :development
|
176
|
+
prerelease: false
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - "~>"
|
110
180
|
- !ruby/object:Gem::Version
|
111
|
-
version:
|
181
|
+
version: 0.6.0
|
112
182
|
description: |2
|
113
183
|
LiveAST enables a program to find the ASTs of objects created by dynamically
|
114
184
|
generated code.
|
115
|
-
email:
|
185
|
+
email:
|
186
|
+
- matijs@matijs.net
|
116
187
|
executables: []
|
117
188
|
extensions: []
|
118
189
|
extra_rdoc_files:
|
@@ -121,9 +192,6 @@ extra_rdoc_files:
|
|
121
192
|
files:
|
122
193
|
- CHANGES.rdoc
|
123
194
|
- README.rdoc
|
124
|
-
- Rakefile
|
125
|
-
- devel/levitate.rb
|
126
|
-
- devel/levitate_config.rb
|
127
195
|
- lib/live_ast.rb
|
128
196
|
- lib/live_ast/ast_eval.rb
|
129
197
|
- lib/live_ast/ast_load.rb
|
@@ -136,6 +204,7 @@ files:
|
|
136
204
|
- lib/live_ast/linker.rb
|
137
205
|
- lib/live_ast/loader.rb
|
138
206
|
- lib/live_ast/reader.rb
|
207
|
+
- lib/live_ast/replace_caller.rb
|
139
208
|
- lib/live_ast/replace_eval.rb
|
140
209
|
- lib/live_ast/replace_load.rb
|
141
210
|
- lib/live_ast/replace_raise.rb
|
@@ -145,61 +214,15 @@ files:
|
|
145
214
|
- lib/live_ast/to_ast.rb
|
146
215
|
- lib/live_ast/to_ruby.rb
|
147
216
|
- lib/live_ast/version.rb
|
148
|
-
- test/alias_test.rb
|
149
|
-
- test/ast_eval/ast_eval_test.rb
|
150
|
-
- test/ast_load/ast_load_test.rb
|
151
|
-
- test/attr_test.rb
|
152
|
-
- test/backtrace_test.rb
|
153
|
-
- test/base/noninvasive_test.rb
|
154
|
-
- test/base/reload_test.rb
|
155
|
-
- test/covert_define_method_test.rb
|
156
|
-
- test/def_test.rb
|
157
|
-
- test/define_method_test.rb
|
158
|
-
- test/define_singleton_method_test.rb
|
159
|
-
- test/encoding_test.rb
|
160
|
-
- test/encoding_test/bad.rb
|
161
|
-
- test/encoding_test/cp932.rb
|
162
|
-
- test/encoding_test/default.rb
|
163
|
-
- test/encoding_test/eucjp.rb
|
164
|
-
- test/encoding_test/koi8.rb
|
165
|
-
- test/encoding_test/koi8_shebang.rb
|
166
|
-
- test/encoding_test/koi8_with_utf8bom.rb
|
167
|
-
- test/encoding_test/usascii.rb
|
168
|
-
- test/encoding_test/usascii_with_utf8bom.rb
|
169
|
-
- test/encoding_test/utf8.rb
|
170
|
-
- test/encoding_test/utf8bom.rb
|
171
|
-
- test/encoding_test/utf8bom_only.rb
|
172
|
-
- test/encoding_test/utf8dos.rb
|
173
|
-
- test/encoding_test/utf8mac.rb
|
174
|
-
- test/encoding_test/utf8mac_alt.rb
|
175
|
-
- test/encoding_test/utf8unix.rb
|
176
|
-
- test/error_test.rb
|
177
|
-
- test/eval_test.rb
|
178
|
-
- test/flush_cache_test.rb
|
179
|
-
- test/full/ast_reload_test.rb
|
180
|
-
- test/full/replace_eval_test.rb
|
181
|
-
- test/irb_test.rb
|
182
|
-
- test/lambda_test.rb
|
183
|
-
- test/load_path_test.rb
|
184
|
-
- test/load_test.rb
|
185
|
-
- test/main.rb
|
186
|
-
- test/nested_test.rb
|
187
|
-
- test/readme_test.rb
|
188
|
-
- test/recursive_eval_test.rb
|
189
|
-
- test/redefine_method_test.rb
|
190
|
-
- test/rubygems_test.rb
|
191
|
-
- test/rubyspec_test.rb
|
192
|
-
- test/singleton_test.rb
|
193
|
-
- test/stdlib_test.rb
|
194
|
-
- test/thread_test.rb
|
195
|
-
- test/to_ast/to_ast_feature_test.rb
|
196
|
-
- test/to_ruby/to_ruby_feature_test.rb
|
197
|
-
- test/to_ruby/to_ruby_test.rb
|
198
217
|
homepage: https://github.com/mvz/live_ast
|
199
218
|
licenses:
|
200
219
|
- MIT
|
201
|
-
metadata:
|
202
|
-
|
220
|
+
metadata:
|
221
|
+
homepage_uri: https://github.com/mvz/live_ast
|
222
|
+
source_code_uri: https://github.com/mvz/live_ast
|
223
|
+
changelog_uri: https://github.com/mvz/live_ast/blob/master/CHANGES.rdoc
|
224
|
+
rubygems_mfa_required: 'true'
|
225
|
+
post_install_message:
|
203
226
|
rdoc_options:
|
204
227
|
- "--main"
|
205
228
|
- README.rdoc
|
@@ -213,66 +236,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
213
236
|
requirements:
|
214
237
|
- - ">="
|
215
238
|
- !ruby/object:Gem::Version
|
216
|
-
version: 2.
|
239
|
+
version: 2.6.0
|
217
240
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
218
241
|
requirements:
|
219
242
|
- - ">="
|
220
243
|
- !ruby/object:Gem::Version
|
221
244
|
version: '0'
|
222
245
|
requirements: []
|
223
|
-
|
224
|
-
|
225
|
-
signing_key:
|
246
|
+
rubygems_version: 3.3.3
|
247
|
+
signing_key:
|
226
248
|
specification_version: 4
|
227
249
|
summary: Live abstract syntax trees of methods and procs.
|
228
|
-
test_files:
|
229
|
-
- test/readme_test.rb
|
230
|
-
- test/rubyspec_test.rb
|
231
|
-
- test/lambda_test.rb
|
232
|
-
- test/redefine_method_test.rb
|
233
|
-
- test/stdlib_test.rb
|
234
|
-
- test/full/replace_eval_test.rb
|
235
|
-
- test/full/ast_reload_test.rb
|
236
|
-
- test/to_ruby/to_ruby_test.rb
|
237
|
-
- test/to_ruby/to_ruby_feature_test.rb
|
238
|
-
- test/to_ast/to_ast_feature_test.rb
|
239
|
-
- test/encoding_test/utf8mac_alt.rb
|
240
|
-
- test/encoding_test/usascii.rb
|
241
|
-
- test/encoding_test/default.rb
|
242
|
-
- test/encoding_test/utf8dos.rb
|
243
|
-
- test/encoding_test/eucjp.rb
|
244
|
-
- test/encoding_test/bad.rb
|
245
|
-
- test/encoding_test/koi8_with_utf8bom.rb
|
246
|
-
- test/encoding_test/utf8bom_only.rb
|
247
|
-
- test/encoding_test/koi8_shebang.rb
|
248
|
-
- test/encoding_test/utf8unix.rb
|
249
|
-
- test/encoding_test/cp932.rb
|
250
|
-
- test/encoding_test/utf8.rb
|
251
|
-
- test/encoding_test/koi8.rb
|
252
|
-
- test/encoding_test/utf8bom.rb
|
253
|
-
- test/encoding_test/usascii_with_utf8bom.rb
|
254
|
-
- test/encoding_test/utf8mac.rb
|
255
|
-
- test/encoding_test.rb
|
256
|
-
- test/alias_test.rb
|
257
|
-
- test/rubygems_test.rb
|
258
|
-
- test/define_singleton_method_test.rb
|
259
|
-
- test/covert_define_method_test.rb
|
260
|
-
- test/ast_load/ast_load_test.rb
|
261
|
-
- test/backtrace_test.rb
|
262
|
-
- test/load_test.rb
|
263
|
-
- test/singleton_test.rb
|
264
|
-
- test/recursive_eval_test.rb
|
265
|
-
- test/base/reload_test.rb
|
266
|
-
- test/base/noninvasive_test.rb
|
267
|
-
- test/define_method_test.rb
|
268
|
-
- test/eval_test.rb
|
269
|
-
- test/attr_test.rb
|
270
|
-
- test/irb_test.rb
|
271
|
-
- test/load_path_test.rb
|
272
|
-
- test/nested_test.rb
|
273
|
-
- test/def_test.rb
|
274
|
-
- test/thread_test.rb
|
275
|
-
- test/flush_cache_test.rb
|
276
|
-
- test/error_test.rb
|
277
|
-
- test/ast_eval/ast_eval_test.rb
|
278
|
-
- test/main.rb
|
250
|
+
test_files: []
|
data/Rakefile
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'rake/clean'
|
2
|
-
require 'bundler/gem_tasks'
|
3
|
-
require 'rake/testtask'
|
4
|
-
require 'rdoc/task'
|
5
|
-
|
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]
|
51
|
-
end
|
52
|
-
|
53
|
-
RDoc::Task.new(:rdoc) do |t|
|
54
|
-
t.main = "README.rdoc"
|
55
|
-
t.title = "LiveAST: Live Abstract Syntax Trees"
|
56
|
-
t.options += ["--visibility", "private"]
|
57
|
-
t.rdoc_files.include("README.rdoc", "CHANGES.rdoc", "lib")
|
58
|
-
end
|
59
|
-
|
60
|
-
task default: 'test:all'
|
data/devel/levitate.rb
DELETED
@@ -1,184 +0,0 @@
|
|
1
|
-
class Levitate
|
2
|
-
#### utility for instance and class
|
3
|
-
module Util
|
4
|
-
def ruby_bin
|
5
|
-
require 'rbconfig'
|
6
|
-
|
7
|
-
name = File.join(
|
8
|
-
RbConfig::CONFIG["bindir"],
|
9
|
-
RbConfig::CONFIG["RUBY_INSTALL_NAME"]
|
10
|
-
)
|
11
|
-
|
12
|
-
if RbConfig::CONFIG["host"] =~ %r!(mswin|cygwin|mingw)! and
|
13
|
-
File.basename(name) !~ %r!\.(exe|com|bat|cmd)\Z!i
|
14
|
-
name + RbConfig::CONFIG["EXEEXT"]
|
15
|
-
else
|
16
|
-
name
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def ruby_command
|
21
|
-
[ruby_bin] + Levitate.ruby_opts.to_a
|
22
|
-
end
|
23
|
-
|
24
|
-
def ruby_command_string
|
25
|
-
ruby_command.join(" ")
|
26
|
-
end
|
27
|
-
|
28
|
-
def run(*args)
|
29
|
-
cmd = ruby_command + args
|
30
|
-
unless system(*cmd)
|
31
|
-
cmd_str = cmd.map { |t| "'#{t}'" }.join(", ")
|
32
|
-
raise "system(#{cmd_str}) failed with status #{$?.exitstatus}"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def run_each_file(*files)
|
37
|
-
files.each { |file|
|
38
|
-
run("-w", file)
|
39
|
-
}
|
40
|
-
end
|
41
|
-
|
42
|
-
def run_code_and_capture(code)
|
43
|
-
IO.popen(ruby_command_string, "r+") { |pipe|
|
44
|
-
pipe.print(code)
|
45
|
-
pipe.flush
|
46
|
-
pipe.close_write
|
47
|
-
pipe.read
|
48
|
-
}
|
49
|
-
end
|
50
|
-
|
51
|
-
def run_file_and_capture(file)
|
52
|
-
unless File.file? file
|
53
|
-
raise "file does not exist: `#{file}'"
|
54
|
-
end
|
55
|
-
IO.popen(ruby_command_string + " " + file, "r") { |pipe|
|
56
|
-
pipe.read
|
57
|
-
}
|
58
|
-
end
|
59
|
-
|
60
|
-
def with_warnings(value = true)
|
61
|
-
previous = $VERBOSE
|
62
|
-
$VERBOSE = value
|
63
|
-
begin
|
64
|
-
yield
|
65
|
-
ensure
|
66
|
-
$VERBOSE = previous
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def no_warnings(&block)
|
71
|
-
with_warnings(nil, &block)
|
72
|
-
end
|
73
|
-
|
74
|
-
def to_camel_case(str)
|
75
|
-
str.split('_').map { |t| t.capitalize }.join
|
76
|
-
end
|
77
|
-
|
78
|
-
def write_file(file)
|
79
|
-
contents = yield
|
80
|
-
File.open(file, "wb") { |out|
|
81
|
-
out.print(contents)
|
82
|
-
}
|
83
|
-
contents
|
84
|
-
end
|
85
|
-
|
86
|
-
def instance_exec2(obj, *args, &block)
|
87
|
-
method_name = ["_", obj.object_id, "_", Thread.current.object_id].join
|
88
|
-
(class << obj; self; end).class_eval do
|
89
|
-
define_method method_name, &block
|
90
|
-
begin
|
91
|
-
obj.send(method_name, *args)
|
92
|
-
ensure
|
93
|
-
remove_method method_name
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
extend Util
|
99
|
-
include Util
|
100
|
-
|
101
|
-
#### public helpers for testing
|
102
|
-
|
103
|
-
class << self
|
104
|
-
def run_doc_code(code, expected, index, instance, &block)
|
105
|
-
lib = File.expand_path(File.dirname(__FILE__) + "/../lib")
|
106
|
-
header = %{
|
107
|
-
$LOAD_PATH.unshift "#{lib}"
|
108
|
-
begin
|
109
|
-
}
|
110
|
-
footer = %{
|
111
|
-
rescue Exception => __levitate_exception
|
112
|
-
puts "raises \#{__levitate_exception.class}"
|
113
|
-
end
|
114
|
-
}
|
115
|
-
final_code = header + code + footer
|
116
|
-
|
117
|
-
# Sometimes code is required to be inside a file.
|
118
|
-
actual = nil
|
119
|
-
require 'tempfile'
|
120
|
-
Tempfile.open("run-rdoc-code") { |temp_file|
|
121
|
-
temp_file.print(final_code)
|
122
|
-
temp_file.close
|
123
|
-
actual = run_file_and_capture(temp_file.path).chomp
|
124
|
-
}
|
125
|
-
|
126
|
-
instance_exec2(instance, expected, actual, index, &block)
|
127
|
-
end
|
128
|
-
|
129
|
-
def run_doc_section(file, section, instance, &block)
|
130
|
-
contents = File.read(file)
|
131
|
-
re = %r!^=+[ \t]#{Regexp.quote(section)}.*?\n(.*?)^=!m
|
132
|
-
if (section_contents = contents[re, 1])
|
133
|
-
index = 0
|
134
|
-
section_contents.scan(%r!^( \S.*?)(?=(^\S|\Z))!m) { |indented, unused|
|
135
|
-
code_sections = indented.split(%r!^ \#\#\#\# output:\s*$!)
|
136
|
-
code, expected = (
|
137
|
-
case code_sections.size
|
138
|
-
when 1
|
139
|
-
[indented, indented.scan(%r!\# => (.*?)\n!).flatten.join("\n")]
|
140
|
-
when 2
|
141
|
-
code_sections
|
142
|
-
else
|
143
|
-
raise "parse error"
|
144
|
-
end
|
145
|
-
)
|
146
|
-
code.gsub!(/^\s*%.*$/, "") # ignore shell command examples
|
147
|
-
run_doc_code(code, expected, index, instance, &block)
|
148
|
-
index += 1
|
149
|
-
}
|
150
|
-
else
|
151
|
-
raise "couldn't find section `#{section}' of `#{file}'"
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
def doc_to_test(file, *sections, &block)
|
156
|
-
levitate = self
|
157
|
-
klass = Class.new MiniTest::Test do
|
158
|
-
sections.each { |section|
|
159
|
-
define_method "test_#{file}_#{section}" do
|
160
|
-
if block
|
161
|
-
levitate.run_doc_section(file, section, self, &block)
|
162
|
-
else
|
163
|
-
levitate.run_doc_section(file, section, self) {
|
164
|
-
|expected, actual, index|
|
165
|
-
assert_equal expected, actual
|
166
|
-
}
|
167
|
-
end
|
168
|
-
end
|
169
|
-
}
|
170
|
-
end
|
171
|
-
Object.const_set("Test#{file}".gsub(".", ""), klass)
|
172
|
-
end
|
173
|
-
|
174
|
-
def ruby_opts
|
175
|
-
@ruby_opts ||= []
|
176
|
-
end
|
177
|
-
attr_writer :ruby_opts
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
lambda do
|
182
|
-
config = File.join(File.dirname(__FILE__), "levitate_config.rb")
|
183
|
-
require config if File.file? config
|
184
|
-
end.call
|
data/devel/levitate_config.rb
DELETED
data/test/alias_test.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require_relative 'main'
|
2
|
-
|
3
|
-
class AliasTest < RegularTest
|
4
|
-
class A
|
5
|
-
def f
|
6
|
-
"A#f"
|
7
|
-
end
|
8
|
-
|
9
|
-
alias g f
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_alias_unbound_method
|
13
|
-
expected = no_arg_def(:f, "A#f")
|
14
|
-
assert_equal expected, A.instance_method(:f).to_ast
|
15
|
-
assert_equal expected, A.instance_method(:g).to_ast
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_alias_method
|
19
|
-
expected = no_arg_def(:f, "A#f")
|
20
|
-
assert_equal expected, A.new.method(:f).to_ast
|
21
|
-
assert_equal expected, A.new.method(:g).to_ast
|
22
|
-
end
|
23
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'main'
|
2
|
-
|
3
|
-
require 'live_ast/ast_load'
|
4
|
-
|
5
|
-
class AstLoadTest < BaseTest
|
6
|
-
include FileUtils
|
7
|
-
|
8
|
-
def test_defines_ast_load
|
9
|
-
assert private_methods.include?(:ast_load)
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_reloading
|
13
|
-
noninvasive_ast_reload
|
14
|
-
end
|
15
|
-
|
16
|
-
def noninvasive_ast_reload
|
17
|
-
code1 = %{
|
18
|
-
class AstLoadTest::B
|
19
|
-
def f
|
20
|
-
"first B#f"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
}
|
24
|
-
|
25
|
-
code2 = %{
|
26
|
-
class AstLoadTest::B
|
27
|
-
def f
|
28
|
-
"second B#f"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
}
|
32
|
-
|
33
|
-
temp_file code1 do |file|
|
34
|
-
load file
|
35
|
-
|
36
|
-
LiveAST.ast(B.instance_method(:f))
|
37
|
-
|
38
|
-
write_file file, code2
|
39
|
-
ast_load file
|
40
|
-
|
41
|
-
assert_equal no_arg_def(:f, "second B#f"),
|
42
|
-
LiveAST.ast(B.instance_method(:f))
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|