code-ruby 0.6.4 → 0.6.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2885af9560ee132a0d9ab0be653fadd74e54e04975a1673ff98d929e14040088
4
- data.tar.gz: 68450cd4d425cc61bccd154f32b7786a2e7f0778ca567a2e19346b017f6e40c2
3
+ metadata.gz: 22e265eb7980e078c895b92b71d1e5b0e3e3a35cb833537bdc0f1614ce2ac76b
4
+ data.tar.gz: 9d2f374bb8a627bc3b0fbb2325630a692fa01bef52a9a81750db643454163f60
5
5
  SHA512:
6
- metadata.gz: f090263fb431fa7d6ab1193bd5735b8ef8c425783eea75c8495537a2f2c80576dbe8a71ecf3d41202eea787687cdf9f2d6ef0b4dcec931e38be9cc28baa2ed50
7
- data.tar.gz: d2fbf7f1e6534a1f15e9fca4271b9505fb0229984a53e85d9adbfaaeba5b94535cfde135eede3289f564f06949d0f4bb3c2ff3ac384ffa56596bb802eef2be7e
6
+ metadata.gz: b43ac0ea5ad94cdf569518df455be616c0a1a21ba90ec548c278080eaf36b8466707960ff07bc90739a3ebb2cd9e31e481da4646eebd47ef9cd4e5d543b7c7a2
7
+ data.tar.gz: 33c41f911e6a9043f79a2c89a58e373fd200715f35bfcd8c0bea5554a10c2eca2c8b4fd145f4676c33a7723e5d5fb15179a6af568b079e43170fa0ce09eced15
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- code-ruby (0.6.3)
4
+ code-ruby (0.6.4)
5
5
  bigdecimal (~> 3)
6
6
  language-ruby (~> 0)
7
7
  zeitwerk (~> 2)
@@ -42,4 +42,4 @@ RUBY VERSION
42
42
  ruby 3.3.0p0
43
43
 
44
44
  BUNDLED WITH
45
- 2.5.5
45
+ 2.5.6
data/bin/code CHANGED
@@ -1,24 +1,24 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require "optparse"
5
- require_relative "../lib/code-ruby"
4
+ require 'optparse'
5
+ require_relative '../lib/code-ruby'
6
6
 
7
- options = { timeout: 0, profile: false, profiler: "text" }
7
+ options = { timeout: 0, profile: false, profiler: 'text' }
8
8
 
9
9
  OptionParser
10
10
  .new do |opts|
11
- opts.banner = "Usage: template [options]"
11
+ opts.banner = 'Usage: template [options]'
12
12
 
13
- opts.on("-v", "--version", "Version of template") do |_input|
13
+ opts.on('-v', '--version', 'Version of template') do |_input|
14
14
  puts Code::Version
15
15
  exit
16
16
  end
17
17
 
18
18
  opts.on(
19
- "-i INPUT",
20
- "--input=INPUT",
21
- "Input in the code language (String or File)"
19
+ '-i INPUT',
20
+ '--input=INPUT',
21
+ 'Input in the code language (String or File)'
22
22
  ) do |input|
23
23
  input = File.read(input) if File.exist?(input)
24
24
 
@@ -26,43 +26,43 @@ OptionParser
26
26
  end
27
27
 
28
28
  opts.on(
29
- "-c CONTEXT",
30
- "--context=CONTEXT",
31
- "Context in the code language (String or File)"
29
+ '-c CONTEXT',
30
+ '--context=CONTEXT',
31
+ 'Context in the code language (String or File)'
32
32
  ) do |context|
33
33
  context = File.read(context) if File.exist?(context)
34
34
 
35
35
  options[:context] = context
36
36
  end
37
37
 
38
- opts.on("-p", "--parse", "Get parser results for input") do |parse|
38
+ opts.on('-p', '--parse', 'Get parser results for input') do |parse|
39
39
  options[:parse] = parse
40
40
  end
41
41
 
42
42
  opts.on(
43
- "-t TIMEOUT",
44
- "--timeout=TIMEOUT",
45
- "Set timeout in seconds"
43
+ '-t TIMEOUT',
44
+ '--timeout=TIMEOUT',
45
+ 'Set timeout in seconds'
46
46
  ) { |timeout| options[:timeout] = timeout.to_f }
