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.
Files changed (41) hide show
  1. data/.gemtest +0 -0
  2. data/Rakefile +10 -0
  3. data/lib/q-language.rb +9 -0
  4. data/lib/q-language/device.rb +166 -0
  5. data/lib/q-language/environment.rb +358 -0
  6. data/lib/q-language/methods/array.rb +523 -0
  7. data/lib/q-language/methods/block.rb +26 -0
  8. data/lib/q-language/methods/class.rb +24 -0
  9. data/lib/q-language/methods/dynamic.rb +82 -0
  10. data/lib/q-language/methods/false.rb +47 -0
  11. data/lib/q-language/methods/hash.rb +351 -0
  12. data/lib/q-language/methods/implicit.rb +345 -0
  13. data/lib/q-language/methods/module.rb +39 -0
  14. data/lib/q-language/methods/nil.rb +47 -0
  15. data/lib/q-language/methods/number.rb +118 -0
  16. data/lib/q-language/methods/object.rb +155 -0
  17. data/lib/q-language/methods/string.rb +157 -0
  18. data/lib/q-language/methods/time.rb +110 -0
  19. data/lib/q-language/methods/token.rb +72 -0
  20. data/lib/q-language/methods/true.rb +14 -0
  21. data/lib/q-language/node.rb +45 -0
  22. data/lib/q-language/object.rb +125 -0
  23. data/lib/q-language/parser.rb +104 -0
  24. data/lib/q-language/writer.rb +90 -0
  25. data/test/methods/test_array.rb +191 -0
  26. data/test/methods/test_block.rb +66 -0
  27. data/test/methods/test_class.rb +34 -0
  28. data/test/methods/test_dynamic.rb +158 -0
  29. data/test/methods/test_false.rb +60 -0
  30. data/test/methods/test_hash.rb +10 -0
  31. data/test/methods/test_implicit.rb +332 -0
  32. data/test/methods/test_module.rb +55 -0
  33. data/test/methods/test_nil.rb +60 -0
  34. data/test/methods/test_number.rb +10 -0
  35. data/test/methods/test_object.rb +157 -0
  36. data/test/methods/test_string.rb +271 -0
  37. data/test/methods/test_time.rb +181 -0
  38. data/test/methods/test_token.rb +92 -0
  39. data/test/methods/test_true.rb +16 -0
  40. data/test/test.rb +23 -0
  41. 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