language-ruby 0.5.6 → 0.6.0

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 (194) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -4
  3. data/language-ruby.gemspec +3 -3
  4. data/lib/language/atom/any.rb +8 -0
  5. data/lib/language/atom/repeat.rb +15 -0
  6. data/lib/language/atom.rb +25 -42
  7. data/lib/language/output.rb +13 -11
  8. data/lib/language/parser/absent/present.rb +2 -0
  9. data/lib/language/parser/absent.rb +2 -0
  10. data/lib/language/parser/end_of_input.rb +2 -0
  11. data/lib/language/parser/interuption.rb +2 -0
  12. data/lib/language/parser/not_end_of_input.rb +2 -0
  13. data/lib/language/parser/str/not_found.rb +2 -0
  14. data/lib/language/parser/str.rb +2 -0
  15. data/lib/language/parser.rb +10 -10
  16. data/lib/language/version.rb +3 -0
  17. data/lib/language-ruby.rb +0 -5
  18. data/lib/language.rb +9 -7
  19. data/spec/spec_helper.rb +1 -6
  20. metadata +7 -221
  21. data/.cherry.js +0 -21
  22. data/.editorconfig +0 -9
  23. data/.github/workflows/rspec.yml +0 -14
  24. data/.gitignore +0 -2
  25. data/.prettierrc +0 -3
  26. data/.rspec +0 -1
  27. data/.tool-versions +0 -1
  28. data/CHANGELOG.md +0 -55
  29. data/Gemfile.lock +0 -49
  30. data/LICENSE +0 -7
  31. data/README.md +0 -103
  32. data/TODO +0 -17
  33. data/bin/code +0 -76
  34. data/bin/format +0 -3
  35. data/bin/publish +0 -19
  36. data/bin/template +0 -85
  37. data/bin/test +0 -17
  38. data/code-ruby.gemspec +0 -17
  39. data/docs/class.code +0 -9
  40. data/docs/euler/1.template +0 -10
  41. data/docs/euler/2.template +0 -16
  42. data/docs/euler/3.template +0 -16
  43. data/docs/euler/4.template +0 -10
  44. data/docs/euler/5.template +0 -13
  45. data/docs/fibonnaci.template +0 -14
  46. data/docs/meetup.code +0 -12
  47. data/docs/precedence.template +0 -36
  48. data/docs/rain.code +0 -22
  49. data/docs/slack.code +0 -17
  50. data/docs/stripe.code +0 -7
  51. data/docs/twitter.code +0 -9
  52. data/lib/code/error.rb +0 -18
  53. data/lib/code/node/base_10.rb +0 -29
  54. data/lib/code/node/base_16.rb +0 -13
  55. data/lib/code/node/base_2.rb +0 -13
  56. data/lib/code/node/base_8.rb +0 -13
  57. data/lib/code/node/boolean.rb +0 -22
  58. data/lib/code/node/call.rb +0 -47
  59. data/lib/code/node/call_argument.rb +0 -21
  60. data/lib/code/node/chained_call.rb +0 -23
  61. data/lib/code/node/code.rb +0 -20
  62. data/lib/code/node/decimal.rb +0 -26
  63. data/lib/code/node/dictionnary.rb +0 -33
  64. data/lib/code/node/equal.rb +0 -34
  65. data/lib/code/node/function.rb +0 -20
  66. data/lib/code/node/function_parameter.rb +0 -31
  67. data/lib/code/node/if.rb +0 -59
  68. data/lib/code/node/if_modifier.rb +0 -47
  69. data/lib/code/node/list.rb +0 -16
  70. data/lib/code/node/negation.rb +0 -15
  71. data/lib/code/node/not.rb +0 -15
  72. data/lib/code/node/nothing.rb +0 -12
  73. data/lib/code/node/number.rb +0 -25
  74. data/lib/code/node/operation.rb +0 -38
  75. data/lib/code/node/power.rb +0 -20
  76. data/lib/code/node/rescue.rb +0 -17
  77. data/lib/code/node/splat.rb +0 -15
  78. data/lib/code/node/statement.rb +0 -59
  79. data/lib/code/node/string.rb +0 -53
  80. data/lib/code/node/ternary.rb +0 -24
  81. data/lib/code/node/unary_minus.rb +0 -15
  82. data/lib/code/node/while.rb +0 -35
  83. data/lib/code/node.rb +0 -13
  84. data/lib/code/object/argument.rb +0 -32
  85. data/lib/code/object/boolean.rb +0 -27
  86. data/lib/code/object/decimal.rb +0 -162
  87. data/lib/code/object/dictionnary.rb +0 -96
  88. data/lib/code/object/function.rb +0 -64
  89. data/lib/code/object/global.rb +0 -42
  90. data/lib/code/object/integer.rb +0 -221
  91. data/lib/code/object/list.rb +0 -207
  92. data/lib/code/object/nothing.rb +0 -23
  93. data/lib/code/object/number.rb +0 -6
  94. data/lib/code/object/range.rb +0 -146
  95. data/lib/code/object/ruby_function.rb +0 -31
  96. data/lib/code/object/string.rb +0 -102
  97. data/lib/code/object.rb +0 -197
  98. data/lib/code/parser/addition.rb +0 -21
  99. data/lib/code/parser/and_operator.rb +0 -17
  100. data/lib/code/parser/bitwise_and.rb +0 -17
  101. data/lib/code/parser/bitwise_or.rb +0 -21
  102. data/lib/code/parser/boolean.rb +0 -17
  103. data/lib/code/parser/call.rb +0 -122
  104. data/lib/code/parser/chained_call.rb +0 -47
  105. data/lib/code/parser/class.rb +0 -45
  106. data/lib/code/parser/code.rb +0 -25
  107. data/lib/code/parser/dictionnary.rb +0 -67
  108. data/lib/code/parser/equal.rb +0 -94
  109. data/lib/code/parser/equality.rb +0 -35
  110. data/lib/code/parser/equality_lower.rb +0 -9
  111. data/lib/code/parser/function.rb +0 -85
  112. data/lib/code/parser/greater.rb +0 -25
  113. data/lib/code/parser/group.rb +0 -22
  114. data/lib/code/parser/if.rb +0 -63
  115. data/lib/code/parser/if_modifier.rb +0 -55
  116. data/lib/code/parser/list.rb +0 -42
  117. data/lib/code/parser/multiplication.rb +0 -25
  118. data/lib/code/parser/name.rb +0 -107
  119. data/lib/code/parser/negation.rb +0 -30
  120. data/lib/code/parser/not_keyword.rb +0 -23
  121. data/lib/code/parser/nothing.rb +0 -22
  122. data/lib/code/parser/number.rb +0 -154
  123. data/lib/code/parser/operation.rb +0 -35
  124. data/lib/code/parser/or_keyword.rb +0 -21
  125. data/lib/code/parser/or_operator.rb +0 -17
  126. data/lib/code/parser/power.rb +0 -43
  127. data/lib/code/parser/range.rb +0 -17
  128. data/lib/code/parser/rescue.rb +0 -39
  129. data/lib/code/parser/shift.rb +0 -21
  130. data/lib/code/parser/splat.rb +0 -31
  131. data/lib/code/parser/statement.rb +0 -9
  132. data/lib/code/parser/string.rb +0 -78
  133. data/lib/code/parser/ternary.rb +0 -46
  134. data/lib/code/parser/unary_minus.rb +0 -31
  135. data/lib/code/parser/while.rb +0 -36
  136. data/lib/code/parser/whitespace.rb +0 -49
  137. data/lib/code/parser.rb +0 -19
  138. data/lib/code/ruby.rb +0 -174
  139. data/lib/code-ruby.rb +0 -10
  140. data/lib/code.rb +0 -47
  141. data/lib/template/node/code_part.rb +0 -13
  142. data/lib/template/node/part.rb +0 -19
  143. data/lib/template/node/template.rb +0 -15
  144. data/lib/template/node/text_part.rb +0 -13
  145. data/lib/template/node.rb +0 -4
  146. data/lib/template/parser/template.rb +0 -39
  147. data/lib/template/parser.rb +0 -19
  148. data/lib/template/version.rb +0 -3
  149. data/lib/template-ruby.rb +0 -10
  150. data/lib/template.rb +0 -50
  151. data/spec/code/addition_spec.rb +0 -13
  152. data/spec/code/and_operator_spec.rb +0 -13
  153. data/spec/code/bitwise_and_spec.rb +0 -13
  154. data/spec/code/bitwise_or_spec.rb +0 -13
  155. data/spec/code/boolean_spec.rb +0 -13
  156. data/spec/code/call_spec.rb +0 -21
  157. data/spec/code/chained_call_spec.rb +0 -16
  158. data/spec/code/code_spec.rb +0 -29
  159. data/spec/code/dictionnary_spec.rb +0 -17
  160. data/spec/code/equal_spec.rb +0 -26
  161. data/spec/code/equality_spec.rb +0 -13
  162. data/spec/code/function_spec.rb +0 -18
  163. data/spec/code/greater_spec.rb +0 -18
  164. data/spec/code/group_spec.rb +0 -12
  165. data/spec/code/if_modifier_spec.rb +0 -20
  166. data/spec/code/if_spec.rb +0 -25
  167. data/spec/code/list_spec.rb +0 -19
  168. data/spec/code/multiplication_spec.rb +0 -18
  169. data/spec/code/negation_spec.rb +0 -20
  170. data/spec/code/not_keyword_spec.rb +0 -13
  171. data/spec/code/nothing_spec.rb +0 -17
  172. data/spec/code/number_spec.rb +0 -22
  173. data/spec/code/or_keyword_spec.rb +0 -17
  174. data/spec/code/or_operator_spec.rb +0 -16
  175. data/spec/code/parser/boolean_spec.rb +0 -16
  176. data/spec/code/parser/call_spec.rb +0 -26
  177. data/spec/code/parser/chained_call.rb +0 -17
  178. data/spec/code/parser/dictionnary_spec.rb +0 -18
  179. data/spec/code/parser/function_spec.rb +0 -16
  180. data/spec/code/parser/group_spec.rb +0 -18
  181. data/spec/code/parser/list_spec.rb +0 -18
  182. data/spec/code/parser/number_spec.rb +0 -12
  183. data/spec/code/parser/string_spec.rb +0 -21
  184. data/spec/code/parser_spec.rb +0 -23
  185. data/spec/code/power_spec.rb +0 -13
  186. data/spec/code/range_spec.rb +0 -16
  187. data/spec/code/rescue_spec.rb +0 -13
  188. data/spec/code/shift_spec.rb +0 -13
  189. data/spec/code/splat_spec.rb +0 -13
  190. data/spec/code/string_spec.rb +0 -27
  191. data/spec/code/ternary_spec.rb +0 -18
  192. data/spec/code/unary_minus_spec.rb +0 -13
  193. data/spec/code/while_spec.rb +0 -18
  194. data/template-ruby.gemspec +0 -19
