ndr_support 4.0.1 → 4.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/code_safety.yml +10 -10
- data/lib/ndr_support/string/cleaning.rb +30 -21
- data/lib/ndr_support/version.rb +1 -1
- data/test/string/cleaning_test.rb +188 -179
- metadata +41 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7dbd286ab4f1123812eb61b3374febfb81668841
|
4
|
+
data.tar.gz: 88a77bdc779fc4f782a83070c3bcb905b5f611fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c78c653bea20723eab61d9d20b199195bbcde0f6c7e561e1f80bab72c20deba6705ac3c8281fc703f60ceee5db5735bb0d6c022a86fcc8405abc722eba1d14e1
|
7
|
+
data.tar.gz: 51113cb130b185681213eaf89441ecdef91bc8b261207569407378d427bcfc4226ff47f50fd63822db5e77ed6b1b33d37084dc565f9f7e98a2fa3d09379a9bae
|
data/code_safety.yml
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
---
|
2
2
|
file safety:
|
3
|
-
.gitignore:
|
3
|
+
".gitignore":
|
4
4
|
comments:
|
5
5
|
reviewed_by: timgentry
|
6
6
|
safe_revision: 2590c1c28a8ca9cfb20ad3fe3ee65a12190a5810
|
7
|
-
.hound.yml:
|
7
|
+
".hound.yml":
|
8
8
|
comments:
|
9
9
|
reviewed_by: timgentry
|
10
10
|
safe_revision: 9605fa85dca3d70c85927d3f1f5818c20ad922f0
|
11
|
-
.rubocop.yml:
|
11
|
+
".rubocop.yml":
|
12
12
|
comments:
|
13
13
|
reviewed_by: timgentry
|
14
14
|
safe_revision: bd7dbaf2c72eb4a8f74db498f4dea67e02c8cb60
|
15
|
-
.travis.yml:
|
15
|
+
".travis.yml":
|
16
16
|
comments:
|
17
17
|
reviewed_by: timgentry
|
18
18
|
safe_revision: 41cea330c8de42e4080c40143eaa15a225be7c5a
|
@@ -126,8 +126,8 @@ file safety:
|
|
126
126
|
safe_revision: 4492da77f6a8b678c40dd571fdd46fd936052cca
|
127
127
|
lib/ndr_support/string/cleaning.rb:
|
128
128
|
comments:
|
129
|
-
reviewed_by:
|
130
|
-
safe_revision:
|
129
|
+
reviewed_by: josh.pencheon
|
130
|
+
safe_revision: 3d9cb572458ab1b9ae88fe9aba36a160c881694c
|
131
131
|
lib/ndr_support/string/conversions.rb:
|
132
132
|
comments:
|
133
133
|
reviewed_by: timgentry
|
@@ -158,8 +158,8 @@ file safety:
|
|
158
158
|
safe_revision: f7adf44fc2772e1926df37abfd9041d41c303328
|
159
159
|
lib/ndr_support/version.rb:
|
160
160
|
comments:
|
161
|
-
reviewed_by:
|
162
|
-
safe_revision:
|
161
|
+
reviewed_by: josh.pencheon
|
162
|
+
safe_revision: 2d147b3de8c8819feb278fa44328878370ace124
|
163
163
|
lib/ndr_support/yaml/serialization_migration.rb:
|
164
164
|
comments:
|
165
165
|
reviewed_by: timgentry
|
@@ -222,8 +222,8 @@ file safety:
|
|
222
222
|
safe_revision: b562d0c15ff1b1d565522a47e6bae47ea09706f0
|
223
223
|
test/string/cleaning_test.rb:
|
224
224
|
comments:
|
225
|
-
reviewed_by:
|
226
|
-
safe_revision:
|
225
|
+
reviewed_by: josh.pencheon
|
226
|
+
safe_revision: 0f2ba63edf73284d26709c129027bc27dcc1d3a3
|
227
227
|
test/string/conversions_test.rb:
|
228
228
|
comments:
|
229
229
|
reviewed_by: timgentry
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_support/core_ext/string/filters'
|
2
|
+
|
1
3
|
class String
|
2
4
|
INVALID_CONTROL_CHARS = /[\x00-\x08\x0b-\x0c\x0e-\x1f]/
|
3
5
|
ROMAN_ONE_TO_FIVE_MAPPING = { 'I' => '1', 'II' => '2', 'III' => '3', 'IIII' => '4', 'IV' => '4', 'V' => '5' }
|
@@ -31,11 +33,11 @@ class String
|
|
31
33
|
def clean(what)
|
32
34
|
case what
|
33
35
|
when :nhsnumber
|
34
|
-
|
36
|
+
delete('^0-9')[0..9]
|
35
37
|
when :postcode, :get_postcode
|
36
|
-
|
38
|
+
postcodeize(:db)
|
37
39
|
when :lpi
|
38
|
-
|
40
|
+
upcase.delete('^0-9A-Z')
|
39
41
|
when :sex
|
40
42
|
# SECURE: BNS 2012-10-09: But may behave oddly for multi-line input
|
41
43
|
if self =~ /^M|1/i
|
@@ -60,7 +62,7 @@ class String
|
|
60
62
|
/\s{2,}/ => ' ',
|
61
63
|
'`' => '\''
|
62
64
|
}
|
63
|
-
substitutions.inject(
|
65
|
+
substitutions.inject(upcase) { |a, e| a.gsub(*e) }.strip
|
64
66
|
when :ethniccategory
|
65
67
|
replace_ethniccategory = {
|
66
68
|
'0' => '0',
|
@@ -75,14 +77,15 @@ class String
|
|
75
77
|
' ' => 'X',
|
76
78
|
'99' => 'X'
|
77
79
|
}
|
78
|
-
replace_ethniccategory[self] ||
|
80
|
+
replace_ethniccategory[self] || upcase
|
79
81
|
when :code
|
80
|
-
|
81
|
-
code.blank? ? next : code.
|
82
|
+
split_on_separators.map do |code|
|
83
|
+
code.blank? ? next : code.delete('.')
|
82
84
|
end.compact.join(' ')
|
83
85
|
when :code_icd
|
86
|
+
warn '[DEPRECATION] clean(:code_icd) is deprecated - consider using clean(:icd) instead.'
|
84
87
|
# regexp = /[A-Z][0-9]{2}(\.(X|[0-9]{1,2})|[0-9]?)( *(D|A)( |,|;|$))/
|
85
|
-
codes =
|
88
|
+
codes = upcase.split_on_separators.delete_if { |x| x.squash.blank? }
|
86
89
|
cleaned_codes = []
|
87
90
|
codes.each do |code|
|
88
91
|
if code == 'D' || code == 'A'
|
@@ -92,47 +95,53 @@ class String
|
|
92
95
|
end
|
93
96
|
end
|
94
97
|
cleaned_codes.join(' ')
|
98
|
+
when :icd
|
99
|
+
codes = upcase.squish.split_on_separators.reject(&:blank?)
|
100
|
+
codes.map { |code| code.gsub(/[.X]/, '') }.join(' ')
|
95
101
|
when :code_opcs
|
96
102
|
clean_code_opcs
|
97
103
|
when :hospitalnumber
|
98
104
|
self[-1..-1] =~ /\d/ ? self : self[0..-2]
|
99
105
|
when :xmlsafe, :make_xml_safe
|
100
|
-
|
106
|
+
strip_xml_unsafe_characters
|
101
107
|
when :roman5
|
102
108
|
# This deromanises roman numerals between 1 and 5
|
103
|
-
|
109
|
+
gsub(/[IV]+/i) { |match| ROMAN_ONE_TO_FIVE_MAPPING[match.upcase] }
|
104
110
|
when :tnmcategory
|
105
|
-
|
111
|
+
sub!(/\A[tnm]/i, '')
|
106
112
|
if self =~ /\Ax\z/i
|
107
|
-
|
113
|
+
upcase
|
108
114
|
else
|
109
|
-
|
115
|
+
downcase
|
110
116
|
end
|
111
117
|
when :upcase
|
112
118
|
upcase
|
113
119
|
else
|
114
|
-
|
120
|
+
gsub(' ?', ' ')
|
115
121
|
end
|
116
122
|
end
|
117
123
|
|
118
124
|
def strip_xml_unsafe_characters
|
119
|
-
|
125
|
+
gsub(String::INVALID_CONTROL_CHARS, '')
|
120
126
|
end
|
121
127
|
|
122
128
|
def xml_unsafe?
|
123
129
|
self =~ String::INVALID_CONTROL_CHARS
|
124
130
|
end
|
125
131
|
|
132
|
+
protected
|
133
|
+
|
134
|
+
def split_on_separators(regexp = / |,|;/)
|
135
|
+
split(regexp)
|
136
|
+
end
|
137
|
+
|
126
138
|
private
|
127
139
|
|
128
140
|
def clean_code_opcs
|
129
|
-
|
141
|
+
split_on_separators.map do |code|
|
130
142
|
db_code = code.squash
|
131
|
-
|
132
|
-
|
133
|
-
else
|
134
|
-
next
|
135
|
-
end
|
143
|
+
next unless 4 == db_code.length || db_code =~ /CZ00[12]/
|
144
|
+
db_code
|
136
145
|
end.compact.join(' ')
|
137
146
|
end
|
138
147
|
end
|
data/lib/ndr_support/version.rb
CHANGED
@@ -1,183 +1,192 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class String
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
3
|
+
class String
|
4
|
+
class CleaningTest < Minitest::Test
|
5
|
+
# squash
|
6
|
+
|
7
|
+
test 'postcodeize' do
|
8
|
+
assert_equal 'CB22 3AD', 'CB223AD'.postcodeize
|
9
|
+
assert_equal 'CB2 2QQ', 'CB22QQ'.postcodeize
|
10
|
+
assert_equal 'CB2 2QQ', 'CB22QQ '.postcodeize
|
11
|
+
assert_equal 'CB2 2QQ', 'C B 22QQ '.postcodeize
|
12
|
+
assert_equal 'CB22QQ', 'CB2 2QQ'.postcodeize(:compact)
|
13
|
+
assert_equal 'CB2 2QQ', 'CB22QQ '.postcodeize(:db)
|
14
|
+
assert_equal 'CB2A2QQ', 'CB2A 2QQ '.postcodeize(:db)
|
15
|
+
assert_equal '', ''.postcodeize
|
16
|
+
assert_equal 'CB2 2QQ', 'cb22qq'.postcodeize(:db)
|
17
|
+
# Database storage format for all major UK postcode formats:
|
18
|
+
assert_equal 'A9 9AA', 'A9 9AA'.postcodeize(:db)
|
19
|
+
assert_equal 'A99 9AA', 'A99 9AA'.postcodeize(:db)
|
20
|
+
assert_equal 'A9A 9AA', 'A9A 9AA'.postcodeize(:db)
|
21
|
+
assert_equal 'AA9 9AA', 'AA9 9AA'.postcodeize(:db)
|
22
|
+
assert_equal 'AA999AA', 'AA99 9AA'.postcodeize(:db)
|
23
|
+
assert_equal 'AA9A9AA', 'AA9A 9AA'.postcodeize(:db)
|
24
|
+
# Examples of legacy postcodes, that should be unchanged
|
25
|
+
assert_equal 'IP222', 'IP222'.postcodeize(:db)
|
26
|
+
assert_equal 'IP222E', 'IP222E'.postcodeize(:db)
|
27
|
+
assert_equal 'HANTS', 'HANTS'.postcodeize(:db)
|
28
|
+
end
|
29
|
+
|
30
|
+
test 'xml_unsafe?' do
|
31
|
+
without_control = 'hello world!'
|
32
|
+
refute without_control.xml_unsafe?
|
33
|
+
|
34
|
+
with_safe_control = "increase: 100\045"
|
35
|
+
refute with_safe_control.xml_unsafe?
|
36
|
+
|
37
|
+
with_unsafe_control = "Lorem \000Ipsum\000"
|
38
|
+
assert with_unsafe_control.xml_unsafe?
|
39
|
+
end
|
40
|
+
|
41
|
+
test 'strip_xml_unsafe_characters' do
|
42
|
+
without_control = 'hello world!'
|
43
|
+
assert_equal without_control, without_control.strip_xml_unsafe_characters
|
44
|
+
|
45
|
+
with_safe_control = "increase: 100\045"
|
46
|
+
assert_equal 'increase: 100%', with_safe_control.strip_xml_unsafe_characters
|
47
|
+
|
48
|
+
with_unsafe_control = "Lorem \000Ipsum\000"
|
49
|
+
assert_equal 'Lorem Ipsum', with_unsafe_control.strip_xml_unsafe_characters
|
50
|
+
end
|
51
|
+
|
52
|
+
test 'clean xmlsafe' do
|
53
|
+
without_control = 'hello world!'
|
54
|
+
assert_equal without_control, without_control.clean(:xmlsafe)
|
55
|
+
|
56
|
+
with_safe_control = "increase: 100\045"
|
57
|
+
assert_equal 'increase: 100%', with_safe_control.clean(:xmlsafe)
|
58
|
+
|
59
|
+
with_unsafe_control = "Lorem \007Ipsum\006"
|
60
|
+
assert_equal 'Lorem Ipsum', with_unsafe_control.clean(:xmlsafe)
|
61
|
+
end
|
62
|
+
|
63
|
+
test 'clean make_xml_safe' do
|
64
|
+
without_control = 'hello world!'
|
65
|
+
assert_equal without_control, without_control.clean(:make_xml_safe)
|
66
|
+
|
67
|
+
with_safe_control = "increase: 100\045"
|
68
|
+
assert_equal 'increase: 100%', with_safe_control.clean(:make_xml_safe)
|
69
|
+
|
70
|
+
with_unsafe_control = "Lorem \000Ipsum\000"
|
71
|
+
assert_equal 'Lorem Ipsum', with_unsafe_control.clean(:make_xml_safe)
|
72
|
+
end
|
73
|
+
|
74
|
+
test 'clean nhsnumber' do
|
75
|
+
assert_equal '1234567890', '123 456 7890'.clean(:nhsnumber)
|
76
|
+
assert_equal '1234567890', ' 123-456-7890123'.clean(:nhsnumber)
|
77
|
+
assert_equal '', 'unknown'.clean(:nhsnumber)
|
78
|
+
assert_equal '', ''.clean(:nhsnumber)
|
79
|
+
end
|
80
|
+
|
81
|
+
test 'clean postcode' do
|
82
|
+
assert_equal 'CB4 3ND', 'cb4 3ND '.clean(:postcode)
|
83
|
+
assert_equal 'CB223AD', ' CB22 3AD'.clean(:postcode)
|
84
|
+
assert_equal '', ''.clean(:postcode)
|
85
|
+
end
|
86
|
+
|
87
|
+
test 'clean lpi' do
|
88
|
+
# self.upcase.delete('^0-9A-Z')
|
89
|
+
assert_equal '007', '007?!?'.clean(:lpi)
|
90
|
+
assert_equal 'A0000001', 'a0000001'.clean(:lpi)
|
91
|
+
assert_equal 'UNKNOWN', 'UNKNOWN'.clean(:lpi)
|
92
|
+
assert_equal '', ''.clean(:lpi)
|
93
|
+
end
|
94
|
+
|
95
|
+
test 'clean sex' do
|
96
|
+
assert_equal '1', 'male'.clean(:sex)
|
97
|
+
assert_equal '1', '1'.clean(:sex)
|
98
|
+
assert_equal '2', 'F'.clean(:sex)
|
99
|
+
assert_equal '2', '2'.clean(:sex)
|
100
|
+
assert_equal '0', ''.clean(:sex)
|
101
|
+
assert_equal '0', 'unknown'.clean(:sex)
|
102
|
+
end
|
103
|
+
|
104
|
+
test 'clean sex_c' do
|
105
|
+
assert_equal 'M', 'male'.clean(:sex_c)
|
106
|
+
assert_equal 'M', '1'.clean(:sex_c)
|
107
|
+
assert_equal 'F', 'F'.clean(:sex_c)
|
108
|
+
assert_equal 'F', '2'.clean(:sex_c)
|
109
|
+
assert_equal '', ''.clean(:sex_c)
|
110
|
+
assert_equal '', 'unknown'.clean(:sex_c)
|
111
|
+
end
|
112
|
+
|
113
|
+
test 'clean name' do
|
114
|
+
assert_equal 'MAKE A NAME', ' Make A. Name '.clean(:name)
|
115
|
+
assert_equal 'PUNCTUATE A NAME', 'PUNCTUATE,A;NAME'.clean(:name)
|
116
|
+
assert_equal 'SPREAD A NAME', 'spread a name'.clean(:name)
|
117
|
+
assert_equal "O'NAME", 'O`NAME'.clean(:name)
|
118
|
+
assert_equal "JOHN MIDDLE O'NAME", 'John, Middle. O`NAME'.clean(:name)
|
119
|
+
assert_equal '', ''.clean(:name)
|
120
|
+
end
|
121
|
+
|
122
|
+
test 'clean ethniccategory' do
|
123
|
+
assert_equal 'M', '1'.clean(:ethniccategory)
|
124
|
+
assert_equal 'X', '99'.clean(:ethniccategory)
|
125
|
+
assert_equal 'A', 'A'.clean(:ethniccategory)
|
126
|
+
assert_equal 'INVALID', 'InValid'.clean(:ethniccategory)
|
127
|
+
assert_equal '', ''.clean(:ethniccategory)
|
128
|
+
end
|
129
|
+
|
130
|
+
test 'clean code' do
|
131
|
+
assert_equal 'a123 B456', ' a12.3,,B45.6;'.clean(:code)
|
132
|
+
assert_equal 'A123 B456', 'A12.3 B.456'.clean(:code)
|
133
|
+
assert_equal 'UNKNOWN', 'UNKNOWN'.clean(:code)
|
134
|
+
assert_equal '', ''.clean(:code)
|
135
|
+
end
|
136
|
+
|
137
|
+
test 'clean code_icd' do
|
138
|
+
# TODO
|
139
|
+
end
|
140
|
+
|
141
|
+
test 'clean icd' do
|
142
|
+
assert_equal 'C509', ' c50.9; '.clean(:icd)
|
143
|
+
assert_equal 'C50 C509', ' C50X, c50.9; '.clean(:icd)
|
144
|
+
assert_equal 'D04', 'd04'.clean(:icd)
|
145
|
+
assert_equal 'C32', ';C32.X'.clean(:icd)
|
146
|
+
end
|
147
|
+
|
148
|
+
test 'clean code_opcs' do
|
149
|
+
assert_equal 'B274 Z943', ' b27.4,Z94.3;'.clean(:code_opcs)
|
150
|
+
assert_equal 'B274 Z943', 'B27.4 Z94.3'.clean(:code_opcs)
|
151
|
+
assert_equal 'CZ001', 'CZ001'.clean(:code_opcs)
|
152
|
+
assert_equal 'B274 CZ002', 'B27.4 cz00.2'.clean(:code_opcs)
|
153
|
+
assert_equal '', 'CZ003'.clean(:code_opcs)
|
154
|
+
assert_equal '', 'UNKNOWN'.clean(:code_opcs)
|
155
|
+
assert_equal '', ''.clean(:code_opcs)
|
156
|
+
end
|
157
|
+
|
158
|
+
test 'clean hospitalnumber' do
|
159
|
+
assert_equal 'a0000001', 'a0000001'.clean(:hospitalnumber)
|
160
|
+
assert_equal 'A0000001', 'A0000001B'.clean(:hospitalnumber)
|
161
|
+
assert_equal 'UNKNOW', 'UNKNOWN'.clean(:hospitalnumber)
|
162
|
+
assert_equal '', ''.clean(:hospitalnumber)
|
163
|
+
end
|
164
|
+
|
165
|
+
test 'clean tnmcategory' do
|
166
|
+
assert_equal '', ''.clean(:tnmcategory)
|
167
|
+
assert_equal 'X', 'X'.clean(:tnmcategory)
|
168
|
+
assert_equal 'X', 'x'.clean(:tnmcategory)
|
169
|
+
assert_equal '1a', '1A'.clean(:tnmcategory)
|
170
|
+
assert_equal '1a', '1a'.clean(:tnmcategory)
|
171
|
+
assert_equal '1a', 'T1A'.clean(:tnmcategory)
|
172
|
+
assert_equal '1a', 't1a'.clean(:tnmcategory)
|
173
|
+
assert_equal 'X', 'TX'.clean(:tnmcategory)
|
174
|
+
assert_equal 'X', 'tx'.clean(:tnmcategory)
|
175
|
+
assert_equal 'X', 'Tx'.clean(:tnmcategory)
|
176
|
+
assert_equal 'X', 'tX'.clean(:tnmcategory)
|
177
|
+
end
|
178
|
+
|
179
|
+
test 'clean upcase' do
|
180
|
+
assert_equal '', ''.clean(:upcase)
|
181
|
+
assert_equal 'DOWNCASE', 'downcase'.clean(:upcase)
|
182
|
+
assert_equal 'MIXEDCASE', 'mIxEdCaSe'.clean(:upcase)
|
183
|
+
assert_equal 'UPCASE', 'UPCASE'.clean(:upcase)
|
184
|
+
end
|
185
|
+
|
186
|
+
test 'clean fallback' do
|
187
|
+
assert_equal 'UN KNOWN', 'UN ?KNOWN'.clean(:somethingorother)
|
188
|
+
assert_equal 'UNKNOWN', 'UNKNOWN'.clean(:somethingorother)
|
189
|
+
assert_equal '', ''.clean(:somethingorother)
|
190
|
+
end
|
182
191
|
end
|
183
192
|
end
|
metadata
CHANGED
@@ -1,213 +1,213 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ndr_support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- NCRS Development Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.2.18
|
20
|
-
- - <
|
20
|
+
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 5.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 3.2.18
|
30
|
-
- - <
|
30
|
+
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 5.0.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: activesupport
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- -
|
37
|
+
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: 3.2.18
|
40
|
-
- - <
|
40
|
+
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: 5.0.0
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- -
|
47
|
+
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: 3.2.18
|
50
|
-
- - <
|
50
|
+
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 5.0.0
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: bundler
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
|
-
- - ~>
|
57
|
+
- - "~>"
|
58
58
|
- !ruby/object:Gem::Version
|
59
59
|
version: '1.7'
|
60
60
|
type: :development
|
61
61
|
prerelease: false
|
62
62
|
version_requirements: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
|
-
- - ~>
|
64
|
+
- - "~>"
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: '1.7'
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: rake
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
70
70
|
requirements:
|
71
|
-
- - ~>
|
71
|
+
- - "~>"
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: '10.0'
|
74
74
|
type: :development
|
75
75
|
prerelease: false
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
77
77
|
requirements:
|
78
|
-
- - ~>
|
78
|
+
- - "~>"
|
79
79
|
- !ruby/object:Gem::Version
|
80
80
|
version: '10.0'
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: minitest
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
|
-
- -
|
85
|
+
- - ">="
|
86
86
|
- !ruby/object:Gem::Version
|
87
87
|
version: 5.0.0
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
90
|
version_requirements: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
|
-
- -
|
92
|
+
- - ">="
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: 5.0.0
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
96
|
name: mocha
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
98
98
|
requirements:
|
99
|
-
- - ~>
|
99
|
+
- - "~>"
|
100
100
|
- !ruby/object:Gem::Version
|
101
101
|
version: '1.1'
|
102
102
|
type: :development
|
103
103
|
prerelease: false
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
requirements:
|
106
|
-
- - ~>
|
106
|
+
- - "~>"
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '1.1'
|
109
109
|
- !ruby/object:Gem::Dependency
|
110
110
|
name: ndr_dev_support
|
111
111
|
requirement: !ruby/object:Gem::Requirement
|
112
112
|
requirements:
|
113
|
-
- - ~>
|
113
|
+
- - "~>"
|
114
114
|
- !ruby/object:Gem::Version
|
115
115
|
version: '1.1'
|
116
|
-
- -
|
116
|
+
- - ">="
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: 1.1.3
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- - ~>
|
123
|
+
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '1.1'
|
126
|
-
- -
|
126
|
+
- - ">="
|
127
127
|
- !ruby/object:Gem::Version
|
128
128
|
version: 1.1.3
|
129
129
|
- !ruby/object:Gem::Dependency
|
130
130
|
name: guard
|
131
131
|
requirement: !ruby/object:Gem::Requirement
|
132
132
|
requirements:
|
133
|
-
- -
|
133
|
+
- - ">="
|
134
134
|
- !ruby/object:Gem::Version
|
135
135
|
version: '0'
|
136
136
|
type: :development
|
137
137
|
prerelease: false
|
138
138
|
version_requirements: !ruby/object:Gem::Requirement
|
139
139
|
requirements:
|
140
|
-
- -
|
140
|
+
- - ">="
|
141
141
|
- !ruby/object:Gem::Version
|
142
142
|
version: '0'
|
143
143
|
- !ruby/object:Gem::Dependency
|
144
144
|
name: guard-rubocop
|
145
145
|
requirement: !ruby/object:Gem::Requirement
|
146
146
|
requirements:
|
147
|
-
- -
|
147
|
+
- - ">="
|
148
148
|
- !ruby/object:Gem::Version
|
149
149
|
version: '0'
|
150
150
|
type: :development
|
151
151
|
prerelease: false
|
152
152
|
version_requirements: !ruby/object:Gem::Requirement
|
153
153
|
requirements:
|
154
|
-
- -
|
154
|
+
- - ">="
|
155
155
|
- !ruby/object:Gem::Version
|
156
156
|
version: '0'
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
158
|
name: guard-shell
|
159
159
|
requirement: !ruby/object:Gem::Requirement
|
160
160
|
requirements:
|
161
|
-
- -
|
161
|
+
- - ">="
|
162
162
|
- !ruby/object:Gem::Version
|
163
163
|
version: '0'
|
164
164
|
type: :development
|
165
165
|
prerelease: false
|
166
166
|
version_requirements: !ruby/object:Gem::Requirement
|
167
167
|
requirements:
|
168
|
-
- -
|
168
|
+
- - ">="
|
169
169
|
- !ruby/object:Gem::Version
|
170
170
|
version: '0'
|
171
171
|
- !ruby/object:Gem::Dependency
|
172
172
|
name: guard-minitest
|
173
173
|
requirement: !ruby/object:Gem::Requirement
|
174
174
|
requirements:
|
175
|
-
- -
|
175
|
+
- - ">="
|
176
176
|
- !ruby/object:Gem::Version
|
177
177
|
version: '0'
|
178
178
|
type: :development
|
179
179
|
prerelease: false
|
180
180
|
version_requirements: !ruby/object:Gem::Requirement
|
181
181
|
requirements:
|
182
|
-
- -
|
182
|
+
- - ">="
|
183
183
|
- !ruby/object:Gem::Version
|
184
184
|
version: '0'
|
185
185
|
- !ruby/object:Gem::Dependency
|
186
186
|
name: terminal-notifier-guard
|
187
187
|
requirement: !ruby/object:Gem::Requirement
|
188
188
|
requirements:
|
189
|
-
- -
|
189
|
+
- - ">="
|
190
190
|
- !ruby/object:Gem::Version
|
191
191
|
version: '0'
|
192
192
|
type: :development
|
193
193
|
prerelease: false
|
194
194
|
version_requirements: !ruby/object:Gem::Requirement
|
195
195
|
requirements:
|
196
|
-
- -
|
196
|
+
- - ">="
|
197
197
|
- !ruby/object:Gem::Version
|
198
198
|
version: '0'
|
199
199
|
- !ruby/object:Gem::Dependency
|
200
200
|
name: simplecov
|
201
201
|
requirement: !ruby/object:Gem::Requirement
|
202
202
|
requirements:
|
203
|
-
- -
|
203
|
+
- - ">="
|
204
204
|
- !ruby/object:Gem::Version
|
205
205
|
version: '0'
|
206
206
|
type: :development
|
207
207
|
prerelease: false
|
208
208
|
version_requirements: !ruby/object:Gem::Requirement
|
209
209
|
requirements:
|
210
|
-
- -
|
210
|
+
- - ">="
|
211
211
|
- !ruby/object:Gem::Version
|
212
212
|
version: '0'
|
213
213
|
description: Provides NDR classes and class extensions
|
@@ -216,10 +216,10 @@ executables: []
|
|
216
216
|
extensions: []
|
217
217
|
extra_rdoc_files: []
|
218
218
|
files:
|
219
|
-
- .gitignore
|
220
|
-
- .hound.yml
|
221
|
-
- .rubocop.yml
|
222
|
-
- .travis.yml
|
219
|
+
- ".gitignore"
|
220
|
+
- ".hound.yml"
|
221
|
+
- ".rubocop.yml"
|
222
|
+
- ".travis.yml"
|
223
223
|
- CODE_OF_CONDUCT.md
|
224
224
|
- Gemfile
|
225
225
|
- Guardfile
|
@@ -290,17 +290,17 @@ require_paths:
|
|
290
290
|
- lib
|
291
291
|
required_ruby_version: !ruby/object:Gem::Requirement
|
292
292
|
requirements:
|
293
|
-
- -
|
293
|
+
- - ">="
|
294
294
|
- !ruby/object:Gem::Version
|
295
295
|
version: 2.1.0
|
296
296
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
297
297
|
requirements:
|
298
|
-
- -
|
298
|
+
- - ">="
|
299
299
|
- !ruby/object:Gem::Version
|
300
300
|
version: '0'
|
301
301
|
requirements: []
|
302
302
|
rubyforge_project:
|
303
|
-
rubygems_version: 2.
|
303
|
+
rubygems_version: 2.5.1
|
304
304
|
signing_key:
|
305
305
|
specification_version: 4
|
306
306
|
summary: NDR Support library
|