luoma 0.1.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 (152) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +2 -0
  3. data/.rdoc_options +16 -0
  4. data/CHANGELOG.md +5 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +68 -0
  7. data/Rakefile +69 -0
  8. data/Steepfile +41 -0
  9. data/certs/jgrp.pem +27 -0
  10. data/docs/configuration.md +180 -0
  11. data/docs/custom_filters.md +3 -0
  12. data/docs/custom_tags.md +3 -0
  13. data/docs/expressions.md +3 -0
  14. data/docs/extension_types.md +41 -0
  15. data/docs/filter_reference.md +1702 -0
  16. data/docs/index.md +73 -0
  17. data/docs/luoma_for_template_authors.md +3 -0
  18. data/docs/markdown.md +111 -0
  19. data/docs/predicate_reference.md +3 -0
  20. data/docs/static_analysis.md +3 -0
  21. data/docs/tag_reference.md +352 -0
  22. data/docs/template_loaders.md +177 -0
  23. data/docs/undefined_variables.md +3 -0
  24. data/docs-requirements.txt +11 -0
  25. data/docs_/cycle.md +17 -0
  26. data/docs_/font_rendering_example.md +157 -0
  27. data/docs_/header_block_example.md +51 -0
  28. data/docs_/increment_and_decrement.md +49 -0
  29. data/docs_/logo_style_example.md +40 -0
  30. data/docs_/migration.md +11 -0
  31. data/docs_/notes.md +19 -0
  32. data/lib/luoma/cache.rb +80 -0
  33. data/lib/luoma/chain_hash.rb +54 -0
  34. data/lib/luoma/context.rb +227 -0
  35. data/lib/luoma/drop.rb +84 -0
  36. data/lib/luoma/drops/block.rb +33 -0
  37. data/lib/luoma/drops/expression.rb +29 -0
  38. data/lib/luoma/drops/html_safe.rb +36 -0
  39. data/lib/luoma/drops/range.rb +69 -0
  40. data/lib/luoma/drops/undefined.rb +119 -0
  41. data/lib/luoma/environment.rb +479 -0
  42. data/lib/luoma/errors.rb +79 -0
  43. data/lib/luoma/escape.rb +35 -0
  44. data/lib/luoma/expression.rb +1271 -0
  45. data/lib/luoma/filter.rb +97 -0
  46. data/lib/luoma/filters/array.rb +372 -0
  47. data/lib/luoma/filters/date.rb +19 -0
  48. data/lib/luoma/filters/default.rb +16 -0
  49. data/lib/luoma/filters/json.rb +14 -0
  50. data/lib/luoma/filters/math.rb +84 -0
  51. data/lib/luoma/filters/size.rb +13 -0
  52. data/lib/luoma/filters/slice.rb +52 -0
  53. data/lib/luoma/filters/sort.rb +113 -0
  54. data/lib/luoma/filters/string.rb +186 -0
  55. data/lib/luoma/fnv.rb +15 -0
  56. data/lib/luoma/lexer.rb +106 -0
  57. data/lib/luoma/lexer_legacy.rb +396 -0
  58. data/lib/luoma/lexer_unified.rb +279 -0
  59. data/lib/luoma/loader.rb +50 -0
  60. data/lib/luoma/loaders/choice_loader.rb +20 -0
  61. data/lib/luoma/loaders/file_system_loader.rb +75 -0
  62. data/lib/luoma/loaders/mixins.rb +52 -0
  63. data/lib/luoma/markup.rb +109 -0
  64. data/lib/luoma/parser.rb +252 -0
  65. data/lib/luoma/parser_unified.rb +979 -0
  66. data/lib/luoma/predicates/blank.rb +19 -0
  67. data/lib/luoma/predicates/defined.rb +10 -0
  68. data/lib/luoma/predicates/empty.rb +15 -0
  69. data/lib/luoma/predicates/type.rb +35 -0
  70. data/lib/luoma/static_analysis.rb +427 -0
  71. data/lib/luoma/tags/assign.rb +63 -0
  72. data/lib/luoma/tags/break.rb +23 -0
  73. data/lib/luoma/tags/capture.rb +43 -0
  74. data/lib/luoma/tags/case.rb +137 -0
  75. data/lib/luoma/tags/comment.rb +17 -0
  76. data/lib/luoma/tags/continue.rb +23 -0
  77. data/lib/luoma/tags/define.rb +42 -0
  78. data/lib/luoma/tags/else.rb +30 -0
  79. data/lib/luoma/tags/for.rb +108 -0
  80. data/lib/luoma/tags/if.rb +109 -0
  81. data/lib/luoma/tags/import.rb +91 -0
  82. data/lib/luoma/tags/include.rb +77 -0
  83. data/lib/luoma/tags/output.rb +20 -0
  84. data/lib/luoma/tags/raw.rb +26 -0
  85. data/lib/luoma/tags/render.rb +92 -0
  86. data/lib/luoma/tags/with.rb +55 -0
  87. data/lib/luoma/template.rb +178 -0
  88. data/lib/luoma/token.rb +84 -0
  89. data/lib/luoma/version.rb +5 -0
  90. data/lib/luoma.rb +75 -0
  91. data/sig/luoma/cache.rbs +44 -0
  92. data/sig/luoma/chain_hash.rbs +26 -0
  93. data/sig/luoma/context.rbs +115 -0
  94. data/sig/luoma/drop.rbs +44 -0
  95. data/sig/luoma/drops/block.rbs +10 -0
  96. data/sig/luoma/drops/expression.rbs +10 -0
  97. data/sig/luoma/drops/html_safe.rbs +14 -0
  98. data/sig/luoma/drops/range.rbs +15 -0
  99. data/sig/luoma/drops/undefined.rbs +27 -0
  100. data/sig/luoma/environment.rbs +212 -0
  101. data/sig/luoma/errors.rbs +67 -0
  102. data/sig/luoma/escape.rbs +15 -0
  103. data/sig/luoma/expression.rbs +514 -0
  104. data/sig/luoma/filter.rbs +66 -0
  105. data/sig/luoma/filters/array.rbs +74 -0
  106. data/sig/luoma/filters/date.rbs +9 -0
  107. data/sig/luoma/filters/default.rbs +8 -0
  108. data/sig/luoma/filters/json.rbs +7 -0
  109. data/sig/luoma/filters/math.rbs +37 -0
  110. data/sig/luoma/filters/size.rbs +6 -0
  111. data/sig/luoma/filters/slice.rbs +10 -0
  112. data/sig/luoma/filters/sort.rbs +17 -0
  113. data/sig/luoma/filters/string.rbs +103 -0
  114. data/sig/luoma/fnv.rbs +3 -0
  115. data/sig/luoma/lexer.rbs +42 -0
  116. data/sig/luoma/lexer_legacy.rbs +81 -0
  117. data/sig/luoma/lexer_unified.rbs +49 -0
  118. data/sig/luoma/loader.rbs +40 -0
  119. data/sig/luoma/loaders/choice_loader.rbs +9 -0
  120. data/sig/luoma/loaders/file_system_loader.rbs +19 -0
  121. data/sig/luoma/loaders/mixins.rbs +16 -0
  122. data/sig/luoma/markup.rbs +68 -0
  123. data/sig/luoma/parser.rbs +105 -0
  124. data/sig/luoma/parser_unified.rbs +150 -0
  125. data/sig/luoma/predicates/blank.rbs +6 -0
  126. data/sig/luoma/predicates/defined.rbs +6 -0
  127. data/sig/luoma/predicates/empty.rbs +6 -0
  128. data/sig/luoma/predicates/type.rbs +21 -0
  129. data/sig/luoma/static_analysis.rbs +141 -0
  130. data/sig/luoma/tags/assign.rbs +12 -0
  131. data/sig/luoma/tags/break.rbs +11 -0
  132. data/sig/luoma/tags/capture.rbs +14 -0
  133. data/sig/luoma/tags/case.rbs +36 -0
  134. data/sig/luoma/tags/comment.rbs +11 -0
  135. data/sig/luoma/tags/continue.rbs +11 -0
  136. data/sig/luoma/tags/define.rbs +16 -0
  137. data/sig/luoma/tags/else.rbs +17 -0
  138. data/sig/luoma/tags/for.rbs +26 -0
  139. data/sig/luoma/tags/if.rbs +45 -0
  140. data/sig/luoma/tags/import.rbs +13 -0
  141. data/sig/luoma/tags/include.rbs +13 -0
  142. data/sig/luoma/tags/output.rbs +13 -0
  143. data/sig/luoma/tags/raw.rbs +11 -0
  144. data/sig/luoma/tags/render.rbs +13 -0
  145. data/sig/luoma/tags/with.rbs +15 -0
  146. data/sig/luoma/template.rbs +117 -0
  147. data/sig/luoma/token.rbs +81 -0
  148. data/sig/luoma.rbs +11 -0
  149. data/zensical.toml +363 -0
  150. data.tar.gz.sig +0 -0
  151. metadata +233 -0
  152. metadata.gz.sig +0 -0
