code-ruby 0.6.3 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7ab3a0f0749357d4065315d58b613f8d44cba5f567b6ae33444cff90c1dedde0
4
- data.tar.gz: b48a0d5c713c0eb33c53bd30fafaaa7bc03f657a7ac7a5c70ae257eedf677cc0
3
+ metadata.gz: 22e265eb7980e078c895b92b71d1e5b0e3e3a35cb833537bdc0f1614ce2ac76b
4
+ data.tar.gz: 9d2f374bb8a627bc3b0fbb2325630a692fa01bef52a9a81750db643454163f60
5
5
  SHA512:
6
- metadata.gz: e137c317b1d87a1a61d30ce70d4bccdd75417ab002c6ad57249081f2e8b8189e4194efaad6e277f68448fa8f55b1402e337d5387d34449b69fce4425b17d72e7
7
- data.tar.gz: 2bdfced46d44b0ef4787a998fb17ce073b38a939d044a9f48f39c74dc42adbec3962622792f9852579203f090a66db78dc45aa118d25ff325089cde03cb00c93
6
+ metadata.gz: b43ac0ea5ad94cdf569518df455be616c0a1a21ba90ec548c278080eaf36b8466707960ff07bc90739a3ebb2cd9e31e481da4646eebd47ef9cd4e5d543b7c7a2
7
+ data.tar.gz: 33c41f911e6a9043f79a2c89a58e373fd200715f35bfcd8c0bea5554a10c2eca2c8b4fd145f4676c33a7723e5d5fb15179a6af568b079e43170fa0ce09eced15
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- code-ruby (0.6.2)
4
+ code-ruby (0.6.4)
5
5
  bigdecimal (~> 3)
6
6
  language-ruby (~> 0)
7
7
  zeitwerk (~> 2)
@@ -11,7 +11,7 @@ GEM
11
11
  specs:
12
12
  bigdecimal (3.1.6)
13
13
  diff-lcs (1.5.0)
14
- language-ruby (0.6.0)
14
+ language-ruby (0.6.1)
15
15
  zeitwerk (~> 2)
16
16
  rspec (3.12.0)
17
17
  rspec-core (~> 3.12.0)
@@ -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,23 +1,24 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "optparse"
4
- require_relative "../lib/code-ruby"
4
+ require 'optparse'
5
+ require_relative '../lib/code-ruby'
5
6
 
6
- options = { timeout: 0, profile: false, profiler: "text" }
7
+ options = { timeout: 0, profile: false, profiler: 'text' }
7
8
 
8
9
  OptionParser
9
10
  .new do |opts|
10
- opts.banner = "Usage: template [options]"
11
+ opts.banner = 'Usage: template [options]'
11
12
 
12
- opts.on("-v", "--version", "Version of template") do |input|
13
+ opts.on('-v', '--version', 'Version of template') do |_input|
13
14
  puts Code::Version
14
15
  exit
15
16
  end
16
17
 
17
18
  opts.on(
18
- "-i INPUT",
19
- "--input=INPUT",
20
- "Input in the code language (String or File)"
19
+ '-i INPUT',
20
+ '--input=INPUT',
21
+ 'Input in the code language (String or File)'
21
22
  ) do |input|
22
23
  input = File.read(input) if File.exist?(input)
23
24
 
@@ -25,43 +26,43 @@ OptionParser
25
26
  end
26
27
 
27
28
  opts.on(
28
- "-c CONTEXT",
29
- "--context=CONTEXT",
30
- "Context in the code language (String or File)"
29
+ '-c CONTEXT',
30
+ '--context=CONTEXT',
31
+ 'Context in the code language (String or File)'
31
32
  ) do |context|
32
33
  context = File.read(context) if File.exist?(context)
33
34
 
34
35
  options[:context] = context
35
36
  end
36
37
 
37
- opts.on("-p", "--parse", "Get parser results for input") do |parse|
38
+ opts.on('-p', '--parse', 'Get parser results for input') do |parse|
38
39
  options[:parse] = parse
39
40
  end
40
41
 
41
42
  opts.on(
42
- "-t TIMEOUT",
43
- "--timeout=TIMEOUT",
44
- "Set timeout in seconds"
43
+ '-t TIMEOUT',
44
+ '--timeout=TIMEOUT',
45
+ 'Set timeout in seconds'
45
46
  ) { |timeout| options[:timeout] = timeout.to_f }
46
47
 
