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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 615bc4d101d40c70ef8f3a0d6d661faa12d36b50
4
- data.tar.gz: 2d24c21ed21bd49f954417784b691aaeb24eecab
3
+ metadata.gz: 7dbd286ab4f1123812eb61b3374febfb81668841
4
+ data.tar.gz: 88a77bdc779fc4f782a83070c3bcb905b5f611fc
5
5
  SHA512:
6
- metadata.gz: 7f41bb799520b3342de385bfb659eb87cf32c7cef6b58141767d6c1d7b9354af0e1538afac9b7653cb29833bf706c0e8de21d73e8169d537633023855ae4a1db
7
- data.tar.gz: 41a3227f28c85a449bf494425cf8ae03e44cefc0b42f660c2ce84e7cccecbfa6bb351ede27c139956e457854006a082783974cef7b944353ae15573a8acfddb8
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: timgentry
130
- safe_revision: 9ede99853b487b6ebd5271dcf14ff6ab5152044d
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: timgentry
162
- safe_revision: 921931ed866da64264ccef52248fa460bd7ab37d
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: timgentry
226
- safe_revision: 9ede99853b487b6ebd5271dcf14ff6ab5152044d
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
- self.delete('^0-9')[0..9]
36
+ delete('^0-9')[0..9]
35
37
  when :postcode, :get_postcode
36
- self.postcodeize(:db)
38
+ postcodeize(:db)
37
39
  when :lpi
38
- self.upcase.delete('^0-9A-Z')
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(self.upcase) { |str, scheme| str.gsub(*scheme) }.strip
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] || self.upcase
80
+ replace_ethniccategory[self] || upcase
79
81
  when :code
80
- self.split(/ |,|;/).map do |code|
81
- code.blank? ? next : code.gsub('.', '')
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 = self.upcase.split(/ |,|;/).delete_if { |x| x.squash.blank? }
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
- self.strip_xml_unsafe_characters
106
+ strip_xml_unsafe_characters
101
107
  when :roman5
102
108
  # This deromanises roman numerals between 1 and 5
103
- self.gsub(/[IV]+/i) { |match| ROMAN_ONE_TO_FIVE_MAPPING[match.upcase] }
109
+ gsub(/[IV]+/i) { |match| ROMAN_ONE_TO_FIVE_MAPPING[match.upcase] }
104
110
  when :tnmcategory
105
- self.sub!(/\A[tnm]/i, '')
111
+ sub!(/\A[tnm]/i, '')
106
112
  if self =~ /\Ax\z/i
107
- self.upcase
113
+ upcase
108
114
  else
109
- self.downcase
115
+ downcase
110
116
  end
111
117
  when :upcase
112
118
  upcase
113
119
  else
114
- self.gsub(' ?', ' ')
120
+ gsub(' ?', ' ')
115
121
  end
116
122
  end
117
123
 
118
124
  def strip_xml_unsafe_characters
119
- self.gsub(String::INVALID_CONTROL_CHARS, '')
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
- split(/ |,|;/).map do |code|
141
+ split_on_separators.map do |code|
130
142
  db_code = code.squash
131
- if 4 == db_code.length || db_code =~ /CZ00[12]/
132
- db_code
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
@@ -3,5 +3,5 @@
3
3
  # This defines the NdrSupport version. If you change it, rebuild and commit the gem.
4
4
  # Use "rake build" to build the gem, see rake -T for all bundler rake tasks.
5
5
  module NdrSupport
6
- VERSION = '4.0.1'
6
+ VERSION = '4.1.1'
7
7
  end
@@ -1,183 +1,192 @@
1
1
  require 'test_helper'
2
2
 