47
47
 
48
- opts.on("--profile", "Profile Ruby code") do |_timeout|
49
- require "ruby-prof"
48
+ opts.on('--profile', 'Profile Ruby code') do |_timeout|
49
+ require 'ruby-prof'
50
50
  options[:profile] = true
51
51
  end
52
52
 
53
53
  opts.on(
54
- "--profiler TYPE",
55
- "Profiler output type (text (default) or html)"
54
+ '--profiler TYPE',
55
+ 'Profiler output type (text (default) or html)'
56
56
  ) do |profiler|
57
- require "ruby-prof"
57
+ require 'ruby-prof'
58
58
  options[:profile] = true
59
59
  options[:profiler] = profiler
60
60
  end
61
61
  end
62
62
  .parse!
63
63
 
64
- input = options.fetch(:input, "")
65
- context = options.fetch(:context, "")
64
+ input = options.fetch(:input, '')
65
+ context = options.fetch(:context, '')
66
66
 
67
67
  RubyProf.start if options[:profile]
68
68
 
@@ -74,10 +74,10 @@ end
74
74
 
75
75
  if options[:profile]
76
76
  result = RubyProf.stop
77
- if options[:profiler] == "text"
77
+ if options[:profiler] == 'text'
78
78
  printer = RubyProf::FlatPrinter.new(result)
79
79
  printer.print($stdout)
80
- elsif options[:profiler] == "html"
80
+ elsif options[:profiler] == 'html'
81
81
  printer = RubyProf::GraphHtmlPrinter.new(result)
82
82
  printer.print($stdout)
83
83
  else
@@ -6,9 +6,7 @@ class Code
6
6
  def initialize(parsed)
7
7
  @whole = parsed.delete(:whole)
8
8
 
9
- if parsed.key?(:exponent)
10
- @exponent = Node::Statement.new(parsed.delete(:exponent))
11
- end
9
+ @exponent = Node::Statement.new(parsed.delete(:exponent)) if parsed.key?(:exponent)
12
10
 
13
11
  super(parsed)
14
12
  end
@@ -40,13 +40,14 @@ class Code
40
40
  @arguments.each do |argument|
41
41
  if argument.keyword?
42
42
  if arguments.last&.value.is_a?(Object::Dictionary)
43
- arguments.last.value[argument.name] = argument.evaluate(
44
- **args
45
- ).value
43
+ arguments.last.value.code_set(
44
+ argument.name,
45
+ argument.evaluate(**args).value
46
+ )
46
47
  else
47
48
  arguments << Object::Argument.new(
48
49
  Object::Dictionary.new(
49
- { argument.name => argument.evaluate(**args).value }
50
+ {argument.name => argument.evaluate(**args).value}
50
51
  )
51
52
  )
52
53
  end
@@ -6,9 +6,7 @@ class Code
6
6
  def initialize(parsed)
7
7
  @decimal = parsed.delete(:decimal)
8
8
 
9
- if parsed.key?(:exponent)
10
- @exponent = Node::Statement.new(parsed.delete(:exponent))
11
- end
9
+ @exponent = Node::Statement.new(parsed.delete(:exponent)) if parsed.key?(:exponent)
12
10
 
13
11
  super(parsed)
14
12
  end
@@ -8,7 +8,7 @@ class Code
8
8
  if parsed.key?(:statement)
9
9
  @key = Node::Statement.new(parsed.delete(:statement))
10
10
  elsif parsed.key?(:name)
11
- @key = Node::String.new([{ text: parsed.delete(:name) }])
11
+ @key = Node::String.new([{text: parsed.delete(:name)}])
12
12
  end
13
13
 
14
14
  @value = Node::Code.new(parsed.delete(:value)) if parsed[:value]
data/lib/code/node/if.rb CHANGED
@@ -32,21 +32,21 @@ class Code
32
32
 
33
33
  def evaluate(**args)
34
34
  if @first_operator == IF_KEYWORD &&
35
- @first_statement.evaluate(**args).truthy?
35
+ @first_statement.evaluate(**args).truthy?
36
36
  @first_body.evaluate(**args)
