srl_ruby 0.3.1 → 0.3.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 808f335172ddb8259c8f7c7d5ed0207936c6f7ad
4
- data.tar.gz: cd7bfcabd76599a570997cf9032d2522d346f038
3
+ metadata.gz: 192758cce667147a6b7369cf6d575aa7fb22b627
4
+ data.tar.gz: 3f851cdb8557bc8baba910ded6e4e0433851fa6a
5
5
  SHA512:
6
- metadata.gz: 3db09d707e1496ed2711a903d5f655aca233fd695804a4ba6787fa8e067bb190efb9c770e9ee0e685ed6282f9956c8e23c30cedf4f3dca7a428c99e53e165c23
7
- data.tar.gz: 02f3eb69d6cbc700e2d4f22ebe9d3e2c96892e150258aa9984af3102fde44a98cc2ebb4ab5025acdd6f961f1614cc75bf5e964d28e42263a6ca3b84b9df99b10
6
+ metadata.gz: d88c26d001764e3b224e9e6f2346791300624d348d825098bf1fedd658bcb3b66234c868144d83d6a8f6a02740dc36805cd765417af16f44ed6f4e6698ac647f
7
+ data.tar.gz: ced3406cfd86aed12bb5ca64ec7917cb9f3fdcbf20b29027c993b6e1402d793b2a5d5b9907c4de75cc293e04148f037208d232b7e7ed373b11d1d958a7e4f025
data/CHANGELOG.md CHANGED
@@ -1,4 +1,10 @@
1
- ## [0.3.1] - 2018-04-04
1
+ ## [0.3.2] - 2018-04-13
2
+ ### Added
3
+ - `Cucumber` feature files are now part of the gem.
4
+ - Added `floatingpoint.feature` as test and demo for validating flating point numbers
5
+
6
+
7
+ ## [0.3.1] - 2018-04-12
2
8
  ### Added
3
9
  - Added `Cucumber` feature files both for additional testing and demo purposes.
4
10
  Almost all examples from SRL websites are "featured".