47
- opts.on("--profile", "Profile Ruby code") do |timeout|
48
- require "ruby-prof"
48
+ opts.on('--profile', 'Profile Ruby code') do |_timeout|
49
+ require 'ruby-prof'
49
50
  options[:profile] = true
50
51
  end
51
52
 
52
53
  opts.on(
53
- "--profiler TYPE",
54
- "Profiler output type (text (default) or html)"
54
+ '--profiler TYPE',
55
+ 'Profiler output type (text (default) or html)'
55
56
  ) do |profiler|
56
- require "ruby-prof"
57
+ require 'ruby-prof'
57
58
  options[:profile] = true
58
59
  options[:profiler] = profiler
59
60
  end
60
61
  end
61
62
  .parse!
62
63
 
63
- input = options.fetch(:input, "")
64
- context = options.fetch(:context, "")
64
+ input = options.fetch(:input, '')
65
+ context = options.fetch(:context, '')
65
66
 
66
67
  RubyProf.start if options[:profile]
67
68
 
@@ -73,10 +74,10 @@ end
73
74
 
74
75
  if options[:profile]
75
76
  result = RubyProf.stop
76
- if options[:profiler] == "text"
77
+ if options[:profiler] == 'text'
77
78
  printer = RubyProf::FlatPrinter.new(result)
78
79
  printer.print($stdout)
79
- elsif options[:profiler] == "html"
80
+ elsif options[:profiler] == 'html'
80
81
  printer = RubyProf::GraphHtmlPrinter.new(result)
81
82
  printer.print($stdout)
82
83
  else
data/code-ruby.gemspec CHANGED
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "English"
1
4
  require_relative "lib/code/version"
2
5
 
3
6
  Gem::Specification.new do |s|
@@ -7,14 +10,13 @@ Gem::Specification.new do |s|
7
10
  s.description = 'A programming language, like Code.evaluate("1 + 1") # => 2'
8
11
  s.authors = ["Dorian Marié"]
9
12
  s.email = "dorian@dorianmarie.fr"
10
- s.files = `git ls-files`.split($/)
11
- s.test_files = s.files.grep(%r{^(test|spec|features)/})
13
+ s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
12
14
  s.require_paths = ["lib"]
13
15
  s.homepage = "https://github.com/dorianmariefr/code-ruby"
14
16
  s.license = "MIT"
15
17
  s.executables = "code"
16
18
 
17
- s.add_dependency "zeitwerk", "~> 2"
18
- s.add_dependency "language-ruby", "~> 0"
19
19
  s.add_dependency "bigdecimal", "~> 3"
20
+ s.add_dependency "language-ruby", "~> 0"
21
+ s.add_dependency "zeitwerk", "~> 2"
20
22
  end
@@ -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)
@@ -3,7 +3,8 @@
3
3
  class Code
4
4
  class Node
5
5
  class Nothing < Node
6
- def initialize(parsed)
6
+ def initialize(nothing)
7
+ @nothing = nothing
7
8
  end
8
9
 
9
10
  def 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
@@ -307,8 +305,8 @@ class Code
307
305
  self
308
306
  end
309
307
 
310
- def code_dig(*arguments)
311
- raw.dig(*arguments) || Nothing.new
308
+ def code_dig(*)
309
+ raw.dig(*) || Nothing.new
312
310
  end
313
311
 
314
312
  def code_each(argument, **globals)
@@ -335,16 +333,14 @@ class Code
335
333
  Boolean.new(raw.empty?)
336
334
  end
337
335
 
338
- def code_except(*arguments)
339
- self.class.new(raw.except(*arguments))
336
+ def code_except(*)
337
+ self.class.new(raw.except(*))
340
338
  end
341
339
 
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
@@ -394,8 +390,8 @@ class Code
394
390
  end
395
391
  end
396
392
 
397
- def code_fetch_values(*arguments)
398
- List.new(raw.fetch_values(*arguments))
393
+ def code_fetch_values(*)
394
+ List.new(raw.fetch_values(*))
399
395
  end
400
396
 
401
397
  def code_five?
@@ -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))
@@ -33,7 +33,7 @@ class Code
33
33
  sig(args)
34
34
  code_downcase
35
35
  when "include?"
36
- sig(args) { { a: String } }
36
+ sig(args) { String }
37
37
  code_include?(value)
38
38
  when "reverse"
39
39
  sig(args)
@@ -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
@@ -33,7 +33,7 @@ class Code
33
33
  other == self
