code-ruby 0.4.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (204) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile +2 -1
  4. data/Gemfile.lock +27 -54
  5. data/TODO +17 -0
  6. data/bin/code +56 -31
  7. data/bin/format +3 -0
  8. data/bin/publish +19 -0
  9. data/bin/template +62 -20
  10. data/bin/test +17 -0
  11. data/code-ruby.gemspec +1 -3
  12. data/docs/class.code +9 -0
  13. data/docs/euler/1.template +1 -5
  14. data/docs/euler/5.template +0 -1
  15. data/docs/meetup.code +12 -0
  16. data/docs/precedence.template +6 -39
  17. data/docs/rain.code +22 -0
  18. data/docs/slack.code +17 -0
  19. data/docs/stripe.code +7 -0
  20. data/docs/twitter.code +9 -0
  21. data/lib/code/node/base_10.rb +29 -0
  22. data/lib/code/node/base_16.rb +13 -0
  23. data/lib/code/node/base_2.rb +13 -0
  24. data/lib/code/node/base_8.rb +13 -0
  25. data/lib/code/node/boolean.rb +7 -7
  26. data/lib/code/node/call.rb +32 -38
  27. data/lib/code/node/call_argument.rb +11 -27
  28. data/lib/code/node/chained_call.rb +10 -27
  29. data/lib/code/node/code.rb +4 -6
  30. data/lib/code/node/decimal.rb +26 -0
  31. data/lib/code/node/dictionnary.rb +20 -9
  32. data/lib/code/node/equal.rb +18 -20
  33. data/lib/code/node/function.rb +10 -7
  34. data/lib/code/node/function_parameter.rb +31 -0
  35. data/lib/code/node/if.rb +36 -32
  36. data/lib/code/node/if_modifier.rb +35 -36
  37. data/lib/code/node/list.rb +6 -8
  38. data/lib/code/node/negation.rb +5 -23
  39. data/lib/code/node/not.rb +15 -0
  40. data/lib/code/node/nothing.rb +1 -1
  41. data/lib/code/node/number.rb +14 -12
  42. data/lib/code/node/operation.rb +21 -16
  43. data/lib/code/node/power.rb +10 -6
  44. data/lib/code/node/rescue.rb +4 -3
  45. data/lib/code/node/splat.rb +15 -0
  46. data/lib/code/node/statement.rb +48 -70
  47. data/lib/code/node/string.rb +42 -16
  48. data/lib/code/node/ternary.rb +7 -9
  49. data/lib/code/node/unary_minus.rb +5 -12
  50. data/lib/code/node/while.rb +17 -24
  51. data/lib/code/node.rb +7 -8
  52. data/lib/code/object/argument.rb +2 -11
  53. data/lib/code/object/decimal.rb +45 -30
  54. data/lib/code/object/dictionnary.rb +6 -5
  55. data/lib/code/object/function.rb +20 -23
  56. data/lib/code/object/global.rb +11 -6
  57. data/lib/code/object/integer.rb +73 -30
  58. data/lib/code/object/list.rb +47 -34
  59. data/lib/code/object/range.rb +18 -17
  60. data/lib/code/object/ruby_function.rb +12 -6
  61. data/lib/code/object/string.rb +22 -12
  62. data/lib/code/object.rb +82 -24
  63. data/lib/code/parser/addition.rb +12 -20
  64. data/lib/code/parser/and_operator.rb +9 -20
  65. data/lib/code/parser/bitwise_and.rb +9 -20
  66. data/lib/code/parser/bitwise_or.rb +12 -20
  67. data/lib/code/parser/boolean.rb +10 -7
  68. data/lib/code/parser/call.rb +92 -60
  69. data/lib/code/parser/chained_call.rb +47 -0
  70. data/lib/code/parser/class.rb +45 -0
  71. data/lib/code/parser/code.rb +17 -10
  72. data/lib/code/parser/dictionnary.rb +56 -30
  73. data/lib/code/parser/equal.rb +87 -35
  74. data/lib/code/parser/equality.rb +23 -24
  75. data/lib/code/parser/equality_lower.rb +9 -0
  76. data/lib/code/parser/function.rb +67 -42
  77. data/lib/code/parser/greater.rb +25 -0
  78. data/lib/code/parser/group.rb +13 -8
  79. data/lib/code/parser/if.rb +51 -21
  80. data/lib/code/parser/if_modifier.rb +43 -16
  81. data/lib/code/parser/list.rb +32 -19
  82. data/lib/code/parser/multiplication.rb +15 -20
  83. data/lib/code/parser/name.rb +96 -84
  84. data/lib/code/parser/negation.rb +20 -9
  85. data/lib/code/parser/not_keyword.rb +14 -12
  86. data/lib/code/parser/nothing.rb +13 -8
  87. data/lib/code/parser/number.rb +124 -68
  88. data/lib/code/parser/operation.rb +35 -0
  89. data/lib/code/parser/or_keyword.rb +12 -20
  90. data/lib/code/parser/or_operator.rb +9 -20
  91. data/lib/code/parser/power.rb +32 -14
  92. data/lib/code/parser/range.rb +9 -17
  93. data/lib/code/parser/rescue.rb +29 -13
  94. data/lib/code/parser/shift.rb +11 -21
  95. data/lib/code/parser/splat.rb +31 -0
  96. data/lib/code/parser/statement.rb +4 -3
  97. data/lib/code/parser/string.rb +53 -62
  98. data/lib/code/parser/ternary.rb +36 -15
  99. data/lib/code/parser/unary_minus.rb +23 -5
  100. data/lib/code/parser/while.rb +26 -15
  101. data/lib/code/parser/whitespace.rb +49 -0
  102. data/lib/code/parser.rb +15 -0
  103. data/lib/code/ruby.rb +13 -12
  104. data/lib/code-ruby.rb +2 -11
  105. data/lib/code.rb +16 -13
  106. data/lib/language/atom.rb +342 -0
  107. data/lib/language/output.rb +130 -0
  108. data/lib/language/parser/absent/present.rb +8 -0
  109. data/lib/language/parser/absent.rb +6 -0
  110. data/lib/language/parser/end_of_input.rb +6 -0
  111. data/lib/language/parser/interuption.rb +38 -0
  112. data/lib/language/parser/not_end_of_input.rb +6 -0
  113. data/lib/language/parser/str/not_found.rb +16 -0
  114. data/lib/language/parser/str.rb +6 -0
  115. data/lib/language/parser.rb +53 -0
  116. data/lib/language-ruby.rb +10 -0
  117. data/lib/language.rb +80 -0
  118. data/lib/template/node/code_part.rb +1 -1
  119. data/lib/template/node/part.rb +1 -1
  120. data/lib/template/node/template.rb +1 -1
  121. data/lib/template/node/text_part.rb +1 -1
  122. data/lib/template/node.rb +1 -1
  123. data/lib/template/parser/template.rb +26 -17
  124. data/lib/template/parser.rb +15 -0
  125. data/lib/template/version.rb +1 -1
  126. data/lib/template-ruby.rb +2 -11
  127. data/lib/template.rb +6 -11
  128. data/spec/code/addition_spec.rb +13 -0
  129. data/spec/code/and_operator_spec.rb +13 -0
  130. data/spec/code/bitwise_and_spec.rb +13 -0
  131. data/spec/code/bitwise_or_spec.rb +13 -0
  132. data/spec/code/boolean_spec.rb +13 -0
  133. data/spec/code/call_spec.rb +21 -0
  134. data/spec/code/chained_call_spec.rb +16 -0
  135. data/spec/code/dictionnary_spec.rb +17 -0
  136. data/spec/code/equal_spec.rb +26 -0
  137. data/spec/code/equality_spec.rb +13 -0
  138. data/spec/code/function_spec.rb +18 -0
  139. data/spec/code/greater_spec.rb +18 -0
  140. data/spec/code/group_spec.rb +12 -0
  141. data/spec/code/if_modifier_spec.rb +20 -0
  142. data/spec/code/if_spec.rb +25 -0
  143. data/spec/code/list_spec.rb +19 -0
  144. data/spec/code/multiplication_spec.rb +18 -0
  145. data/spec/code/negation_spec.rb +20 -0
  146. data/spec/code/not_keyword_spec.rb +13 -0
  147. data/spec/code/nothing_spec.rb +17 -0
  148. data/spec/code/number_spec.rb +22 -0
  149. data/spec/code/or_keyword_spec.rb +17 -0
  150. data/spec/code/or_operator_spec.rb +16 -0
  151. data/spec/code/parser/boolean_spec.rb +5 -7
  152. data/spec/code/parser/call_spec.rb +16 -56
  153. data/spec/code/parser/chained_call.rb +17 -0
  154. data/spec/code/parser/dictionnary_spec.rb +8 -9
  155. data/spec/code/parser/function_spec.rb +5 -21
  156. data/spec/code/parser/group_spec.rb +18 -0
  157. data/spec/code/parser/list_spec.rb +9 -20
  158. data/spec/code/parser/number_spec.rb +4 -109
  159. data/spec/code/parser/string_spec.rb +9 -17
  160. data/spec/code/parser_spec.rb +23 -0
  161. data/spec/code/power_spec.rb +13 -0
  162. data/spec/code/range_spec.rb +16 -0
  163. data/spec/code/rescue_spec.rb +13 -0
  164. data/spec/code/shift_spec.rb +13 -0
  165. data/spec/code/splat_spec.rb +13 -0
  166. data/spec/code/string_spec.rb +25 -0
  167. data/spec/code/ternary_spec.rb +18 -0
  168. data/spec/code/unary_minus_spec.rb +13 -0
  169. data/spec/code/while_spec.rb +18 -0
  170. data/spec/spec_helper.rb +4 -1
  171. data/template-ruby.gemspec +2 -4
  172. metadata +111 -72
  173. data/lib/code/node/base_10_decimal.rb +0 -32
  174. data/lib/code/node/base_10_integer.rb +0 -32
  175. data/lib/code/node/base_10_number.rb +0 -19
  176. data/lib/code/node/base_16_number.rb +0 -19
  177. data/lib/code/node/base_2_number.rb +0 -19
  178. data/lib/code/node/base_8_number.rb +0 -19
  179. data/lib/code/node/block.rb +0 -17
  180. data/lib/code/node/defined.rb +0 -19
  181. data/lib/code/node/dictionnary_key_value.rb +0 -23
  182. data/lib/code/node/function_argument.rb +0 -45
  183. data/lib/code/node/group.rb +0 -13
  184. data/lib/code/node/keyword_call_argument.rb +0 -30
  185. data/lib/code/node/keyword_function_argument.rb +0 -33
  186. data/lib/code/node/name.rb +0 -28
  187. data/lib/code/node/not_keyword.rb +0 -13
  188. data/lib/code/node/or_keyword.rb +0 -34
  189. data/lib/code/node/range.rb +0 -31
  190. data/lib/code/node/regular_call_argument.rb +0 -34
  191. data/lib/code/node/regular_function_argument.rb +0 -36
  192. data/lib/code/node/string_characters.rb +0 -13
  193. data/lib/code/node/string_component.rb +0 -23
  194. data/lib/code/node/string_interpolation.rb +0 -13
  195. data/lib/code/parser/defined.rb +0 -20
  196. data/lib/code/parser/greater_than.rb +0 -33
  197. data/spec/call_spec.rb +0 -22
  198. data/spec/code/error/type_error_spec.rb +0 -63
  199. data/spec/code/parser/name_spec.rb +0 -15
  200. data/spec/code/parser/nothing_spec.rb +0 -19
  201. data/spec/code_spec.rb +0 -182
  202. data/spec/function_spec.rb +0 -26
  203. data/spec/template/parser/template_spec.rb +0 -19
  204. data/spec/template_spec.rb +0 -52