data/cucumber.yml ADDED
@@ -0,0 +1,4 @@
1
+ default: --strict -v -b --format progress features
2
+
3
+
4
+
@@ -0,0 +1,61 @@
1
+ Feature: Defining anchors as patterns
2
+ As a shy Rubyist,
3
+ I want to use basic SRL anchors patterns
4
+ So that I can use them when crafting my regular expressions
5
+
6
+
7
+ Scenario: defining a begin anchor as pattern
8
+ When I define the following SRL expression:
9
+ """
10
+ begin with uppercase letter,
11
+ digit
12
+ """
13
+ Then I expect the generated regular expression to be "^[A-Z]\d"
14
+ Then I expect matching for:
15
+ | "R2" |
16
+ | "A10" |
17
+
18
+ And I expect no match for:
19
+ | " R2 " |
20
+ | "r2 " |
21
+ | "%[_]" |
22
+ | "?;!" |
23
+ | "SRL" |
24
+ | "123" |
25
+
26
+
27
+ Scenario: defining a begin anchor as pattern (alternative syntax)
28
+ When I define the following SRL expression:
29
+ """
30
+ starts with uppercase letter,
31
+ digit
32
+ """
33
+ Then I expect the generated regular expression to be "^[A-Z]\d"
34
+ Then I expect matching for:
35
+ | "R2" |
36
+ | "A10" |
37
+
38
+ And I expect no match for:
39
+ | " R2 " |
40
+ | "r2 " |
41
+
42
+
43
+ Scenario: defining an end anchor as pattern
44
+ When I define the following SRL expression:
45
+ """
46
+ uppercase letter,
47
+ digit,
48
+ must end
49
+ """
50
+ Then I expect the generated regular expression to be "[A-Z]\d$"
51
+ Then I expect matching for:
52
+ | "r2-D2" |
53
+ | "! B1" |
54
+
55
+ And I expect no match for:
56
+ | " R2 " |
57
+ | " r2" |
58
+ | "%[_]" |
59
+ | "?;!" |
60
+ | "SRL" |
61
+ | "123" |
@@ -0,0 +1,44 @@
1
+ Feature: Defining basic character patterns
2
+ As a shy Rubyist,
3
+ I want to use basic SRL character patterns
4
+ So that I can use them when crafting my regular expressions
5
+
6
+ # Reminder: in SRL, a character is either:
7
+ # a small letter [a-z]
8
+ # a capital letter [A-Z]
9
+ # a digit [0-9]
10
+ # an underscore '_'
11
+ Scenario: defining any character as pattern
12
+ When I define the following SRL expression:
13
+ """
14
+ any character,
15
+ any character
16
+ """
17
+ Then I expect the generated regular expression to be "\w\w"
18
+ Then I expect matching for:
19
+ | "srl" |
20
+ | "SRL" |
21
+ | "123" |
22
+ | " (red} " |
23
+ | "r_!" |
24
+ And I expect no match for:
25
+ | "B" |
26
+ | "%[_]"|
27
+ | "?;!" |
28
+
29
+
30
+ Scenario: defining any non-character as pattern
31
+ When I define the following SRL expression:
32
+ """
33
+ no character
34
+ """
35
+ Then I expect the generated regular expression to be "\W"
36
+ Then I expect matching for:
37
+ | "{}" |
38
+ | " (red} " |
39
+ | "r_!" |
40
+ And I expect no match for:
41
+ | "srl" |
42
+ | "SRL" |
43
+ | "123" |
44
+
@@ -0,0 +1,94 @@
1
+ Feature: Defining digit letter patterns
2
+ As a shy Rubyist,
3
+ I want to use basic SRL digit patterns
4
+ So that I can use them when crafting my regular expressions
5
+
6
+
7
+ Scenario: defining any single digit as pattern
8
+ When I define the following SRL expression:
9
+ """
10
+ digit
11
+ """
12
+ Then I expect the generated regular expression to be "\d"
13
+ Then I expect matching for:
14
+ | "123" |
15
+ | "THX1138" |
16
+ | " >red7: "|
17
+ And I expect no match for:
18
+ | "one" |
19
+ | "?;!" |
20
+
21
+
22
+ Scenario: using alternative syntax for any single digit
23
+ When I define the following SRL expression:
24
+ """
25
+ number
26
+ """
27
+ Then I expect the generated regular expression to be "\d"
28
+ Then I expect matching for:
29
+ | "123" |
30
+ | "THX1138" |
31
+ | " >red7: "|
32
+ And I expect no match for:
33
+ | "one" |
34
+ | "?;!" |
35
+
36
+
37
+ Scenario: defining a negated digit pattern
38
+ When I define the following SRL expression:
39
+ """
40
+ no digit
41
+ """
42
+ Then I expect the generated regular expression to be "\D"
43
+ Then I expect matching for:
44
+ | "a" |
45
+ | "two" |
46
+ | "B1" |
47
+ | " 1" |
48
+ And I expect no match for:
49
+ | "129" |
50
+
51
+
52
+ Scenario: defining any single digit from a given range as pattern
53
+ When I define the following SRL expression:
54
+ """
55
+ digit from 3 to 8
56
+ """
57
+ Then I expect the generated regular expression to be "[3-8]"
58
+ Then I expect matching for:
59
+ | "4" |
60
+ | "124" |
61
+ | "B52" |
62
+ And I expect no match for:
63
+ | "129" |
64
+ | "five"|
65
+
66
+
67
+ Scenario: using alternative syntax for any single digit from a given range
68
+ When I define the following SRL expression:
69
+ """
70
+ number from 3 to 8
71
+ """
72
+ Then I expect the generated regular expression to be "[3-8]"
73
+ Then I expect matching for:
74
+ | "4" |
75
+ | "124" |
76
+ | "B52" |
77
+ And I expect no match for:
78
+ | "129" |
79
+ | "five"|
80
+
81
+
82
+ Scenario: defining any single digit from a given scrambled range
83
+ When I define the following SRL expression:
84
+ """
85
+ digit from 8 to 3
86
+ """
87
+ Then I expect the generated regular expression to be "[3-8]"
88
+ Then I expect matching for:
89
+ | "4" |
90
+ | "124" |
91
+ | "B52" |
92
+ And I expect no match for:
93
+ | "129" |
94
+ | "five"|
@@ -0,0 +1,86 @@
1
+ Feature: Defining basic letter patterns
2
+ As a shy Rubyist,
3
+ I want to use basic SRL letter patterns
4
+ So that I can use them when crafting my regular expressions
5
+
6
+
7
+ Scenario: defining any small letter as pattern
8
+ When I define the following SRL expression:
9
+ """
10
+ letter,
11
+ letter
12
+ """
13
+ Then I expect the generated regular expression to be "[a-z][a-z]"
14
+ Then I expect matching for:
15
+ | "srl" |
16
+ | "99 km" |
17
+ | " >red: " |
18
+ And I expect no match for:
19
+ | "123" |
20
+ | "ABC" |
21
+ | "f1" |
22
+ | "?;!" |
23
+
24
+
25
+ Scenario: defining one small letter from a given range as pattern
26
+ When I define the following SRL expression:
27
+ """
28
+ letter from a to f
29
+ """
30
+ Then I expect the generated regular expression to be "[a-f]"
31
+ Then I expect matching for:
32
+ | "b1" |
33
+ | "red" |
34
+ |" 12 cm"|
35
+ And I expect no match for:
36
+ | "123" |
37
+ | "z" |
38
+ | "12g3"|
39
+
40
+
41
+ Scenario: defining any capital letter as pattern
42
+ When I define the following SRL expression:
43
+ """
44
+ uppercase letter
45
+ """
46
+ Then I expect the generated regular expression to be "[A-Z]"
47
+ Then I expect matching for:
48
+ | "Ruby" |
49
+ | "99 Km" |
50
+ | " >OFF: " |
51
+ And I expect no match for:
52
+ | "123" |
53
+ | "abc" |
54
+ | "?;!" |
55
+
56
+
57
+ Scenario: defining one capital letter from a given range as pattern
58
+ When I define the following SRL expression:
59
+ """
60
+ uppercase letter from X to Z
61
+ """
62
+ Then I expect the generated regular expression to be "[X-Z]"
63
+ Then I expect matching for:
64
+ | "Yes" |
65
+ | ">Zulu" |
66
+ |" 123 wHY"|
67
+ And I expect no match for:
68
+ | "yES" |
69
+ | "123" |
70
+ | "12f3"|
71
+
72
+
73
+ Scenario: defining one small letter from a scrambled range as pattern
74
+ When I define the following SRL expression:
75
+ """
76
+ letter from d to a
77
+ """
78
+ Then I expect the generated regular expression to be "[a-d]"
79
+ Then I expect matching for:
80
+ | "b1" |
81
+ And I expect no match for:
82
+ | "123" |
83
+
84
+
85
+
86
+
@@ -0,0 +1,58 @@
1
+ Feature: Defining literal strings as patterns
2
+ As a shy Rubyist,
3
+ I want to use basic SRL literal strings patterns
4
+ So that I can use them when crafting my regular expressions
5
+
6
+
7
+ Scenario: defining a literal string as pattern
8
+ When I define the following SRL expression:
9
+ """
10
+ literally "aba"
11
+ """
12
+ Then I expect the generated regular expression to be "aba"
13
+ Then I expect matching for:
14
+ | "nabab " |
15
+ | "alibaba" |
16
+ | "<abakka>" |
17
+
18
+ And I expect no match for:
19
+ | "a ba"|
20
+ | "%[_]"|
21
+ | "?;!" |
22
+ | "srl" |
23
+ | "SRL" |
24
+ | "123" |
25
+
26
+
27
+ Scenario: defining a character from a set as pattern
28
+ When I define the following SRL expression:
29
+ """
30
+ one of "13579"
31
+ """
32
+ Then I expect the generated regular expression to be "[13579]"
33
+ Then I expect matching for:
34
+ | "NCC-1701-A" |
35
+ | "even24685" |
36
+
37
+ And I expect no match for:
38
+ | "a ba"|
39
+ | "%[_]"|
40
+ | "?;!" |
41
+ | "srl" |
42
+ | "SRL" |
43
+ | "246" |
44
+
45
+
46
+ Scenario: defining a character not from a given set
47
+ When I define the following SRL expression:
48
+ """
49
+ none of "13579"
50
+ """
51
+ Then I expect the generated regular expression to be "[^13579]"
52
+ Then I expect matching for:
53
+ | "42" |
54
+ | "text" |
55
+ | "%[_]?" |
56
+
57
+ And I expect no match for:
58
+ | "13" |
@@ -0,0 +1,180 @@
1
+ Feature: Defining quntifiers for patterns
2
+ As a shy Rubyist,
3
+ I want to use quantifiers for patterns
4
+ So that I can use them when crafting my regular expressions
5
+
6
+
7
+ Scenario: Repeat a pattern an exact number of times
8
+ When I define the following SRL expression:
9
+ """
10
+ (uppercase letter,
11
+ digit) exactly 2 times
12
+ """
13
+ Then I expect the generated regular expression to be "(?:[A-Z]\d){2}"
14
+ Then I expect matching for:
15
+ | "R2D2" |
16
+
17
+ And I expect no match for:
18
+ | "r2D2"|
19
+ | "%[_]"|
20
+ | "?;!" |
21
+ | "SRL" |
22
+ | "123" |
23
+
24
+
25
+ Scenario: Repeat a pattern a number from range
26
+ When I define the following SRL expression:
27
+ """
28
+ begin with
29
+ (uppercase letter,
30
+ digit) between 2 and 4 times
31
+ must end
32
+ """
33
+ Then I expect the generated regular expression to be "^(?:[A-Z]\d){2,4}$"
34
+ Then I expect matching for:
35
+ | "R2D2" |
36
+ | "A1B2C3" |
37
+ | "A1B2C3D4" |
38
+
39
+ And I expect no match for:
40
+ | "R2" |
41
+ | "R2d2" |
42
+ | "A1B2C3D4E5" |
43
+ | "%[_]" |
44
+ | "?;!" |
45
+ | "SRL" |
46
+ | "123" |
47
+
48
+
49
+ Scenario: Repeat a pattern a number from range (without 'times' keyword)
50
+ When I define the following SRL expression:
51
+ """
52
+ begin with
53
+ (uppercase letter,
54
+ digit) between 2 and 4
55
+ must end
56
+ """
57
+ Then I expect the generated regular expression to be "^(?:[A-Z]\d){2,4}$"
58
+ Then I expect matching for:
59
+ | "R2D2" |
60
+ | "A1B2C3" |
61
+ | "A1B2C3D4" |
62
+
63
+ And I expect no match for:
64
+ | "R2" |
65
+ | "R2d2" |
66
+ | "A1B2C3D4E5" |
67
+ | "%[_]" |
68
+ | "?;!" |
69
+ | "SRL" |
70
+ | "123" |
71
+
72
+
73
+ Scenario: Repeat a pattern zero or one times
74
+ When I define the following SRL expression:
75
+ """
76
+ begin with one of "+-" optional,
77
+ digit
78
+ """
79
+ Then I expect the generated regular expression to be "^[+\-]?\d"
80
+ Then I expect matching for:
81
+ | "42 " |
82
+ | "+42 " |
83
+ | "-42 " |
84
+ | "99 bottles" |
85
+
86
+ And I expect no match for:
87
+ | "R2" |
88
+ | "++42" |
89
+
90
+
91
+ Scenario: Repeat a pattern zero or more times
92
+ When I define the following SRL expression:
93
+ """
94
+ begin with one of "+-" optional,
95
+ digit never or more,
96
+ letter
97
+ """
98
+ Then I expect the generated regular expression to be "^[+\-]?\d*[a-z]"
99
+ Then I expect matching for:
100
+ | "42cm " |
101
+ | "+42cm " |
102
+ | "-42cm " |
103
+ | "50cents" |
104
+ | "cents" |
105
+ | "-cents" |
106
+
107
+ And I expect no match for:
108
+ | "++42" |
109
+ | "+42Km" |
110
+
111
+
112
+ Scenario: Repeat a pattern one or more times
113
+ When I define the following SRL expression:
114
+ """
115
+ begin with one of "+-" optional,
116
+ digit once or more,
117
+ letter
118
+ """
119
+ Then I expect the generated regular expression to be "^[+\-]?\d+[a-z]"
120
+ Then I expect matching for:
121
+ | "42cm " |
122
+ | "+42cm " |
123
+ | "-42cm " |
124
+ | "50cents" |
125
+
126
+ And I expect no match for:
127
+ | "++42" |
128
+ | "+42Km" |
129
+ | "cents" |
130
+ | "-cents" |
131
+
132
+
133
+ Scenario: Repeat a pattern n times or more
134
+ When I define the following SRL expression:
135
+ """
136
+ begin with letter at least 2 times,
137
+ must end
138
+ """
139
+ Then I expect the generated regular expression to be "^[a-z]{2,}$"
140
+ Then I expect matching for:
141
+ | "ab" |
142
+ | "abcdef" |
143
+
144
+ And I expect no match for:
145
+ | "a" |
146
+
147
+
148
+ # This one won't very much in use
149
+ Scenario: Repeat a pattern exactly once
150
+ When I define the following SRL expression:
151
+ """
152
+ begin with (uppercase letter, digit) once,
153
+ must end
154
+ """
155
+ Then I expect the generated regular expression to be "^(?:[A-Z]\d){1}$"
156
+ Then I expect matching for:
157
+ | "R2" |
158
+
159
+ And I expect no match for:
160
+ | "r2" |
161
+ | "R2D2" |
162
+
163
+
164
+ Scenario: Repeat a pattern twice
165
+ When I define the following SRL expression:
166
+ """
167
+ begin with (uppercase letter, digit,
168
+ literally "-" optional) twice,
169
+ must end
170
+ """
171
+ Then I expect the generated regular expression to be "^(?:[A-Z]\d-?){2}$"
172
+ Then I expect matching for:
173
+ | "R2D2" |
174
+ | "R2-D2" |
175
+ | "R2-D2-" |
176
+
177
+ And I expect no match for:
178
+ | "r2d2" |
179
+ | "R2D2E3" |
180
+ | "R2--D2" |
@@ -0,0 +1,22 @@
1
+ Feature: Defining regular expression as pattern
2
+ As a shy Rubyist,
3
+ I want to embed regex expression in SRL
4
+ So that I can use them when crafting complex regular expressions
5
+
6
+
7
+ Scenario: defining a literal string as pattern
8
+ When I define the following SRL expression:
9
+ """
10
+ letter,
11
+ raw "[^1-4]"
12
+ """
13
+ Then I expect the generated regular expression to be "[a-z][^1-4]"
14
+ Then I expect matching for:
15
+ | " b52 " |
16
+ | "road66" |
17
+ | "a " |
18
+
19
+ And I expect no match for:
20
+ | "%[_]"|
21
+ | "?;!" |
22
+ | "12b" |
@@ -0,0 +1,90 @@
1
+ Feature: Defining basic special character patterns
2
+ As a shy Rubyist,
3
+ I want to use basic SRL special character patterns
4
+ So that I can use them when crafting my regular expressions
5
+
6
+
7
+ Scenario: defining any whitespace as pattern
8
+ When I define the following SRL expression:
9
+ """
10
+ whitespace,
11
+ whitespace
12
+ """
13
+ Then I expect the generated regular expression to be "\s\s"
14
+ Then I expect matching for:
15
+ | "two spaces> " |
16
+ | " <two spaces" |
17
+ | " two> spaces" |
18
+
19
+ And I expect no match for:
20
+ | "B" |
21
+ | "%[_]"|
22
+ | "?;!" |
23
+ | "srl" |
24
+ | "SRL" |
25
+ | "123" |
26
+
27
+
28
+ Scenario: defining any non-whitespace as pattern
29
+ When I define the following SRL expression:
30
+ """
31
+ no whitespace
32
+ """
33
+ Then I expect the generated regular expression to be "\S"
34
+ Then I expect matching for:
35
+ | "{}" |
36
+ | " (red} " |
37
+ | "r_!" |
38
+ And I expect no match for:
39
+ | " " |
40
+
41
+
42
+ Scenario: defining a backslash as pattern
43
+ When I define the following SRL expression:
44
+ """
45
+ backslash
46
+ """
47
+ Then I expect the generated regular expression to be "\\"
48
+ Then I expect matching for:
49
+ | " \ " |
50
+ | "{}\ " |
51
+ And I expect no match for:
52
+ | " " |
53
+ | "B" |
54
+ | "%[_]"|
55
+ | "?;!" |
56
+ | "srl" |
57
+ | "SRL" |
58
+ | "123" |
59
+
60
+ Scenario: defining a tab as pattern
61
+ When I define the following SRL expression:
62
+ """
63
+ tab
64
+ """
65
+ Then I expect the generated regular expression to be "\t"
66
+
67
+
68
+ Scenario: defining a vertical tab as pattern
69
+ When I define the following SRL expression:
70
+ """
71
+ vertical tab
72
+ """
73
+ Then I expect the generated regular expression to be "\v"
74
+
75
+
76
+ Scenario: defining a newline as pattern
77
+ When I define the following SRL expression:
78
+ """
79
+ new line
80
+ """
81
+ Then I expect the generated regular expression to be "\n"
82
+
83
+
84
+ Scenario: defining a carriage return as pattern
85
+ When I define the following SRL expression:
86
+ """
87
+ carriage return
88
+ """
89
+ Then I expect the generated regular expression to be "\r"
90
+
@@ -0,0 +1,38 @@
1
+ Feature: Defining an email validation pattern
2
+ As a shy Rubyist,
3
+ I want to use SRL to specify valid email address pattern
4
+ So that I can use its regex representation in my code
5
+
6
+
7
+ Scenario: defining email validating expression
8
+ # The expression isn't 100 reliable but suffice in a vast majority of cases
9
+ When I define the following SRL expression:
10
+ """
11
+ begin with any of (digit, letter, one of "._%+-") once or more,
12
+ literally "@",
13
+ any of (digit, letter, one of ".-") once or more,
14
+ ( literally ".",
15
+ letter at least 2 times ) optional,
16
+ must end,
17
+ case insensitive
18
+ """
19
+ Then I expect the generated regular expression to be "^(?:\d|[a-z]|[._%+\-])+@(?:\d|[a-z]|[.\-])+(?:\.[a-z]{2,})?$"
20
+ Then I expect matching for:
21
+ | s@example.com |
22
+ | simple@example.com |
23
+ | john.doe@example.com |
24
+ | disposable.style.email.with+symbol@example.com |
25
+ | other.email-with-dash@example.com |
26
+ | fully-qualified-domain@example.com |
27
+ | user.name+tag+sorting@example.com |
28
+ | example-indeed@strange-example.com |
29
+ | example@s.solutions |
30
+ | user@localserver |
31
+
32
+ And I expect no match for:
33
+ | admin.example.com |
34
+ | @office.info.com |
35
+ | method()*@example.com |
36
+ | a@b@c@example.com |
37
+
38
+
@@ -0,0 +1,36 @@
1
+ Feature: Defining a floating-point number pattern
2
+ As a Rubyist,
3
+ I want to use SRL to specify a pattern for floating points
4
+ So that I can use its regex representation in my code
5
+
6
+
7
+ Scenario: defining a floating-point number expression
8
+ When I define the following SRL expression:
9
+ """
10
+ begin with one of "-+" optional,
11
+ digit once or more,
12
+ literally "." optional,
13
+ digit never or more,
14
+ (
15
+ one of "eE",
16
+ one of "-+" optional,
17
+ digit once or more
18
+ ) optional,
19
+ must end
20
+ """
21
+ Then I expect the generated regular expression to be "^[\-+]?\d+\.?\d*(?:[eE][\-+]?\d+)?$"
22
+ Then I expect matching for:
23
+ | 1 |
24
+ | +2 |
25
+ | -3 |
26
+ | +5. |
27
+ | -6. |
28
+ | 7.123 |
29
+ | 8.123E3 |
30
+ | 9.123e-4 |
31
+
32
+ And I expect no match for:
33
+ | text |
34
+ | 1c |
35
+ | 1,5 |
36
+ | 3E3+5 |
@@ -0,0 +1,35 @@
1
+ Feature: Defining alternation as patterns
2
+ As a shy Rubyist,
3
+ I want to use alternation combine patterns
4
+ So that I can use them when crafting my regular expressions
5
+
6
+
7
+ Background:
8
+ Given I define the following SRL expression:
9
+ """
10
+ capture (any of (literally "sample", (digit once or more)))
11
+ """
12
+
13
+
14
+ Scenario: defining an alternation as pattern
15
+ Then I expect the generated regular expression to be "((?:sample|(?:\d+)))"
16
+ Then I expect matching for:
17
+ | "two samples " |
18
+ | " 1234" |
19
+ | " sample 42" |
20
+
21
+ And I expect no match for:
22
+ | "a ba"|
23
+ | "%[_]"|
24
+ | "?;!" |
25
+ | "srl" |
26
+
27
+
28
+ Scenario: capturing an alternation
29
+ When I use the text "sample 42"
30
+ Then I expect the first capture to be:
31
+ | 0 | sample |
32
+ And I expect the second capture to be:
33
+ | 0 | 42 |
34
+
35
+
@@ -0,0 +1,64 @@
1
+ Feature: Defining capture patterns
2
+ As a shy Rubyist,
3
+ I want to use intermediate SRL capture patterns
4
+ So that I can use them when crafting my regular expressions
5
+
6
+
7
+ Scenario: using named captures
8
+ Given I define the following SRL expression:
9
+ """
10
+ capture (anything once or more) as "first",
11
+ literally " - ",
12
+ capture (literally "second part") as "second"
13
+ """
14
+ When I use the text "first part - second part"
15
+ Then I expect the first captures to be:
16
+ |first | first part |
17
+ |second| second part |
18
+
19
+
20
+ Scenario: using anonymous captures
21
+ Given I define the following SRL expression:
22
+ """
23
+ capture (anything once or more),
24
+ literally " - ",
25
+ capture (literally "second part")
26
+ """
27
+ When I use the text "first part - second part"
28
+ Then I expect the first captures to be:
29
+ | 0 | first part |
30
+ | 1 | second part |
31
+
32
+
33
+ Scenario: using capture ... until
34
+ Given I define the following SRL expression:
35
+ """
36
+ begin with capture (
37
+ anything once or more
38
+ ) until literally "m"
39
+ """
40
+ When I use the text "this is an example"
41
+ Then I expect the first capture to be:
42
+ | 0 | this is an exa |
43
+
44
+
45
+ Scenario: using any of
46
+ Given I define the following SRL expression:
47
+ """
48
+ capture (any of (literally "sample", (digit once or more)))
49
+ """
50
+ When I use the text "sample && 1234"
51
+ Then I expect the first captures to be:
52
+ | 0 | sample |
53
+ | 1 | 1234 |
54
+
55
+
56
+ Scenario: using either of (synonym of any of)
57
+ Given I define the following SRL expression:
58
+ """
59
+ capture (either of (literally "sample", (digit once or more)))
60
+ """
61
+ When I use the text "sample && 1234"
62
+ Then I expect the first captures to be:
63
+ | 0 | sample |
64
+ | 1 | 1234 |
@@ -0,0 +1,51 @@
1
+ Feature: Defining lookaround patterns
2
+ As a shy Rubyist,
3
+ I want to use intermediate SRL lookaround patterns
4
+ So that I can use them when crafting my regular expressions
5
+
6
+
7
+ Scenario: using if not followed lookforward
8
+ Given I define the following SRL expression:
9
+ """
10
+ capture (digit) if followed by (anything once or more, digit)
11
+ """
12
+ When I use the text "This example contains 3 numbers. 2 should not match. Only 1 should."
13
+ Then I expect the first capture to be:
14
+ | 0 | 3 |
15
+ And I expect the second capture to be:
16
+ | 0 | 2 |
17
+
18
+
19
+ Scenario: using if not followed lookforward
20
+ Given I define the following SRL expression:
21
+ """
22
+ capture (digit) if not followed by (anything once or more, digit)
23
+ """
24
+ When I use the text "This example contains 3 numbers. 2 should not match. Only 1 should."
25
+ Then I expect the first capture to be:
26
+ | 0 | 1 |
27
+
28
+
29
+ Scenario: using if already had
30
+ Given I define the following SRL expression:
31
+ """
32
+ capture (literally "bar") if already had literally "foo"
33
+ """
34
+ Then I expect no match for:
35
+ | "fobar"|
36
+ When I use the text "foobar"
37
+ Then I expect the first capture to be:
38
+ | 0 | bar |
39
+
40
+
41
+ Scenario: using if already had
42
+ Given I define the following SRL expression:
43
+ """
44
+ capture (literally "bar") if not already had literally "foo"
45
+ """
46
+ Then I expect no match for:
47
+ | "foobar"|
48
+ When I use the text "fobar"
49
+ Then I expect the first capture to be:
50
+ | 0 | bar |
51
+
@@ -0,0 +1,59 @@
1
+ When("I define the following SRL expression:") do |srl_source|
2
+ @regex = SrlRuby::parse(srl_source)
3
+ end
4
+
5
+ When("I use the text {string}") do |test_string|
6
+ @subject = test_string
7
+ end
8
+
9
+ Then("I expect the generated regular expression to be {string}") do |regex_source|
10
+ expect(@regex.source).to eq(regex_source)
11
+ end
12
+
13
+ Then("I expect matching for:") do |table|
14
+ # table is a Cucumber::MultilineArgument::DataTable
15
+ values = table.raw.flatten.map { |raw_val| raw_val.gsub(/^"|"$/, '') }
16
+ values.each do |val|
17
+ expect(val).to match(@regex)
18
+ end
19
+ end
20
+
21
+ Then("I expect no match for:") do |table|
22
+ # table is a Cucumber::MultilineArgument::DataTable
23
+ values = table.raw.flatten.map { |raw_val| raw_val.gsub(/^"|"$/, '') }
24
+ values.each do |val|
25
+ expect(val).not_to match(@regex)
26
+ end
27
+ end
28
+
29
+
30
+ Then(/I expect the (first|second|third|fourth|fifth) captures? to be:/) do |rank_literal, table|
31
+ ordinal2indices = { 'first' => 0,
32
+ 'second' => 1,
33
+ 'third' => 2,
34
+ 'fourth' => 3,
35
+ 'fifth' => 4
36
+ }
37
+ rank = ordinal2indices[rank_literal]
38
+ # table is a Cucumber::MultilineArgument::DataTable
39
+ expectations = table.rows_hash
40
+
41
+ scan_results = @subject.scan(@regex)
42
+ actuals = scan_results[rank]
43
+ if actuals.nil?
44
+ puts "Big issue"
45
+ puts @regex.source
46
+ end
47
+
48
+ if @regex.names.empty?
49
+ capture_names = (0..actuals.size-1).to_a.map(&:to_s)
50
+ else
51
+ capture_names = @regex.names
52
+ end
53
+
54
+ capture_names.each_with_index do |var_name, index|
55
+ if expectations.include?(var_name)
56
+ expect(expectations[var_name]).to eq(actuals[index])
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,3 @@
1
+ require 'rspec'
2
+ require 'cucumber'
3
+ require 'srl_ruby'
@@ -0,0 +1,28 @@
1
+ Feature: Defining a password validation pattern
2
+ As a shy Rubyist,
3
+ I want to use SRL to specify password pattern
4
+ So that I can use its regex representation in my code
5
+
6
+
7
+ Scenario: defining a password validation expression
8
+ When I define the following SRL expression:
9
+ """
10
+ if followed by (anything never or more, letter),
11
+ if followed by (anything never or more, uppercase letter),
12
+ if followed by (anything never or more, digit),
13
+ if followed by (anything never or more, one of "!@#$%^&*[]\"';:_-<>., =+/\\"),
14
+ anything at least 8 times
15
+ """
16
+ Then I expect matching for:
17
+ | Sup3r $ecure! |
18
+ | P@sSword1 |
19
+ | Pass-w0rd |
20
+
21
+ And I expect no match for:
22
+ | Password |
23
+ | P@sS1 |
24
+ | justalongpassword |
25
+ | m1ss1ng upper |
26
+ | missing Number |
27
+ | M1SS1NG LOWER |
28
+ | m1ss1ngSpec1al |
@@ -0,0 +1,31 @@
1
+ Feature: Defining an email validation pattern
2
+ As a shy Rubyist,
3
+ I want to use SRL to specify valid email address pattern
4
+ So that I can use its regex representation in my code
5
+
6
+ Background:
7
+ Given I define the following SRL expression:
8
+ """
9
+ begin with capture (letter once or more) as "protocol",
10
+ literally "://",
11
+ capture (
12
+ letter once or more,
13
+ any of (letter, literally ".") once or more,
14
+ letter at least 2 times
15
+ ) as "domain",
16
+ (literally ":", capture (digit once or more) as "port") optional,
17
+ capture (literally "/", anything never or more) as "path" until (any of (literally "?", must end)),
18
+ literally "?" optional,
19
+ capture (anything never or more) as "parameters" optional,
20
+ must end,
21
+ case insensitive
22
+ """
23
+
24
+ Scenario: defining url capturing expression
25
+ When I use the text "https://example.domain.com:1234/a/path?query=param"
26
+ Then I expect the first capture to be:
27
+ | protocol | https |
28
+ | domain | example.domain.com |
29
+ | port | 1234 |
30
+ | path | /a/path |
31
+ | parameters | query=param |
@@ -1,3 +1,3 @@
1
1
  module SrlRuby
