idata 0.1.20 → 0.1.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ivalidate +121 -90
  3. data/lib/idata/version.rb +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 94f33938c4b8c1bb1e05edb8d2f7ad8f84e426e7
4
- data.tar.gz: 684cb978e6b4229572d3a437ded91a3a24e5148f
3
+ metadata.gz: ffabe9c30976ac3d4d15cb5ace2e561bd072ee7d
4
+ data.tar.gz: 83561c0933cbb0bebb4640088e3271a939920682
5
5
  SHA512:
6
- metadata.gz: 715f13b288db1dd5f49b80c34ff93023277ed8b9aa6cbed47614aa93ab5db4a1a185511a8a9bddcad03a9fa8102f072e9beca7674dbcac2e9662217c0e7b22a1
7
- data.tar.gz: 40c8e9880aedb64d5bbe5e5e2fff8e6c101b44d37896013063b6a2c9d3507818cd2d6bc2f445d22770f4e4838e7cfcba39843bf8b558b4821ac2839a9ce5e94e
6
+ metadata.gz: bd4baaa165ccb22bc458d2a7defd96a4d1069be6f88fce2bb7310ecd26ade3ae7e6610c5cc468a0e43decfda2041d6bb217525457cf58646229e6da83414ea66
7
+ data.tar.gz: f5dc5ae7dae7c65de2415ca589f01445748250c500c680aeb8ef81dd204165d4f0e7ac4040d3d1f021905e88e91c4bdf3296042de14b631fc6da3794cb448f87
@@ -159,6 +159,9 @@ ActiveRecord::Base.establish_connection(
159
159
  'timeout' => 15000
160
160
  )
161
161
 
162
+ puts "\nValidating #{$options[:table]}"
163
+ puts "------------------------------------------"
164
+
162
165
  # --------------------------------------------------------------------
163
166
  # Preliminary check
164
167
  # Add column errors if not yet exists
@@ -181,135 +184,163 @@ ActiveRecord::Base.connection.execute(pre_sql)
181
184
  # Check unique field
182
185
  # --------------------------------------------------------------------
183
186
  $options[:unique].each do |field|
184
- puts "Checking uniqueness: #{field}"
185
-
186
- uniq_sql = <<-eos
187
- UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{field} is not unique', ' || '), ' || ')
188
- WHERE #{field} IN (
189
- SELECT #{field} FROM #{$options[:table]} GROUP BY #{field}
190
- HAVING count(*) > 1
191
- ) AND #{field} IS NOT NULL AND length(trim(#{field})) <> 0;
192
- eos
193
-
194
- ActiveRecord::Base.connection.execute(uniq_sql)
187
+ begin
188
+ puts "Checking uniqueness: #{field}"
189
+
190
+ uniq_sql = <<-eos
191
+ UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{field} is not unique', ' || '), ' || ')
192
+ WHERE #{field} IN (
193
+ SELECT #{field} FROM #{$options[:table]} GROUP BY #{field}
194
+ HAVING count(*) > 1
195
+ ) AND #{field} IS NOT NULL AND length(trim(#{field})) <> 0;
196
+ eos
197
+
198
+ ActiveRecord::Base.connection.execute(uniq_sql)
199
+ rescue Exception => ex
200
+ puts " --> *** ERROR ***: #{ex.message.split("\n").first }"
201
+ end
195
202
  end
196
203
 
197
204
  # --------------------------------------------------------------------
198
205
  # Check not-null field
199
206
  # --------------------------------------------------------------------
200
207
  $options[:not_null].each do |field|
201
- puts "Checking NULL: #{field}"
202
-
203
- not_null_sql = <<-eos
204
- UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{field} is null', ' || '), ' || ')
205
- WHERE #{field} IS NULL OR length(trim(#{field})) = 0;
206
- eos
207
-
208
- ActiveRecord::Base.connection.execute(not_null_sql)
208
+ begin
209
+ puts "Checking NULL: #{field}"
210
+
211
+ not_null_sql = <<-eos
212
+ UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{field} is null', ' || '), ' || ')
213
+ WHERE #{field} IS NULL OR length(trim(#{field})) = 0;
214
+ eos
215
+
216
+ ActiveRecord::Base.connection.execute(not_null_sql)
217
+ rescue Exception => ex
218
+ puts " --> *** ERROR ***: #{ex.message.split("\n").first }"
219
+ end
209
220
  end
210
221
 
211
222
  # --------------------------------------------------------------------
