dorian-eval 1.4.0 → 1.4.2

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