Skip to content

Commit 11c8648

Browse files
authored
Keep necessary quotes around private constants (#14)
* add back quotes when package.yml line begins with - ::
1 parent 0d58471 commit 11c8648

File tree

2 files changed

+76
-32
lines changed

2 files changed

+76
-32
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[package]
44
name = "pks"
5-
version = "0.2.22"
5+
version = "0.2.23"
66
edition = "2021"
77
description = "Welcome! Please see https://github.com/rubyatscale/pks for more information!"
88
license = "MIT"

src/packs/pack.rs

Lines changed: 75 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use std::{
88

99
use anyhow::Context;
1010
use core::hash::Hash;
11+
use regex::Regex;
1112
use serde::{Deserialize, Deserializer, Serialize, Serializer};
1213
use serde_yaml::Value;
1314

@@ -395,17 +396,26 @@ fn is_default_public_folder(value: &Option<PathBuf>) -> bool {
395396
}
396397
}
397398

398-
pub fn serialize_pack(pack: &Pack) -> String {
399+
pub fn serialize_pack(pack: &Pack) -> anyhow::Result<String> {
399400
let serialized_pack = serde_yaml::to_string(&pack).unwrap();
400401
if serialized_pack == "{}\n" {
401-
"".to_owned()
402+
Ok("".to_owned())
402403
} else {
403-
serialized_pack
404+
add_back_necessary_quotes(serialized_pack)
404405
}
405406
}
406407

408+
// serde_yaml doesn't add quotes around all constants, which isn't a problem
409+
//unless the constant starts with ::
410+
fn add_back_necessary_quotes(
411+
serialized_pack: String,
412+
) -> anyhow::Result<String> {
413+
let re = Regex::new("- (::.+)")?;
414+
Ok(re.replace_all(&serialized_pack, "- \"$1\"").to_string())
415+
}
416+
407417
pub fn write_pack_to_disk(pack: &Pack) -> anyhow::Result<()> {
408-
let serialized_pack = serialize_pack(pack);
418+
let serialized_pack = serialize_pack(pack)?;
409419
let pack_dir = pack.yml.parent().ok_or_else(|| {
410420
anyhow::Error::new(std::io::Error::new(
411421
std::io::ErrorKind::NotFound,
@@ -469,13 +479,13 @@ mod tests {
469479
use super::*;
470480
use pretty_assertions::assert_eq;
471481

472-
fn reserialize_pack(pack_yml: &str) -> String {
482+
fn reserialize_pack(pack_yml: &str) -> anyhow::Result<String> {
473483
let deserialized_pack = serde_yaml::from_str::<Pack>(pack_yml).unwrap();
474484
serialize_pack(&deserialized_pack)
475485
}
476486

477487
#[test]
478-
fn test_serde_sorted_dependencies() {
488+
fn test_serde_sorted_dependencies() -> anyhow::Result<()> {
479489
let pack_yml = r#"
480490
# some comment
481491
dependencies:
@@ -484,7 +494,7 @@ dependencies:
484494
- packs/b
485495
"#;
486496

487-
let actual = reserialize_pack(pack_yml);
497+
let actual = reserialize_pack(pack_yml)?;
488498

489499
let expected = r#"
490500
dependencies:
@@ -494,11 +504,12 @@ dependencies:
494504
"#
495505
.trim_start();
496506

497-
assert_eq!(expected, actual)
507+
assert_eq!(expected, actual);
508+
Ok(())
498509
}
499510

500511
#[test]
501-
fn test_serde_with_enforcements() {
512+
fn test_serde_with_enforcements() -> anyhow::Result<()> {
502513
let pack_yml = r#"
503514
# some comment
504515
enforce_privacy: true
@@ -510,7 +521,7 @@ dependencies:
510521
foobar: true
511522
"#;
512523

513-
let actual = reserialize_pack(pack_yml);
524+
let actual = reserialize_pack(pack_yml)?;
514525

515526
let expected = r#"
516527
enforce_privacy: true
@@ -523,11 +534,12 @@ foobar: true
523534
"#
524535
.trim_start();
525536

526-
assert_eq!(expected, actual)
537+
assert_eq!(expected, actual);
538+
Ok(())
527539
}
528540

529541
#[test]
530-
fn test_serde_with_arbitrary_client_keys() {
542+
fn test_serde_with_arbitrary_client_keys() -> anyhow::Result<()> {
531543
let pack_yml = r#"
532544
# some comment
533545
dependencies:
@@ -537,7 +549,7 @@ dependencies:
537549
foobar: true
538550
"#;
539551

540-
let actual = reserialize_pack(pack_yml);
552+
let actual = reserialize_pack(pack_yml)?;
541553

542554
let expected = r#"
543555
dependencies:
@@ -548,11 +560,12 @@ foobar: true
548560
"#
549561
.trim_start();
550562

551-
assert_eq!(expected, actual)
563+
assert_eq!(expected, actual);
564+
Ok(())
552565
}
553566

554567
#[test]
555-
fn test_serde_with_duplicate_dependencies() {
568+
fn test_serde_with_duplicate_dependencies() -> anyhow::Result<()> {
556569
let pack_yml = r#"
557570
dependencies:
558571
- packs/a
@@ -562,7 +575,7 @@ dependencies:
562575
- packs/a
563576
"#;
564577

565-
let actual = reserialize_pack(pack_yml);
578+
let actual = reserialize_pack(pack_yml)?;
566579

567580
let expected = r#"
568581
dependencies:
@@ -571,19 +584,20 @@ dependencies:
571584
"#
572585
.trim_start();
573586

574-
assert_eq!(expected, actual)
587+
assert_eq!(expected, actual);
588+
Ok(())
575589
}
576590

577591
#[test]
578-
fn test_serde_with_explicitly_empty_visible() {
592+
fn test_serde_with_explicitly_empty_visible() -> anyhow::Result<()> {
579593
let pack_yml = r#"
580594
visible_to:
581595
- packs/c
582596
- packs/a
583597
- packs/b
584598
"#;
585599

586-
let actual = reserialize_pack(pack_yml);
600+
let actual = reserialize_pack(pack_yml)?;
587601

588602
let expected = r#"
589603
visible_to:
@@ -593,18 +607,19 @@ visible_to:
593607
"#
594608
.trim_start();
595609

596-
assert_eq!(expected, actual)
610+
assert_eq!(expected, actual);
611+
Ok(())
597612
}
598613

599614
#[test]
600-
fn test_serde_with_metadata() {
615+
fn test_serde_with_metadata() -> anyhow::Result<()> {
601616
let pack_yml = r#"
602617
enforce_dependencies: false
603618
metadata:
604619
foobar: true
605620
"#;
606621

607-
let actual = reserialize_pack(pack_yml);
622+
let actual = reserialize_pack(pack_yml)?;
608623

609624
let expected = r#"
610625
enforce_dependencies: false
@@ -613,29 +628,31 @@ metadata:
613628
"#
614629
.trim_start();
615630

616-
assert_eq!(expected, actual)
631+
assert_eq!(expected, actual);
632+
Ok(())
617633
}
618634

619635
#[test]
620-
fn test_serde_with_owner() {
636+
fn test_serde_with_owner() -> anyhow::Result<()> {
621637
let pack_yml = r#"
622638
owner: Foobar
623639
enforce_dependencies: true
624640
"#;
625641

626-
let actual = reserialize_pack(pack_yml);
642+
let actual = reserialize_pack(pack_yml)?;
627643

628644
let expected = r#"
629645
owner: Foobar
630646
enforce_dependencies: true
631647
"#
632648
.trim_start();
633649

634-
assert_eq!(expected, actual)
650+
assert_eq!(expected, actual);
651+
Ok(())
635652
}
636653

637654
#[test]
638-
fn test_serde_with_enforcement_globs() {
655+
fn test_serde_with_enforcement_globs() -> anyhow::Result<()> {
639656
let pack_yml = r#"
640657
enforcement_globs_ignore:
641658
- enforcements:
@@ -682,7 +699,7 @@ enforcement_globs_ignore:
682699
]
683700
);
684701

685-
let reserialized = reserialize_pack(pack_yml);
702+
let reserialized = reserialize_pack(pack_yml)?;
686703
let re_pack: Result<Pack, _> = serde_yaml::from_str(&reserialized);
687704
let re_pack = re_pack.unwrap();
688705
assert_eq!(pack, re_pack);
@@ -697,17 +714,19 @@ enforcement_globs_ignore:
697714
})
698715
);
699716
assert_eq!(pack.ignores_for_enforcement("nope"), None);
717+
Ok(())
700718
}
701719

702720
#[test]
703-
fn test_serde_with_empty_pack() {
721+
fn test_serde_with_empty_pack() -> anyhow::Result<()> {
704722
let pack_yml = r#""#;
705723

706-
let actual = reserialize_pack(pack_yml);
724+
let actual = reserialize_pack(pack_yml)?;
707725

708726
let expected = r#""#.trim_start();
709727

710-
assert_eq!(expected, actual)
728+
assert_eq!(expected, actual);
729+
Ok(())
711730
}
712731

713732
#[test]
@@ -723,6 +742,31 @@ enforcement_globs_ignore:
723742
assert_eq!(expected, actual)
724743
}
725744

745+
#[test]
746+
fn test_serde_with_necessary_quotes_in_ignored_private_constants(
747+
) -> anyhow::Result<()> {
748+
let pack_yml = r#"
749+
ignored_private_constants:
750+
- "::Necessary::Quotes::Constant"
751+
- "Unnecessary::Quotes::Constant"
752+
- "::Another::Necessary::Last::Necessary::Constant"
753+
- "::Necessary"
754+
"#;
755+
756+
let actual = reserialize_pack(pack_yml)?;
757+
let expected = r#"
758+
ignored_private_constants:
759+
- "::Another::Necessary::Last::Necessary::Constant"
760+
- "::Necessary"
761+
- "::Necessary::Quotes::Constant"
762+
- Unnecessary::Quotes::Constant
763+
"#
764+
.trim_start();
765+
766+
assert_eq!(expected, actual);
767+
Ok(())
768+
}
769+
726770
#[test]
727771
fn test_all_recorded_violations() -> anyhow::Result<()> {
728772
let root = test_util::get_absolute_root(

0 commit comments

Comments
 (0)