34
34
  end
35
35
  end
36
- alias eql? ==
36
+ alias_method :eql?, :==
37
37
 
38
38
  def call(**args)
39
39
  operator = args.fetch(:operator, nil)
@@ -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
@@ -20,7 +20,7 @@ class Code
20
20
  end
21
21
 
22
22
  def backslash
23
- str('\\')
23
+ str("\\")
24
24
  end
25
25
 
26
26
  def opening_curly_bracket
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
@@ -11,9 +11,11 @@ class Code
11
11
 
12
12
  def valid?(argument)
13
13
  return false unless argument.is_a?(Object::Dictionary)
14
+
14
15
  argument = argument.raw
15
16
  (argument.keys + hash.keys).uniq.all? do |key|
16
17
  next false unless hash[key] && argument[key]
18
+
17
19
  valid_for?(expected: hash[key], actual: argument[key])
18
20
  end
19
21
  end
@@ -21,7 +21,7 @@ class Code
21
21
 
22
22
  def max_arguments
23
23
  max_arguments = max_arguments_of(clazz)
24
- max_arguments.nil? || maximum.nil? ? nil : maximum * max_arguments
24
+ (max_arguments.nil? || maximum.nil?) ? nil : maximum * max_arguments
25
25
  end
26
26
 
27
27
  def name
data/lib/code/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative "../code"
2
4
 
3
- Code::Version = Gem::Version.new("0.6.3")
5
+ Code::Version = Gem::Version.new("0.6.5")
data/lib/code-ruby.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bigdecimal"
2
4
  require "stringio"
3
5
  require "timeout"
@@ -3,37 +3,35 @@
3
3
  require "spec_helper"
4
4
 
5
5
  RSpec.describe Code::Node::Call do
6
- =begin
7
- let(:context) { <<~CONTEXT }
8
- render = (*args, **kargs, &block) => {
9
- [args, kargs, block&.call(:dorian)]
10
- }
11
-
12
- { render:, user: { name: :Dorian } }"
13
- CONTEXT
14
-
15
- [
16
- ["render", "[[], {}, nothing]"],
17
- ["render()", "[[], {}, nothing]"],
18
- ["render(user)", "[[user], {}, nothing]"],
19
- [
20
- "render(user, first_name: :Dorian)",
21
- "[[user], { first_name: :Dorian }, nothing]"
22
- ],
23
- ["render { }", "[[], {}, nothing]"],
24
- ["render do end", "[[], {}, nothing]"],
25
- ["render { |name| name.upcase }", "[[], {}, :Dorian]"],
26
- ["render(user) { |name| name.upcase }", "[[user], {}, :Dorian]"],
27
- ["render(user) do |name| name.upcase end", "[[user], {}, :Dorian]"],
28
- ["render { :Dorian }", "[[], {}, :Dorian]"],
29
- ["render(user) { :Dorian }", "[[user], {}, :Dorian]"],
30
- ["render(user) do :Dorian end", "[[user], {}, :Dorian]"]
31
- ].each do |input, expected|
32
- it "#{input} == #{expected}" do
33
- expect(Code.evaluate(input, context)).to eq(
34
- Code.evaluate(expected, context)
35
- )
36
- end
37
- end
38
- =end
6
+ # let(:context) { <<~CONTEXT }
7
+ # render = (*args, **kargs, &block) => {
8
+ # [args, kargs, block&.call(:dorian)]
9
+ # }
10
+ #
11
+ # { render:, user: { name: :Dorian } }"
12
+ # CONTEXT
13
+ #
14
+ # [
15
+ # ["render", "[[], {}, nothing]"],
16
+ # ["render()", "[[], {}, nothing]"],
17
+ # ["render(user)", "[[user], {}, nothing]"],
18
+ # [
19
+ # "render(user, first_name: :Dorian)",
20
+ # "[[user], { first_name: :Dorian }, nothing]"
21
+ # ],
22
+ # ["render { }", "[[], {}, nothing]"],
23
+ # ["render do end", "[[], {}, nothing]"],
24
+ # ["render { |name| name.upcase }", "[[], {}, :Dorian]"],
25
+ # ["render(user) { |name| name.upcase }", "[[user], {}, :Dorian]"],
26
+ # ["render(user) do |name| name.upcase end", "[[user], {}, :Dorian]"],
27
+ # ["render { :Dorian }", "[[], {}, :Dorian]"],
28
+ # ["render(user) { :Dorian }", "[[user], {}, :Dorian]"],
29
+ # ["render(user) do :Dorian end", "[[user], {}, :Dorian]"]
30
+ # ].each do |input, expected|
31
+ # it "#{input} == #{expected}" do
32
+ # expect(Code.evaluate(input, context)).to eq(
33
+ # Code.evaluate(expected, context)
34
+ # )
35
+ # end
36
+ # end
39
37
  end
