fig 0.1.81 → 0.2.1

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 (43) hide show
  1. data/Changes +87 -0
  2. data/lib/fig.rb +1 -1
  3. data/lib/fig/command.rb +5 -0
  4. data/lib/fig/command/action/dump_package_definition_for_command_line.rb +62 -0
  5. data/lib/fig/command/action/dump_package_definition_parsed.rb +19 -2
  6. data/lib/fig/command/action/list_local.rb +9 -1
  7. data/lib/fig/command/action/list_remote.rb +9 -1
  8. data/lib/fig/command/action/role/list_variables_in_a_tree.rb +1 -1
  9. data/lib/fig/command/action/run_command_line.rb +1 -1
  10. data/lib/fig/command/action/run_command_statement.rb +4 -2
  11. data/lib/fig/command/options.rb +50 -18
  12. data/lib/fig/command/options/parser.rb +16 -15
  13. data/lib/fig/command/package_applier.rb +5 -3
  14. data/lib/fig/grammar/v0.rb +287 -289
  15. data/lib/fig/grammar/v0.treetop +66 -42
  16. data/lib/fig/grammar/v1.rb +629 -533
  17. data/lib/fig/grammar/v1.treetop +102 -39
  18. data/lib/fig/grammar_monkey_patches.rb +21 -0
  19. data/lib/fig/operating_system.rb +53 -36
  20. data/lib/fig/package_descriptor.rb +1 -12
  21. data/lib/fig/parser.rb +8 -33
  22. data/lib/fig/parser_package_build_state.rb +92 -31
  23. data/lib/fig/repository_package_publisher.rb +2 -2
  24. data/lib/fig/runtime_environment.rb +54 -120
  25. data/lib/fig/statement.rb +6 -6
  26. data/lib/fig/statement/asset.rb +1 -13
  27. data/lib/fig/statement/command.rb +47 -0
  28. data/lib/fig/statement/environment_variable.rb +64 -3
  29. data/lib/fig/statement/grammar_version.rb +4 -0
  30. data/lib/fig/statement/include.rb +4 -0
  31. data/lib/fig/statement/override.rb +4 -0
  32. data/lib/fig/statement/path.rb +40 -16
  33. data/lib/fig/statement/retrieve.rb +61 -5
  34. data/lib/fig/statement/set.rb +16 -19
  35. data/lib/fig/string_tokenizer.rb +63 -25
  36. data/lib/fig/tokenized_string.rb +31 -5
  37. data/lib/fig/tokenized_string/plain_segment.rb +32 -2
  38. data/lib/fig/tokenized_string/token.rb +12 -0
  39. data/lib/fig/unparser.rb +27 -12
  40. data/lib/fig/unparser/v0.rb +4 -5
  41. data/lib/fig/unparser/v1.rb +43 -6
  42. data/lib/fig/url.rb +13 -0
  43. metadata +44 -42
@@ -5,6 +5,8 @@ module Fig; end
5
5
  class Fig::Command; end
6
6
 
7
7
  class Fig::Command::PackageApplier