@@ -0,0 +1,514 @@
1
+ module Luoma
2
+ type t_path_segment = Name | StringLiteral | IndexSelector | Variable | Predicate
3
+
4
+ interface _Traversable
5
+ def children: () -> Array[_Traversable]
6
+ def to_s: () -> String
7
+ def class: () -> untyped
8
+ end
9
+
10
+ class Expression
11
+ @token: t_token
12
+
13
+ @span: t_token
14
+
15
+ attr_reader token: t_token
16
+
17
+ attr_reader span: t_token
18
+
19
+ # (t_token) -> void
20
+ def initialize: (t_token token) -> void
21
+
22
+ # (RenderContext) -> untyped
23
+ def evaluate: (RenderContext context) -> untyped
24
+
25
+ # () -> Array[_Traversable]
26
+ def children: () -> Array[_Traversable]
27
+
28
+ # () -> Array[Name]
29
+ def scope: () -> Array[Name]
30
+
31
+ def to_s: () -> String
32
+ end
33
+
34
+ class GroupExpression < Expression
35
+ @expr: Expression
36
+
37
+ @segments: Array[t_path_segment]
38
+
39
+ # (t_token, Expression, Array[t_path_segment]) -> void
40
+ def initialize: (t_token token, Expression expr, Array[t_path_segment] segments) -> void
41
+
42
+ # (t_token) -> self
43
+ def with: (t_token token) -> self
44
+
45
+ # (Array[t_path_segment]) -> String
46
+ def path: (Array[t_path_segment]) -> String
47
+ end
48
+
49
+ class TernaryExpression < Expression
50
+ @consequence: Expression
51
+
52
+ @condition: Expression
53
+
54
+ @alternative: Expression?
55
+
56
+ # (t_token, Expression, Expression, Expression?) -> void
57
+ def initialize: (t_token token, Expression consequence, Expression condition, Expression? alternative) -> void
58
+ end
59
+
60
+ class FilteredExpression < Expression
61
+ @left: Expression
62
+
63
+ @filter: Filter
64
+
65
+ @name: String?
66
+
67
+ @span: t_token
68
+
69
+ def initialize: (t_token token, Expression left, Filter filter) -> void
70
+
71
+ def evaluate_lambda: (LambdaExpr expr, RenderContext context) -> untyped
72
+
73
+ def evaluate_filter: (String name, RenderContext context) -> untyped
74
+
75
+ def normalize_arguments: (RenderContext context, ::Method method, Array[untyped] args, Hash[Symbol, untyped] kwargs) -> [Array[untyped], Hash[Symbol, untyped]]
76
+
77
+ def validate_arguments: (
78
+ RenderContext context,
79
+ ::Method method,
80
+ Array[untyped] args,
81
+ Hash[Symbol, untyped] kwargs,
82
+ required_positional: untyped,
83
+ optional_positional: untyped,
84
+ has_rest: untyped,
85
+ required_keys: untyped,
86
+ optional_keys: untyped,
87
+ has_keyrest: untyped
88
+ ) -> void
89
+ end
90
+
91
+ class PrefixExpression < Expression
92
+ @right: Expression
93
+
94
+ # (t_token, Expression) -> void
95
+ def initialize: (t_token token, Expression right) -> void
96
+ end
97
+
98
+ class NotExpression < PrefixExpression
99
+ end
100
+
101
+ class PosExpression < PrefixExpression
102
+ end
103
+
104
+ class NegExpression < PrefixExpression
105
+ end
106
+
107
+ class InfixExpression < Expression
108
+ @left: untyped
109
+
110
+ @right: untyped
111
+
112
+ @span: untyped
113
+
114
+ # (t_token, Expression, Expression) -> void
115
+ def initialize: (t_token token, Expression left, Expression right) -> void
116
+ end
117
+
118
+ class CoalesceExpression < InfixExpression
119
+ end
120
+
121
+ class OrExpression < InfixExpression
122
+ end
123
+
124
+ class AndExpression < InfixExpression
125
+ end
126
+
127
+ class EqExpression < InfixExpression
128
+ end
129
+
130
+ class NeExpression < InfixExpression
131
+ end
132
+
133
+ class LtExpression < InfixExpression
134
+ end
135
+
136
+ class LeExpression < InfixExpression
137
+ end
138
+
139
+ class GtExpression < InfixExpression
140
+ end
141
+
142
+ class GeExpression < InfixExpression
143
+ end
144
+
145
+ class ContainsExpression < InfixExpression
146
+ end
147
+
148
+ class InExpression < InfixExpression
149
+ end
150
+
151
+ class AddExpression < InfixExpression
152
+ end
153
+
154
+ class SubExpression < InfixExpression
155
+ end
156
+
157
+ class MulExpression < InfixExpression
158
+ end
159
+
160
+ class DivExpression < InfixExpression
161
+ end
162
+
163
+ class ModExpression < InfixExpression
164
+ end
165
+
166
+ class Variable < Expression
167
+ @root: Name | StringLiteral | Variable
168
+
169
+ @segments: Array[t_path_segment]
170
+
171
+ @span: t_token
172
+
173
+ attr_reader root: Name | StringLiteral | Variable
174
+
175
+ attr_reader segments: Array[t_path_segment]
176
+
177
+ # (t_token, Name | StringLiteral | Variable, Array[PathSegment])
178
+ def initialize: (t_token token, Name | StringLiteral | Variable, Array[t_path_segment]) -> void
179
+
180
+ # (RenderContext) -> untyped
181
+ def evaluate: (RenderContext context) -> untyped
182
+
183
+ # () -> String
184
+ def to_s: () -> String
185
+
186
+
187
+ def ident?: (String name) -> bool
188
+
189
+ private
190
+
191
+ # (Array[PathSegment]) -> String
192
+ def path: (Array[t_path_segment] segments) -> String
193
+ end
194
+
195
+ class IndexSelector < Expression
196
+ @value: Integer
197
+
198
+ attr_reader value: Integer
199
+
200
+ # (t_token, Integer)
201
+ def initialize: (t_token token, Integer value) -> void
202
+
203
+ # (RenderContext) -> untyped
204
+ def evaluate: (RenderContext context) -> untyped
205
+
206
+ # () -> Array[_Traversable]
207
+ def children: () -> ::Array[Luoma::_Traversable]
208
+
209
+ # () -> String
210
+ def to_s: () -> String
211
+
212
+ def with: (t_token token) -> self
213
+ end
214
+
215
+ class Lambda < Expression
216
+ @params: Array[Name]
217
+
218
+ @expr: Expression
219
+
220
+ # (t_token, Array[Name], Expression) -> void
221
+ def initialize: (t_token token, Array[Name] params, Expression expr) -> void
222
+ end
223
+
224
+ class StringLiteral < Expression
225
+ @segments: Array[String|Expression]
226
+
227
+ attr_reader segments: Array[String|Expression]
228
+
229
+ # (t_token, Array[String|Expression], t_token)
230
+ def initialize: (t_token token, Array[String|Expression] segments, t_token end_token) -> void
231
+
232
+ def with: (t_token token) -> self
233
+
234
+ # () -> String?
235
+ def value: () -> String?
236
+ end
237
+
238
+ class IntegerLiteral < Expression
239
+ @value: Integer
240
+
241
+ attr_reader value: Integer
242
+
243
+ # (t_token, Integer)
244
+ def initialize: (t_token token, Integer value) -> void
245
+
246
+ # (RenderContext) -> untyped
247
+ def evaluate: (RenderContext context) -> untyped
248
+
249
+ # () -> Array[_Traversable]
250
+ def children: () -> ::Array[_Traversable]
251
+
252
+ # () -> String
253
+ def to_s: () -> String
254
+ end
255
+
256
+ class FloatLiteral < Expression
257
+ @value: Float
258
+
259
+ attr_reader value: Float
260
+
261
+ # (t_token, Float)
262
+ def initialize: (t_token token, Float value) -> void
263
+
264
+ # (RenderContext) -> untyped
265
+ def evaluate: (RenderContext context) -> untyped
266
+
267
+ # () -> Array[_Traversable]
268
+ def children: () -> ::Array[_Traversable]
269
+
270
+ # () -> String
271
+ def to_s: () -> String
272
+ end
273
+
274
+ class BooleanLiteral < Expression
275
+ @value: bool
276
+
277
+ attr_reader value: bool
278
+
279
+ # (t_token, bool)
280
+ def initialize: (t_token token, bool value) -> void
281
+
282
+ # (RenderContext) -> untyped
283
+ def evaluate: (RenderContext context) -> untyped
284
+
285
+ # () -> Array[_Traversable]
286
+ def children: () -> ::Array[_Traversable]
287
+
288
+ # () -> String
289
+ def to_s: () -> String
290
+ end
291
+
292
+ class NullLiteral < Expression
293
+ # (RenderContext) -> untyped
294
+ def evaluate: (RenderContext context) -> untyped
295
+
296
+ # () -> Array[_Traversable]
297
+ def children: () -> ::Array[_Traversable]
298
+
299
+ # () -> String
300
+ def to_s: () -> String
301
+ end
302
+
303
+ class RangeLiteral < Expression
304
+ @start: Expression
305
+
306
+ @stop: Expression
307
+
308
+ # (t_token, Expression, Expression) -> void
309
+ def initialize: (t_token token, Expression start, Expression stop) -> void
310
+
311
+ # (RenderContext) -> untyped
312
+ def evaluate: (RenderContext context) -> untyped
313
+
314
+ # () -> Array[_Traversable]
315
+ def children: () -> ::Array[_Traversable]
316
+
317
+ # () -> String
318
+ def to_s: () -> ::String
319
+ end
320
+
321
+ class ArrayLiteral < Expression
322
+ @items: Array[Expression|Spread]
323
+
324
+ def initialize: (t_token token, Array[Expression|Spread] items) -> void
325
+
326
+ def with: (t_token token) -> self
327
+ end
328
+
329
+ class ObjectLiteral < Expression
330
+ @items: Array[Item|Spread]
331
+
332
+ # (t_token token, Array[Item|Spread] items) -> void
333
+ def initialize: (t_token token, Array[Item|Spread] items) -> void
334
+
335
+ def with: (untyped token) -> self
336
+ end
337
+
338
+ class Predicate < Expression
339
+ @value: String
340
+
341
+ attr_reader value: String
342
+
343
+ # (t_token, String) -> void
344
+ def initialize: (t_token token, String value) -> void
345
+ end
346
+
347
+ class Spread
348
+ @token: t_token
349
+
350
+ @expr: Expression
351
+
352
+ attr_reader token: t_token
353
+
354
+ attr_reader expr: Expression
355
+
356
+ def initialize: (t_token token, Expression expr) -> void
357
+
358
+ # () -> Array[_Traversable]
359
+ def children: () -> ::Array[_Traversable]
360
+
361
+ # () -> String
362
+ def to_s: () -> ::String
363
+ end
364
+
365
+ class Item
366
+ @token: t_token
367
+
368
+ @key: Name
369
+
370
+ @expr: Expression
371
+
372
+ attr_reader token: t_token
373
+
374
+ attr_reader key: Name
375
+
376
+ attr_reader expr: Expression
377
+
378
+ # (t_token, Name, Expression) -> void
379
+ def initialize: (t_token token, Name key, Expression expr) -> void
380
+
381
+ # () -> Array[_Traversable]
382
+ def children: () -> ::Array[_Traversable]
383
+
384
+ # () -> String
385
+ def to_s: () -> ::String
386
+ end
387
+
388
+ class Name
389
+ @token: t_token
390
+
391
+ @value: String
392
+
393
+ @span: t_token
394
+
395
+ attr_reader token: t_token
396
+
397
+ attr_reader span: t_token
398
+
399
+ attr_reader value: String
400
+
401
+ # (t_token, String) -> void
402
+ def initialize: (t_token token, String value) -> void
403
+
404
+ # (RenderContext) -> untyped
405
+ def evaluate: (RenderContext context) -> untyped
406
+
407
+ # () -> Array[_Traversable]
408
+ def children: () -> ::Array[Luoma::_Traversable]
409
+
410
+ # () -> String
411
+ def to_s: () -> String
412
+ end
413
+
414
+ class Filter
415
+ @token: t_token
416
+
417
+ @name: Variable
418
+
419
+ @args: Array[Expression]
420
+
421
+ @kwargs: Array[KeywordArgument]
422
+
423
+ @span: t_token
424
+
425
+ attr_reader token: t_token
426
+
427
+ attr_reader span: t_token
428
+
429
+ attr_reader name: Variable
430
+
431
+ attr_reader kwargs: Array[KeywordArgument]
432
+
433
+ attr_reader args: Array[Expression]
434
+
435
+ # (t_token, Name, Array[Expression | KeywordArgument])
436
+ def initialize: (t_token token, Variable name, Array[Expression] args, Array[KeywordArgument] kwargs) -> void
437
+
438
+ def children: () -> Array[Luoma::_Traversable]
439
+
440
+ def to_s: () -> (::String)
441
+ end
442
+
443
+ class KeywordArgument
444
+ @token: t_token
445
+
446
+ @name: Name
447
+
448
+ @expression: Expression
449
+
450
+ @span: t_token
451
+
452
+ attr_reader token: t_token
453
+
454
+ attr_reader span: t_token
455
+
456
+ attr_reader name: Name
457
+
458
+ attr_reader expression: Expression
459
+
460
+ # (t_token, Name, Expression) -> void
461
+ def initialize: (t_token token, Name name, Expression expression) -> void
462
+
463
+ # () -> Array[_Traversable]
464
+ def children: () -> ::Array[_Traversable]
465
+
466
+ # () -> String
467
+ def to_s: () -> ::String
468
+
469
+ def deconstruct: () -> ::Array[untyped]
470
+
471
+ def deconstruct_keys: (untyped keys) -> { name: untyped, expression: untyped }
472
+ end
473
+
474
+ class PredicateFunction
475
+ @name: String
476
+
477
+ @func: untyped
478
+
479
+ attr_reader name: String
480
+
481
+ attr_reader func: untyped
482
+
483
+ # (String, untyped) -> void
484
+ def initialize: (String name, untyped func) -> void
485
+
486
+ # (RenderContext, untyped) -> bool
487
+ def call: (RenderContext context, untyped obj) -> bool
488
+ end
489
+
490
+ class LambdaExpr
491
+ @params: Array[String]
492
+
493
+ @expr: Expression
494
+
495
+ @context: RenderContext
496
+
497
+ attr_reader params: Array[String]
498
+
499
+ # (Array[String], Expression, RenderContext) -> void
500
+ def initialize: (Array[String] params, Expression expr, RenderContext context) -> void
501
+
502
+ # (Array[Untyped]) -> untyped
503
+ def call: (Array[untyped] args) -> untyped
504
+
505
+ # (Enumerable[untyped]) -> Array[untyped]
506
+ def broadcast_with_index: (Enumerable[untyped] enum) -> Array[untyped]
507
+
508
+ # (untyped, Integer) -> untyped
509
+ def call_with_index: (untyped value, Integer index) -> untyped
510
+ end
511
+
512
+ # (Expression) -> String
513
+ def self.tree_view: (Expression) -> String
514
+ end
@@ -0,0 +1,66 @@
1
+ module Luoma
2
+ class FilterContext
3
+ @token: t_token
4
+
5
+ @render_context: RenderContext
6
+
7
+ @env: Environment
8
+
9
+ attr_reader token: t_token
10
+
11
+ attr_reader render_context: RenderContext
12
+
13
+ attr_reader env: Environment
14
+
15
+ # (t_token, RenderContext)
16
+ def initialize: (t_token token, RenderContext render_context) -> void
17
+
18
+ # (String) -> TemplateTypeError
19
+ def type_error: (String message) -> TemplateTypeError
20
+
21
+ # (String) -> FilterArgumentError
22
+ def argument_error: (String message) -> FilterArgumentError
23
+
24
+ # (untyped) -> Array[untyped]
25
+ def to_a: (untyped obj) -> Array[untyped]
26
+
27
+ # (untyped) -> Hash[untyped, untyped]
28
+ def to_h: (untyped obj) -> Hash[untyped, untyped]
29
+
30
+ # [X] (untyped, ?default: X) -> (Integer | X)
31
+ def to_i: [X] (untyped obj, ?default: X) -> (Integer | X)
32
+
33
+ # (untyped) -> String
34
+ def to_string: (untyped obj) -> String
35
+
36
+ # [X] (untyped, ?default: X) -> (Numeric | X)
37
+ def to_numeric: [X] (untyped obj, ?default: X) -> (Numeric | X)
38
+
39
+ # (untyped) -> Enumerable[untyped]
40
+ def to_enumerable: (untyped obj) -> Enumerable[untyped]
41
+
42
+ # (untyped) -> untyped
43
+ def to_date: (untyped obj) -> untyped
44
+
45
+ # (untyped) -> bool
46
+ def nothing?: (untyped obj) -> bool
47
+
48
+ # (untyped) -> bool
49
+ def truthy?: (untyped obj) -> untyped
50
+
51
+ # (untyped, untyped) -> bool
52
+ def eq?: (untyped obj, untyped other) -> untyped
53
+
54
+ # (untyped, untyped) -> bool
55
+ def lt?: (untyped obj, untyped other) -> untyped
56
+
57
+ # (untyped, untyped) -> (-1 | 1 | 0 | nil)
58
+ def cmp: (untyped left, untyped right) -> (-1 | 1 | 0 | nil)
59
+
60
+ # (untyped) -> bool
61
+ def empty?: (untyped obj) -> bool
62
+
63
+ # (untyped, untyped, ?default: untyped?) -> untyped
64
+ def fetch: (untyped obj, untyped key, ?default: untyped) -> untyped
65
+ end
66
+ end
@@ -0,0 +1,74 @@
1
+ module Luoma
2
+ module Filters
3
+ # Return the concatenation of items in _left_ separated by _sep_.
4
+ # Coerce items in _left_ to strings if they aren't strings already.
5
+ def self.join: (FilterContext context, untyped left, ?::String sep) -> untyped
6
+
7
+ # If _left_ is enumerable, return _left_ flattened to _depth_. Otherwise
8
+ # return _left_.
9
+ def self.flatten: (FilterContext context, untyped left, ?untyped? depth) -> untyped
10
+
11
+ # Return _true_ if at least one item in _left_ is truthy.
12
+ def self.any: (FilterContext context, untyped left, ?untyped key, ?untyped value) -> untyped
13
+
14
+ # Return true if all items in _left_ are truthy.
15
+ def self.all: (FilterContext context, untyped left, ?untyped key, ?untyped value) -> untyped
16
+
17
+ # Return a copy of _left_ with nil items removed.
18
+ # Coerce _left_ to an array-like object if it is not one already.
19
+ #
20
+ # If _key_ is given, assume items in _left_ are hash-like and remove items from _left_
21
+ # where `item.fetch(key, nil)` is nil.
22
+ #
23
+ # If key is not `:nothing`, coerce it to a string before calling `fetch` on items in
24
+ # _left_.
25
+ def self.compact: (FilterContext context, untyped left, ?untyped key) -> untyped
26
+
27
+ # Return _left_ concatenated with _right_, or nil if _right_ is not an array.
28
+ # Coerce _left_ to an array if it isn't an array already.
29
+ def self.concat: (FilterContext context, untyped left, untyped right) -> untyped
30
+
31
+ def self.find: (FilterContext context, untyped left, untyped key, ?untyped? value) -> (untyped | nil)
32
+
33
+ def self.find_index: (FilterContext context, untyped left, untyped key, ?untyped? value) -> (untyped | nil)
34
+
35
+ def self.has: (FilterContext context, untyped left, untyped key, ?untyped? value) -> (true | false)
36
+
37
+ # Return the first item in _left_, or `nil` if _left_ does not have a first item.
38
+ def self.first: (FilterContext context, untyped left) -> untyped
39
+
40
+ # Return the last item in _left_, or `nil` if _left_ does not have a last item.
41
+ def self.last: (FilterContext context, untyped left) -> untyped
42
+
43
+ def self.map: (FilterContext context, untyped left, untyped key) -> untyped
44
+
45
+ def self.flat_map: (FilterContext context, untyped left, untyped key) -> untyped
46
+
47
+ # Return _left_ with all items in reverse order.
48
+ # Coerce _left_ to an array if it isn't an array already.
49
+ def self.reverse: (FilterContext context, untyped left) -> untyped
50
+
51
+ def self.reject: (FilterContext context, untyped left, untyped key, ?untyped? value) -> untyped
52
+
53
+ def self.where: (FilterContext context, untyped left, untyped key, ?untyped? value) -> untyped
54
+
55
+ # Deduplicate items in _left_.
56
+ # Coerce _left_ to an array if it isn't an array already.
57
+ def self.uniq: (FilterContext context, untyped left, ?untyped? key) -> untyped
58
+
59
+ # Return the sum of all numeric values in the input array.
60
+ def self.sum: (FilterContext context, untyped left, ?untyped? key) -> untyped
61
+
62
+ # Combine _left_ with _right_, producing an array or pairs.
63
+ # Coerce _left_ and _right_ to arrays if they aren't arrays already.
64
+ def self.zip: (FilterContext context, untyped left, untyped right) -> untyped
65
+
66
+ # Return the minimum numeric value found in _left_.
67
+ # Coerce _left_ to an array if it's not an array already.
68
+ def self.min: (FilterContext context, untyped left, ?untyped key) -> untyped
69
+
70
+ # Return the maximum numeric value found in _left_.
71
+ # Coerce _left_ to an array if it's not an array already.
72
+ def self.max: (FilterContext context, untyped left, ?untyped key) -> untyped
73
+ end
74
+ end
@@ -0,0 +1,9 @@
1
+ module Luoma
2
+
3
+ module Filters
4
+ # Format date and time object _left_ with _format_.
5
+ # Coerce _left_ to a `Time` if it is not a time-like object already.
6
+ # Coerce _format_ to a string if it is not a string already.
7
+ def self.date: (FilterContext context, untyped left, untyped format) -> untyped
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ module Luoma
2
+
3
+ module Filters
4
+ # Return _left_, or _default_ if _obj_ is `nil`, `false` or empty.
5
+ # If _allow_false_ is `true`, _left_ is returned if _left_ is `false`.
6
+ def self.default: (FilterContext context, untyped left, ?::String default, ?allow_false: bool) -> untyped
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ module Luoma
2
+
3
+ module Filters
4
+ # Return _left_ serialized in JSON format.
5
+ def self.json: (FilterContext context, untyped left, ?pretty: bool) -> untyped
6
+ end
7
+ end