2
- VERSION = '0.3.1'.freeze
2
+ VERSION = '0.3.2'.freeze
3
3
  end
data/srl_ruby.gemspec CHANGED
@@ -10,6 +10,7 @@ module PkgExtending
10
10
  '.rspec',
11
11
  '.yardopts',
12
12
  'appveyor.yml',
13
+ 'cucumber.yml',
13
14
  'Gemfile',
14
15
  'Rakefile',
15
16
  'CHANGELOG.md',
@@ -19,6 +20,9 @@ module PkgExtending
19
20
  'lib/*.*',
20
21
  'lib/**/*.rb',
21
22
  'spec/**/*.rb',
23
+ 'features/*.*',
24
+ 'features/**/*.*',
25
+ 'features/**/**/*.features',
22
26
  'srl_test/**/*.*'
23
27
  ]
24
28
  aPackage.files = file_list
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: srl_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitri Geshef
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-12 00:00:00.000000000 Z
11
+ date: 2018-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rley
@@ -99,6 +99,24 @@ files:
99
99
  - Rakefile
100
100
  - appveyor.yml
101
101
  - bin/srl_ruby
102
+ - cucumber.yml
103
+ - features/basic/anchors.feature
104
+ - features/basic/characters.feature
105
+ - features/basic/digits.feature
106
+ - features/basic/letters.feature
107
+ - features/basic/literally.feature
108
+ - features/basic/quantifiers.feature
109
+ - features/basic/raw.feature
110
+ - features/basic/special_characters.feature
111
+ - features/email_validation.feature
112
+ - features/floatingpoint.feature
113
+ - features/intermediate/any_of.feature
114
+ - features/intermediate/capture.feature
115
+ - features/intermediate/lookaround.feature
116
+ - features/lib/step_definitions/srl_testing_steps.rb
117
+ - features/lib/support/env..rb
118
+ - features/password_validation.feature
119
+ - features/url_capturing.feature
102
120
  - lib/regex/abstract_method.rb
103
121
  - lib/regex/alternation.rb
104
122
  - lib/regex/anchor.rb