212
223
  # Check field satisfying --match=FIELD/REGEXP/
213
224
  # --------------------------------------------------------------------
214
225
  $options[:match].each do |value|
215
- field = value[/^[^\/]+/]
216
- regexp = value[/(?<=\/).*(?=\/)/]
217
- puts "Checking REGEXP matching: #{field} ~ #{regexp}"
218
-
219
- match_sql = <<-eos
220
- UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{field} does not match [#{regexp.gsub("'", "''")}]', ' || '), ' || ')
221
- WHERE #{field} IS NOT NULL AND length(trim(#{field})) <> 0 AND #{field} !~ '#{regexp}';
222
- eos
223
-
224
- ActiveRecord::Base.connection.execute(match_sql)
226
+ begin
227
+ field = value[/^[^\/]+/]
228
+ regexp = value[/(?<=\/).*(?=\/)/]
229
+ puts "Checking REGEXP matching: #{field} ~ #{regexp}"
230
+
231
+ match_sql = <<-eos
232
+ UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{field} does not match [#{regexp.gsub("'", "''")}]', ' || '), ' || ')
233
+ WHERE #{field} IS NOT NULL AND length(trim(#{field})) <> 0 AND #{field} !~ '#{regexp}';
234
+ eos
235
+
236
+ ActiveRecord::Base.connection.execute(match_sql)
237
+ rescue Exception => ex
238
+ puts " --> *** ERROR ***: #{ex.message.split("\n").first }"
239
+ end
225
240
  end
226
241
 
227
242
  # --------------------------------------------------------------------
228
243
  # Check field satisfying --not-match=FIELD/REGEXP/
229
244
  # --------------------------------------------------------------------
230
245
  $options[:not_match].each do |value|
231
- field = value[/^[^\/]+/]
232
- regexp = value[/(?<=\/).*(?=\/)/]
233
- puts "Checking REGEXP not matching: #{regexp}"
234
-
235
- not_match_sql = <<-eos
236
- UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{field} does match [#{regexp.gsub("'", "''")}]', ' || '), ' || ')
237
- WHERE #{field} IS NOT NULL AND length(trim(#{field})) <> 0 AND #{field} ~ '#{regexp}';
238
- eos
239
-
240
- ActiveRecord::Base.connection.execute(not_match_sql)
246
+ begin
247
+ field = value[/^[^\/]+/]
248
+ regexp = value[/(?<=\/).*(?=\/)/]
249
+ puts "Checking REGEXP not matching: #{regexp}"
250
+
251
+ not_match_sql = <<-eos
252
+ UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{field} does match [#{regexp.gsub("'", "''")}]', ' || '), ' || ')
253
+ WHERE #{field} IS NOT NULL AND length(trim(#{field})) <> 0 AND #{field} ~ '#{regexp}';
254
+ eos
255
+
256
+ ActiveRecord::Base.connection.execute(not_match_sql)
257
+ rescue Exception => ex
258
+ puts " --> *** ERROR ***: #{ex.message.split("\n").first }"
259
+ end
241
260
  end
242
261
 
243
262
  # --------------------------------------------------------------------
244
263
  # Check field satisfying --cross-reference
245
264
  # --------------------------------------------------------------------
246
265
  $options[:cross_reference].each do |value|
247
- values = value.split(/[|\.]/)
248
-
249
- if values.size != 3
250
- raise "Error: Wrong argument for --cross-reference switch"
251
- exit(0)
266
+ begin
267
+ values = value.split(/[|\.]/)
268
+
269
+ if values.size != 3
270
+ raise "Error: Wrong argument for --cross-reference switch"
271
+ exit(0)
272
+ end
273
+
274
+ field = values[0]
275
+ ref_table = values[1]
276
+ ref_field = values[2]
277
+
278
+ puts "Checking data integrity: #{value}"
279
+
280
+ # @todo: poor performance here, think of a better SQL!!!
281
+ ref_sql = <<-eos
282
+ UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{field} does not reference #{values[1]}.#{values[2]}', ' || '), ' || ')
283
+ WHERE #{field} IN (
284
+ SELECT origin.#{field} from #{$options[:table]} origin LEFT JOIN #{ref_table} target
285
+ on origin.#{field} = target.#{ref_field}
286
+ where target.#{ref_field} is null
287
+ ) AND #{field} IS NOT NULL AND length(trim(#{field})) <> 0;
288
+ eos
289
+
290
+ ActiveRecord::Base.connection.execute(ref_sql)
291
+ rescue Exception => ex
292
+ puts " --> *** ERROR ***: #{ex.message.split("\n").first }"
252
293
  end
253
-
254
- field = values[0]
255
- ref_table = values[1]
256
- ref_field = values[2]
257
-
258
- puts "Checking data integrity: #{value}"
259
-
260
- # @todo: poor performance here, think of a better SQL!!!
261
- ref_sql = <<-eos
262
- UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{field} does not reference #{values[1]}.#{values[2]}', ' || '), ' || ')
263
- WHERE #{field} IN (
264
- SELECT origin.#{field} from #{$options[:table]} origin LEFT JOIN #{ref_table} target
265
- on origin.#{field} = target.#{ref_field}
266
- where target.#{ref_field} is null
267
- ) AND #{field} IS NOT NULL AND length(trim(#{field})) <> 0;
268
- eos
269
-
270
- ActiveRecord::Base.connection.execute(ref_sql)
271
294
  end
272
295
 
273
296
  # --------------------------------------------------------------------
274
297
  # Custom validation
275
298
  # --------------------------------------------------------------------
276
299
  $options[:query].each do |query|
277
- if query.split("--").count > 1
278
- message = query.split("--").last.strip
279
- else
280
- message = "custom-validation"
300
+ begin
301
+ if query.split("--").count > 1
302
+ message = query.split("--").last.strip
303
+ else
304
+ message = "custom-validation"
305
+ end
306
+
307
+ puts "Checking with custom query: #{query[0..50]}#{query.size > 51 ? "..." : "" }"
308
+
309
+ # @todo: poor performance here, think of a better SQL!!!
310
+ custom_sql = <<-eos
311
+ UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{message}', ' || '), ' || ')
312
+ WHERE NOT #{query}
313
+ eos
314
+
315
+ ActiveRecord::Base.connection.execute(custom_sql)
316
+ rescue Exception => ex
317
+ puts " --> *** ERROR ***: #{ex.message.split("\n").first }"
281
318
  end
282
-
283
- puts "Checking with custom query: #{query[0..50]}#{query.size > 51 ? "..." : "" }"
284
-
285
- # @todo: poor performance here, think of a better SQL!!!
286
- custom_sql = <<-eos
287
- UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{message}', ' || '), ' || ')
288
- WHERE NOT #{query}
289
- eos
290
-
291
- ActiveRecord::Base.connection.execute(custom_sql)
292
319
  end
293
320
 
294
321
  # --------------------------------------------------------------------
295
322
  # Custom validation
296
323
  # --------------------------------------------------------------------
297
324
  $options[:rquery].each do |query|
298
- if query.split("--").count > 1
299
- message = query.split("--").last.strip
300
- else
301
- message = "custom-validation"
325
+ begin
326
+ if query.split("--").count > 1
327
+ message = query.split("--").last.strip
328
+ else
329
+ message = "custom-validation"
330
+ end
331
+
332
+ puts "Checking with custom query: #{query[0..50]}#{query.size > 51 ? "..." : "" }"
333
+
334
+ # @todo: poor performance here, think of a better SQL!!!
335
+ custom_sql = <<-eos
336
+ UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{message}', ' || '), ' || ')
337
+ WHERE #{query}
338
+ eos
339
+
340
+ ActiveRecord::Base.connection.execute(custom_sql)
341
+ rescue Exception => ex
342
+ puts " --> *** ERROR ***: #{ex.message.split("\n").first }"
302
343
  end
303
-
304
- puts "Checking with custom query: #{query[0..50]}#{query.size > 51 ? "..." : "" }"
305
-
306
- # @todo: poor performance here, think of a better SQL!!!
307
- custom_sql = <<-eos
308
- UPDATE #{$options[:table]} SET #{$options[:log_to]} = array_to_string(string_to_array(#{$options[:log_to]}, ' || ') || string_to_array('#{message}', ' || '), ' || ')
309
- WHERE #{query}
310
- eos
311
-
312
- ActiveRecord::Base.connection.execute(custom_sql)
313
344
  end
314
345
 
315
346
 
@@ -1,3 +1,3 @@
1
1
  module Idata
2
- VERSION = "0.1.20"
2
+ VERSION = "0.1.21"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: idata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.20
4
+ version: 0.1.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nghi Pham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-16 00:00:00.000000000 Z
11
+ date: 2014-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler