ndr_support 4.0.1 → 4.1.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.
- 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
|