md-ruby-eval 0.3.0 → 0.4.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/VERSION +1 -1
- data/bin/md-ruby-eval +8 -2
- data/lib/md_ruby_eval.rb +17 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1056df9d4b2215292650e16439ab7d8455e5df82c804a93c38e419613bd301c7
|
4
|
+
data.tar.gz: 7f9b54997a435172f312f88773558bcc71c687d02f2c9013271774a9ea53b1e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fcdce3c13297d80b29945804b71b3ca3663a2c922ebf5b585cbda351a3c3d11ff0c30c2bb4b4274d0d36ec32dbfdfca78fba07896058237b2636fd1241a13e73
|
7
|
+
data.tar.gz: f6a973e077e4016d385e5b90ca8bdeb3085b1685748e9a518a0afde6da8a268a9edebbc9fffcd3a93a0a6fa66ab2bc479ec0128c17671c4f8dac802d9c4d982f
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/bin/md-ruby-eval
CHANGED
@@ -7,6 +7,7 @@ to_require = []
|
|
7
7
|
indentation = 40
|
8
8
|
line_length = 79
|
9
9
|
auto = false
|
10
|
+
verbose = false
|
10
11
|
dir = Dir.pwd
|
11
12
|
|
12
13
|
OptionParser.new do |opts|
|
@@ -36,6 +37,11 @@ OptionParser.new do |opts|
|
|
36
37
|
'Automatic mode. Finds `*.in.md` files outputting `*.out.md` files') do |v|
|
37
38
|
auto = true
|
38
39
|
end
|
40
|
+
|
41
|
+
opts.on('--[no-]verbose',
|
42
|
+
'Print code chunks right before their execution') do |v|
|
43
|
+
verbose = true
|
44
|
+
end
|
39
45
|
end.parse!
|
40
46
|
|
41
47
|
Dir.chdir dir do
|
@@ -50,7 +56,7 @@ Dir.chdir dir do
|
|
50
56
|
puts "using: #{init_path}"
|
51
57
|
load init_path
|
52
58
|
end
|
53
|
-
MDRubyEval.new input_path, input_path.gsub(/(\.in)?\.md$/, '.out.md'), binding, indentation, line_length
|
59
|
+
MDRubyEval.new input_path, input_path.gsub(/(\.in)?\.md$/, '.out.md'), binding, indentation, line_length, verbose
|
54
60
|
end
|
55
61
|
|
56
62
|
Process.wait pid
|
@@ -58,7 +64,7 @@ Dir.chdir dir do
|
|
58
64
|
else
|
59
65
|
input_path, output_path = ARGV.map { |p| File.expand_path p }
|
60
66
|
raise 'no input path' unless input_path && File.exist?(input_path)
|
61
|
-
MDRubyEval.new input_path, output_path, binding, indentation, line_length
|
67
|
+
MDRubyEval.new input_path, output_path, binding, indentation, line_length, verbose
|
62
68
|
end
|
63
69
|
end
|
64
70
|
|
data/lib/md_ruby_eval.rb
CHANGED
@@ -4,22 +4,31 @@ require 'optparse'
|
|
4
4
|
|
5
5
|
class MDRubyEval
|
6
6
|
|
7
|
-
def initialize(input_path, output_path, environment, indentation, line_length)
|
7
|
+
def initialize(input_path, output_path, environment, indentation, line_length, verbose)
|
8
8
|
@input_path = input_path
|
9
9
|
@output_path = output_path
|
10
10
|
@environment = environment
|
11
11
|
@output = ''
|
12
12
|
@indentation = indentation
|
13
13
|
@line_length = line_length
|
14
|
+
@verbose = verbose
|
14
15
|
|
15
16
|
@last_id = 1
|
16
17
|
@known_ids = Hash.new { |h, k| h[k] = format('%06x', @last_id += 1) }
|
18
|
+
@too_long = []
|
17
19
|
|
18
20
|
process_file input_path
|
19
21
|
end
|
20
22
|
|
21
23
|
def evaluate(code, line)
|
24
|
+
puts code if @verbose
|
25
|
+
start = Time.now
|
22
26
|
eval(code, @environment, @input_path, line)
|
27
|
+
ensure
|
28
|
+
took = Time.now - start
|
29
|
+
output = format "\e[1m== %5.2f seconds %s:%d\e[22m", took, @input_path, line
|
30
|
+
puts output if @verbose
|
31
|
+
@too_long << [took, code + output] if took > 0.1
|
23
32
|
end
|
24
33
|
|
25
34
|
def process_ruby(part, start_line)
|
@@ -42,7 +51,7 @@ class MDRubyEval
|
|
42
51
|
output = ''
|
43
52
|
chunk_lines.each do |chunk, lines|
|
44
53
|
result = evaluate(chunk, line_count)
|
45
|
-
if chunk.strip.empty? || chunk.include?('#')
|
54
|
+
if chunk.strip.empty? || chunk.lines.last.include?('#')
|
46
55
|
output << (chunk.end_with?("#\n") ? chunk[0..-3] + "\n" : chunk)
|
47
56
|
else
|
48
57
|
pre_lines = chunk.lines.to_a
|
@@ -109,6 +118,12 @@ class MDRubyEval
|
|
109
118
|
line_count += part.lines.size
|
110
119
|
end
|
111
120
|
|
121
|
+
to_print = @too_long.sort_by { |took, _| -took }[0..10]
|
122
|
+
if to_print.size > 0
|
123
|
+
puts "#{to_print.size} longest evaluations:"
|
124
|
+
to_print.each { |_, out| puts out }
|
125
|
+
end
|
126
|
+
|
112
127
|
puts "writing: #{@output_path}"
|
113
128
|
File.write(@output_path, @output)
|
114
129
|
rescue => ex
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: md-ruby-eval
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Petr Chalupa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|