template-ruby 0.4.0 → 0.5.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 (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/template +62 -20
  9. data/bin/test +17 -0
  10. data/code-ruby.gemspec +1 -3
  11. data/docs/class.code +9 -0
  12. data/docs/euler/1.template +1 -5
  13. data/docs/euler/5.template +0 -1
  14. data/docs/meetup.code +12 -0
  15. data/docs/precedence.template +6 -39
  16. data/docs/rain.code +22 -0
  17. data/docs/slack.code +17 -0
  18. data/docs/stripe.code +7 -0
  19. data/docs/twitter.code +9 -0
  20. data/language-ruby.gemspec +18 -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 +40 -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 +343 -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 +17 -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 +112 -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: template-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
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: 2022-11-28 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,21 +24,8 @@ 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
- description: 'Like "Hello {name}" with {name: "Dorian"} gives "Hello Dorian"'
27
+ description: 'A templating programming language, like "Hello {name}" with {name: "Dorian"}
28
+ gives "Hello Dorian"'
56
29
  email: dorian@dorianmarie.fr
57
30
  executables:
58
31
  - template
@@ -69,61 +42,57 @@ files:
69
42
  - Gemfile.lock
70
43
  - LICENSE
71
44
  - README.md
45
+ - TODO
72
46
  - bin/code
47
+ - bin/format
73
48
  - bin/template
49
+ - bin/test
74
50
  - code-ruby.gemspec
51
+ - docs/class.code
75
52
  - docs/euler/1.template
76
53
  - docs/euler/2.template
77
54
  - docs/euler/3.template
78
55
  - docs/euler/4.template
79
56
  - docs/euler/5.template
80
57
  - docs/fibonnaci.template
58
+ - docs/meetup.code
81
59
  - docs/precedence.template
60
+ - docs/rain.code
61
+ - docs/slack.code
62
+ - docs/stripe.code
63
+ - docs/twitter.code
64
+ - language-ruby.gemspec
82
65
  - lib/code-ruby.rb
83
66
  - lib/code.rb
84
67
  - lib/code/error.rb
85
68
  - lib/code/node.rb
86
- - lib/code/node/base_10_decimal.rb
87
- - lib/code/node/base_10_integer.rb
88
- - lib/code/node/base_10_number.rb
89
- - lib/code/node/base_16_number.rb
90
- - lib/code/node/base_2_number.rb
91
- - lib/code/node/base_8_number.rb
92
- - lib/code/node/block.rb
69
+ - lib/code/node/base_10.rb
70
+ - lib/code/node/base_16.rb
71
+ - lib/code/node/base_2.rb
72
+ - lib/code/node/base_8.rb
93
73
  - lib/code/node/boolean.rb
94
74
  - lib/code/node/call.rb
95
75
  - lib/code/node/call_argument.rb
96
76
  - lib/code/node/chained_call.rb
97
77
  - lib/code/node/code.rb
98
- - lib/code/node/defined.rb
78
+ - lib/code/node/decimal.rb
99
79
  - lib/code/node/dictionnary.rb
100
- - lib/code/node/dictionnary_key_value.rb
101
80
  - lib/code/node/equal.rb
102
81
  - lib/code/node/function.rb
103
- - lib/code/node/function_argument.rb
104
- - lib/code/node/group.rb
82
+ - lib/code/node/function_parameter.rb
105
83
  - lib/code/node/if.rb
106
84
  - lib/code/node/if_modifier.rb
107
- - lib/code/node/keyword_call_argument.rb
108
- - lib/code/node/keyword_function_argument.rb
109
85
  - lib/code/node/list.rb
110
- - lib/code/node/name.rb
111
86
  - lib/code/node/negation.rb
112
- - lib/code/node/not_keyword.rb
87
+ - lib/code/node/not.rb
113
88
  - lib/code/node/nothing.rb
114
89
  - lib/code/node/number.rb
115
90
  - lib/code/node/operation.rb
116
- - lib/code/node/or_keyword.rb
117
91
  - lib/code/node/power.rb
118
- - lib/code/node/range.rb
119
- - lib/code/node/regular_call_argument.rb
120
- - lib/code/node/regular_function_argument.rb
121
92
  - lib/code/node/rescue.rb
93
+ - lib/code/node/splat.rb
122
94
  - lib/code/node/statement.rb
123
95
  - lib/code/node/string.rb
124
- - lib/code/node/string_characters.rb
125
- - lib/code/node/string_component.rb
126
- - lib/code/node/string_interpolation.rb
127
96
  - lib/code/node/ternary.rb
128
97
  - lib/code/node/unary_minus.rb
129
98
  - lib/code/node/while.rb
@@ -148,13 +117,15 @@ files:
148
117
  - lib/code/parser/bitwise_or.rb
149
118
  - lib/code/parser/boolean.rb
150
119
  - lib/code/parser/call.rb
120
+ - lib/code/parser/chained_call.rb
121
+ - lib/code/parser/class.rb
151
122
  - lib/code/parser/code.rb
152
- - lib/code/parser/defined.rb
153
123
  - lib/code/parser/dictionnary.rb
154
124
  - lib/code/parser/equal.rb
155
125
  - lib/code/parser/equality.rb
126
+ - lib/code/parser/equality_lower.rb
156
127
  - lib/code/parser/function.rb
157
- - lib/code/parser/greater_than.rb
128
+ - lib/code/parser/greater.rb
158
129
  - lib/code/parser/group.rb
159
130
  - lib/code/parser/if.rb
160
131
  - lib/code/parser/if_modifier.rb
@@ -165,18 +136,33 @@ files:
165
136
  - lib/code/parser/not_keyword.rb
166
137
  - lib/code/parser/nothing.rb
167
138
  - lib/code/parser/number.rb
139
+ - lib/code/parser/operation.rb
168
140
  - lib/code/parser/or_keyword.rb
169
141
  - lib/code/parser/or_operator.rb
170
142
  - lib/code/parser/power.rb
171
143
  - lib/code/parser/range.rb
172
144
  - lib/code/parser/rescue.rb
173
145
  - lib/code/parser/shift.rb
146
+ - lib/code/parser/splat.rb
174
147
  - lib/code/parser/statement.rb
175
148
  - lib/code/parser/string.rb
176
149
  - lib/code/parser/ternary.rb
177
150
  - lib/code/parser/unary_minus.rb
178
151
  - lib/code/parser/while.rb
152
+ - lib/code/parser/whitespace.rb
179
153
  - lib/code/ruby.rb
154
+ - lib/language-ruby.rb
155
+ - lib/language.rb
156
+ - lib/language/atom.rb
157
+ - lib/language/output.rb
158
+ - lib/language/parser.rb
159
+ - lib/language/parser/absent.rb
160
+ - lib/language/parser/absent/present.rb
161
+ - lib/language/parser/end_of_input.rb
162
+ - lib/language/parser/interuption.rb
163
+ - lib/language/parser/not_end_of_input.rb
164
+ - lib/language/parser/str.rb
165
+ - lib/language/parser/str/not_found.rb
180
166
  - lib/template-ruby.rb
181
167
  - lib/template.rb
182
168
  - lib/template/node.rb
@@ -187,22 +173,49 @@ files:
187
173
  - lib/template/parser.rb
188
174
  - lib/template/parser/template.rb
189
175
  - lib/template/version.rb
190
- - spec/call_spec.rb
191
- - spec/code/error/type_error_spec.rb
176
+ - spec/code/addition_spec.rb
177
+ - spec/code/and_operator_spec.rb
178
+ - spec/code/bitwise_and_spec.rb
179
+ - spec/code/bitwise_or_spec.rb
180
+ - spec/code/boolean_spec.rb
181
+ - spec/code/call_spec.rb
182
+ - spec/code/chained_call_spec.rb
183
+ - spec/code/dictionnary_spec.rb
184
+ - spec/code/equal_spec.rb
185
+ - spec/code/equality_spec.rb
186
+ - spec/code/function_spec.rb
187
+ - spec/code/greater_spec.rb
188
+ - spec/code/group_spec.rb
189
+ - spec/code/if_modifier_spec.rb
190
+ - spec/code/if_spec.rb
191
+ - spec/code/list_spec.rb
192
+ - spec/code/multiplication_spec.rb
193
+ - spec/code/negation_spec.rb
194
+ - spec/code/not_keyword_spec.rb
195
+ - spec/code/nothing_spec.rb
196
+ - spec/code/number_spec.rb
197
+ - spec/code/or_keyword_spec.rb
198
+ - spec/code/or_operator_spec.rb
192
199
  - spec/code/parser/boolean_spec.rb
193
200
  - spec/code/parser/call_spec.rb
201
+ - spec/code/parser/chained_call.rb
194
202
  - spec/code/parser/dictionnary_spec.rb
195
203
  - spec/code/parser/function_spec.rb
204
+ - spec/code/parser/group_spec.rb
196
205
  - spec/code/parser/list_spec.rb
197
- - spec/code/parser/name_spec.rb
198
- - spec/code/parser/nothing_spec.rb
199
206
  - spec/code/parser/number_spec.rb
200
207
  - spec/code/parser/string_spec.rb
201
- - spec/code_spec.rb
202
- - spec/function_spec.rb
208
+ - spec/code/parser_spec.rb
209
+ - spec/code/power_spec.rb
210
+ - spec/code/range_spec.rb
211
+ - spec/code/rescue_spec.rb
212
+ - spec/code/shift_spec.rb
213
+ - spec/code/splat_spec.rb
214
+ - spec/code/string_spec.rb
215
+ - spec/code/ternary_spec.rb
216
+ - spec/code/unary_minus_spec.rb
217
+ - spec/code/while_spec.rb
203
218
  - spec/spec_helper.rb
204
- - spec/template/parser/template_spec.rb
205
- - spec/template_spec.rb
206
219
  - template-ruby.gemspec
207
220
  homepage: https://github.com/dorianmariefr/template-ruby
208
221
  licenses:
@@ -228,19 +241,46 @@ signing_key:
228
241
  specification_version: 4
229
242
  summary: A templating programming language
230
243
  test_files:
231
- - spec/call_spec.rb
232
- - spec/code/error/type_error_spec.rb
244
+ - spec/code/addition_spec.rb
245
+ - spec/code/and_operator_spec.rb
246
+ - spec/code/bitwise_and_spec.rb
247
+ - spec/code/bitwise_or_spec.rb
248
+ - spec/code/boolean_spec.rb
249
+ - spec/code/call_spec.rb
250
+ - spec/code/chained_call_spec.rb
251
+ - spec/code/dictionnary_spec.rb
252
+ - spec/code/equal_spec.rb
253
+ - spec/code/equality_spec.rb
254
+ - spec/code/function_spec.rb
255
+ - spec/code/greater_spec.rb
256
+ - spec/code/group_spec.rb
257
+ - spec/code/if_modifier_spec.rb
258
+ - spec/code/if_spec.rb
259
+ - spec/code/list_spec.rb
260
+ - spec/code/multiplication_spec.rb
261
+ - spec/code/negation_spec.rb
262
+ - spec/code/not_keyword_spec.rb
263
+ - spec/code/nothing_spec.rb
264
+ - spec/code/number_spec.rb
265
+ - spec/code/or_keyword_spec.rb
266
+ - spec/code/or_operator_spec.rb
233
267
  - spec/code/parser/boolean_spec.rb
234
268
  - spec/code/parser/call_spec.rb
269
+ - spec/code/parser/chained_call.rb
235
270
  - spec/code/parser/dictionnary_spec.rb
236
271
  - spec/code/parser/function_spec.rb
272
+ - spec/code/parser/group_spec.rb
237
273
  - spec/code/parser/list_spec.rb
238
- - spec/code/parser/name_spec.rb
239
- - spec/code/parser/nothing_spec.rb
240
274
  - spec/code/parser/number_spec.rb
241
275
  - spec/code/parser/string_spec.rb
242
- - spec/code_spec.rb
243
- - spec/function_spec.rb
276
+ - spec/code/parser_spec.rb
277
+ - spec/code/power_spec.rb
278
+ - spec/code/range_spec.rb
279
+ - spec/code/rescue_spec.rb
280
+ - spec/code/shift_spec.rb
281
+ - spec/code/splat_spec.rb
282
+ - spec/code/string_spec.rb
283
+ - spec/code/ternary_spec.rb
284
+ - spec/code/unary_minus_spec.rb
285
+ - spec/code/while_spec.rb
244
286
  - spec/spec_helper.rb
245
- - spec/template/parser/template_spec.rb
246
- - 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