@@ -5,7 +5,7 @@ Gem::Specification.new do |s|
5
5
  s.version = ::Template::Version
6
6
  s.summary = "A templating programming language"
7
7
  s.description =
8
- 'Like "Hello {name}" with {name: "Dorian"} gives "Hello Dorian"'
8
+ 'A templating programming language, like "Hello {name}" with {name: "Dorian"} gives "Hello Dorian"'
9
9
  s.authors = ["Dorian Marié"]
10
10
  s.email = "dorian@dorianmarie.fr"
11
11
  s.files = `git ls-files`.split($/)
@@ -15,7 +15,5 @@ Gem::Specification.new do |s|
15
15
  s.license = "MIT"
16
16
  s.executables = "template"
17
17
 
18
- s.add_dependency "activesupport", "~> 7"
19
- s.add_dependency "parslet", "~> 2"
20
- s.add_dependency "zeitwerk", "~> 2.6"
18
+ s.add_dependency "zeitwerk", "~> 2"
21
19
  end
metadata CHANGED
@@ -1,31 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-21 00:00:00.000000000 Z
11
+ date: 2023-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '7'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '7'
27
- - !ruby/object:Gem::Dependency
28
- name: parslet
14
+ name: zeitwerk
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
@@ -38,20 +24,6 @@ dependencies:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
26
  version: '2'
