eceval 0.2.0 → 0.3.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/eceval.rb +14 -3
  3. data/lib/eceval/version.rb +1 -1
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a2776daaaf7e555bdae63232b82115efc512ab1f49260f25e9371d5bd79e8fbe
4
- data.tar.gz: c90d5b3c010f53f1ce5a9b616b569530fe3db3c9351d29eef2df73ac7c830260
3
+ metadata.gz: 44a1c0931877e7aee230698e6f7dab5f9e60ea6f4f21c0c074a896a275c3f182
4
+ data.tar.gz: 887e4b402d66da45d62f25e97ab11a0e78f7191921d2908733131a5f6ff368b7
5
5
  SHA512:
6
- metadata.gz: addadf832ce7e5f5f92d38203dbc669ecc8884a4a2ede63a6a7627ca65ba32bb0c3ed3a2e691351f0aa10f6d98062668d4d044ba46e55eba8175b884bc624cbd
7
- data.tar.gz: 2739fa464f360407fae51e66a1242406a8020dfd6fddb31c8d769bf57a07cce0d6139c446ce370a363443cb4e4d23fb6ce0644b0aff1150db1d6c26d840be1b4
6
+ metadata.gz: c862e12114e5190a69536573a7c8bce78c32d7b3bb74bf1d6d019ade3765d5803f960805377f723d89ac16d3623d4312117ec3c20db562ec58255550351f309d
7
+ data.tar.gz: 480122c5ebfe4071eccff8b43a6866cb2be040f19d40c700adab213c8a3d2038c6b365537932c205d152e808770f319ffa45e3b55f37beb596a8946dd8362e78
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ require 'stringio'
2
3
 
3
4
  ECEVAL_MAIN_BINDING = binding
4
5
 
@@ -6,6 +7,7 @@ module Eceval
6
7
  EVAL_MARKER = "#=>"
7
8
  CONTINUATION_MARKER = "#=*"
8
9
  EVAL_EXCEPTION_MARKER = "#=> !!!"
10
+ STDOUT_MARKER = "# outputs:"
9
11
  BEGIN_CODE_BLOCK = '```ruby'
10
12
  END_CODE_BLOCK = '```'
11
13
  NEW_SCOPE_DIRECTIVE = '# eceval: new_scope'
@@ -29,6 +31,7 @@ module Eceval
29
31
  @lineno = lineno
30
32
  @lines_consumed = 0
31
33
  @chunk = nil
34
+ @eval_stdout = StringIO.new
32
35
  end
33
36
 
34
37
  def process_line(line)
@@ -69,9 +72,6 @@ module Eceval
69
72
  end
70
73
  end
71
74
 
72
- def reset_scope
73
- end
74
-
75
75
  def process_chunk_line(line)
76
76
  @chunk << line
77
77
 
@@ -83,6 +83,13 @@ module Eceval
83
83
  ex = consume_chunk(rescue_exceptions: true)
84
84
  begin_chunk
85
85
  format_exception(line.rstrip, ex)
86
+ elsif line.rstrip.end_with?(STDOUT_MARKER)
87
+ consume_chunk
88
+ begin_chunk
89
+ output = @eval_stdout.string.chomp
90
+ @eval_stdout.string = ''
91
+
92
+ line + ' ' + output
86
93
  else
87
94
  line
88
95
  end
@@ -90,9 +97,11 @@ module Eceval
90
97
 
91
98
  def consume_chunk(rescue_exceptions: false)
92
99
  old_chunk = @chunk
100
+ old_stdout = $stdout
93
101
  @chunk = nil
94
102
 
95
103
  begin
104
+ $stdout = @eval_stdout
96
105
  old_chunk.evaluate
97
106
  rescue Exception => ex
98
107
  if rescue_exceptions
@@ -100,6 +109,8 @@ module Eceval
100
109
  else
101
110
  raise
102
111
  end
112
+ ensure
113
+ $stdout = old_stdout
103
114
  end
104
115
  end
105
116
 
@@ -1,3 +1,3 @@
1
1
  module Eceval
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eceval
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Dalling