code-ruby 0.6.2 → 0.6.4

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: b63a5dc762c3ac1d5e2f37910c24806b092a78f0bc8ed5ad4409f2e6283f7880
4
- data.tar.gz: 5cd2966db552e1b06a7946767af43005a670dbe76378e8680524af6abf3a2479
3
+ metadata.gz: 2885af9560ee132a0d9ab0be653fadd74e54e04975a1673ff98d929e14040088
4
+ data.tar.gz: 68450cd4d425cc61bccd154f32b7786a2e7f0778ca567a2e19346b017f6e40c2
5
5
  SHA512:
6
- metadata.gz: 7d364133a93859542602ac10730d4b539e2e090e7b91fa9ffacfec1602edc5701da4ab8c6d1208e6e9a1967983ea2c62d80fbf7aab6df62141da332199ed7796
7
- data.tar.gz: ad10fe135a0391fa37d769282b13a1fa7b1423a9226daa147553d91ee0d61f03f8b49d6e7b1c0514709bbf0cb03fe6c64db9ea7a71b10b9761cdcc1cdc95f2a1
6
+ metadata.gz: f090263fb431fa7d6ab1193bd5735b8ef8c425783eea75c8495537a2f2c80576dbe8a71ecf3d41202eea787687cdf9f2d6ef0b4dcec931e38be9cc28baa2ed50
7
+ data.tar.gz: d2fbf7f1e6534a1f15e9fca4271b9505fb0229984a53e85d9adbfaaeba5b94535cfde135eede3289f564f06949d0f4bb3c2ff3ac384ffa56596bb802eef2be7e
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ .env
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.3.0
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 3.3.0
data/Gemfile CHANGED
@@ -1,6 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  gemspec
4
6
 
7
+ ruby "3.3.0"
8
+
5
9
  gem "rspec"
6
10
  gem "ruby-prof"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- code-ruby (0.6.1)
4
+ code-ruby (0.6.3)
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)
@@ -38,5 +38,8 @@ DEPENDENCIES
38
38
  rspec
39
39
  ruby-prof
40
40
 
41
+ RUBY VERSION
42
+ ruby 3.3.0p0
43
+
41
44
  BUNDLED WITH
42
45
  2.5.5
data/bin/code CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require "optparse"
4
5
  require_relative "../lib/code-ruby"
@@ -9,11 +10,7 @@ OptionParser
9
10
  .new do |opts|
10
11
  opts.banner = "Usage: template [options]"
11
12
 
12
- opts.on(
13
- "-v",
14
- "--version",
15
- "Version of template"
16
- ) do |input|
13
+ opts.on("-v", "--version", "Version of template") do |_input|
17
14
  puts Code::Version
18
15
  exit
19
16
  end
@@ -48,10 +45,7 @@ OptionParser
48
45
  "Set timeout in seconds"
49
46
  ) { |timeout| options[:timeout] = timeout.to_f }
50
47
 
51
- opts.on(
52
- "--profile",
53
- "Profile Ruby code"
54
- ) do |timeout|
48
+ opts.on("--profile", "Profile Ruby code") do |_timeout|
55
49
  require "ruby-prof"
56
50
  options[:profile] = true
57
51
  end
@@ -70,9 +64,7 @@ OptionParser
70
64
  input = options.fetch(:input, "")
71
65
  context = options.fetch(:context, "")
72
66
 
73
- if options[:profile]
74
- RubyProf.start
75
- end
67
+ RubyProf.start if options[:profile]
76
68
 
77
69
  if options[:parse]
78
70
  pp Code::Parser.parse(input).to_raw
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
@@ -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)
@@ -214,7 +214,11 @@ class Code
214
214
 
215
215
  def code_delete(*arguments, index: Integer.new(0), **globals)
216
216
  default =
217
- (arguments.last if arguments.last.is_a?(Function) && arguments.size > 1)
217
+ (
218
+ if arguments.last.is_a?(Function) && arguments.size > 1
219
+ arguments.last
220
+ end
221
+ )
218
222
 
219
223
  arguments = arguments[..-2] if default
220
224
 
