q-language 1.0.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.
- data/.gemtest +0 -0
- data/Rakefile +10 -0
- data/lib/q-language.rb +9 -0
- data/lib/q-language/device.rb +166 -0
- data/lib/q-language/environment.rb +358 -0
- data/lib/q-language/methods/array.rb +523 -0
- data/lib/q-language/methods/block.rb +26 -0
- data/lib/q-language/methods/class.rb +24 -0
- data/lib/q-language/methods/dynamic.rb +82 -0
- data/lib/q-language/methods/false.rb +47 -0
- data/lib/q-language/methods/hash.rb +351 -0
- data/lib/q-language/methods/implicit.rb +345 -0
- data/lib/q-language/methods/module.rb +39 -0
- data/lib/q-language/methods/nil.rb +47 -0
- data/lib/q-language/methods/number.rb +118 -0
- data/lib/q-language/methods/object.rb +155 -0
- data/lib/q-language/methods/string.rb +157 -0
- data/lib/q-language/methods/time.rb +110 -0
- data/lib/q-language/methods/token.rb +72 -0
- data/lib/q-language/methods/true.rb +14 -0
- data/lib/q-language/node.rb +45 -0
- data/lib/q-language/object.rb +125 -0
- data/lib/q-language/parser.rb +104 -0
- data/lib/q-language/writer.rb +90 -0
- data/test/methods/test_array.rb +191 -0
- data/test/methods/test_block.rb +66 -0
- data/test/methods/test_class.rb +34 -0
- data/test/methods/test_dynamic.rb +158 -0
- data/test/methods/test_false.rb +60 -0
- data/test/methods/test_hash.rb +10 -0
- data/test/methods/test_implicit.rb +332 -0
- data/test/methods/test_module.rb +55 -0
- data/test/methods/test_nil.rb +60 -0
- data/test/methods/test_number.rb +10 -0
- data/test/methods/test_object.rb +157 -0
- data/test/methods/test_string.rb +271 -0
- data/test/methods/test_time.rb +181 -0
- data/test/methods/test_token.rb +92 -0
- data/test/methods/test_true.rb +16 -0
- data/test/test.rb +23 -0
- metadata +103 -0
@@ -0,0 +1,523 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright © 2010-2011 Jesse Sielaff
|
4
|
+
#
|
5
|
+
|
6
|
+
class QArray < QObject
|
7
|
+
def add (array)
|
8
|
+
value + array
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_all (*every_array)
|
12
|
+
value + every_array.inject([]) {|t,a| t + a }
|
13
|
+
end
|
14
|
+
|
15
|
+
def array?
|
16
|
+
value
|
17
|
+
end
|
18
|
+
|
19
|
+
def at (number)
|
20
|
+
value.at(number)
|
21
|
+
end
|
22
|
+
|
23
|
+
def clear
|
24
|
+
value.clear
|
25
|
+
end
|
26
|
+
|
27
|
+
def combination (number, &block)
|
28
|
+
value.combination(number) do |obj|
|
29
|
+
result = yield obj
|
30
|
+
break result if env::break?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def compact
|
35
|
+
value.compact
|
36
|
+
end
|
37
|
+
|
38
|
+
def compact!
|
39
|
+
value.compact!
|
40
|
+
value
|
41
|
+
end
|
42
|
+
|
43
|
+
def concat (array)
|
44
|
+
value.concat(array)
|
45
|
+
end
|
46
|
+
|
47
|
+
def count (object)
|
48
|
+
value.count(object)
|
49
|
+
end
|
50
|
+
|
51
|
+
def count_by (&block)
|
52
|
+
value.count do |obj|
|
53
|
+
result = yield obj
|
54
|
+
break result if env::break?
|
55
|
+
result
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def cycle (&block)
|
60
|
+
value.cycle do |obj|
|
61
|
+
result = yield obj
|
62
|
+
break result if env::break?
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def cycle_n (number, &block)
|
67
|
+
value.cycle(number) do |obj|
|
68
|
+
result = yield obj
|
69
|
+
break result if env::break?
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def delete (object)
|
74
|
+
value.delete(object)
|
75
|
+
end
|
76
|
+
|
77
|
+
def delete_at (number)
|
78
|
+
value.delete_at(number)
|
79
|
+
end
|
80
|
+
|
81
|
+
def delete_if (&block)
|
82
|
+
value.delete_if do |obj|
|
83
|
+
result = yield obj
|
84
|
+
break result if env::break?
|
85
|
+
result
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def drop (number)
|
90
|
+
return value.dup if number < 0
|
91
|
+
value.drop(number)
|
92
|
+
end
|
93
|
+
|
94
|
+
def drop_while (&block)
|
95
|
+
value.drop_while do |obj|
|
96
|
+
result = yield obj
|
97
|
+
break result if env::break?
|
98
|
+
result
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def each (&block)
|
103
|
+
value.each do |obj|
|
104
|
+
result = yield obj
|
105
|
+
break result if env::break?
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def each_cons (number, &block)
|
110
|
+
return nil unless number > 0
|
111
|
+
|
112
|
+
value.each_cons(number) do |obj|
|
113
|
+
result = yield obj
|
114
|
+
break result if env::break?
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def each_index (&block)
|
119
|
+
value.each_index do |obj|
|
120
|
+
result = yield obj
|
121
|
+
break result if env::break?
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def each_slice (number, &block)
|
126
|
+
return nil unless number > 0
|
127
|
+
|
128
|
+
value.each_slice(number) do |obj|
|
129
|
+
result = yield obj
|
130
|
+
break result if env::break?
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def each_with_index (&block)
|
135
|
+
value.each_with_index do |obj, i|
|
136
|
+
result = yield [obj, i]
|
137
|
+
break result if env::break?
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def each_with_object (object, &block)
|
142
|
+
value.each_with_object(object) do |obj, o|
|
143
|
+
result = yield [obj,o]
|
144
|
+
break result if env::break?
|
145
|
+
end
|
146
|
+
|
147
|
+
object
|
148
|
+
end
|
149
|
+
|
150
|
+
def empty?
|
151
|
+
value.empty?
|
152
|
+
end
|
153
|
+
|
154
|
+
def find (&block)
|
155
|
+
value.find do |obj|
|
156
|
+
result = yield obj
|
157
|
+
break result if env::break?
|
158
|
+
result
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def first
|
163
|
+
value.first
|
164
|
+
end
|
165
|
+
|
166
|
+
def flatten
|
167
|
+
value.flatten
|
168
|
+
rescue ArgumentError
|
169
|
+
# Array is recursive
|
170
|
+
value.dup
|
171
|
+
end
|
172
|
+
|
173
|
+
def flatten!
|
174
|
+
value.flatten!
|
175
|
+
rescue ArgumentError
|
176
|
+
# Array is recursive
|
177
|
+
value
|
178
|
+
end
|
179
|
+
|
180
|
+
def group_by (&block)
|
181
|
+
value.group_by do |obj|
|
182
|
+
result = yield obj
|
183
|
+
break result if env::break?
|
184
|
+
result
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
def include? (object)
|
189
|
+
value.include?(object)
|
190
|
+
end
|
191
|
+
|
192
|
+
def index (object)
|
193
|
+
value.index(object)
|
194
|
+
end
|
195
|
+
|
196
|
+
def index_by (&block)
|
197
|
+
value.index do |obj|
|
198
|
+
result = yield obj
|
199
|
+
break result if env::break?
|
200
|
+
result
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
def inject (object, &block)
|
205
|
+
value.inject(object) do |o, obj|
|
206
|
+
result = yield [o,obj]
|
207
|
+
break result if env::break?
|
208
|
+
result
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
def intersection (array)
|
213
|
+
value & array
|
214
|
+
end
|
215
|
+
|
216
|
+
def join (string)
|
217
|
+
value.join(string)
|
218
|
+
rescue ArgumentError
|
219
|
+
# Array is recursive
|
220
|
+
value.dup
|
221
|
+
end
|
222
|
+
|
223
|
+
def last
|
224
|
+
value.last
|
225
|
+
end
|
226
|
+
|
227
|
+
def last_n (number)
|
228
|
+
return value.dup if number < 0
|
229
|
+
value.last(number)
|
230
|
+
end
|
231
|
+
|
232
|
+
def length
|
233
|
+
value.length
|
234
|
+
end
|
235
|
+
|
236
|
+
def many? (&block)
|
237
|
+
value.count do |obj|
|
238
|
+
result = yield obj
|
239
|
+
return result if env::break?
|
240
|
+
result
|
241
|
+
end > 1
|
242
|
+
end
|
243
|
+
|
244
|
+
def map (&block)
|
245
|
+
value.map do |obj|
|
246
|
+
result = yield obj
|
247
|
+
return result if env::break?
|
248
|
+
result
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
def map! (&block)
|
253
|
+
value.map! do |obj|
|
254
|
+
result = yield obj
|
255
|
+
return result if env::break?
|
256
|
+
result
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
def max
|
261
|
+
value.max
|
262
|
+
rescue ArgumentError
|
263
|
+
# Array elements cannot be compared
|
264
|
+
nil
|
265
|
+
end
|
266
|
+
|
267
|
+
def max_by (&object)
|
268
|
+
value.max_by do |obj|
|
269
|
+
result = yield obj
|
270
|
+
return result if env::break?
|
271
|
+
result
|
272
|
+
end
|
273
|
+
rescue ArgumentError
|
274
|
+
# Array elements cannot be compared
|
275
|
+
nil
|
276
|
+
end
|
277
|
+
|
278
|
+
def min
|
279
|
+
value.min
|
280
|
+
rescue ArgumentError
|
281
|
+
# Array elements cannot be compared
|
282
|
+
nil
|
283
|
+
end
|
284
|
+
|
285
|
+
def min_by (&object)
|
286
|
+
value.min_by do |obj|
|
287
|
+
result = yield obj
|
288
|
+
return result if env::break?
|
289
|
+
result
|
290
|
+
end
|
291
|
+
rescue ArgumentError
|
292
|
+
# Array elements cannot be compared
|
293
|
+
nil
|
294
|
+
end
|
295
|
+
|
296
|
+
def minmax
|
297
|
+
value.minmax
|
298
|
+
rescue ArgumentError
|
299
|
+
# Array elements cannot be compared
|
300
|
+
nil
|
301
|
+
end
|
302
|
+
|
303
|
+
def minmax_by (&object)
|
304
|
+
value.minmax_by do |obj|
|
305
|
+
result = yield obj
|
306
|
+
return result if env::break?
|
307
|
+
result
|
308
|
+
end
|
309
|
+
rescue ArgumentError
|
310
|
+
# Array elements cannot be compared
|
311
|
+
nil
|
312
|
+
end
|
313
|
+
|
314
|
+
def none? (&block)
|
315
|
+
value.none? do |obj|
|
316
|
+
result = yield obj
|
317
|
+
return result if env::break?
|
318
|
+
result
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
def one? (&block)
|
323
|
+
value.one? do |obj|
|
324
|
+
result = yield obj
|
325
|
+
return result if env::break?
|
326
|
+
result
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
def partition (&block)
|
331
|
+
value.partition do |obj|
|
332
|
+
result = yield obj
|
333
|
+
return result if env::break?
|
334
|
+
result
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
def permutation (number, &block)
|
339
|
+
value.permutation(number) do |obj|
|
340
|
+
result = yield obj
|
341
|
+
break result if env::break?
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
def pop
|
346
|
+
value.pop
|
347
|
+
end
|
348
|
+
|
349
|
+
def pop_n (number)
|
350
|
+
return value.dup if number < 0
|
351
|
+
value.pop(number)
|
352
|
+
end
|
353
|
+
|
354
|
+
# May cause segfault in Ruby 1.9.2-p290
|
355
|
+
#def product (array)
|
356
|
+
# value.product(array)
|
357
|
+
#end
|
358
|
+
|
359
|
+
def push (object)
|
360
|
+
value << object unless value.length >= env::max_array_length
|
361
|
+
end
|
362
|
+
|
363
|
+
def push_all (*every_object)
|
364
|
+
value.concat(every_object)
|
365
|
+
end
|
366
|
+
|
367
|
+
def reject (&block)
|
368
|
+
value.reject do |obj|
|
369
|
+
result = yield obj
|
370
|
+
break if env::break?
|
371
|
+
result
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
def reject! (&block)
|
376
|
+
value.reject! do |obj|
|
377
|
+
result = yield obj
|
378
|
+
break if env::break?
|
379
|
+
result
|
380
|
+
end
|
381
|
+
end
|
382
|
+
|
383
|
+
def replace (array)
|
384
|
+
value.replace(array)
|
385
|
+
end
|
386
|
+
|
387
|
+
def reverse
|
388
|
+
value.reverse
|
389
|
+
end
|
390
|
+
|
391
|
+
def reverse!
|
392
|
+
value.reverse!
|
393
|
+
end
|
394
|
+
|
395
|
+
def reverse_each (&block)
|
396
|
+
value.reverse_each do |obj|
|
397
|
+
result = yield obj
|
398
|
+
break if env::break?
|
399
|
+
result
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
def rindex (object)
|
404
|
+
value.rindex(object)
|
405
|
+
end
|
406
|
+
|
407
|
+
def rotate
|
408
|
+
value.rotate
|
409
|
+
end
|
410
|
+
|
411
|
+
def rotate!
|
412
|
+
value.rotate!
|
413
|
+
end
|
414
|
+
|
415
|
+
def rotate_n (number)
|
416
|
+
value.rotate(number)
|
417
|
+
end
|
418
|
+
|
419
|
+
def rotate_n! (number)
|
420
|
+
value.rotate!(number)
|
421
|
+
end
|
422
|
+
|
423
|
+
def sample
|
424
|
+
value.sample
|
425
|
+
end
|
426
|
+
|
427
|
+
def sample_n (number)
|
428
|
+
return value.dup if number < 0
|
429
|
+
value.sample(number)
|
430
|
+
end
|
431
|
+
|
432
|
+
def second
|
433
|
+
value[1]
|
434
|
+
end
|
435
|
+
|
436
|
+
def select (&block)
|
437
|
+
value.select do |obj|
|
438
|
+
result = yield obj
|
439
|
+
break result if env::break?
|
440
|
+
result
|
441
|
+
end
|
442
|
+
end
|
443
|
+
|
444
|
+
def select! (&block)
|
445
|
+
value.select! do |obj|
|
446
|
+
result = yield obj
|
447
|
+
break result if env::break?
|
448
|
+
result
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
452
|
+
def shift
|
453
|
+
value.shift
|
454
|
+
end
|
455
|
+
|
456
|
+
def shift_n (number)
|
457
|
+
return value.dup if number < 0
|
458
|
+
value.shift(number)
|
459
|
+
end
|
460
|
+
|
461
|
+
def shuffle
|
462
|
+
value.shuffle
|
463
|
+
end
|
464
|
+
|
465
|
+
def shuffle!
|
466
|
+
value.shuffle!
|
467
|
+
end
|
468
|
+
|
469
|
+
def sort
|
470
|
+
value.sort
|
471
|
+
rescue ArgumentError
|
472
|
+
# Array elements cannot be compared
|
473
|
+
value.dup
|
474
|
+
end
|
475
|
+
|
476
|
+
def sort!
|
477
|
+
value.sort!
|
478
|
+
rescue ArgumentError
|
479
|
+
# Array elements cannot be compared
|
480
|
+
value.dup
|
481
|
+
end
|
482
|
+
|
483
|
+
def subtract (array)
|
484
|
+
value - array
|
485
|
+
end
|
486
|
+
|
487
|
+
def take (number)
|
488
|
+
return value.dup if number < 0
|
489
|
+
value.take(number)
|
490
|
+
end
|
491
|
+
|
492
|
+
def take_while (&block)
|
493
|
+
value.take_while do |obj|
|
494
|
+
result = yield obj
|
495
|
+
break result if env::break?
|
496
|
+
result
|
497
|
+
end
|
498
|
+
end
|
499
|
+
|
500
|
+
def third
|
501
|
+
value[2]
|
502
|
+
end
|
503
|
+
|
504
|
+
def union (array)
|
505
|
+
value | array
|
506
|
+
end
|
507
|
+
|
508
|
+
def uniq
|
509
|
+
value.uniq
|
510
|
+
end
|
511
|
+
|
512
|
+
def uniq!
|
513
|
+
value.uniq!
|
514
|
+
end
|
515
|
+
|
516
|
+
def unshift (object)
|
517
|
+
value.unshift(object)
|
518
|
+
end
|
519
|
+
|
520
|
+
def unshift_all (*every_object)
|
521
|
+
value.unshift(*every_object)
|
522
|
+
end
|
523
|
+
end
|