data_cleansing 0.9.0 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,25 +1,26 @@
1
- require_relative 'test_helper'
2
- require 'active_record'
1
+ require_relative "test_helper"
2
+ require "active_record"
3
3
 
4
4
  ActiveRecord::Base.logger = SemanticLogger[ActiveRecord::Base]
5
5
  ActiveRecord::Base.configurations = {
6
- 'test' => {
7
- 'adapter' => 'sqlite3',
8
- 'database' => 'test/test_db.sqlite3',
9
- 'pool' => 5,
10
- 'timeout' => 5000
6
+ "test" => {
7
+ "adapter" => "sqlite3",
8
+ "database" => "test/test_db.sqlite3",
9
+ "pool" => 5,
10
+ "timeout" => 5000
11
11
  }
12
12
  }
13
- ActiveRecord::Base.establish_connection('test')
13
+ ActiveRecord::Base.establish_connection(:test)
14
14
 
15
- ActiveRecord::Schema.define :version => 0 do
16
- create_table :users, :force => true do |t|
15
+ ActiveRecord::Schema.define version: 0 do
16
+ create_table :users, force: true do |t|
17
17
  t.string :first_name
18
18
  t.string :last_name
19
19
  t.string :address1
20
20
  t.string :address2
21
21
  t.string :ssn
22
22
  t.integer :zip_code
23
+ t.text :text
23
24
  end
24
25
  end
25
26
 
@@ -37,13 +38,13 @@ class User < ActiveRecord::Base
37
38
  attr_accessor :instance_var
38
39
 
39
40
  # Use a global cleaner
40
- cleanse :first_name, :last_name, :cleaner => :strip
41
+ cleanse :first_name, :last_name, cleaner: :strip
41
42
 
42
43
  # Define a once off cleaner
43
- cleanse :address1, :address2, :instance_var, :cleaner => Proc.new {|string| "<< #{string.strip} >>"}
44
+ cleanse :address1, :address2, :instance_var, cleaner: proc { |string| "<< #{string.strip} >>" }
44
45
 
45
46
  # Custom Zip Code cleaner
46
- cleanse :zip_code, :cleaner => :string_to_integer
47
+ cleanse :zip_code, cleaner: :string_to_integer
47
48
 
48
49
  # Automatically cleanse data before validation
49
50
  before_validation :cleanse_attributes!
@@ -52,19 +53,22 @@ end
52
53
  class User2 < ActiveRecord::Base
53
54
  include DataCleansing::Cleanse
54
55
  # Use the same table as User above
55
- self.table_name = 'users'
56
+ self.table_name = "users"
57
+
58
+ serialize :text
56
59
 
57
60
  # Test :all cleaner. Only works with ActiveRecord Models
58
- cleanse :all, :cleaner => [:strip, Proc.new{|s| "@#{s}@"}], :except => [:address1, :zip_code]
61
+ # Must explicitly excelude :text since it is serialized
62
+ cleanse :all, cleaner: [:strip, proc { |s| "@#{s}@" }], except: %i[address1 zip_code text]
59
63
 
60
64
  # Clean :first_name multiple times
61
- cleanse :first_name, :cleaner => Proc.new {|string| "<< #{string} >>"}
65
+ cleanse :first_name, cleaner: proc { |string| "<< #{string} >>" }
62
66
 
63
67
  # Clean :first_name multiple times
64
- cleanse :first_name, :cleaner => Proc.new {|string| "$#{string}$"}
68
+ cleanse :first_name, cleaner: proc { |string| "$#{string}$" }
65
69
 
66
70
  # Custom Zip Code cleaner
67
- cleanse :zip_code, :cleaner => :string_to_integer
71
+ cleanse :zip_code, cleaner: :string_to_integer
68
72
 
69
73
  # Automatically cleanse data before validation
70
74
  before_validation :cleanse_attributes!
@@ -72,82 +76,81 @@ end
72
76
 
73
77
  class ActiveRecordTest < Minitest::Test
74
78
  describe "ActiveRecord Models" do
75
-
76
- it 'have globally registered cleaner' do
79
+ it "have globally registered cleaner" do
77
80
  assert DataCleansing.cleaner(:strip)
78
81
  end
79
82
 
80
- it 'Model.cleanse_attribute' do
81
- assert_equal 'joe', User.cleanse_attribute(:first_name, ' joe ')
82
- assert_equal 'black', User.cleanse_attribute(:last_name, "\n black\n")
83
- assert_equal '<< 2632 Brown St >>', User.cleanse_attribute(:address1, "2632 Brown St \n")
84
- assert_equal '<< instance >>', User.cleanse_attribute(:instance_var, "\n instance\n\t ")
85
- assert_equal 12345, User.cleanse_attribute(:zip_code, "\n\tblah 12345badtext\n")
83
+ it "Model.cleanse_attribute" do
84
+ assert_equal "joe", User.cleanse_attribute(:first_name, " joe ")
85
+ assert_equal "black", User.cleanse_attribute(:last_name, "\n black\n")
86
+ assert_equal "<< 2632 Brown St >>", User.cleanse_attribute(:address1, "2632 Brown St \n")
87
+ assert_equal "<< instance >>", User.cleanse_attribute(:instance_var, "\n instance\n\t ")
88
+ assert_equal 12_345, User.cleanse_attribute(:zip_code, "\n\tblah 12345badtext\n")
86
89
  end
87
90
 
88
91
  describe "with user" do
89
92
  before do
90
93
  @user = User.new(
91
- :first_name => ' joe ',
92
- :last_name => "\n black\n",
93
- :address1 => "2632 Brown St \n",
94
- :zip_code => "\n\tblah 12345badtext\n",
95
- :instance_var => "\n instance\n\t "
94
+ first_name: " joe ",
95
+ last_name: "\n black\n",
96
+ address1: "2632 Brown St \n",
97
+ zip_code: "\n\tblah 12345badtext\n",
98
+ instance_var: "\n instance\n\t "
96
99
  )
97
100
  end
98
101
 
99
- it 'only have 3 cleaners' do
102
+ it "only have 3 cleaners" do
100
103
  assert_equal 3, User.send(:data_cleansing_cleaners).size, User.send(:data_cleansing_cleaners)
101
104
  end
102
105
 
103
- it 'cleanse_attributes! using global cleaner' do
106
+ it "cleanse_attributes! using global cleaner" do
104
107
  assert_equal true, @user.valid?
105
- assert_equal 'joe', @user.first_name
106
- assert_equal 'black', @user.last_name
108
+ assert_equal "joe", @user.first_name
109
+ assert_equal "black", @user.last_name
107
110
  end
108
111
 
109
- it 'cleanse_attributes! using attribute specific custom cleaner' do
112
+ it "cleanse_attributes! using attribute specific custom cleaner" do
110
113
  assert_equal true, @user.valid?
111
- assert_equal '<< 2632 Brown St >>', @user.address1
112
- assert_equal '<< instance >>', @user.instance_var
114
+ assert_equal "<< 2632 Brown St >>", @user.address1
115
+ assert_equal "<< instance >>", @user.instance_var
113
116
  end
114
117
 
115
- it 'cleanse_attributes! using global cleaner using rails extensions' do
118
+ it "cleanse_attributes! using global cleaner using rails extensions" do
116
119
  @user.cleanse_attributes!
117
- assert_equal 12345, @user.zip_code
120
+ assert_equal 12_345, @user.zip_code
118
121
  end
119
122
  end
120
123
 
121
124
  describe "with user2" do
122
125
  before do
123
126
  @user = User2.new(
124
- :first_name => ' joe ',
125
- :last_name => "\n black\n",
126
- :ssn => "\n 123456789 \n ",
127
- :address1 => "2632 Brown St \n",
128
- :zip_code => "\n\t blah\n"
127
+ first_name: " joe ",
128
+ last_name: "\n black\n",
129
+ ssn: "\n 123456789 \n ",
130
+ address1: "2632 Brown St \n",
131
+ zip_code: "\n\t blah\n",
132
+ text: ["\n 123456789 \n ", " second "]
129
133
  )
130
134
  end
131
135
 
132
- it 'have 4 cleaners defined' do
136
+ it "have 4 cleaners defined" do
133
137
  assert_equal 4, User2.send(:data_cleansing_cleaners).size, User2.send(:data_cleansing_cleaners)
134
138
  end
135
139
 
136
- it 'have 3 attributes cleaners defined' do
140
+ it "have 3 attributes cleaners defined" do
137
141
  # :all, :first_name, :zip_code
138
142
  assert_equal 3, User2.send(:data_cleansing_attribute_cleaners).size, User2.send(:data_cleansing_attribute_cleaners)
139
143
  end
140
144
 
141
- it 'cleanse_attributes! clean all attributes' do
145
+ it "cleanse_attributes! clean all attributes" do
142
146
  assert_equal true, @user.valid?
143
- assert_equal '$<< @joe@ >>$', @user.first_name, User2.send(:data_cleansing_cleaners)
144
- assert_equal '@black@', @user.last_name
147
+ assert_equal "$<< @joe@ >>$", @user.first_name, User2.send(:data_cleansing_cleaners)
148
+ assert_equal "@black@", @user.last_name
145
149
  assert_equal "2632 Brown St \n", @user.address1
146
150
  assert_equal "@123456789@", @user.ssn
147
- assert_equal nil, @user.zip_code, User2.send(:data_cleansing_cleaners)
151
+ assert_nil @user.zip_code, User2.send(:data_cleansing_cleaners)
152
+ assert_equal ["\n 123456789 \n ", " second "], @user.text
148
153
  end
149
-
150
154
  end
151
-
152
155
  end
153
156
  end
@@ -1,14 +1,15 @@
1
- require_relative 'test_helper'
2
- require 'active_support/core_ext/time/calculations'
1
+ require_relative "test_helper"
2
+ require "active_support/core_ext/time/calculations"
3
3
 
4
4
  class CleanersTest < Minitest::Test
5
5
  class User
6
6
  include DataCleansing::Cleanse
7
7
 
8
8
  attr_accessor :first_name, :last_name, :address1, :address2,
9
- :make_this_upper, :clean_non_word, :clean_non_printable,
10
- :clean_html, :clean_from_uri, :clean_to_uri, :clean_whitespace,
11
- :clean_digits_only, :clean_to_integer, :clean_to_float, :clean_end_of_day
9
+ :make_this_upper, :clean_non_word, :clean_non_printable,
10
+ :clean_html, :clean_from_uri, :clean_to_uri, :clean_whitespace,
11
+ :clean_digits_only, :clean_to_integer, :clean_to_float, :clean_end_of_day,
12
+ :clean_order
12
13
 
13
14
  cleanse :first_name, :last_name, :address1, :address2, cleaner: :strip
14
15
  cleanse :make_this_upper, cleaner: :upcase
@@ -22,188 +23,198 @@ class CleanersTest < Minitest::Test
22
23
  cleanse :clean_to_integer, cleaner: :string_to_integer
23
24
  cleanse :clean_to_float, cleaner: :string_to_float
24
25
  cleanse :clean_end_of_day, cleaner: :end_of_day
26
+
27
+ # Call cleaners in the order they are defined
28
+ cleanse :clean_order, cleaner: %i[upcase strip]
29
+ cleanse :clean_order, cleaner: ->(val) { val == "BLAH" ? " yes " : " no " }
25
30
  end
26
31
 
27
- describe 'Cleaners' do
28
- it '#strip' do
32
+ describe "Cleaners" do
33
+ it "#strip" do
29
34
  user = User.new
30
- user.first_name = ' jack black '
35
+ user.first_name = " jack black "
31
36
  user.last_name = " \n \t joe"
32
37
  user.address1 = "joe \n\n \n \t\t "
33
38
  user.address2 = "joe \n\n bloggs \n \t\t "
34
39
  user.cleanse_attributes!
35
- assert_equal 'jack black', user.first_name
36
- assert_equal 'joe', user.last_name
37
- assert_equal 'joe', user.address1
40
+ assert_equal "jack black", user.first_name
41
+ assert_equal "joe", user.last_name
42
+ assert_equal "joe", user.address1
38
43
  assert_equal "joe \n\n bloggs", user.address2
39
44
  end
40
45
 
41
- it '#upcase' do
46
+ it "#upcase" do
42
47
  user = User.new
43
- user.make_this_upper = ' jacK blAck '
48
+ user.make_this_upper = " jacK blAck "
44
49
  user.cleanse_attributes!
45
- assert_equal ' JACK BLACK ', user.make_this_upper
50
+ assert_equal " JACK BLACK ", user.make_this_upper
46
51
  end
47
52
 
48
- it '#remove_non_word' do
53
+ it "#remove_non_word" do
49
54
  user = User.new
50
55
  user.clean_non_word = " !@#$%^&*()+=-~`\t\n jacK blAck <>.,/\"':;{][]\|?/\\ "
51
56
  user.cleanse_attributes!
52
- assert_equal 'jacKblAck', user.clean_non_word
57
+ assert_equal "jacKblAck", user.clean_non_word
53
58
  end
54
59
 
55
- it '#remove_non_printable' do
60
+ it "#remove_non_printable" do
56
61
  user = User.new
57
- user.clean_non_printable = " !@#$%^&*()+=-~`\t\n jacK blAck <>.,/\"':;{][]\|?/\\ "
62
+ user.clean_non_printable = " !@#$%^&*()+=-~`\t\n jacK blAck <>.,/\"':;{][]\|?/\\ \x89 "
58
63
  user.cleanse_attributes!
59
64
  assert_equal " !@#$%^&*()+=-~` jacK blAck <>.,/\"':;{][]\|?/\\ ", user.clean_non_printable
60
65
  end
61
66
 
62
- describe '#clean_html' do
63
- it 'cleans &quot;' do
67
+ describe "#clean_html" do
68
+ it "cleans &quot;" do
64
69
  user = User.new
65
- user.clean_html = 'O&quot;Leary'
70
+ user.clean_html = "O&quot;Leary"
66
71
  user.cleanse_attributes!
67
72
  assert_equal 'O"Leary', user.clean_html
68
73
  end
69
74
 
70
- it 'cleans &amp;' do
75
+ it "cleans &amp;" do
71
76
  user = User.new
72
- user.clean_html = 'Jim &amp; Candi'
77
+ user.clean_html = "Jim &amp; Candi"
73
78
  user.cleanse_attributes!
74
- assert_equal 'Jim & Candi', user.clean_html
79
+ assert_equal "Jim & Candi", user.clean_html
75
80
  end
76
81
 
77
- it 'cleans &gt;' do
82
+ it "cleans &gt;" do
78
83
  user = User.new
79
- user.clean_html = '2 &gt; 1'
84
+ user.clean_html = "2 &gt; 1"
80
85
  user.cleanse_attributes!
81
- assert_equal '2 > 1', user.clean_html
86
+ assert_equal "2 > 1", user.clean_html
82
87
  end
83
88
 
84
- it 'cleans &lt;' do
89
+ it "cleans &lt;" do
85
90
  user = User.new
86
- user.clean_html = '1 &lt; 2'
91
+ user.clean_html = "1 &lt; 2"
87
92
  user.cleanse_attributes!
88
- assert_equal '1 < 2', user.clean_html
93
+ assert_equal "1 < 2", user.clean_html
89
94
  end
90
95
 
91
- it 'cleans &apos;' do
96
+ it "cleans &apos;" do
92
97
  user = User.new
93
- user.clean_html = '1&apos;2'
98
+ user.clean_html = "1&apos;2"
94
99
  user.cleanse_attributes!
95
100
  assert_equal "1'2", user.clean_html
96
101
  end
97
102
 
98
- it 'cleans &nbsp;' do
103
+ it "cleans &nbsp;" do
99
104
  user = User.new
100
- user.clean_html = '1&nbsp;2'
105
+ user.clean_html = "1&nbsp;2"
101
106
  user.cleanse_attributes!
102
107
  assert_equal "1 2", user.clean_html
103
108
  end
104
109
 
105
- it 'cleans &AMP;' do
110
+ it "cleans &AMP;" do
106
111
  user = User.new
107
- user.clean_html = 'Mutt &AMP; Jeff Inc.'
112
+ user.clean_html = "Mutt &AMP; Jeff Inc."
108
113
  user.cleanse_attributes!
109
- assert_equal 'Mutt & Jeff Inc.', user.clean_html
114
+ assert_equal "Mutt & Jeff Inc.", user.clean_html
110
115
  end
111
116
 
112
- it 'does not clean &;' do
117
+ it "does not clean &;" do
113
118
  user = User.new
114
- user.clean_html = 'Mutt &; Jeff Inc.'
119
+ user.clean_html = "Mutt &; Jeff Inc."
115
120
  user.cleanse_attributes!
116
- assert_equal 'Mutt &; Jeff Inc.', user.clean_html
121
+ assert_equal "Mutt &; Jeff Inc.", user.clean_html
117
122
  end
118
123
 
119
- it 'does not clean &blah;' do
124
+ it "does not clean &blah;" do
120
125
  user = User.new
121
- user.clean_html = '1&blah;2'
126
+ user.clean_html = "1&blah;2"
122
127
  user.cleanse_attributes!
123
- assert_equal '1&blah;2', user.clean_html
128
+ assert_equal "1&blah;2", user.clean_html
124
129
  end
125
130
  end
126
131
 
127
- describe '#unescape_uri' do
128
- it 'converts %20' do
132
+ describe "#unescape_uri" do
133
+ it "converts %20" do
129
134
  user = User.new
130
- user.clean_from_uri = 'Jim%20%20Bob%20'
135
+ user.clean_from_uri = "Jim%20%20Bob%20"
131
136
  user.cleanse_attributes!
132
- assert_equal 'Jim Bob ', user.clean_from_uri
137
+ assert_equal "Jim Bob ", user.clean_from_uri
133
138
  end
134
- it 'converts %20 only' do
139
+ it "converts %20 only" do
135
140
  user = User.new
136
- user.clean_from_uri = '%20'
141
+ user.clean_from_uri = "%20"
137
142
  user.cleanse_attributes!
138
- assert_equal ' ', user.clean_from_uri
143
+ assert_equal " ", user.clean_from_uri
139
144
  end
140
145
  end
141
146
 
142
- describe '#escape_uri' do
143
- it 'converts %20' do
147
+ describe "#escape_uri" do
148
+ it "converts spaces" do
144
149
  user = User.new
145
- user.clean_to_uri = 'Jim Bob '
150
+ user.clean_to_uri = "Jim Bob "
146
151
  user.cleanse_attributes!
147
- assert_equal 'Jim%20%20Bob%20', user.clean_to_uri
152
+ assert_equal "Jim++Bob+", user.clean_to_uri
148
153
  end
149
- it 'converts %20 only' do
154
+ it "converts space only" do
150
155
  user = User.new
151
- user.clean_to_uri = ' '
156
+ user.clean_to_uri = " "
152
157
  user.cleanse_attributes!
153
- assert_equal '%20', user.clean_to_uri
158
+ assert_equal "+", user.clean_to_uri
154
159
  end
155
160
  end
156
161
 
157
- describe '#compress_whitespace' do
158
- it 'compresses multiple spaces' do
162
+ describe "#compress_whitespace" do
163
+ it "compresses multiple spaces" do
159
164
  user = User.new
160
- user.clean_whitespace = ' J im B ob '
165
+ user.clean_whitespace = " J im B ob "
161
166
  user.cleanse_attributes!
162
- assert_equal ' J im B ob ', user.clean_whitespace
167
+ assert_equal " J im B ob ", user.clean_whitespace
163
168
  end
164
169
 
165
- it 'does not compress single spaces' do
170
+ it "does not compress single spaces" do
166
171
  user = User.new
167
- user.clean_whitespace = ' Jack Black'
172
+ user.clean_whitespace = " Jack Black"
168
173
  user.cleanse_attributes!
169
- assert_equal ' Jack Black', user.clean_whitespace
174
+ assert_equal " Jack Black", user.clean_whitespace
170
175
  end
171
176
 
172
- it 'compresses newlines and tabs' do
177
+ it "compresses newlines and tabs" do
173
178
  user = User.new
174
179
  user.clean_whitespace = " \n\n J im B ob \t\n\t "
175
180
  user.cleanse_attributes!
176
- assert_equal ' J im B ob ', user.clean_whitespace
181
+ assert_equal " J im B ob ", user.clean_whitespace
177
182
  end
178
183
  end
179
184
 
180
- it '#digits_only' do
185
+ it "#digits_only" do
181
186
  user = User.new
182
187
  user.clean_digits_only = " 1 !@#$%^&*3()+=-~`\t\n jacK6 blAck <>.,/\"':;8{][]9\|?/\\ "
183
188
  user.cleanse_attributes!
184
- assert_equal '13689', user.clean_digits_only
189
+ assert_equal "13689", user.clean_digits_only
185
190
  end
186
191
 
187
- it '#string_to_integer' do
192
+ it "#string_to_integer" do
188
193
  user = User.new
189
194
  user.clean_to_integer = " 1 !@#$%^&*3()+=-~`\t\n jacK6 blAck <>.,/\"':;8{][]9\|?/\\ "
190
195
  user.cleanse_attributes!
191
196
  assert_equal 136, user.clean_to_integer
192
197
  end
193
198
 
194
- it '#string_to_float' do
199
+ it "#string_to_float" do
195
200
  user = User.new
196
201
  user.clean_to_float = " 1 !@#$%^&*3()+=-~`\t\n jacK6 blAck <>.,/\"':;8{][]9\|?/\\ "
197
202
  user.cleanse_attributes!
198
203
  assert_equal 136.89, user.clean_to_float
199
204
  end
200
205
 
201
- it '#date_to_time_at_end_of_day' do
206
+ it "#date_to_time_at_end_of_day" do
202
207
  user = User.new
203
- user.clean_end_of_day = Time.parse('2016-03-03 14:33:44 +0000')
208
+ user.clean_end_of_day = Time.parse("2016-03-03 14:33:44 +0000")
204
209
  user.cleanse_attributes!
205
- assert_equal Time.parse('2016-03-03 23:59:59 +0000').to_i, user.clean_end_of_day.to_i
210
+ assert_equal Time.parse("2016-03-03 23:59:59 +0000").to_i, user.clean_end_of_day.to_i
206
211
  end
207
212
 
213
+ it "cleans in the order defined" do
214
+ user = User.new
215
+ user.clean_order = " blah "
216
+ user.cleanse_attributes!
217
+ assert_equal " yes ", user.clean_order
218
+ end
208
219
  end
209
220
  end
@@ -0,0 +1,9 @@
1
+ require_relative "test_helper"
2
+
3
+ class DataCleansingTest < Minitest::Test
4
+ describe "#clean" do
5
+ it "can call any cleaner directly" do
6
+ assert_equal "jack black", DataCleansing.clean(:strip, " jack black ")
7
+ end
8
+ end
9
+ end