41
- - !ruby/object:Gem::Dependency
42
- name: zeitwerk
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '2.6'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '2.6'
55
27
  description: 'A programming language, like Code.evaluate("1 + 1") # => 2'
56
28
  email: dorian@dorianmarie.fr
57
29
  executables: []
@@ -68,61 +40,57 @@ files:
68
40
  - Gemfile.lock
69
41
  - LICENSE
70
42
  - README.md
43
+ - TODO
71
44
  - bin/code
45
+ - bin/format
46
+ - bin/publish
72
47
  - bin/template
48
+ - bin/test
73
49
  - code-ruby.gemspec
50
+ - docs/class.code
74
51
  - docs/euler/1.template
75
52
  - docs/euler/2.template
76
53
  - docs/euler/3.template
77
54
  - docs/euler/4.template
78
55
  - docs/euler/5.template
79
56
  - docs/fibonnaci.template
57
+ - docs/meetup.code
80
58
  - docs/precedence.template
59
+ - docs/rain.code
60
+ - docs/slack.code
61
+ - docs/stripe.code
62
+ - docs/twitter.code
81
63
  - lib/code-ruby.rb
82
64
  - lib/code.rb
83
65
  - lib/code/error.rb
84
66
  - lib/code/node.rb
85
- - lib/code/node/base_10_decimal.rb
86
- - lib/code/node/base_10_integer.rb
87
- - lib/code/node/base_10_number.rb
88
- - lib/code/node/base_16_number.rb
89
- - lib/code/node/base_2_number.rb
90
- - lib/code/node/base_8_number.rb
91
- - lib/code/node/block.rb
67
+ - lib/code/node/base_10.rb
68
+ - lib/code/node/base_16.rb
69
+ - lib/code/node/base_2.rb
70
+ - lib/code/node/base_8.rb
92
71
  - lib/code/node/boolean.rb
