data_sanity 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,7 +10,7 @@ module DataSanity
10
10
  @records_per_model = options[:records_per_model] || CONSIDERED_RECORDS
11
11
  @models = load_models
12
12
  file_path = "#{Rails.root}/config/data_sanity_criteria.yml"
13
- @criteria = File.exists?(file_path) ? (YAML.load File.open(file_path).read) : false
13
+ @criteria = (File.exists?(file_path) ? (YAML.load File.open(file_path).read) : false) rescue false
14
14
  end
15
15
 
16
16
  def investigate
@@ -43,6 +43,7 @@ module DataSanity
43
43
 
44
44
  def validate_criteria(model, criteria)
45
45
  criteria.each do |attribute, values|
46
+ values = (model.select("DISTINCT(#{attribute})").collect(&attribute.to_sym)) if values.blank?
46
47
  values.each do |value|
47
48
  results = model.where(attribute.to_sym => value)
48
49
  count = results.count
@@ -18,9 +18,9 @@ namespace :data_sanity do
18
18
  end
19
19
 
20
20
  desc 'Creating a sample criteria file'
21
- task :citeria do
21
+ task :criteria do
22
22
  Dir.chdir("#{Rails.root}") do
23
- system "cp #{File.open('./templates/data_sanity_criteria.yml').read} config/."
23
+ system "cp #{SOURCE_PATH}/data_sanity/templates/data_sanity_criteria.yml #{Rails.root}/config/."
24
24
  end
25
25
  end
26
26
  end
@@ -2,9 +2,6 @@
2
2
  # This is a sample criteria.
3
3
  # Start with Model Name and
4
4
  #<Model Name>: # Criteria-Rule to be applied
5
- # <field name>: # Anthing mentioned is considered for validations against mentioned below distinct values
6
- # - 'Raju' # Various values field can take
7
- # - 'Saju'
8
- # - 'Taju'
9
- # <age> # Anthing mentioned is considered for validations against all possible distinct values
5
+ # <field name>: ['Raju', 'kaju', 'Taju'] # Field is considered for validations against distinct values in array
6
+ # <age> # Field is considered for validations against all possible distinct values
10
7
  ############################################
@@ -1,3 +1,3 @@
1
1
  module DataSanity
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
data/lib/data_sanity.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require "rails"
2
2
 
3
- require File.dirname(__FILE__) + "/data_sanity/inspector"
4
- require File.dirname(__FILE__) + "/data_sanity/railtie"
5
- require File.dirname(__FILE__) + "/data_sanity/models/data_inspector"
6
- require File.dirname(__FILE__) + "/data_sanity/version"
3
+ SOURCE_PATH = File.dirname(__FILE__)
4
+
5
+ require SOURCE_PATH + "/data_sanity/inspector"
6
+ require SOURCE_PATH + "/data_sanity/railtie"
7
+ require SOURCE_PATH + "/data_sanity/models/data_inspector"
8
+ require SOURCE_PATH + "/data_sanity/version"
@@ -93,13 +93,29 @@ describe "DataSanity::Inspector" do
93
93
  2.times { Person.new(:name => "Saju").save(:validate => false) }
94
94
  2.times { Car.new(:name => "Santro").save(:validate => false) }
95
95
  Person.new(:age => 20).save(:validate => false)
96
- car = Car.new(:name => "800", :make => "Maruti", :color => "Black", :person => Person.first).save(:validate => false)
96
+ Car.new(:name => "800", :make => "Maruti", :color => "Black", :person => Person.first).save(:validate => false)
97
+ Car.new(:name => "Santro", :make => "HHH", :color => "NotAColor", :person => Person.last).save(:validate => false)
97
98
 
98
99
  inspector.investigate
99
100
  DataInspector.count.should == 3
100
101
  DataInspector.all.collect(&:table_name).should == ["Car", "Person", "Person"]
101
102
  end
102
103
 
104
+ it "should check all distinct values of field for which a criteria exists" do
105
+ update_data_sanity_criteria("Car:\n make")
106
+ inspector = DataSanity::Inspector.new(:validate => :random)
107
+
108
+ 5.times { |i| Car.new(:name => "Car Name#{i}", :make => "Brand1").save(:validate => false) }
109
+ 5.times { |i| Car.new(:name => "Car Name#{i}", :make => "Brand2").save(:validate => false) }
110
+
111
+ inspector.investigate
112
+
113
+ DataInspector.count.should == 2
114
+ DataInspector.all.collect(&:table_name).should == ["Car", "Car"]
115
+ Car.find(DataInspector.first.primary_key_value).make.should == "Brand1"
116
+ Car.find(DataInspector.last.primary_key_value).make.should == "Brand2"
117
+ end
118
+
103
119
  after :each do
104
120
  cleanup_data_sanity_criteria
105
121
  end
@@ -3,5 +3,4 @@ require 'spec_helper'
3
3
 
4
4
  describe "DataInspector" do
5
5
 
6
-
7
6
  end
@@ -28,6 +28,14 @@ def setup_data_sanity_criteria
28
28
  end
29
29
  end
30
30
 
31
+ def update_data_sanity_criteria(criteria)
32
+ Dir.chdir("#{Rails.root}") do
33
+ file = File.open("config/data_sanity_criteria.yml", "w")
34
+ file << criteria
35
+ file.close
36
+ end
37
+ end
38
+
31
39
  def cleanup_data_sanity_criteria
32
40
  Dir.chdir("#{Rails.root}") do
33
41
  system "rm config/data_sanity_criteria.yml"
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # It's strongly recommended to check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(:version => 20111205042922) do
13
+ ActiveRecord::Schema.define(:version => 20111205065701) do
14
14
 
15
15
  create_table "cars", :force => true do |t|
16
16
  t.string "name"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data_sanity
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 7
10
- version: 0.0.7
9
+ - 8
10
+ version: 0.0.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Habibullah, Rahul, Jigyasa, Jyotsna, Hephzibah, Garima