trace_eval 0.1.1 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e00d98b99b9bc995793f17e525a6829b206e586691cf15fee85d041604aef1b
4
- data.tar.gz: e9310b0debe64c04fac46e79b2c9c4466242c444f97aa7fd0b8a09b699f71a60
3
+ metadata.gz: b32d9cc35ebe136968c891eb8806e579c88116301f8f2e74dbce59847de2fe04
4
+ data.tar.gz: effd109d975752c4428acefee763830916b9d7fe1e4bd96f80c409f454ece571
5
5
  SHA512:
6
- metadata.gz: 75a8c4000beff2f1ed36d5208d56a549ecf8a66c322dcf819b8f05a1781266480919419939caaa2a55001ee14b9bfb7d4947fede6ab54093f09e675db6c225a4
7
- data.tar.gz: 3f2a61b564ed1261bc150f3b7ebd2c7daafad31a032fcfb73af55beffbf76bbdfcf678b72592372b64375e05e81a130028f3b98481017f143412e8c6a5396f35
6
+ metadata.gz: 98aedb41439c4221bb0aa7611d0411cbbf62aa106632d1cfa1adfcf771113bcdd86aeab528832a355191fc8f686631c45378ac377e9de5129d6f104695983aaa
7
+ data.tar.gz: 4093cfda441ddf9fbeade79f0c9035bc3f4112cbe3f8c0ffb69c4a9bc3c9f5feaae3e56b99003d09b78ce263cd82d5358e1eaba308d3ff69502584a420ce4283
data/Gemfile.lock CHANGED
@@ -1,14 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- trace_eval (0.1.1)
5
- chunky_png
4
+ trace_eval (0.1.5)
6
5
 
7
6
  GEM
8
7
  remote: https://rubygems.org/
9
8
  specs:
10
9
  ast (2.4.2)
11
- chunky_png (1.4.0)
12
10
  minitest (5.14.4)
13
11
  parallel (1.21.0)
14
12
  parser (3.0.2.0)
data/README.md CHANGED
@@ -1,11 +1,21 @@
1
1
  # TraceEval
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you
4
- need to be able to package up your Ruby library into a gem. Put your
5
- Ruby code in the file `lib/trace_eval`. To experiment with that code,
6
- run `bin/console` for an interactive prompt.
3
+ Evaluates the Ruby expression(s) in string and prints each executing line.
7
4
 
8
- TODO: Delete this and the text above, and describe your gem
5
+ The standard ruby `tracer` does not display the source inside an `eval`:
6
+
7
+ ```
8
+ $ ruby -rtracer foo.rb
9
+ #0:foo.rb:1::-: puts 1+2
10
+ 3
11
+ #0:foo.rb:2::-: eval "puts 3+4\nputs 5+6\n"
12
+ #0:(eval):1::-: -
13
+ 7
14
+ #0:(eval):2::-: -
15
+ 11
16
+ #0:foo.rb:3::-: puts 7+8
17
+ 15
18
+ ```
9
19
 
10
20
  ## Installation
11
21
 
@@ -25,7 +35,58 @@ Or install it yourself as:
25
35
 
26
36
  ## Usage
27
37
 
28
- TODO: Write usage instructions here
38
+ ```
39
+ $ ./bin/console
40
+ irb(main):001:0> extend TraceEval
41
+ => main
42
+ irb(main):002:0> trace_eval "a = 2\nb = 2\nputs a+b\n"
43
+ a = 2
44
+ b = 2
45
+ puts a+b
46
+ 4
47
+ => nil
48
+ ```
49
+
50
+ ### Bugs
51
+
52
+ If the traced eval in turn evals, the trace will be nonsense:
53
+
54
+ ```
55
+ irb(main):001:0> extend TraceEval
56
+ => main
57
+ irb(main):002:0> trace_eval "0+1\neval \"2+3\n4+5\n\"\n6+7\n"
58
+ 0+1
59
+ eval "2+3
60
+ 0+1
61
+ eval "2+3
62
+ 6+7
63
+ => 13
64
+ ```
65
+
66
+ Nested `trace_eval` does work:
67
+
68
+ ```
69
+ irb(main):001:0> extend TraceEval
70
+ => main
71
+ irb(main):002:0> trace_eval "0+1\ntrace_eval \"2+3\n4+5\n\"\n6+7\n"
72
+ 0+1
73
+ trace_eval "2+3
74
+ 2+3
75
+ 4+5
76
+ 6+7
77
+ => 13
78
+ ```
79
+
80
+ ## Concept of Operation
81
+
82
+ - Save a random value in a magic variable to distinguish this eval
83
+ from others
84
+ - Save an array of the lines of the eval string
85
+ - Set a `TracePoint` for `:line` events (execute code on a new line)
86
+ - When the trace point is activated
87
+ - Only proceed if the line's `path` is '(eval)'
88
+ - Only proceed if the magic variable matches the expected value
89
+ - Print the appropriate line from the array by `lineno`
29
90
 
30
91
  ## Development
31
92
 
@@ -41,7 +102,8 @@ push the `.gem` file to [rubygems.org](https://rubygems.org).
41
102
 
42
103
  ## Contributing
43
104
 
44
- Bug reports and pull requests are welcome on GitHub at https://gitlab.com/fjc/trace_eval.
105
+ Bug reports and pull requests are welcome on GitLab at
106
+ https://gitlab.com/fjc/trace_eval.
45
107
 
46
108
  ## License
47
109
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TraceEval
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.5'
5
5
  end
data/lib/trace_eval.rb CHANGED
@@ -14,15 +14,12 @@ module TraceEval
14
14
  ] + code.lines
15
15
 
16
16
  tp = TracePoint.new(:line) do |tp|
17
- tp.disable
18
17
  next unless tp.path == '(eval)'
19
18
  next unless tp.binding.local_variable_get(
20
19
  :__wzpxmnrjafemvlrwflblbbyenywk__
21
20
  )==__wzpxmnrjafemvlrwflblbbyenywk__
22
- print lines[tp.lineno]
21
+ $stderr.print lines[tp.lineno]
23
22
  rescue NameError
24
- ensure
25
- tp.enable
26
23
  end
27
24
 
28
25
  begin
data/trace_eval.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ['Frank J. Cameron']
9
9
  spec.email = ['fjc@fastmail.net']
10
10
 
11
- spec.summary = ''
11
+ spec.summary = 'Evaluates the Ruby expression(s) in string and prints each executing line.'
12
12
  spec.homepage = 'https://gitlab.com/fjc/trace_eval'
13
13
  spec.license = 'MIT'
14
14
  spec.required_ruby_version = '>= 2.7.0'
@@ -26,6 +26,4 @@ Gem::Specification.new do |spec|
26
26
  spec.bindir = 'exe'
27
27
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ['lib']
29
-
30
- spec.add_dependency 'chunky_png'
31
29
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trace_eval
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frank J. Cameron
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-02 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: chunky_png
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
11
+ date: 2021-11-08 00:00:00.000000000 Z
12
+ dependencies: []
27
13
  description:
28
14
  email:
29
15
  - fjc@fastmail.net
@@ -66,5 +52,5 @@ requirements: []
66
52
  rubygems_version: 3.1.6
67
53
  signing_key:
68
54
  specification_version: 4
69
- summary: ''
55
+ summary: Evaluates the Ruby expression(s) in string and prints each executing line.
70
56
  test_files: []