93
72
  - lib/code/node/call.rb
94
73
  - lib/code/node/call_argument.rb
95
74
  - lib/code/node/chained_call.rb
96
75
  - lib/code/node/code.rb
97
- - lib/code/node/defined.rb
76
+ - lib/code/node/decimal.rb
98
77
  - lib/code/node/dictionnary.rb
99
- - lib/code/node/dictionnary_key_value.rb
100
78
  - lib/code/node/equal.rb
101
79
  - lib/code/node/function.rb
102
- - lib/code/node/function_argument.rb
103
- - lib/code/node/group.rb
80
+ - lib/code/node/function_parameter.rb
104
81
  - lib/code/node/if.rb
105
82
  - lib/code/node/if_modifier.rb
106
- - lib/code/node/keyword_call_argument.rb
107
- - lib/code/node/keyword_function_argument.rb
108
83
  - lib/code/node/list.rb
109
- - lib/code/node/name.rb
110
84
  - lib/code/node/negation.rb
111
- - lib/code/node/not_keyword.rb
85
+ - lib/code/node/not.rb
112
86
  - lib/code/node/nothing.rb
113
87
  - lib/code/node/number.rb
114
88
  - lib/code/node/operation.rb
115
- - lib/code/node/or_keyword.rb
116
89
  - lib/code/node/power.rb
117
- - lib/code/node/range.rb
118
- - lib/code/node/regular_call_argument.rb
119
- - lib/code/node/regular_function_argument.rb
120
90
  - lib/code/node/rescue.rb
91
+ - lib/code/node/splat.rb
121
92
  - lib/code/node/statement.rb
122
93
  - lib/code/node/string.rb
123
- - lib/code/node/string_characters.rb
124
- - lib/code/node/string_component.rb
125
- - lib/code/node/string_interpolation.rb
126
94
  - lib/code/node/ternary.rb
127
95
  - lib/code/node/unary_minus.rb
128
96
  - lib/code/node/while.rb
@@ -147,13 +115,15 @@ files:
147
115
  - lib/code/parser/bitwise_or.rb
