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 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