@@ -303,8 +307,8 @@ class Code
303
307
  self
304
308
  end
305
309
 
306
- def code_dig(*arguments)
307
- raw.dig(*arguments) || Nothing.new
310
+ def code_dig(*)
311
+ raw.dig(*) || Nothing.new
308
312
  end
309
313
 
310
314
  def code_each(argument, **globals)
@@ -331,13 +335,17 @@ class Code
331
335
  Boolean.new(raw.empty?)
332
336
  end
333
337
 
334
- def code_except(*arguments)
335
- self.class.new(raw.except(*arguments))
338
+ def code_except(*)
339
+ self.class.new(raw.except(*))
336
340
  end
337
341
 
338
342
  def code_fetch(*arguments, index: Integer.new(0), **globals)
339
343
  default =
340
- (arguments.last if arguments.last.is_a?(Function) && arguments.size > 1)
344
+ (
345
+ if arguments.last.is_a?(Function) && arguments.size > 1
346
+ arguments.last
347
+ end
348
+ )
341
349
 
342
350
  arguments = arguments[..-2] if default
343
351
 
@@ -386,8 +394,8 @@ class Code
386
394
  end
387
395
  end
388
396
 
389
- def code_fetch_values(*arguments)
390
- List.new(raw.fetch_values(*arguments))
397
+ def code_fetch_values(*)
398
+ List.new(raw.fetch_values(*))
391
399
  end
392
400
 
393
401
  def code_five?
@@ -485,7 +493,11 @@ class Code
485
493
 
486
494
  def code_merge(*arguments, **globals)
487
495
  conflict =
488
- (arguments.last if arguments.last.is_a?(Function) && arguments.size > 1)
496
+ (
497
+ if arguments.last.is_a?(Function) && arguments.size > 1
498
+ arguments.last
499
+ end
500
+ )
489
501
 
490
502
  arguments = arguments[..-2] if conflict
491
503
 
@@ -36,9 +36,7 @@ class Code
36
36
  if parameter.regular_splat?
37
37
  context.code_set(
38
38
  parameter.name,
39
- List.new(
40
- arguments.select(&:regular?).map(&:value)
41
- )
39
+ List.new(arguments.select(&:regular?).map(&:value))
42
40
  )
43
41
  elsif parameter.keyword_splat?
44
42
  context.code_set(
@@ -53,7 +51,10 @@ class Code
53
51
  context.code_set(parameter.name, argument)
54
52
  end
55
53
  elsif parameter.keyword?
56
- argument = arguments.detect { |argument| argument.name == parameter.name }&.value
54
+ argument =
55
+ arguments
56
+ .detect { |argument| argument.name == parameter.name }
57
+ &.value
57
58
  argument = parameter.evaluate(**globals) if argument.nil?
58
59
  context.code_set(parameter.name, argument)
59
60
  else
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)
@@ -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
@@ -6,28 +6,26 @@ class Code
6
6
  attr_reader :hash
7
7
 
8
8
  def initialize(hash)
9
- @hash = hash
9
+ @hash = hash.transform_keys { |key| Object::String.new(key) }
10
10
  end
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
20
22
 
21
23
  def min_arguments
22
- hash.sum do |_, value|
23
- min_arguments_of(value)
24
- end
24
+ hash.sum { |_, value| min_arguments_of(value) }
25
25
  end
26
26
 
27
27
  def max_arguments
28
- hash.sum do |_, value|
29
- max_arguments_of(value)
30
- end
28
+ hash.sum { |_, value| max_arguments_of(value) }
31
29
  end
32
30
 
33
31
  def name
@@ -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/type/sig.rb CHANGED
@@ -23,9 +23,10 @@ class Code
23
23
  attr_reader :args, :block, :object
24
24
 
25
25
  def expected_arguments
26
- @expected_arguments ||= Array(block&.call || []).map do |clazz|
27
- clazz.is_a?(::Hash) ? Hash.new(clazz) : clazz
28
- end
26
+ @expected_arguments ||=
27
+ wrap(block&.call || []).map do |clazz|
28
+ clazz.is_a?(::Hash) ? Hash.new(clazz) : clazz
29
+ end
29
30
  end