148
116
  - lib/code/parser/boolean.rb
149
117
  - lib/code/parser/call.rb
118
+ - lib/code/parser/chained_call.rb
119
+ - lib/code/parser/class.rb
150
120
  - lib/code/parser/code.rb
151
- - lib/code/parser/defined.rb
152
121
  - lib/code/parser/dictionnary.rb
153
122
  - lib/code/parser/equal.rb
154
123
  - lib/code/parser/equality.rb
124
+ - lib/code/parser/equality_lower.rb
155
125
  - lib/code/parser/function.rb
156
- - lib/code/parser/greater_than.rb
126
+ - lib/code/parser/greater.rb
157
127
  - lib/code/parser/group.rb
158
128
  - lib/code/parser/if.rb
159
129
  - lib/code/parser/if_modifier.rb
@@ -164,18 +134,33 @@ files:
164
134
  - lib/code/parser/not_keyword.rb
165
135
  - lib/code/parser/nothing.rb
166
136
  - lib/code/parser/number.rb
137
+ - lib/code/parser/operation.rb
167
138
  - lib/code/parser/or_keyword.rb
168
139
  - lib/code/parser/or_operator.rb
169
140
  - lib/code/parser/power.rb
170
141
  - lib/code/parser/range.rb
171
142
  - lib/code/parser/rescue.rb
172
143
  - lib/code/parser/shift.rb
144
+ - lib/code/parser/splat.rb
173
145
  - lib/code/parser/statement.rb
174
146
  - lib/code/parser/string.rb
175
147
  - lib/code/parser/ternary.rb
176
148
  - lib/code/parser/unary_minus.rb
177
149
  - lib/code/parser/while.rb
150
+ - lib/code/parser/whitespace.rb
178
151
  - lib/code/ruby.rb
152
+ - lib/language-ruby.rb
153
+ - lib/language.rb
154
+ - lib/language/atom.rb
155
+ - lib/language/output.rb
156
+ - lib/language/parser.rb
157
+ - lib/language/parser/absent.rb
158
+ - lib/language/parser/absent/present.rb
159
+ - lib/language/parser/end_of_input.rb
160
+ - lib/language/parser/interuption.rb
161
+ - lib/language/parser/not_end_of_input.rb
162
+ - lib/language/parser/str.rb
163
+ - lib/language/parser/str/not_found.rb
179
164
  - lib/template-ruby.rb
180
165
  - lib/template.rb
181
166
  - lib/template/node.rb
@@ -186,22 +171,49 @@ files:
186
171
  - lib/template/parser.rb
187
172
  - lib/template/parser/template.rb
188
173
  - lib/template/version.rb
189
- - spec/call_spec.rb
190
- - spec/code/error/type_error_spec.rb
174
+ - spec/code/addition_spec.rb
175
+ - spec/code/and_operator_spec.rb
176
+ - spec/code/bitwise_and_spec.rb
177
+ - spec/code/bitwise_or_spec.rb
178
+ - spec/code/boolean_spec.rb
179
+ - spec/code/call_spec.rb
180
+ - spec/code/chained_call_spec.rb
181
+ - spec/code/dictionnary_spec.rb
182
+ - spec/code/equal_spec.rb
183
+ - spec/code/equality_spec.rb
184
+ - spec/code/function_spec.rb
185
+ - spec/code/greater_spec.rb
186
+ - spec/code/group_spec.rb
187
+ - spec/code/if_modifier_spec.rb
188
+ - spec/code/if_spec.rb
189
+ - spec/code/list_spec.rb
190
+ - spec/code/multiplication_spec.rb
191
+ - spec/code/negation_spec.rb
192
+ - spec/code/not_keyword_spec.rb
193
+ - spec/code/nothing_spec.rb
194
+ - spec/code/number_spec.rb
195
+ - spec/code/or_keyword_spec.rb
196
+ - spec/code/or_operator_spec.rb
191
197
  - spec/code/parser/boolean_spec.rb
192
198
  - spec/code/parser/call_spec.rb
199
+ - spec/code/parser/chained_call.rb
193
200
  - spec/code/parser/dictionnary_spec.rb
194
201
  - spec/code/parser/function_spec.rb
202
+ - spec/code/parser/group_spec.rb
195
203
  - spec/code/parser/list_spec.rb