data/lib/template-ruby.rb DELETED
@@ -1,10 +0,0 @@
1
- require "bigdecimal"
2
- require "stringio"
3
- require "timeout"
4
- require "zeitwerk"
5
-
6
- loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false)
7
- loader.ignore("#{__dir__}/template-ruby.rb")
8
- loader.ignore("#{__dir__}/code-ruby.rb")
9
- loader.ignore("#{__dir__}/language-ruby.rb")
10
- loader.setup
data/lib/template.rb DELETED
@@ -1,50 +0,0 @@
1
- class Template
2
- DEFAULT_TIMEOUT = 10
3
-
4
- def initialize(input, io: StringIO.new, timeout: DEFAULT_TIMEOUT, ruby: {})
5
- @input = input
6
- @parsed =
7
- Timeout.timeout(timeout) { ::Template::Parser.parse(@input).to_raw }
8
- @io = io
9
- @timeout = timeout || DEFAULT_TIMEOUT
10
- @ruby = ::Code::Ruby.to_code(ruby || {})
11
- end
12
-
13
- def self.render(
14
- input,
15
- context = "",
16
- io: StringIO.new,
17
- timeout: DEFAULT_TIMEOUT,
18
- ruby: {}
19
- )
20
- new(input, io: io, timeout: timeout, ruby: ruby).render(context)
21
- end
22
-
23
- def render(context = "")
24
- Timeout.timeout(timeout) do
25
- if context != ""
26
- context = ::Code.evaluate(context, timeout: timeout, io: io, ruby: ruby)
27
- else
28
- context = ::Code::Object::Dictionnary.new
29
- end
30
-
31
- if !context.is_a?(::Code::Object::Dictionnary)
32
- raise ::Code::Template::IncompatibleContext.new(
33
- "context must be a dictionnary"
34
- )
35
- end
36
-
37
- context = context.merge(ruby)
38
-
39
- ::Template::Node::Template.new(parsed).evaluate(context: context, io: io)
40
-
41
- io.is_a?(StringIO) ? io.string : nil
42
- end
43
- end
44
-
45
- private
46
-
47
- attr_reader :parsed, :io, :timeout, :ruby
48
- end
49
-
50
- require_relative "template/version"
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "function" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [["1 + 2", "3"], ["2 - 1", "1"], ["a = 2 - 1 a", "1"]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "and operator" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [["true && false", "false"], ["true && true", "true"]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "bitwise and" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [["1 & 1", "1"]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "bitwise or" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [["1 | 2", "3"], ["1 ^ 2", "3"]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "boolean" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [%w[true true], %w[false false]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,21 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "call" do
4
- let(:timeout) { 0 }
5
-
6
- context "inspecting the io" do
7
- let(:io) { StringIO.new }
8
-
9
- subject do
10
- Code.evaluate(input, io: io, timeout: timeout)
11
- io.string
12
- end
13
-
14
- [["puts(true)", "true\n"], %w[print(false) false]].each do |input, output|
15
- context input do
16
- let(:input) { input }
17
- it { expect(subject).to eq(output) }
18
- end
19
- end
20
- end
21
- end
@@ -1,16 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "chained call" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["[1, 2, 3].select { |n| n.even? }", "[2]"],
9
- ["[1, 2, 3].select { |n| n.even? }.select { |n| n.odd? }", "[]"]
10
- ].each do |input, output|
11
- context input do
12
- let(:input) { input }
13
- it { expect(subject).to eq(output) }
14
- end
15
- end
16
- end
@@ -1,29 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "function" do
4
- it "converts nil" do
5
- expect(Code::Ruby.from_code(Code.evaluate("a", ruby: { a: nil }))).to eq(nil)
6
- end
7
-
8
- it "works with downcase" do
9
- expect(Code.evaluate("downcase", "{ downcase: 1 }")).to eq(1)
10
- end
11
-
12
- it "works with nested objects" do
13
- expect(
14
- Code.evaluate(
15
- "items.first.title",
16
- ruby: { items: [{ title: "Hello" }] }
17
- )
18
- ).to eq("Hello")
19
- end
20
-
21
- it "works with arrays" do
22
- expect(
23
- Code.evaluate(
24
- "items.map { |item| item.title }",
25
- ruby: { items: [{ title: "Hello" }] }
26
- )
27
- ).to eq(["Hello"])
28
- end
29
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "dictionnary" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- %w[{} {}],
9
- ["{ a: 1, b: 2, c: 3 }", '{"a" => 1, "b" => 2, "c" => 3}'],
10
- ['{ "first_name": "Dorian" }', '{"first_name" => "Dorian"}']
11
- ].each do |input, output|
12
- context input do
13
- let(:input) { input }
14
- it { expect(subject).to eq(output) }
15
- end
16
- end
17
- end
@@ -1,26 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "function" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["a = 1 a", "1"],
9
- ["a = 1 a += 1 a", "2"],
10
- ["a = 1 a -= 1 a", "0"],
11
- ["a = 1 a *= 2 a", "2"],
12
- ["a = 1 a /= 2 a", "0.5"],
13
- ["a = 10 a %= 2 a", "0"],
14
- ["a = 1 a >>= 1 a", "0"],
15
- ["a = 1 a <<= 1 a", "2"],
16
- ["a = 1 a |= 2 a", "3"],
17
- ["a = 1 a ^= 2 a", "3"],
18
- ["a = false a ||= true a", "true"],
19
- ["a = false a &&= true a", "false"]
20
- ].each do |input, output|
21
- context input do
22
- let(:input) { input }
23
- it { expect(subject).to eq(output) }
24
- end
25
- end
26
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "while" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [["1 == 1", "true"], ["1 == 1 and 2 == 2", "true"]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "function" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
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, output|
13
- context input do
14
- let(:input) { input }
15
- it { expect(subject).to eq(output) }
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "greater" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["1 > 2", "false"],
9
- ["1 < 2", "true"],
10
- ["1 <= 1", "true"],
11
- ["1 >= 1", "true"]
12
- ].each do |input, output|
13
- context input do
14
- let(:input) { input }
15
- it { expect(subject).to eq(output) }
16
- end
17
- end
18
- end
@@ -1,12 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "group" do
4
- subject { Code.evaluate(input).to_s }
5
-
6
- [["(true false)", "false"]].each do |input, output|
7
- context input do
8
- let(:input) { input }
9
- it { expect(subject).to eq(output) }
10
- end
11
- end
12
- end
@@ -1,20 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "if modifier" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["1 if true", "1"],
9
- ["1 if false", ""],
10
- ["1 unless true", ""],
11
- ["1 unless false", "1"],
12
- ["a = 0 a += 1 while a < 10 a", "10"],
13
- ["a = 0 a += 1 until a > 10 a", "11"]
14
- ].each do |input, output|
15
- context input do
16
- let(:input) { input }
17
- it { expect(subject).to eq(output) }
18
- end
19
- end
20
- end
data/spec/code/if_spec.rb DELETED
@@ -1,25 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "if" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["if true 1", "1"],
9
- ["unless false 1", "1"],
10
- ["if false 1", ""],
11
- ["unless true 1", ""],
12
- ["if false 1 else 2", "2"],
13
- ["if false 1 elsif true 2", "2"],
14
- ["if false 1 elsif false 2", ""],
15
- ["if false 1 else if true 2", "2"],
16
- ["if false 1 else if false 2", ""],
17
- ["if false 1 else unless false 2", "2"],
18
- ["if false 1 else unless true 2", ""]
19
- ].each do |input, output|
20
- context input do
21
- let(:input) { input }
22
- it { expect(subject).to eq(output) }
23
- end
24
- end
25
- end
@@ -1,19 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "list" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["[]", "[]"],
9
- ["[1, 2, 3]", "[1, 2, 3]"],
10
- ["[1, 2, 3].include?(2)", "true"],
11
- ["[1, 2, 3].include?(4)", "false"],
12
- ["[[true]]", "[[true]]"]
13
- ].each do |input, output|
14
- context input do
15
- let(:input) { input }
16
- it { expect(subject).to eq(output) }
17
- end
18
- end
19
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "multiplication" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["2 * 3", "6"],
9
- ["2 * 3 + 2", "8"],
10
- ["2 / 4", "0.5"],
11
- ["4 % 3", "1"]
12
- ].each do |input, output|
13
- context input do
14
- let(:input) { input }
15
- it { expect(subject).to eq(output) }
16
- end
17
- end
18
- end
@@ -1,20 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "function" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- %w[!false true],
9
- %w[!!true true],
10
- %w[!!1 true],
11
- %w[+1 1],
12
- %w[+1.0 1.0],
13
- %w[+true true]
14
- ].each do |input, output|
15
- context input do
16
- let(:input) { input }
17
- it { expect(subject).to eq(output) }
18
- end
19
- end
20
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "not keyword" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [["not true", "false"], ["not not false", "false"]].each do |input, output|
8
- context input do
9
- let(:input) { input }
10
- it { expect(subject).to eq(output) }
11
- end
12
- end
13
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "nothing" do
4
- subject { Code.evaluate(input).to_s }
5
-
6
- [
7
- ["nothing", ""],
8
- ["null", ""],
9
- ["nil", ""],
10
- ["nothing null", ""]
11
- ].each do |input, output|
12
- context input do
13
- let(:input) { input }
14
- it { expect(subject).to eq(output) }
15
- end
16
- end
17
- end
@@ -1,22 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "number" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- %w[0 0],
9
- %w[1.1 1.1],
10
- %w[0x10 16],
11
- %w[0o10 8],
12
- %w[0b10 2],
13
- %w[1e1 10],
14
- %w[1.0e1 10.0],
15
- %w[10e1.0 100.0]
16
- ].each do |input, output|
17
- context input do
18
- let(:input) { input }
19
- it { expect(subject).to eq(output) }
20
- end
21
- end
22
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "or keyword" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["true or false", "true"],
9
- ["true and false", "false"],
10
- ["random = 1 random", "1"]
11
- ].each do |input, output|
12
- context input do
13
- let(:input) { input }
14
- it { expect(subject).to eq(output) }
15
- end
16
- end
17
- end
@@ -1,16 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "or operator" do
4
- let(:timeout) { 0 }
5
- subject { Code.evaluate(input, timeout: timeout).to_s }
6
-
7
- [
8
- ["true || false", "true"],
9
- ["false || false", "false"]
10
- ].each do |input, output|
11
- context input do
12
- let(:input) { input }
13
- it { expect(subject).to eq(output) }
14
- end
15
- end
16
- end
@@ -1,16 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Code::Parser::Boolean do
4
- subject { Code::Parser.parse(input) }
5
-
6
- [
7
- ["true", [{ boolean: "true" }]],
8
- ["false", [{ boolean: "false" }]]
9
- ].each do |input, output|
10
- context input.inspect do
11
- let(:input) { input }
12
-
13
- it { expect(subject).to eq(output) }
14
- end
15
- end
16
- end
@@ -1,26 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Code::Parser::Call do
4
- subject { Code::Parser.parse(input) }
5
-
6
- [
7
- "a",
8
- "hello",
9
- "hello()",
10
- "render(user)",
11
- 'render(user, first_name: "Dorian")',
12
- "render { }",
13
- "render do end",
14
- "render { |name| name.upcase }",
15
- "render(user) { |name| name.upcase }",
16
- "render(user) do |name| name.upcase end",
17
- 'render { "Dorian" }',
18
- 'render(user) { "Dorian" }',
19
- 'render(user) do "Dorian" end'
20
- ].each do |input|
21
- context input do
22
- let(:input) { input }
23
- it { subject }
24
- end
25
- end
26
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Code::Parser::ChainedCall do
4
- subject { Code::Parser.parse(input) }
5
-
6
- [
7
- "a.b",
8
- "user.first_name",
9
- "user.admin?",
10
- 'user.update!(name: "Dorian")'
11
- ].each do |input|
12
- context input do
13
- let(:input) { input }
14
- it { subject }
15
- end
16
- end
17
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Code::Parser::Dictionnary do
4
- subject { Code::Parser.parse(input) }
5
-
6
- [
7
- "{}",
8
- "{ }",
9
- "{/* comment */}",
10
- "{ a: 1, b: 2, c: 3 }",
11
- '{ "first_name": "Dorian" }'
12
- ].each do |input|
13
- context input do
14
- let(:input) { input }
15
- it { subject }
16
- end
17
- end
18
- end
@@ -1,16 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Code::Parser::Function do
4
- subject { Code::Parser.parse(input) }
5
-
6
- [
7
- "() => {}",
8
- "(a, b) => { add(a, b) }",
9
- "(a:, b:) => { add(a, b) }"
10
- ].each do |input|
11
- context input do
12
- let(:input) { input }
13
- it { subject }
14
- end
15
- end
16
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Code::Parser::Group do
4
- subject { Code::Parser.parse(input) }
5
-
6
- [
7
- [
8
- "(true (nothing))",
9
- [{ group: [{ boolean: "true" }, { group: [{ nothing: "nothing" }] }] }]
10
- ]
11
- ].each do |input, output|
12
- context input.inspect do
13
- let(:input) { input }
14
-
15
- it { expect(subject).to eq(output) }
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Code::Parser::List do
4
- subject { Code::Parser.parse(input) }
5
-
6
- [
7
- "[]",
8
- "[ ]",
9
- "[/* comment */]",
10
- "[1, 2, 3]",
11
- "['hello', 1, true, [false, nothing]]"
12
- ].each do |input|
13
- context input do
14
- let(:input) { input }
15
- it { subject }
16
- end
17
- end
18
- end
@@ -1,12 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Code::Parser::Number do
4
- subject { Code::Parser.parse(input) }
5
-
6
- %w[0 1 1.1 123.123 1_000.12_244 0xf0 0o70 0b10].each do |input|
7
- context input do
8
- let(:input) { input }
9
- it { subject }
10
- end
11
- end
12
- end