@@ -3,18 +3,16 @@
3
3
  require "spec_helper"
4
4
 
5
5
  RSpec.describe Code::Object::Function do
6
- =begin
7
- [
8
- ["even? = (i) => { i.even? } even?(2)", "true"],
9
- ["even? = (i:) => { i.even? } even?(i: 2)", "true"],
10
- ["add = (a, b) => { a + b } add(1, 2)", "3"],
11
- ["minus = (a:, b:) => { a - b } minus(b: 1, a: 2)", "1"]
12
- ].each do |input, expected|
13
- it "#{input} == #{expected}" do
14
- expect(Code.evaluate(input)).to eq(Code.evaluate(expected))
15
- end
16
- end
17
- =end
6
+ # [
7
+ # ["even? = (i) => { i.even? } even?(2)", "true"],
8
+ # ["even? = (i:) => { i.even? } even?(i: 2)", "true"],
9
+ # ["add = (a, b) => { a + b } add(1, 2)", "3"],
10
+ # ["minus = (a:, b:) => { a - b } minus(b: 1, a: 2)", "1"]
11
+ # ].each do |input, expected|
12
+ # it "#{input} == #{expected}" do
13
+ # expect(Code.evaluate(input)).to eq(Code.evaluate(expected))
14
+ # end
15
+ # end
18
16
 
19
17
  context "valid" do
20
18
  [
data/spec/code_spec.rb CHANGED
@@ -109,7 +109,7 @@ RSpec.describe Code do
109
109
  ['"Hello \\{name}"', '"Hello \\{" + "name}"'],
110
110
  ["'Hello {1}'", '"Hello 1"'],
111
111
  ['"Hello {1}"', '"Hello 1"'],
112
- [":Hello.include?(a: :H)", true],
112
+ %w[:Hello.include?(:H) true],
113
113
  %w["Hello".downcase :hello],
114
114
  ["true ? 1", "1"],
115
115
  ["false ? 1", ""],
@@ -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]"))
data/spec/spec_helper.rb CHANGED
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative "../lib/code-ruby"
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
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
- name: zeitwerk
14
+ name: bigdecimal
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2'
19
+ version: '3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2'
26
+ version: '3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: language-ruby
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bigdecimal
42
+ name: zeitwerk
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3'
47
+ version: '2'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3'
54
+ version: '2'
55
55
  description: 'A programming language, like Code.evaluate("1 + 1") # => 2'
56
56
  email: dorian@dorianmarie.fr
57
57
  executables:
@@ -206,30 +206,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
206
  - !ruby/object:Gem::Version
207
207
  version: '0'
208
208
  requirements: []
209
- rubygems_version: 3.5.5
209
+ rubygems_version: 3.5.3
210
210
  signing_key:
211
211
  specification_version: 4
212
212
  summary: A programming language
213
- test_files:
214
- - spec/code/node/call_spec.rb
215
- - spec/code/object/boolean_spec.rb
216
- - spec/code/object/decimal_spec.rb
217
- - spec/code/object/dictionary_spec.rb
218
- - spec/code/object/function_spec.rb
219
- - spec/code/object/integer_spec.rb
220
- - spec/code/object/list_spec.rb
221
- - spec/code/object/nothing_spec.rb
222
- - spec/code/object/range_spec.rb
223
- - spec/code/parser/boolean_spec.rb
224
- - spec/code/parser/chained_call.rb
225
- - spec/code/parser/dictionary_spec.rb
226
- - spec/code/parser/function_spec.rb
227
- - spec/code/parser/group_spec.rb
228
- - spec/code/parser/if_modifier_spec.rb
229
- - spec/code/parser/list_spec.rb
230
- - spec/code/parser/number_spec.rb
231
- - spec/code/parser/string_spec.rb
232
- - spec/code/parser_spec.rb
233
- - spec/code/type_spec.rb
234
- - spec/code_spec.rb
235
- - spec/spec_helper.rb
213
+ test_files: []