196
- - spec/code/parser/name_spec.rb
197
- - spec/code/parser/nothing_spec.rb
198
204
  - spec/code/parser/number_spec.rb
199
205
  - spec/code/parser/string_spec.rb
200
- - spec/code_spec.rb
201
- - spec/function_spec.rb
206
+ - spec/code/parser_spec.rb
207
+ - spec/code/power_spec.rb
208
+ - spec/code/range_spec.rb
209
+ - spec/code/rescue_spec.rb
210
+ - spec/code/shift_spec.rb
211
+ - spec/code/splat_spec.rb
212
+ - spec/code/string_spec.rb
213
+ - spec/code/ternary_spec.rb
214
+ - spec/code/unary_minus_spec.rb
215
+ - spec/code/while_spec.rb
202
216
  - spec/spec_helper.rb
203
- - spec/template/parser/template_spec.rb
204
- - spec/template_spec.rb
205
217
  - template-ruby.gemspec
206
218
  homepage: https://github.com/dorianmariefr/template-ruby
207
219
  licenses:
@@ -222,24 +234,51 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
234
  - !ruby/object:Gem::Version
223
235
  version: '0'
224
236
  requirements: []
225
- rubygems_version: 3.3.7
237
+ rubygems_version: 3.3.26
226
238
  signing_key:
227
239
  specification_version: 4
228
240
  summary: A programming language
229
241
  test_files:
230
- - spec/call_spec.rb
231
- - spec/code/error/type_error_spec.rb
242
+ - spec/code/addition_spec.rb
243
+ - spec/code/and_operator_spec.rb
244
+ - spec/code/bitwise_and_spec.rb
245
+ - spec/code/bitwise_or_spec.rb
246
+ - spec/code/boolean_spec.rb
247
+ - spec/code/call_spec.rb
248
+ - spec/code/chained_call_spec.rb
249
+ - spec/code/dictionnary_spec.rb
250
+ - spec/code/equal_spec.rb
251
+ - spec/code/equality_spec.rb
252
+ - spec/code/function_spec.rb
253
+ - spec/code/greater_spec.rb
254
+ - spec/code/group_spec.rb
255
+ - spec/code/if_modifier_spec.rb
256
+ - spec/code/if_spec.rb
257
+ - spec/code/list_spec.rb
258
+ - spec/code/multiplication_spec.rb
259
+ - spec/code/negation_spec.rb
260
+ - spec/code/not_keyword_spec.rb
261
+ - spec/code/nothing_spec.rb
262
+ - spec/code/number_spec.rb
263
+ - spec/code/or_keyword_spec.rb
264
+ - spec/code/or_operator_spec.rb
232
265
  - spec/code/parser/boolean_spec.rb
233
266
  - spec/code/parser/call_spec.rb
267
+ - spec/code/parser/chained_call.rb
234
268
  - spec/code/parser/dictionnary_spec.rb
235
269
  - spec/code/parser/function_spec.rb
270
+ - spec/code/parser/group_spec.rb
236
271
  - spec/code/parser/list_spec.rb
237
- - spec/code/parser/name_spec.rb
238
- - spec/code/parser/nothing_spec.rb
239
272
  - spec/code/parser/number_spec.rb
240
273
  - spec/code/parser/string_spec.rb
241
- - spec/code_spec.rb
242
- - spec/function_spec.rb
274
+ - spec/code/parser_spec.rb
275
+ - spec/code/power_spec.rb
276
+ - spec/code/range_spec.rb
277
+ - spec/code/rescue_spec.rb
278
+ - spec/code/shift_spec.rb
279
+ - spec/code/splat_spec.rb
280
+ - spec/code/string_spec.rb
281
+ - spec/code/ternary_spec.rb
282
+ - spec/code/unary_minus_spec.rb
283
+ - spec/code/while_spec.rb
243
284
  - spec/spec_helper.rb
