rubyment 0.7.25752271 → 0.7.25752540
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.
- checksums.yaml +4 -4
- data/lib/rubyment.rb +140 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6fbbb8b232ca1a58d1440b3310dc2a87a5c6f30
|
4
|
+
data.tar.gz: 459ab366a552afb2fe23f31ecb2e8030842d0002
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8f6bb176e2bed86d86faa13f7c66755fef1adc4c7b64fc95a854d80b93a2697678289b9126f15b76fab6d762225cb7546b8fd3da1a55d7b57b97eba4ec7f93d
|
7
|
+
data.tar.gz: 8d2795d66b35b4c1f6670d1aedb69dda3ae65757c39f029f03bb7f372d0b72568a03e4040ca8ddda68eed11f55d545bd9a4edefe85383b72038c1807c8f6efda
|
data/lib/rubyment.rb
CHANGED
@@ -318,6 +318,146 @@ module RubymentStringsModule
|
|
318
318
|
end
|
319
319
|
|
320
320
|
|
321
|
+
=begin
|
322
|
+
Makes possible to join, similarly to Array#join, recursively.
|
323
|
+
|
324
|
+
Note of difference in behavior:
|
325
|
+
|
326
|
+
[ "", "" ].join "+"
|
327
|
+
# => "+"
|
328
|
+
|
329
|
+
[ nil, nil ].join "+"
|
330
|
+
# => "+"
|
331
|
+
|
332
|
+
In this function, empty strings are not joinned
|
333
|
+
(.nne and .compact are run before). It's a planned
|
334
|
+
change to expand the interface to be able to
|
335
|
+
instruct for not nne/compact strings/arrays before.
|
336
|
+
TODO: via inheritable joinner; possibly indenter
|
337
|
+
|
338
|
+
Examples:
|
339
|
+
|
340
|
+
string__recursive_join ["+", 1, 2, 3 ]
|
341
|
+
# => "1+2+3"
|
342
|
+
|
343
|
+
string__recursive_join [ "; ", ["+", 1, 2, 3 ], ["-", 2, 1] ]
|
344
|
+
# => "1+2+3; 2-1"
|
345
|
+
|
346
|
+
string__recursive_join [ "; ", ["+", 1, ["/", "a", "b"], 3 ], ["-", 2, 1] ]
|
347
|
+
# => "1+a/b+3; 2-1"
|
348
|
+
|
349
|
+
|
350
|
+
|
351
|
+
=end
|
352
|
+
def string__recursive_join joinner_arrays_tuple
|
353
|
+
return joinner_arrays_tuple if (
|
354
|
+
joinner_arrays_tuple.respond_to?(:map).negate_me
|
355
|
+
)
|
356
|
+
|
357
|
+
joinner,
|
358
|
+
*operands = joinner_arrays_tuple
|
359
|
+
operands.map! { |operand|
|
360
|
+
(
|
361
|
+
send __method__, operand # recursive call
|
362
|
+
).nne
|
363
|
+
}
|
364
|
+
|
365
|
+
operands.compact.join(joinner)
|
366
|
+
end
|
367
|
+
|
368
|
+
|
369
|
+
=begin
|
370
|
+
If definition cannot map, retuns itself.
|
371
|
+
|
372
|
+
Otherwise, it will generate a string out of the values
|
373
|
+
given in that array, which can describe, for instance,
|
374
|
+
recursive expressions. Better explained by examples:
|
375
|
+
|
376
|
+
Examples:
|
377
|
+
|
378
|
+
string__from_definition [ "value", "var" ]
|
379
|
+
# => "var value"
|
380
|
+
|
381
|
+
string__from_definition [ "value" ]
|
382
|
+
# => "value"
|
383
|
+
|
384
|
+
string__from_definition [ "value", ["var"], "=" ]
|
385
|
+
# => "var=value"
|
386
|
+
|
387
|
+
string__from_definition [ "value", ["var"], "" ]
|
388
|
+
# => "varvalue"
|
389
|
+
|
390
|
+
string__from_definition [ nil, ["var"], "=" ]
|
391
|
+
# => "var="
|
392
|
+
|
393
|
+
string__from_definition [ "value", ["var", "EXPORT"], "=" ]
|
394
|
+
# => "EXPORT var=value"
|
395
|
+
|
396
|
+
string__from_definition [ ["value"], ["var", "EXPORT"], "=" ]
|
397
|
+
# => "EXPORT var=value"
|
398
|
+
|
399
|
+
string__from_definition ["value", nil, nil, nil, "`", "`"]
|
400
|
+
# => "`value`"
|
401
|
+
|
402
|
+
string__from_definition [ ["value", nil, nil, nil, "`", "`"] , ["var", "EXPORT"], "=" ]
|
403
|
+
# => "EXPORT var=`value`"
|
404
|
+
|
405
|
+
# ----- test the spacer:
|
406
|
+
|
407
|
+
string__from_definition [ "value", ["var"], "=", "," ]
|
408
|
+
# => "var,=,value"
|
409
|
+
|
410
|
+
string__from_definition [ "value", ["var"], nil, "," ]
|
411
|
+
# => "var, ,value"
|
412
|
+
|
413
|
+
string__from_definition [ "value", ["var"], "", "," ]
|
414
|
+
# => "var,value"
|
415
|
+
|
416
|
+
string__from_definition [ " ... describe here ... ", "contents:", "", "\n", "# begin section", "# end section "]
|
417
|
+
# => "# begin section\ncontents:\n ... describe here ... \n# end section "
|
418
|
+
|
419
|
+
|
420
|
+
=end
|
421
|
+
def string__from_definition definition
|
422
|
+
return definition if (
|
423
|
+
definition.respond_to?(:map).negate_me
|
424
|
+
)
|
425
|
+
|
426
|
+
value,
|
427
|
+
variable,
|
428
|
+
operation,
|
429
|
+
spacer,
|
430
|
+
open,
|
431
|
+
close,
|
432
|
+
reserved = definition.map { |d|
|
433
|
+
send __method__, d # recursive call
|
434
|
+
}
|
435
|
+
|
436
|
+
# if variable is non empty, the default operation is "="
|
437
|
+
# of course, only applied if operation is not set
|
438
|
+
# A priori, nne not to be used, otherwise "" operation
|
439
|
+
# won't be allowed
|
440
|
+
operation ||= (variable && " " || "")
|
441
|
+
spacer = spacer.nne ""
|
442
|
+
variable = variable.nne ""
|
443
|
+
|
444
|
+
rv = string__recursive_join [
|
445
|
+
spacer, # separator
|
446
|
+
open,
|
447
|
+
[
|
448
|
+
spacer, # separator
|
449
|
+
variable,
|
450
|
+
operation,
|
451
|
+
value,
|
452
|
+
],
|
453
|
+
close,
|
454
|
+
]
|
455
|
+
|
456
|
+
rv
|
457
|
+
|
458
|
+
end
|
459
|
+
|
460
|
+
|
321
461
|
end # of RubymentStringsModule
|
322
462
|
|
323
463
|
|