3
- class String::CleaningTest < Minitest::Test
4
- # squash
5
-
6
- test 'postcodeize' do
7
- assert_equal 'CB22 3AD', 'CB223AD'.postcodeize
8
- assert_equal 'CB2 2QQ', 'CB22QQ'.postcodeize
9
- assert_equal 'CB2 2QQ', 'CB22QQ '.postcodeize
10
- assert_equal 'CB2 2QQ', 'C B 22QQ '.postcodeize
11
- assert_equal 'CB22QQ', 'CB2 2QQ'.postcodeize(:compact)
12
- assert_equal 'CB2 2QQ', 'CB22QQ '.postcodeize(:db)
13
- assert_equal 'CB2A2QQ', 'CB2A 2QQ '.postcodeize(:db)
14
- assert_equal '', ''.postcodeize
15
- assert_equal 'CB2 2QQ', 'cb22qq'.postcodeize(:db)
16
- # Database storage format for all major UK postcode formats:
17
- assert_equal 'A9 9AA', 'A9 9AA'.postcodeize(:db)
18
- assert_equal 'A99 9AA', 'A99 9AA'.postcodeize(:db)
19
- assert_equal 'A9A 9AA', 'A9A 9AA'.postcodeize(:db)
20
- assert_equal 'AA9 9AA', 'AA9 9AA'.postcodeize(:db)
21
- assert_equal 'AA999AA', 'AA99 9AA'.postcodeize(:db)
22
- assert_equal 'AA9A9AA', 'AA9A 9AA'.postcodeize(:db)
23
- # Examples of legacy postcodes, that should be unchanged
24
- assert_equal 'IP222', 'IP222'.postcodeize(:db)
25
- assert_equal 'IP222E', 'IP222E'.postcodeize(:db)
26
- assert_equal 'HANTS', 'HANTS'.postcodeize(:db)
27
- end
28
-
29
- test 'xml_unsafe?' do
30
- without_control = 'hello world!'
31
- refute without_control.xml_unsafe?
32
-
33
- with_safe_control = "increase: 100\045"
34
- refute with_safe_control.xml_unsafe?
35
-
36
- with_unsafe_control = "Lorem \000Ipsum\000"
37
- assert with_unsafe_control.xml_unsafe?
38
- end
39
-
40
- test 'strip_xml_unsafe_characters' do
41
- without_control = 'hello world!'
42
- assert_equal without_control, without_control.strip_xml_unsafe_characters
43
-
44
- with_safe_control = "increase: 100\045"
45
- assert_equal 'increase: 100%', with_safe_control.strip_xml_unsafe_characters
46
-
47
- with_unsafe_control = "Lorem \000Ipsum\000"
48
- assert_equal 'Lorem Ipsum', with_unsafe_control.strip_xml_unsafe_characters
49
- end
50
-
51
- test 'clean xmlsafe' do
52
- without_control = 'hello world!'
53
- assert_equal without_control, without_control.clean(:xmlsafe)
54
-
55
- with_safe_control = "increase: 100\045"
56
- assert_equal 'increase: 100%', with_safe_control.clean(:xmlsafe)
57
-
58
- with_unsafe_control = "Lorem \007Ipsum\006"
59
- assert_equal 'Lorem Ipsum', with_unsafe_control.clean(:xmlsafe)
60
- end
61
-
62
- test 'clean make_xml_safe' do
63
- without_control = 'hello world!'
64
- assert_equal without_control, without_control.clean(:make_xml_safe)
65
-
66
- with_safe_control = "increase: 100\045"
67
- assert_equal 'increase: 100%', with_safe_control.clean(:make_xml_safe)
68
-
69
- with_unsafe_control = "Lorem \000Ipsum\000"
70
- assert_equal 'Lorem Ipsum', with_unsafe_control.clean(:make_xml_safe)
71
- end
72
-
73
- test 'clean nhsnumber' do
74
- assert_equal '1234567890', '123 456 7890'.clean(:nhsnumber)
75
- assert_equal '1234567890', ' 123-456-7890123'.clean(:nhsnumber)
76
- assert_equal '', 'unknown'.clean(:nhsnumber)
77
- assert_equal '', ''.clean(:nhsnumber)
78
- end
79
-
80
- test 'clean postcode' do
81
- assert_equal 'CB4 3ND', 'cb4 3ND '.clean(:postcode)
82
- assert_equal 'CB223AD', ' CB22 3AD'.clean(:postcode)
83
- assert_equal '', ''.clean(:postcode)
84
- end
85
-
86
- test 'clean lpi' do
87
- # self.upcase.delete('^0-9A-Z')
88
- assert_equal '007', '007?!?'.clean(:lpi)
89
- assert_equal 'A0000001', 'a0000001'.clean(:lpi)
90
- assert_equal 'UNKNOWN', 'UNKNOWN'.clean(:lpi)
91
- assert_equal '', ''.clean(:lpi)
92
- end
93
-
94
- test 'clean sex' do
95
- assert_equal '1', 'male'.clean(:sex)
96
- assert_equal '1', '1'.clean(:sex)
97
- assert_equal '2', 'F'.clean(:sex)
98
- assert_equal '2', '2'.clean(:sex)
99
- assert_equal '0', ''.clean(:sex)
100
- assert_equal '0', 'unknown'.clean(:sex)
101
- end
102
-
103
- test 'clean sex_c' do
104
- assert_equal 'M', 'male'.clean(:sex_c)
105
- assert_equal 'M', '1'.clean(:sex_c)
106
- assert_equal 'F', 'F'.clean(:sex_c)
107
- assert_equal 'F', '2'.clean(:sex_c)
108
- assert_equal '', ''.clean(:sex_c)
109
- assert_equal '', 'unknown'.clean(:sex_c)
110
- end
111
-
112
- test 'clean name' do
113
- assert_equal 'MAKE A NAME', ' Make A. Name '.clean(:name)
114
- assert_equal 'PUNCTUATE A NAME', 'PUNCTUATE,A;NAME'.clean(:name)
115
- assert_equal 'SPREAD A NAME', 'spread a name'.clean(:name)
116
- assert_equal "O'NAME", 'O`NAME'.clean(:name)
117
- assert_equal "JOHN MIDDLE O'NAME", 'John, Middle. O`NAME'.clean(:name)
118
- assert_equal '', ''.clean(:name)
119
- end
120
-
121
- test 'clean ethniccategory' do
122
- assert_equal 'M', '1'.clean(:ethniccategory)
123
- assert_equal 'X', '99'.clean(:ethniccategory)
124
- assert_equal 'A', 'A'.clean(:ethniccategory)
125
- assert_equal 'INVALID', 'InValid'.clean(:ethniccategory)
126
- assert_equal '', ''.clean(:ethniccategory)
127
- end
128
-
129
- test 'clean code' do
130
- assert_equal 'a123 B456', ' a12.3,,B45.6;'.clean(:code)
131
- assert_equal 'A123 B456', 'A12.3 B.456'.clean(:code)
132
- assert_equal 'UNKNOWN', 'UNKNOWN'.clean(:code)
133
- assert_equal '', ''.clean(:code)
134
- end
135
-
136
- test 'clean code_icd' do
137
- # TODO
138
- end
139
-
140
- test 'clean code_opcs' do
141
- assert_equal 'B274 Z943', ' b27.4,Z94.3;'.clean(:code_opcs)
142
- assert_equal 'B274 Z943', 'B27.4 Z94.3'.clean(:code_opcs)
143
- assert_equal 'CZ001', 'CZ001'.clean(:code_opcs)
144
- assert_equal 'B274 CZ002', 'B27.4 cz00.2'.clean(:code_opcs)
145
- assert_equal '', 'CZ003'.clean(:code_opcs)
146
- assert_equal '', 'UNKNOWN'.clean(:code_opcs)
147
- assert_equal '', ''.clean(:code_opcs)
148
- end
149
-
150
- test 'clean hospitalnumber' do
151
- assert_equal 'a0000001', 'a0000001'.clean(:hospitalnumber)
152
- assert_equal 'A0000001', 'A0000001B'.clean(:hospitalnumber)
153
- assert_equal 'UNKNOW', 'UNKNOWN'.clean(:hospitalnumber)
154
- assert_equal '', ''.clean(:hospitalnumber)
155
- end
156
-
157
- test 'clean tnmcategory' do
158
- assert_equal '', ''.clean(:tnmcategory)
159
- assert_equal 'X', 'X'.clean(:tnmcategory)
160
- assert_equal 'X', 'x'.clean(:tnmcategory)
161
- assert_equal '1a', '1A'.clean(:tnmcategory)
162
- assert_equal '1a', '1a'.clean(:tnmcategory)
163
- assert_equal '1a', 'T1A'.clean(:tnmcategory)
164
- assert_equal '1a', 't1a'.clean(:tnmcategory)
165
- assert_equal 'X', 'TX'.clean(:tnmcategory)
166
- assert_equal 'X', 'tx'.clean(:tnmcategory)
167
- assert_equal 'X', 'Tx'.clean(:tnmcategory)
168
- assert_equal 'X', 'tX'.clean(:tnmcategory)
169
- end
170
-
171
- test 'clean upcase' do
172
- assert_equal '', ''.clean(:upcase)
173
- assert_equal 'DOWNCASE', 'downcase'.clean(:upcase)
174
- assert_equal 'MIXEDCASE', 'mIxEdCaSe'.clean(:upcase)
175
- assert_equal 'UPCASE', 'UPCASE'.clean(:upcase)
176
- end
177
-
178
- test 'clean fallback' do
179
- assert_equal 'UN KNOWN', 'UN ?KNOWN'.clean(:somethingorother)
180
- assert_equal 'UNKNOWN', 'UNKNOWN'.clean(:somethingorother)
181
- assert_equal '', ''.clean(:somethingorother)
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.0.1
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-03-01 00:00:00.000000000 Z
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.0.14
303
+ rubygems_version: 2.5.1
304
304
  signing_key:
305
305
  specification_version: 4
306
306
  summary: NDR Support library