37
37
  elsif @first_operator == UNLESS_KEYWORD &&
38
- @first_statement.evaluate(**args).falsy?
38
+ @first_statement.evaluate(**args).falsy?
39
39
  @first_body.evaluate(**args)
40
40
  else
41
41
  @elses.each do |elses|
42
42
  if elses.operator == ELSIF_KEYWORD &&
43
- elses.statement.evaluate(**args).truthy?
43
+ elses.statement.evaluate(**args).truthy?
44
44
  return elses.body.evaluate(**args)
45
45
  elsif elses.operator == IF_KEYWORD &&
46
- elses.statement.evaluate(**args).truthy?
46
+ elses.statement.evaluate(**args).truthy?
47
47
  return elses.body.evaluate(**args)
48
48
  elsif elses.operator == UNLESS_KEYWORD &&
49
- elses.statement.evaluate(**args).falsy?
49
+ elses.statement.evaluate(**args).falsy?
50
50
  return elses.body.evaluate(**args)
51
51
  elsif elses.operator == ELSE_KEYWORD
52
52
  return elses.body.evaluate(**args)
@@ -9,9 +9,7 @@ class Code
9
9
  @raw = BigDecimal(decimal)
10
10
 
11
11
  return unless exponent
12
- unless exponent.is_a?(Number)
13
- raise ::Code::Error::TypeError, "exponent is not a number"
14
- end
12
+ raise ::Code::Error::TypeError, "exponent is not a number" unless exponent.is_a?(Number)
15
13
 
16
14
  @raw *= 10**exponent.raw
17
15
  end
@@ -215,9 +215,7 @@ class Code
215
215
  def code_delete(*arguments, index: Integer.new(0), **globals)
216
216
  default =
217
217
  (
218
- if arguments.last.is_a?(Function) && arguments.size > 1
219
- arguments.last
220
- end
218
+ arguments.last if arguments.last.is_a?(Function) && arguments.size > 1
221
219
  )
222
220
 
223
221
  arguments = arguments[..-2] if default
@@ -342,9 +340,7 @@ class Code
342
340
  def code_fetch(*arguments, index: Integer.new(0), **globals)
343
341
  default =
344
342
  (
345
- if arguments.last.is_a?(Function) && arguments.size > 1
346
- arguments.last
347
- end
343
+ arguments.last if arguments.last.is_a?(Function) && arguments.size > 1
348
344
  )
349
345
 
350
346
  arguments = arguments[..-2] if default
@@ -494,9 +490,7 @@ class Code
494
490
  def code_merge(*arguments, **globals)
495
491
  conflict =
496
492
  (
497
- if arguments.last.is_a?(Function) && arguments.size > 1
498
- arguments.last
499
- end
493
+ arguments.last if arguments.last.is_a?(Function) && arguments.size > 1
500
494
  )
501
495
 
502
496
  arguments = arguments[..-2] if conflict
@@ -76,7 +76,7 @@ class Code
76
76
  signature.last[parameter.name] = Object
77
77
  signature
78
78
  else
79
- signature + [{ parameter.name => Object }]
79
+ signature + [{parameter.name => Object}]
80
80
  end
81
81
  else
82
82
  signature + [Object]
@@ -10,9 +10,7 @@ class Code
10
10
 
11
11
  return unless exponent
12
12
 
13
- unless exponent.is_a?(Number)
14
- raise Code::Error::TypeError, "exponent is not a number"
15
- end
13
+ raise Code::Error::TypeError, "exponent is not a number" unless exponent.is_a?(Number)
16
14
 
17
15
  @raw *= 10**exponent.raw
18
16
  end
@@ -40,15 +38,9 @@ class Code
40
38
  when "**", "power"
41
39
  sig(args) { Number }
42
40
  code_power(value)
43
- when "+", "plus"
44
- sig(args) { Object.maybe }
45
- value ? code_plus(value) : self
46
41
  when "+", "plus", "self"
47
42
  sig(args) { Object.maybe }
48
43
  value ? code_plus(value) : code_self
49
- when "-", "minus"
50
- sig(args) { Number.maybe }
51
- value ? code_minus(value) : code_unary_minus
52
44
  when "-", "minus", "unary_minus"
53
45
  sig(args) { Number.maybe }