244
- - spec/template/parser/template_spec.rb
245
- - spec/template_spec.rb
@@ -1,32 +0,0 @@
1
- class Code
2
- class Node
3
- class Base10Decimal < Node
4
- def initialize(number)
5
- @sign = number[:sign]
6
- @whole = number.fetch(:whole)
7
- @decimal = number.fetch(:decimal)
8
-
9
- if number.key?(:exponent)
10
- @exponent = ::Code::Node::Base10Number.new(number[:exponent])
11
- end
12
- end
13
-
14
- def evaluate(**args)
15
- if @exponent
16
- exponent = @exponent.evaluate(**args)
17
-
18
- ::Code::Object::Decimal.new(
19
- "#{sign}#{whole}.#{decimal}",
20
- exponent: exponent,
21
- )
22
- else
23
- ::Code::Object::Decimal.new("#{sign}#{whole}.#{decimal}")
24
- end
25
- end
26
-
27
- private
28
-
29
- attr_reader :sign, :whole, :decimal
30
- end
31
- end
32
- end
@@ -1,32 +0,0 @@
1
- class Code
2
- class Node
3
- class Base10Integer < Node
4
- def initialize(number)
5
- @sign = number[:sign]
6
- @whole = number.fetch(:whole)
7
-
8
- if number.key?(:exponent)
9
- @exponent = ::Code::Node::Base10Number.new(number[:exponent])
10
- end
11
- end
12
-
13
- def evaluate(**args)
14
- if @exponent
15
- exponent = @exponent.evaluate(**args)
16
-
17
- if exponent.is_a?(::Code::Object::Decimal)
18
- ::Code::Object::Decimal.new("#{sign}#{whole}", exponent: exponent)
19
- else
20
- ::Code::Object::Integer.new("#{sign}#{whole}", exponent: exponent)
21
- end
22
- else
23
- ::Code::Object::Integer.new("#{sign}#{whole}")
24
- end
25
- end
26
-
27
- private
28
-
29
- attr_reader :sign, :whole
30
- end
31
- end
32
- end
@@ -1,19 +0,0 @@
1
- class Code
2
- class Node
3
- class Base10Number < Node
4
- def initialize(number)
5
- if number.key?(:integer)
6
- @number = ::Code::Node::Base10Integer.new(number[:integer])
7
- elsif number.key?(:decimal)
8
- @number = ::Code::Node::Base10Decimal.new(number[:decimal])
9
- else
10
- raise NotImplementedErorr.new(number.inspect)
11
- end
12
- end
13
-
14
- def evaluate(**args)
15
- @number.evaluate(**args)
16
- end
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- class Code
2
- class Node
3
- class Base16Number < Node
4
- def initialize(number)
5
- @number = number
6
- end
7
-
8
- def evaluate(**args)
9
- ::Code::Object::Integer.new(number)
10
- end
11
-
12
- private
13
-
14
- def number
15
- @number.to_s.to_i(16)
16
- end
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- class Code
2
- class Node
3
- class Base2Number < Node
4
- def initialize(number)
5
- @number = number
6
- end
7
-
8
- def evaluate(**args)
9
- ::Code::Object::Integer.new(number)
10
- end
11
-
12
- private
13
-
14
- def number
15
- @number.to_s.to_i(2)
16
- end
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- class Code
2
- class Node
3
- class Base8Number < Node
4
- def initialize(number)
5
- @number = number
6
- end
7
-
8
- def evaluate(**args)
9
- ::Code::Object::Integer.new(number)
10
- end
11
-
12
- private
13
-
14
- def number
15
- @number.to_s.to_i(8)
16
- end
17
- end
18
- end
19
- end
@@ -1,17 +0,0 @@
1
- class Code
2
- class Node
3
- class Block < Node
4
- def initialize(block)
5
- @body = ::Code::Node::Code.new(block.fetch(:body))
6
- @arguments = block.fetch(:arguments, [])
7
- @arguments.map! do |argument|
8
- ::Code::Node::FunctionArgument.new(argument)
9
- end
10
- end
11
-
12
- def evaluate(**args)
13
- ::Code::Object::Function.new(arguments: @arguments, body: @body)
14
- end
15
- end
16
- end
17
- end
@@ -1,19 +0,0 @@
1
- class Code
2
- class Node
3
- class Defined < Node
4
- def initialize(defined)
5
- @name = defined.fetch(:name)
6
- end
7
-
8
- def evaluate(**args)
9
- ::Code::Object::Boolean.new(args.fetch(:context).key?(name))
10
- end
11
-
12
- private
13
-
14
- def name
15
- ::Code::Object::String.new(@name.to_s)
16
- end
17
- end
18
- end
19
- end
@@ -1,23 +0,0 @@
1
- class Code
2
- class Node
3
- class DictionnaryKeyValue < Node
4
- def initialize(key_value)
5
- @key = key_value.fetch(:key)
6
-
7
- if @key.is_a?(Array)
8
- @key = ::Code::Node::Code.new(@key)
9
- elsif @key.key?(:name)
10
- @key = ::Code::Node::String.new(@key[:name])
11
- else
12
- @key = ::Code::Node::Statement.new(@key)
13
- end
14
-
15
- @value = ::Code::Node::Code.new(key_value.fetch(:value))
16
- end
17
-
18
- def evaluate(**args)
19
- [@key.evaluate(**args), @value.evaluate(**args)]
20
- end
21
- end
22
- end
23
- end
@@ -1,45 +0,0 @@
1
- class Code
2
- class Node
3
- class FunctionArgument < Node
4
- def initialize(argument)
5
- if argument.key?(:regular)
6
- @argument =
7
- ::Code::Node::RegularFunctionArgument.new(argument.fetch(:regular))
8
- elsif argument.key?(:keyword)
9
- @argument =
10
- ::Code::Node::KeywordFunctionArgument.new(argument.fetch(:keyword))
11
- else
12
- raise NotImplementedError.new(argument.inspect)
13
- end
14
- end
15
-
16
- def evaluate(**args)
17
- @argument.evaluate(**args)
18
- end
19
-
20
- def splat?
21
- @argument.splat?
22
- end
23
-
24
- def keyword_splat?
25
- @argument.keyword_splat?
26
- end
27
-
28
- def name
29
- @argument.name
30
- end
31
-
32
- def block?
33
- @argument.block?
34
- end
35
-
36
- def regular?
37
- @argument.is_a?(::Code::Node::RegularFunctionArgument)
38
- end
39
-
40
- def keyword?
41
- @argument.is_a?(::Code::Node::KeywordFunctionArgument)
42
- end
43
- end
44
- end
45
- end
@@ -1,13 +0,0 @@
1
- class Code
2
- class Node
3
- class Group < Node
4
- def initialize(group)
5
- @code = ::Code::Node::Code.new(group)
6
- end
7
-
8
- def evaluate(**args)
9
- @code.evaluate(**args)
10
- end
11
- end
12
- end
13
- end
@@ -1,30 +0,0 @@
1
- class Code
2
- class Node
3
- class KeywordCallArgument < Node
4
- def initialize(argument)
5
- @name = argument.fetch(:name)
6
- @value = ::Code::Node::Code.new(argument.fetch(:value))
7
- end
8
-
9
- def evaluate(**args)
10
- @value.evaluate(**args)
11
- end
12
-
13
- def name
14
- ::Code::Object::String.new(@name.to_s)
15
- end
16
-
17
- def block?
18
- false
19
- end
20
-
21
- def splat?
22
- false
23
- end
24
-
25
- def keyword_splat?
26
- false
27
- end
28
- end
29
- end
30
- end
@@ -1,33 +0,0 @@
1
- class Code
2
- class Node
3
- class KeywordFunctionArgument < Node
4
- def initialize(argument)
5
- @name = argument.fetch(:name)
6
-
7
- if argument.key?(:default)
8
- @default = ::Code::Node::Code.new(argument.fetch(:default))
9
- end
10
- end
11
-
12
- def evaluate(**args)
13
- @default ? @default.evaluate(**args) : ::Code::Object::Nothing.new
14
- end
15
-
16
- def name
17
- ::Code::Object::String.new(@name.to_s)
18
- end
19
-
20
- def splat?
21
- false
22
- end
23
-
24
- def keyword_splat?
25
- false
26
- end
27
-
28
- def block?
29
- false
30
- end
31
- end
32
- end
33
- end
@@ -1,28 +0,0 @@
1
- class Code
2
- class Node
3
- class Name < Node
4
- def initialize(name)
5
- @name = name
6
- end
7
-
8
- def evaluate(**args)
9
- context = args.fetch(:context)
10
- arguments = args.fetch(:arguments, [])
11
- object = args.fetch(:object)
12
- globals = args.multi_fetch(*::Code::GLOBALS)
13
-
14
- object.call(
15
- operator: name,
16
- arguments: arguments,
17
- **globals
18
- )
19
- end
20
-
21
- private
22
-
23
- def name
24
- ::Code::Object::String.new(@name.to_s)
25
- end
26
- end
27
- end
28
- end