ruby_inflector/case/
screaming_snake.rs

1use crate::case::*;
2/// Converts a `&str` to `SCREAMING_SNAKE_CASE` `String`
3///
4/// ```
5/// use ruby_inflector::case::to_screaming_snake_case;
6///
7/// assert_eq!(to_screaming_snake_case("foo_bar"), "FOO_BAR");
8/// assert_eq!(to_screaming_snake_case("HTTP Foo bar"), "HTTP_FOO_BAR");
9/// assert_eq!(to_screaming_snake_case("Foo bar"), "FOO_BAR");
10/// assert_eq!(to_screaming_snake_case("Foo Bar"), "FOO_BAR");
11/// assert_eq!(to_screaming_snake_case("FooBar"), "FOO_BAR");
12/// assert_eq!(to_screaming_snake_case("fooBar"), "FOO_BAR");
13/// assert_eq!(to_screaming_snake_case("fooBar3"), "FOO_BAR_3");
14/// ```
15pub fn to_screaming_snake_case(non_snake_case_string: &str) -> String {
16    to_case_snake_like(non_snake_case_string, "_", "upper")
17}
18
19/// Determines of a `&str` is `SCREAMING_SNAKE_CASE`
20///
21/// ```
22/// use ruby_inflector::case::is_screaming_snake_case;
23///
24/// assert!(is_screaming_snake_case("FOO_BAR_STRING_THAT_IS_REALLY_REALLY_LONG"));
25/// assert!(is_screaming_snake_case("FOO_BAR1_STRING_THAT_IS_REALLY_REALLY_LONG"));
26/// assert!(is_screaming_snake_case("FOO_BAR_1_STRING_THAT_IS_REALLY_REALLY_LONG"));
27///
28/// assert!(!is_screaming_snake_case("Foo bar string that is really really long"));
29/// assert!(!is_screaming_snake_case("foo-bar-string-that-is-really-really-long"));
30/// assert!(!is_screaming_snake_case("FooBarIsAReallyReallyLongString"));
31/// assert!(!is_screaming_snake_case("Foo Bar Is A Really Really Long String"));
32/// assert!(!is_screaming_snake_case("fooBarIsAReallyReallyLongString"));
33/// ```
34pub fn is_screaming_snake_case(test_string: &str) -> bool {
35    test_string == to_screaming_snake_case(test_string)
36}
37
38#[cfg(all(feature = "unstable", test))]
39mod benchmarks {
40    extern crate test;
41    use self::test::Bencher;
42
43    #[bench]
44    fn bench_screaming_snake(b: &mut Bencher) {
45        b.iter(|| super::to_screaming_snake_case("Foo bar"));
46    }
47
48    #[bench]
49    fn bench_is_screaming_snake(b: &mut Bencher) {
50        b.iter(|| super::is_screaming_snake_case("Foo bar"));
51    }
52}
53
54#[cfg(test)]
55mod tests {
56    use super::is_screaming_snake_case;
57    use super::to_screaming_snake_case;
58
59    #[test]
60    fn from_camel_case() {
61        let convertable_string: String = "fooBar".to_owned();
62        let expected: String = "FOO_BAR".to_owned();
63        assert_eq!(to_screaming_snake_case(&convertable_string), expected)
64    }
65
66    #[test]
67    fn from_pascal_case() {
68        let convertable_string: String = "FooBar".to_owned();
69        let expected: String = "FOO_BAR".to_owned();
70        assert_eq!(to_screaming_snake_case(&convertable_string), expected)
71    }
72
73    #[test]
74    fn from_kebab_case() {
75        let convertable_string: String = "foo-bar".to_owned();
76        let expected: String = "FOO_BAR".to_owned();
77        assert_eq!(to_screaming_snake_case(&convertable_string), expected)
78    }
79
80    #[test]
81    fn from_sentence_case() {
82        let convertable_string: String = "Foo bar".to_owned();
83        let expected: String = "FOO_BAR".to_owned();
84        assert_eq!(to_screaming_snake_case(&convertable_string), expected)
85    }
86
87    #[test]
88    fn from_title_case() {
89        let convertable_string: String = "Foo Bar".to_owned();
90        let expected: String = "FOO_BAR".to_owned();
91        assert_eq!(to_screaming_snake_case(&convertable_string), expected)
92    }
93
94    #[test]
95    fn from_train_case() {
96        let convertable_string: String = "Foo-Bar".to_owned();
97        let expected: String = "FOO_BAR".to_owned();
98        assert_eq!(to_screaming_snake_case(&convertable_string), expected)
99    }
100
101    #[test]
102    fn from_screaming_screaming_snake_case() {
103        let convertable_string: String = "FOO_BAR".to_owned();
104        let expected: String = "FOO_BAR".to_owned();
105        assert_eq!(to_screaming_snake_case(&convertable_string), expected)
106    }
107
108    #[test]
109    fn from_snake_case() {
110        let convertable_string: String = "foo_bar".to_owned();
111        let expected: String = "FOO_BAR".to_owned();
112        assert_eq!(to_screaming_snake_case(&convertable_string), expected)
113    }
114
115    #[test]
116    fn is_correct_from_camel_case() {
117        let convertable_string: String = "fooBar".to_owned();
118        assert!(!is_screaming_snake_case(&convertable_string))
119    }
120
121    #[test]
122    fn is_correct_from_pascal_case() {
123        let convertable_string: String = "FooBar".to_owned();
124        assert!(!is_screaming_snake_case(&convertable_string))
125    }
126
127    #[test]
128    fn is_correct_from_kebab_case() {
129        let convertable_string: String = "foo-bar".to_owned();
130        assert!(!is_screaming_snake_case(&convertable_string))
131    }
132
133    #[test]
134    fn is_correct_from_sentence_case() {
135        let convertable_string: String = "Foo bar".to_owned();
136        assert!(!is_screaming_snake_case(&convertable_string))
137    }
138
139    #[test]
140    fn is_correct_from_title_case() {
141        let convertable_string: String = "Foo Bar".to_owned();
142        assert!(!is_screaming_snake_case(&convertable_string))
143    }
144
145    #[test]
146    fn is_correct_from_train_case() {
147        let convertable_string: String = "Foo-Bar".to_owned();
148        assert!(!is_screaming_snake_case(&convertable_string))
149    }
150
151    #[test]
152    fn is_correct_from_screaming_screaming_snake_case() {
153        let convertable_string: String = "FOO_BAR".to_owned();
154        assert!(is_screaming_snake_case(&convertable_string))
155    }
156
157    #[test]
158    fn is_correct_from_snake_case() {
159        let convertable_string: String = "foo_bar".to_owned();
160        assert!(!is_screaming_snake_case(&convertable_string))
161    }
162}