54
46
  value ? code_minus(value) : code_unary_minus
@@ -25,8 +25,8 @@ class Code
25
25
  args
26
26
  .select(&:keyword?)
27
27
  .map do |argument|
28
- [argument.name.to_sym, Ruby.from_code(argument.value)]
29
- end
28
+ [argument.name.to_sym, Ruby.from_code(argument.value)]
29
+ end
30
30
  .to_h
31
31
 
32
32
  Ruby.to_code(raw.call(*regular_arguments, **keyword_arguments))
@@ -68,7 +68,7 @@ class Code
68
68
  [
69
69
  {
70
70
  function: {
71
- parameters: [{ name: "_" }],
71
+ parameters: [{name: "_"}],
72
72
  body: [
73
73
  {
74
74
  left_operation: {
@@ -78,7 +78,7 @@ class Code
78
78
  }
79
79
  },
80
80
  others: [
81
- { operator: ".", statement: { call: { name: raw } } }
81
+ {operator: ".", statement: {call: {name: raw}}}
82
82
  ]
83
83
  }
84
84
  }
data/lib/code/object.rb CHANGED
@@ -149,9 +149,7 @@ class Code
149
149
  end
150
150
 
151
151
  def hash
152
- unless respond_to?(:raw)
153
- raise NotImplementedError, "#{self.class.name}#hash"
154
- end
152
+ raise NotImplementedError, "#{self.class.name}#hash" unless respond_to?(:raw)
155
153
 
156
154
  [self.class, raw].hash
157
155
  end
data/lib/code/ruby.rb CHANGED
@@ -54,19 +54,8 @@ class Code
54
54
 
55
55
  def from_code
56
56
  if code?
57
- if code_nothing?
58
- raw.raw
59
- elsif code_boolean?
60
- raw.raw
61
- elsif code_decimal?
62
- raw.raw
63
- elsif code_integer?
64
- raw.raw
65
- elsif code_nothing?
66
- raw.raw
67
- elsif code_range?
68
- raw.raw
69
- elsif code_string?
57
+ if code_nothing? || code_boolean? || code_decimal? || code_integer? ||
58
+ code_range? || code_string?
70
59
  raw.raw
71
60
  elsif code_dictionnary?
72
61
  raw
@@ -153,10 +142,6 @@ class Code
153
142
  raw.is_a?(::Code::Object::Integer)
154
143
  end
155
144
 
156
- def code_nothing?
157
- raw.is_a?(::Code::Object::Nothing)
158
- end
159
-
160
145
  def code_range?
161
146
  raw.is_a?(::Code::Object::Range)
162
147
  end
data/lib/code/version.rb CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  require_relative "../code"
4
4
 
5
- Code::Version = Gem::Version.new("0.6.4")
5
+ Code::Version = Gem::Version.new("0.6.5")
data/spec/code_spec.rb CHANGED
@@ -141,7 +141,7 @@ RSpec.describe Code do
141
141
  end
142
142
 
143
143
  it "converts nil" do
144
- ruby = Code::Ruby.from_code(Code.evaluate("a", ruby: { a: nil }))
144
+ ruby = Code::Ruby.from_code(Code.evaluate("a", ruby: {a: nil}))
145
145
 
146
146
  expect(ruby).to eq(nil)
147
147
  end
@@ -154,7 +154,7 @@ RSpec.describe Code do
154
154
 
155
155
  it "works with nested objects" do
156
156
  expect(
157
- Code.evaluate("items.first.title", ruby: { items: [{ title: "Hello" }] })
157
+ Code.evaluate("items.first.title", ruby: {items: [{title: "Hello"}]})
158
158
  ).to eq(Code.evaluate(":Hello"))
159
159
  end
160
160
 
@@ -163,7 +163,7 @@ RSpec.describe Code do
163
163
  Code.evaluate(
164
164
  "items.map { |item| item.title }",
165
165
  ruby: {
166
- items: [{ title: "Hello" }]
166
+ items: [{title: "Hello"}]
167
167
  }
168
168
  )
169
169
  ).to eq(Code.evaluate("[:Hello]"))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.5
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-01-31 00:00:00.000000000 Z
11
+ date: 2024-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigdecimal