code-ruby 0.6.3 → 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 +4 -4
- data/Gemfile +2 -0
- data/Gemfile.lock +2 -2
- data/bin/code +3 -2
- data/code-ruby.gemspec +6 -4
- data/lib/code/node/nothing.rb +2 -1
- data/lib/code/object/dictionary.rb +6 -6
- data/lib/code/object/string.rb +1 -1
- data/lib/code/object.rb +1 -1
- data/lib/code/parser/string.rb +1 -1
- data/lib/code/type/hash.rb +2 -0
- data/lib/code/type/repeat.rb +1 -1
- data/lib/code/version.rb +3 -1
- data/lib/code-ruby.rb +2 -0
- data/spec/code/node/call_spec.rb +31 -33
- data/spec/code/object/function_spec.rb +10 -12
- data/spec/code_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -0
- metadata +9 -31
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2885af9560ee132a0d9ab0be653fadd74e54e04975a1673ff98d929e14040088
|
|
4
|
+
data.tar.gz: 68450cd4d425cc61bccd154f32b7786a2e7f0778ca567a2e19346b017f6e40c2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f090263fb431fa7d6ab1193bd5735b8ef8c425783eea75c8495537a2f2c80576dbe8a71ecf3d41202eea787687cdf9f2d6ef0b4dcec931e38be9cc28baa2ed50
|
|
7
|
+
data.tar.gz: d2fbf7f1e6534a1f15e9fca4271b9505fb0229984a53e85d9adbfaaeba5b94535cfde135eede3289f564f06949d0f4bb3c2ff3ac384ffa56596bb802eef2be7e
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
code-ruby (0.6.
|
|
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.
|
|
14
|
+
language-ruby (0.6.1)
|
|
15
15
|
zeitwerk (~> 2)
|
|
16
16
|
rspec (3.12.0)
|
|
17
17
|
rspec-core (~> 3.12.0)
|
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,7 +10,7 @@ OptionParser
|
|
|
9
10
|
.new do |opts|
|
|
10
11
|
opts.banner = "Usage: template [options]"
|
|
11
12
|
|
|
12
|
-
opts.on("-v", "--version", "Version of template") do |
|
|
13
|
+
opts.on("-v", "--version", "Version of template") do |_input|
|
|
13
14
|
puts Code::Version
|
|
14
15
|
exit
|
|
15
16
|
end
|
|
@@ -44,7 +45,7 @@ OptionParser
|
|
|
44
45
|
"Set timeout in seconds"
|
|
45
46
|
) { |timeout| options[:timeout] = timeout.to_f }
|
|
46
47
|
|
|
47
|
-
opts.on("--profile", "Profile Ruby code") do |
|
|
48
|
+
opts.on("--profile", "Profile Ruby code") do |_timeout|
|
|
48
49
|
require "ruby-prof"
|
|
49
50
|
options[:profile] = true
|
|
50
51
|
end
|
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
|
data/lib/code/node/nothing.rb
CHANGED
|
@@ -307,8 +307,8 @@ class Code
|
|
|
307
307
|
self
|
|
308
308
|
end
|
|
309
309
|
|
|
310
|
-
def code_dig(*
|
|
311
|
-
raw.dig(*
|
|
310
|
+
def code_dig(*)
|
|
311
|
+
raw.dig(*) || Nothing.new
|
|
312
312
|
end
|
|
313
313
|
|
|
314
314
|
def code_each(argument, **globals)
|
|
@@ -335,8 +335,8 @@ class Code
|
|
|
335
335
|
Boolean.new(raw.empty?)
|
|
336
336
|
end
|
|
337
337
|
|
|
338
|
-
def code_except(*
|
|
339
|
-
self.class.new(raw.except(*
|
|
338
|
+
def code_except(*)
|
|
339
|
+
self.class.new(raw.except(*))
|
|
340
340
|
end
|
|
341
341
|
|
|
342
342
|
def code_fetch(*arguments, index: Integer.new(0), **globals)
|
|
@@ -394,8 +394,8 @@ class Code
|
|
|
394
394
|
end
|
|
395
395
|
end
|
|
396
396
|
|
|
397
|
-
def code_fetch_values(*
|
|
398
|
-
List.new(raw.fetch_values(*
|
|
397
|
+
def code_fetch_values(*)
|
|
398
|
+
List.new(raw.fetch_values(*))
|
|
399
399
|
end
|
|
400
400
|
|
|
401
401
|
def code_five?
|
data/lib/code/object/string.rb
CHANGED
data/lib/code/object.rb
CHANGED
data/lib/code/parser/string.rb
CHANGED
data/lib/code/type/hash.rb
CHANGED
|
@@ -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
|
data/lib/code/type/repeat.rb
CHANGED
data/lib/code/version.rb
CHANGED
data/lib/code-ruby.rb
CHANGED
data/spec/code/node/call_spec.rb
CHANGED
|
@@ -3,37 +3,35 @@
|
|
|
3
3
|
require "spec_helper"
|
|
4
4
|
|
|
5
5
|
RSpec.describe Code::Node::Call do
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
[
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
7
|
-
[
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
[
|
|
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
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: code-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
4
|
+
version: 0.6.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dorian Marié
|
|
@@ -11,19 +11,19 @@ cert_chain: []
|
|
|
11
11
|
date: 2024-01-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: bigdecimal
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
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: '
|
|
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:
|
|
42
|
+
name: zeitwerk
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
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: '
|
|
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.
|
|
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: []
|