30
31
 
31
32
  def min_arguments_of(clazz)
@@ -53,7 +54,8 @@ class Code
53
54
  end
54
55
 
55
56
  def max_arguments
56
- max_arguments = expected_arguments.map { |clazz| max_arguments_of(clazz) }
57
+ max_arguments =
58
+ expected_arguments.map { |clazz| max_arguments_of(clazz) }
57
59
  max_arguments.include?(nil) ? nil : max_arguments.sum
58
60
  end
59
61
 
@@ -96,6 +98,10 @@ class Code
96
98
  expected.is_a?(Type) ? expected.valid?(actual) : actual.is_a?(expected)
97
99
  end
98
100
 
101
+ def wrap(object)
102
+ object.is_a?(Array) ? object : [object]
103
+ end
104
+
99
105
  def check_types_of_arguments!
100
106
  expected_index = 0
101
107
  repeat_index = 0
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.2")
5
+ Code::Version = Gem::Version.new("0.6.4")
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,24 +3,22 @@
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
  [
21
19
  "f = () => {} f",
22
- "f = (x) => {} f(1)",
23
- # "f = (x:) => {} f(x: 1)"
20
+ "f = (x) => {} f(1)"
21
+ # "f = (x:) => {} f(x: 1)"
24
22
  ].each do |input|
25
23
  it "#{input} is valid" do
26
24
  Code.evaluate(input)
@@ -3,10 +3,7 @@
3
3
  require "spec_helper"
4
4
 
5
5
  RSpec.describe Code::Object::List do
6
- [
7
- ["[] == []", "true"],
8
- ["[1, 2, 3].sum", "6"],
9
- ].each do |input, expected|
6
+ [["[] == []", "true"], ["[1, 2, 3].sum", "6"]].each do |input, expected|
10
7
  it "#{input} == #{expected}" do
11
8
  expect(Code.evaluate(input)).to eq(Code.evaluate(expected))
12
9
  end
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
- %w["Hello".include?("H") true],
112
+ %w[:Hello.include?(:H) true],
113
113
  %w["Hello".downcase :hello],
114
114
  ["true ? 1", "1"],
115
115
  ["false ? 1", ""],
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.2
4
+ version: 0.6.4
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-30 00:00:00.000000000 Z
11
+ date: 2024-01-31 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:
@@ -59,7 +59,10 @@ executables:
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
+ - ".gitignore"
62
63
  - ".rspec"
64
+ - ".ruby-version"
65
+ - ".tool-versions"
63
66
  - Gemfile
64
67
  - Gemfile.lock
65
68
  - README.md
@@ -203,30 +206,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
206
  - !ruby/object:Gem::Version
204
207
  version: '0'
205
208
  requirements: []
206
- rubygems_version: 3.5.5
209
+ rubygems_version: 3.5.3
207
210
  signing_key:
208
211
  specification_version: 4
209
212
  summary: A programming language
210
- test_files:
211
- - spec/code/node/call_spec.rb
212
- - spec/code/object/boolean_spec.rb
213
- - spec/code/object/decimal_spec.rb
214
- - spec/code/object/dictionary_spec.rb
215
- - spec/code/object/function_spec.rb
216
- - spec/code/object/integer_spec.rb
217
- - spec/code/object/list_spec.rb
218
- - spec/code/object/nothing_spec.rb
219
- - spec/code/object/range_spec.rb
220
- - spec/code/parser/boolean_spec.rb
221
- - spec/code/parser/chained_call.rb
222
- - spec/code/parser/dictionary_spec.rb
223
- - spec/code/parser/function_spec.rb
224
- - spec/code/parser/group_spec.rb
225
- - spec/code/parser/if_modifier_spec.rb
226
- - spec/code/parser/list_spec.rb
227
- - spec/code/parser/number_spec.rb
228
- - spec/code/parser/string_spec.rb
229
- - spec/code/parser_spec.rb
230
- - spec/code/type_spec.rb
231
- - spec/code_spec.rb
232
- - spec/spec_helper.rb
213
+ test_files: []