8
+ attr_reader :synthetic_package_for_command_line
9
+
8
10
  def initialize(
9
11
  base_package,
10
12
  environment,
@@ -37,10 +39,10 @@ class Fig::Command::PackageApplier
37
39
 
38
40
  def apply_config_to_environment(ignore_base_config)
39
41
  begin
42
+ @synthetic_package_for_command_line =
43
+ synthesize_package_for_command_line_options(ignore_base_config)
40
44
  @environment.apply_config(
41
- synthesize_package_for_command_line_options(ignore_base_config),
42
- Fig::Package::DEFAULT_CONFIG,
43
- nil
45
+ @synthetic_package_for_command_line, Fig::Package::DEFAULT_CONFIG, nil
44
46
  )
45
47
  rescue Fig::NoSuchPackageConfigError => exception
46
48
  make_no_such_package_exception_descriptive(exception)
@@ -311,146 +311,12 @@ module Fig
311
311
  r0
312
312
  end
313
313
 
314
- module AssetLocation0
315
- def location
316
- elements[0]
317
- end
318
-
319
- def ws
320
- elements[1]
321
- end
322
- end
323
-
324
- module AssetLocation1
325
- def location
326
- elements[1]
327
- end
328
-
329
- def ws
330
- elements[3]
331
- end
332
- end
333
-
334
- def _nt_asset_location
335
- start_index = index
336
- if node_cache[:asset_location].has_key?(index)
337
- cached = node_cache[:asset_location][index]
338
- if cached
339
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
340
- @index = cached.interval.end
341
- end
342
- return cached
343
- end
344
-
345
- i0 = index
346
- i1, s1 = index, []
347
- s2, i2 = [], index
348
- loop do
349
- if has_terminal?('\G[^@\'"<>|\\s]', true, index)
350
- r3 = true
351
- @index += 1
352
- else
353
- r3 = nil
354
- end
355
- if r3
356
- s2 << r3
357
- else
358
- break
359
- end
360
- end
361
- if s2.empty?
362
- @index = i2
363
- r2 = nil
364
- else
365
- r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
366
- end
367
- s1 << r2
368
- if r2
369
- r4 = _nt_ws
370
- s1 << r4
371
- end
372
- if s1.last
373
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
374
- r1.extend(AssetLocation0)
375
- else
376
- @index = i1
377
- r1 = nil
378
- end
379
- if r1
380
- r0 = r1
381
- else
382
- i5, s5 = index, []
383
- if has_terminal?('"', false, index)
384
- r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
385
- @index += 1
386
- else
387
- terminal_parse_failure('"')
388
- r6 = nil
389
- end
390
- s5 << r6
391
- if r6
392
- s7, i7 = [], index
393
- loop do
394
- if has_terminal?('\G[^@\'"<>|*?\\[\\]{}\\s]', true, index)
395
- r8 = true
396
- @index += 1
397
- else
398
- r8 = nil
399
- end
400
- if r8
401
- s7 << r8
402
- else
403
- break
404
- end
405
- end
406
- if s7.empty?
407
- @index = i7
408
- r7 = nil
409
- else
410
- r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
411
- end
412
- s5 << r7
413
- if r7
414
- if has_terminal?('"', false, index)
415
- r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
416
- @index += 1
417
- else
418
- terminal_parse_failure('"')
419
- r9 = nil
420
- end
421
- s5 << r9
422
- if r9
423
- r10 = _nt_ws
424
- s5 << r10
425
- end
426
- end
427
- end
428
- if s5.last
429
- r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
430
- r5.extend(AssetLocation1)
431
- else
432
- @index = i5
433
- r5 = nil
434
- end
435
- if r5
436
- r0 = r5
437
- else
438
- @index = i0
439
- r0 = nil
440
- end
441
- end
442
-
443
- node_cache[:asset_location][start_index] = r0
444
-
445
- r0
446
- end
447
-
448
314
  module Retrieve0
449
315
  def statement_start
450
316
  elements[0]
451
317
  end
452
318
 
453
- def var
319
+ def variable
454
320
  elements[2]
455
321
  end
456
322
 
@@ -462,7 +328,9 @@ module Fig
462
328
 
463
329
  module Retrieve1
464
330
  def to_package_statement(build_state)
465
- return build_state.new_retrieve_statement(statement_start, var, path)
331
+ return build_state.new_retrieve_statement(
332
+ statement_start, variable, path
333
+ )
466
334
  end
467
335
  end
468
336
 
@@ -554,43 +422,6 @@ module Fig
554
422
  r0
555
423
  end
556
424
 
557
- def _nt_retrieve_path
558
- start_index = index
559
- if node_cache[:retrieve_path].has_key?(index)
560
- cached = node_cache[:retrieve_path][index]
561
- if cached
562
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
563
- @index = cached.interval.end
564
- end
565
- return cached
566
- end
567
-
568
- s0, i0 = [], index
569
- loop do
570
- if has_terminal?('\G[a-zA-Z0-9_/.\\[\\]-]', true, index)
571
- r1 = true
572
- @index += 1
573
- else
574
- r1 = nil
575
- end
576
- if r1
577
- s0 << r1
578
- else
579
- break
580
- end
581
- end
582
- if s0.empty?
583
- @index = i0
584
- r0 = nil
585
- else
586
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
587
- end
588
-
589
- node_cache[:retrieve_path][start_index] = r0
590
-
591
- r0
592
- end
593
-
594
425
  module Config0
595
426
  def statement_start
596
427
  elements[0]
@@ -729,43 +560,6 @@ module Fig
729
560
  r0
730
561
  end
731
562
 
732
- def _nt_config_name
733
- start_index = index
734
- if node_cache[:config_name].has_key?(index)
735
- cached = node_cache[:config_name][index]
736
- if cached
737
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
738
- @index = cached.interval.end
739
- end
740
- return cached
741
- end
742
-
743
- s0, i0 = [], index
744
- loop do
745
- if has_terminal?('\G[a-zA-Z0-9_.-]', true, index)
746
- r1 = true
747
- @index += 1
748
- else
749
- r1 = nil
750
- end
751
- if r1
752
- s0 << r1
753
- else
754
- break
755
- end
756
- end
757
- if s0.empty?
758
- @index = i0
759
- r0 = nil
760
- else
761
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
762
- end
763
-
764
- node_cache[:config_name][start_index] = r0
765
-
766
- r0
767
- end
768
-
769
563
  def _nt_config_statement
770
564
  start_index = index
771
565
  if node_cache[:config_statement].has_key?(index)
@@ -997,43 +791,6 @@ module Fig
997
791
  r0
998
792
  end
999
793
 
1000
- def _nt_environment_variable_name
1001
- start_index = index
1002
- if node_cache[:environment_variable_name].has_key?(index)
1003
- cached = node_cache[:environment_variable_name][index]
1004
- if cached
1005
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1006
- @index = cached.interval.end
1007
- end
1008
- return cached
1009
- end
1010
-
1011
- s0, i0 = [], index
1012
- loop do
1013
- if has_terminal?('\G[a-zA-Z0-9_]', true, index)
1014
- r1 = true
1015
- @index += 1
1016
- else
1017
- r1 = nil
1018
- end
1019
- if r1
1020
- s0 << r1
1021
- else
1022
- break
1023
- end
1024
- end
1025
- if s0.empty?
1026
- @index = i0
1027
- r0 = nil
1028
- else
1029
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1030
- end
1031
-
1032
- node_cache[:environment_variable_name][start_index] = r0
1033
-
1034
- r0
1035
- end
1036
-
1037
794
  module Set0
1038
795
  def statement_start
1039
796
  elements[0]
@@ -1249,43 +1006,6 @@ module Fig
1249
1006
  r0
1250
1007
  end
1251
1008
 
1252
- def _nt_environment_variable_name_value
1253
- start_index = index
1254
- if node_cache[:environment_variable_name_value].has_key?(index)
1255
- cached = node_cache[:environment_variable_name_value][index]
1256
- if cached
1257
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1258
- @index = cached.interval.end
1259
- end
1260
- return cached
1261
- end
1262
-
1263
- s0, i0 = [], index
1264
- loop do
1265
- if has_terminal?('\G[\\S]', true, index)
1266
- r1 = true
1267
- @index += 1
1268
- else
1269
- r1 = nil
1270
- end
1271
- if r1
1272
- s0 << r1
1273
- else
1274
- break
1275
- end
1276
- end
1277
- if s0.empty?
1278
- @index = i0
1279
- r0 = nil
1280
- else
1281
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1282
- end
1283
-
1284
- node_cache[:environment_variable_name_value][start_index] = r0
1285
-
1286
- r0
1287
- end
1288
-
1289
1009
  module Command0
1290
1010
  def statement_start
1291
1011
  elements[0]
@@ -1299,7 +1019,7 @@ module Fig
1299
1019
 
1300
1020
  module Command1
1301
1021
  def to_config_statement(build_state)
1302
- return build_state.new_command_statement(
1022
+ return build_state.new_v0_command_statement(
1303
1023
  statement_start, command_line
1304
1024
  )
1305
1025
  end
@@ -1380,10 +1100,6 @@ module Fig
1380
1100
  end
1381
1101
 
1382
1102
  module CommandLine0
1383
- def value
1384
- elements[1]
1385
- end
1386
-
1387
1103
  end
1388
1104
 
1389
1105
  def _nt_command_line
@@ -1484,6 +1200,288 @@ module Fig
1484
1200
  r0
1485
1201
  end
1486
1202
 
1203
+ def _nt_config_name
1204
+ start_index = index
1205
+ if node_cache[:config_name].has_key?(index)
1206
+ cached = node_cache[:config_name][index]
1207
+ if cached
1208
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1209
+ @index = cached.interval.end
1210
+ end
1211
+ return cached
1212
+ end
1213
+
1214
+ s0, i0 = [], index
1215
+ loop do
1216
+ if has_terminal?('\G[a-zA-Z0-9_.-]', true, index)
1217
+ r1 = true
1218
+ @index += 1
1219
+ else
1220
+ r1 = nil
1221
+ end
1222
+ if r1
1223
+ s0 << r1
1224
+ else
1225
+ break
1226
+ end
1227
+ end
1228
+ if s0.empty?
1229
+ @index = i0
1230
+ r0 = nil
1231
+ else
1232
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1233
+ end
1234
+
1235
+ node_cache[:config_name][start_index] = r0
1236
+
1237
+ r0
1238
+ end
1239
+
1240
+ def _nt_environment_variable_name
1241
+ start_index = index
1242
+ if node_cache[:environment_variable_name].has_key?(index)
1243
+ cached = node_cache[:environment_variable_name][index]
1244
+ if cached
1245
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1246
+ @index = cached.interval.end
1247
+ end
1248
+ return cached
1249
+ end
1250
+
1251
+ s0, i0 = [], index
1252
+ loop do
1253
+ if has_terminal?('\G[a-zA-Z0-9_]', true, index)
1254
+ r1 = true
1255
+ @index += 1
1256
+ else
1257
+ r1 = nil
1258
+ end
1259
+ if r1
1260
+ s0 << r1
1261
+ else
1262
+ break
1263
+ end
1264
+ end
1265
+ if s0.empty?
1266
+ @index = i0
1267
+ r0 = nil
1268
+ else
1269
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1270
+ end
1271
+
1272
+ node_cache[:environment_variable_name][start_index] = r0
1273
+
1274
+ r0
1275
+ end
1276
+
1277
+ def _nt_environment_variable_name_value
1278
+ start_index = index
1279
+ if node_cache[:environment_variable_name_value].has_key?(index)
1280
+ cached = node_cache[:environment_variable_name_value][index]
1281
+ if cached
1282
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1283
+ @index = cached.interval.end
1284
+ end
1285
+ return cached
1286
+ end
1287
+
1288
+ s0, i0 = [], index
1289
+ loop do
1290
+ if has_terminal?('\G[\\S]', true, index)
1291
+ r1 = true
1292
+ @index += 1
1293
+ else
1294
+ r1 = nil
1295
+ end
1296
+ if r1
1297
+ s0 << r1
1298
+ else
1299
+ break
1300
+ end
1301
+ end
1302
+ if s0.empty?
1303
+ @index = i0
1304
+ r0 = nil
1305
+ else
1306
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1307
+ end
1308
+
1309
+ node_cache[:environment_variable_name_value][start_index] = r0
1310
+
1311
+ r0
1312
+ end
1313
+
1314
+ module AssetLocation0
1315
+ def location
1316
+ elements[0]
1317
+ end
1318
+
1319
+ def ws
1320
+ elements[1]
1321
+ end
1322
+ end
1323
+
1324
+ module AssetLocation1
1325
+ def location
1326
+ elements[1]
1327
+ end
1328
+
1329
+ def ws
1330
+ elements[3]
1331
+ end
1332
+ end
1333
+
1334
+ def _nt_asset_location
1335
+ start_index = index
1336
+ if node_cache[:asset_location].has_key?(index)
1337
+ cached = node_cache[:asset_location][index]
1338
+ if cached
1339
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1340
+ @index = cached.interval.end
1341
+ end
1342
+ return cached
1343
+ end
1344
+
1345
+ i0 = index
1346
+ i1, s1 = index, []
1347
+ s2, i2 = [], index
1348
+ loop do
1349
+ if has_terminal?('\G[^@\'"<>|\\s]', true, index)
1350
+ r3 = true
1351
+ @index += 1
1352
+ else
1353
+ r3 = nil
1354
+ end
1355
+ if r3
1356
+ s2 << r3
1357
+ else
1358
+ break
1359
+ end
1360
+ end
1361
+ if s2.empty?
1362
+ @index = i2
1363
+ r2 = nil
1364
+ else
1365
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1366
+ end
1367
+ s1 << r2
1368
+ if r2
1369
+ r4 = _nt_ws
1370
+ s1 << r4
1371
+ end
1372
+ if s1.last
1373
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1374
+ r1.extend(AssetLocation0)
1375
+ else
1376
+ @index = i1
1377
+ r1 = nil
1378
+ end
1379
+ if r1
1380
+ r0 = r1
1381
+ else
1382
+ i5, s5 = index, []
1383
+ if has_terminal?('"', false, index)
1384
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
1385
+ @index += 1
1386
+ else
1387
+ terminal_parse_failure('"')
1388
+ r6 = nil
1389
+ end
1390
+ s5 << r6
1391
+ if r6
1392
+ s7, i7 = [], index
1393
+ loop do
1394
+ if has_terminal?('\G[^@\'"<>|*?\\[\\]{}\\s]', true, index)
1395
+ r8 = true
1396
+ @index += 1
1397
+ else
1398
+ r8 = nil
1399
+ end
1400
+ if r8
1401
+ s7 << r8
1402
+ else
1403
+ break
1404
+ end
1405
+ end
1406
+ if s7.empty?
1407
+ @index = i7
1408
+ r7 = nil
1409
+ else
1410
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
1411
+ end
1412
+ s5 << r7
1413
+ if r7
1414
+ if has_terminal?('"', false, index)
1415
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
1416
+ @index += 1
1417
+ else
1418
+ terminal_parse_failure('"')
1419
+ r9 = nil
1420
+ end
1421
+ s5 << r9
1422
+ if r9
1423
+ r10 = _nt_ws
1424
+ s5 << r10
1425
+ end
1426
+ end
1427
+ end
1428
+ if s5.last
1429
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1430
+ r5.extend(AssetLocation1)
1431
+ else
1432
+ @index = i5
1433
+ r5 = nil
1434
+ end
1435
+ if r5
1436
+ r0 = r5
1437
+ else
1438
+ @index = i0
1439
+ r0 = nil
1440
+ end
1441
+ end
1442
+
1443
+ node_cache[:asset_location][start_index] = r0
1444
+
1445
+ r0
1446
+ end
1447
+
1448
+ def _nt_retrieve_path
1449
+ start_index = index
1450
+ if node_cache[:retrieve_path].has_key?(index)
1451
+ cached = node_cache[:retrieve_path][index]
1452
+ if cached
1453
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1454
+ @index = cached.interval.end
1455
+ end
1456
+ return cached
1457
+ end
1458
+
1459
+ s0, i0 = [], index
1460
+ loop do
1461
+ if has_terminal?('\G[a-zA-Z0-9_/.\\[\\]-]', true, index)
1462
+ r1 = true
1463
+ @index += 1
1464
+ else
1465
+ r1 = nil
1466
+ end
1467
+ if r1
1468
+ s0 << r1
1469
+ else
1470
+ break
1471
+ end
1472
+ end
1473
+ if s0.empty?
1474
+ @index = i0
1475
+ r0 = nil
1476
+ else
1477
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1478
+ end
1479
+
1480
+ node_cache[:retrieve_path][start_index] = r0
1481
+
1482
+ r0
1483
+ end
1484
+
1487
1485
  end
1488
1486
 
1489
1487
  class V0Parser < Treetop::Runtime::CompiledParser