dorian-eval 1.4.0 → 1.4.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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/bin/eval +5 -1
  4. data/lib/dorian/eval.rb +33 -11
  5. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 10646b3b875591f349e5b45416f4a96705d23b948fe9b2ee065d7ceed5bb5619
4
- data.tar.gz: 542b45a942b3fc281385163ae9f158d8f3227a73547d04c6686b76622b768273
3
+ metadata.gz: 6703e36e324b4d2bfb01ea10df40e58cc6e9d71361a360e96046ecf7cd63b1ec
4
+ data.tar.gz: 87724996f3b92701a0804331ba24d539ec2ebba7400221582214394228c8aa6f
5
5
  SHA512:
6
- metadata.gz: 3879cb847be21d2d6aaaebc2c92a998be47fa61fec48b573609c03ac680202487e39631447e88f712716c902dae69d19bce4e71c39ac51397c193fa67abdd3b2
7
- data.tar.gz: ab6dd6ba4f37f0106c8f0a6a8ddad40eef87bbccaa6d6e813538cc99f04e652436e3d6b45004171db00917e97f80782d42a9c3ade3828499c9f1d043021f3bd2
6
+ metadata.gz: 48749012f9b6a5c9312a6390588565d519abab6efd462de2d0bbc8879efe8d0e69e6d48d8b7378ac5dc43b642c352edbb3397a9c580dc92395a4b9b70d1f7949
7
+ data.tar.gz: 9af9ad5cd930bf83101b7960fc6dbd18686002bc6109377733403fe28897bd29c1c83eb5fe9a552d73003592f09deeda338d0cc8b57dcb8a792d7d46685f1b14
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.0
1
+ 1.4.1
data/bin/eval CHANGED
@@ -28,6 +28,8 @@ parsed =
28
28
  rails: {
29
29
  alias: :r
30
30
  },
31
+ returns: { alias: :return },
32
+ fast: { alias: :f },
31
33
  version: {
32
34
  alias: :v
33
35
  },
@@ -49,5 +51,7 @@ Dorian::Eval.eval(
49
51
  stdout: parsed.options.stdout,
50
52
  stderr: parsed.options.stderr,
51
53
  colorize: parsed.options.colorize,
52
- rails: parsed.options.rails
54
+ rails: parsed.options.rails,
55
+ returns: parsed.options.returns,
56
+ fast: parsed.options.fast
53
57
  )
data/lib/dorian/eval.rb CHANGED
@@ -4,7 +4,11 @@ require "yaml"
4
4
 
5
5
  class Dorian
6
6
  class Eval
7
- Return = Data.define(:stdout, :stderr, :returned)
7
+ Return = Data.define(:stdout, :stderr, :returned) do
8
+ def initialize(stdout: "", stderr: "", returned: nil)
9
+ super(stdout:, stderr:, returned:)
10
+ end
11
+ end
8
12
 
9
13
  attr_reader :ruby,
10
14
  :it,
@@ -13,7 +17,8 @@ class Dorian
13
17
  :stderr,
14
18
  :colorize,
15
19
  :rails,
16
- :returns
20
+ :returns,
21
+ :fast
17
22
 
18
23
  COLORS = { red: "\e[31m", green: "\e[32m", reset: "\e[0m" }.freeze
19
24
 
@@ -25,7 +30,8 @@ class Dorian
25
30
  stderr: true,
26
31
  colorize: false,
27
32
  rails: false,
28
- returns: false
33
+ returns: false,
34
+ fast: false
29
35
  )
30
36
  @ruby = ruby.to_s.empty? ? "nil" : ruby
31
37
  @it = it.to_s.empty? ? nil : it
@@ -35,6 +41,7 @@ class Dorian
35
41
  @colorize = !!colorize
36
42
  @rails = !!rails
37
43
  @returns = !!returns
44
+ @fast = !!fast
38
45
  end
39
46
 
40
47
  def self.eval(...)
@@ -42,6 +49,14 @@ class Dorian
42
49
  end
43
50
 
44
51
  def eval
52
+ fast? ? eval_fast : eval_slow
53
+ end
54
+
55
+ def eval_fast
56
+ Return.new(returned: Kernel.eval(full_ruby))
57
+ end
58
+
59
+ def eval_slow
45
60
  read_out, write_out = IO.pipe
46
61
  read_err, write_err = IO.pipe
47
62
 
@@ -61,10 +76,14 @@ class Dorian
61
76
  if returns?
62
77
  Return.new(stdout: out, stderr: err, returned: YAML.safe_load(out))
63
78
  else
64
- Return.new(stdout: out, stderr: err, returned: nil)
79
+ Return.new(stdout: out, stderr: err)
65
80
  end
66
81
  end
67
82
 
83
+ def fast?
84
+ !!fast
85
+ end
86
+
68
87
  def debug?
69
88
  !!debug
70
89
  end
@@ -94,27 +113,30 @@ class Dorian
94
113
  end
95
114
 
96
115
  def to_ruby(ruby)
97
- if ruby.is_a?(Struct)
116
+ case ruby
117
+ when Struct
98
118
  keys = ruby.to_h.keys.map { |key| to_ruby(key) }
99
119
  values = ruby.to_h.values.map { |value| to_ruby(value) }
100
120
  "Struct.new(#{keys.join(", ")}).new(#{values.join(", ")})"
101
- elsif ruby.is_a?(String) || ruby.is_a?(Symbol) || ruby.is_a?(NilClass) ||
102
- ruby.is_a?(TrueClass) || ruby.is_a?(FalseClass) || ruby.is_a?(Float) ||
103
- ruby.is_a?(Integer)
121
+ when String, Symbol, NilClass, TrueClass, FalseClass, Float, Integer
104
122
  ruby.inspect
105
- elsif ruby.is_a?(Array)
123
+ when Array
106
124
  "[#{ruby.map { |element| to_ruby(element) }.join(", ")}]"
107
- elsif ruby.is_a?(Hash)
125
+ when Hash
108
126
  "{#{ruby.map { |key, value| "#{to_ruby(key)} => #{to_ruby(value)}" }}}"
109
127
  else
110
128
  raise "#{ruby.class} not supported"
111
129
  end
112
130
  end
113
131
 
132
+ def slow?
133
+ !fast?
134
+ end
135
+
114
136
  def full_ruby
115
137
  full_ruby = "it = #{to_ruby(it)}\n"
116
138
  full_ruby +=
117
- if returns?
139
+ if returns? && slow?
118
140
  <<~RUBY
119
141
  require "yaml"
120
142
  puts (#{ruby}).to_yaml
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorian-eval
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié