data_sanity 0.1.0 → 0.1.2
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.
    
        data/README.md
    CHANGED
    
    | 
         @@ -12,3 +12,15 @@ 
     | 
|
| 
       12 
12 
     | 
    
         
             
            +----+------------+-------------+-------------------+-----------------------+
         
     | 
| 
       13 
13 
     | 
    
         
             
            | 1	 |  Person	  | person_id	| 128	            | “Fmno can’t be blank” |
         
     | 
| 
       14 
14 
     | 
    
         
             
            +----+------------+-------------+-------------------+-----------------------+
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            # HOW TO USE
         
     | 
| 
      
 17 
     | 
    
         
            +
                * adding migrations : rake data_sanity:db:migrate
         
     | 
| 
      
 18 
     | 
    
         
            +
                * removing migrations : rake data_sanity:db:rollback
         
     | 
| 
      
 19 
     | 
    
         
            +
                * Use normal rake db:migrate to migrate the migration added by rake data_sanity:db:migrate
         
     | 
| 
      
 20 
     | 
    
         
            +
                * You can add a sample criteria file using rake data_sanity:criteria
         
     | 
| 
      
 21 
     | 
    
         
            +
                * To Investigate your data use rake data_sanity:investigate
         
     | 
| 
      
 22 
     | 
    
         
            +
                    - By default it runs for all data
         
     | 
| 
      
 23 
     | 
    
         
            +
                    - rake data_sanity:investigate[random,2]
         
     | 
| 
      
 24 
     | 
    
         
            +
                        : parameter 1: random: show you want random selection
         
     | 
| 
      
 25 
     | 
    
         
            +
                        : parameter 2: lets you add as many random records you want to verify [default is 1]
         
     | 
| 
      
 26 
     | 
    
         
            +
                        : Note: if you have a criteria file it works only for models in criteria file
         
     | 
| 
         @@ -7,7 +7,7 @@ module DataSanity 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
                def initialize options = {}
         
     | 
| 
       9 
9 
     | 
    
         
             
                  options[:validate] == "random" ? @random = true : @all = true
         
     | 
| 
       10 
     | 
    
         
            -
                  @records_per_model = options[:records_per_model]  
     | 
| 
      
 10 
     | 
    
         
            +
                  @records_per_model = options[:records_per_model].to_i == 0 ? CONSIDERED_RECORDS : options[:records_per_model].to_i
         
     | 
| 
       11 
11 
     | 
    
         
             
                  @models = load_models
         
     | 
| 
       12 
12 
     | 
    
         
             
                  file_path = "#{Rails.root}/config/data_sanity_criteria.yml"
         
     | 
| 
       13 
13 
     | 
    
         
             
                  @criteria = (File.exists?(file_path) ? (YAML.load File.open(file_path).read) : false) rescue false
         
     | 
| 
         @@ -35,7 +35,7 @@ module DataSanity 
     | 
|
| 
       35 
35 
     | 
    
         
             
                def validate_random(model)
         
     | 
| 
       36 
36 
     | 
    
         
             
                  no_of_records = model.count
         
     | 
| 
       37 
37 
     | 
    
         
             
                  return if no_of_records == 0
         
     | 
| 
       38 
     | 
    
         
            -
                  @records_per_model. 
     | 
| 
      
 38 
     | 
    
         
            +
                  [@records_per_model, no_of_records].min.times do
         
     | 
| 
       39 
39 
     | 
    
         
             
                    instance = model.offset(rand(no_of_records)).first
         
     | 
| 
       40 
40 
     | 
    
         
             
                    populate_if_invalid_record(instance, model)
         
     | 
| 
       41 
41 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -48,8 +48,10 @@ module DataSanity 
     | 
|
| 
       48 
48 
     | 
    
         
             
                      results = model.where(attribute.to_sym => value)
         
     | 
| 
       49 
49 
     | 
    
         
             
                      count = results.count
         
     | 
| 
       50 
50 
     | 
    
         
             
                      next if count == 0
         
     | 
| 
       51 
     | 
    
         
            -
                       
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
      
 51 
     | 
    
         
            +
                      [@records_per_model, count].min.times do
         
     | 
| 
      
 52 
     | 
    
         
            +
                        instance = results.offset(rand(count)).first
         
     | 
| 
      
 53 
     | 
    
         
            +
                        populate_if_invalid_record(instance, model)
         
     | 
| 
      
 54 
     | 
    
         
            +
                      end
         
     | 
| 
       53 
55 
     | 
    
         
             
                    end
         
     | 
| 
       54 
56 
     | 
    
         
             
                  end
         
     | 
| 
       55 
57 
     | 
    
         
             
                end
         
     | 
| 
         @@ -3,5 +3,5 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            # Start with Model Name and
         
     | 
| 
       4 
4 
     | 
    
         
             
            #<Model Name>:    # Criteria-Rule to be applied
         
     | 
| 
       5 
5 
     | 
    
         
             
            #  <field name>: ['Raju', 'kaju', 'Taju']  # Field is considered for validations against distinct values in array
         
     | 
| 
       6 
     | 
    
         
            -
            #  <age 
     | 
| 
      
 6 
     | 
    
         
            +
            #  <age>:                                  # Field is considered for validations against all possible distinct values
         
     | 
| 
       7 
7 
     | 
    
         
             
            ############################################
         
     | 
    
        data/lib/data_sanity/version.rb
    CHANGED
    
    
| 
         @@ -75,6 +75,15 @@ describe "DataSanity::Inspector" do 
     | 
|
| 
       75 
75 
     | 
    
         
             
                    DataInspector.count.should == 2
         
     | 
| 
       76 
76 
     | 
    
         
             
                  end
         
     | 
| 
       77 
77 
     | 
    
         | 
| 
      
 78 
     | 
    
         
            +
                  it "should select minimum of records_per_model and records matching a criteria" do
         
     | 
| 
      
 79 
     | 
    
         
            +
                    inspector = DataSanity::Inspector.new(:validate => "random", :records_per_model => 20)
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                    Person.new(:name => "InValid-Record").save(:validate => false)
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                    inspector.investigate
         
     | 
| 
      
 84 
     | 
    
         
            +
                    DataInspector.count.should == 1
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
       78 
87 
     | 
    
         
             
                  describe "criteria" do
         
     | 
| 
       79 
88 
     | 
    
         
             
                    before :each do
         
     | 
| 
       80 
89 
     | 
    
         
             
                      setup_data_sanity_criteria
         
     | 
| 
         @@ -102,7 +111,7 @@ describe "DataSanity::Inspector" do 
     | 
|
| 
       102 
111 
     | 
    
         
             
                    end
         
     | 
| 
       103 
112 
     | 
    
         | 
| 
       104 
113 
     | 
    
         
             
                    it "should check all distinct values of field for which a criteria exists" do
         
     | 
| 
       105 
     | 
    
         
            -
                      update_data_sanity_criteria( 
     | 
| 
      
 114 
     | 
    
         
            +
                      update_data_sanity_criteria(criteria_car_make)
         
     | 
| 
       106 
115 
     | 
    
         
             
                      inspector = DataSanity::Inspector.new(:validate => "random")
         
     | 
| 
       107 
116 
     | 
    
         | 
| 
       108 
117 
     | 
    
         
             
                      5.times { |i| Car.new(:name => "Car Name#{i}", :make => "Brand1").save(:validate => false) }
         
     | 
| 
         @@ -116,6 +125,32 @@ describe "DataSanity::Inspector" do 
     | 
|
| 
       116 
125 
     | 
    
         
             
                      Car.find(DataInspector.last.primary_key_value).make.should == "Brand2"
         
     | 
| 
       117 
126 
     | 
    
         
             
                    end
         
     | 
| 
       118 
127 
     | 
    
         | 
| 
      
 128 
     | 
    
         
            +
                    it "should check all distinct values of field for which a criteria exists" do
         
     | 
| 
      
 129 
     | 
    
         
            +
                      update_data_sanity_criteria(criteria_car_make)
         
     | 
| 
      
 130 
     | 
    
         
            +
                      inspector = DataSanity::Inspector.new(:validate => "random", :records_per_model => "2")
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                      5.times { |i| Car.new(:name => "Car Name#{i}", :make => "Brand1").save(:validate => false) }
         
     | 
| 
      
 133 
     | 
    
         
            +
                      5.times { |i| Car.new(:name => "Car Name#{i}", :make => "Brand2").save(:validate => false) }
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                      inspector.investigate
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
                      DataInspector.count.should == 4
         
     | 
| 
      
 138 
     | 
    
         
            +
                      DataInspector.all.collect(&:table_name).should == ["Car", "Car", "Car", "Car"]
         
     | 
| 
      
 139 
     | 
    
         
            +
                      Car.find(DataInspector.all.collect(&:primary_key_value)).collect(&:make).should == ["Brand1", "Brand1", "Brand2", "Brand2"]
         
     | 
| 
      
 140 
     | 
    
         
            +
                    end
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
                    it "should select minimum of records_per_model and records matching a criteria" do
         
     | 
| 
      
 143 
     | 
    
         
            +
                      update_data_sanity_criteria(criteria_car_make)
         
     | 
| 
      
 144 
     | 
    
         
            +
                      inspector = DataSanity::Inspector.new(:validate => "random", :records_per_model => "15")
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                      2.times { |i| Car.new(:name => "Car Name#{i}", :make => "Brand1").save(:validate => false) }
         
     | 
| 
      
 147 
     | 
    
         
            +
                      2.times { |i| Car.new(:name => "Car Name#{i}", :make => "Brand2").save(:validate => false) }
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
                      inspector.investigate
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
                      DataInspector.count.should == 4
         
     | 
| 
      
 152 
     | 
    
         
            +
                    end
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
       119 
154 
     | 
    
         
             
                    after :each do
         
     | 
| 
       120 
155 
     | 
    
         
             
                      cleanup_data_sanity_criteria
         
     | 
| 
       121 
156 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -127,4 +162,9 @@ describe "DataSanity::Inspector" do 
     | 
|
| 
       127 
162 
     | 
    
         
             
                end
         
     | 
| 
       128 
163 
     | 
    
         
             
              end
         
     | 
| 
       129 
164 
     | 
    
         | 
| 
      
 165 
     | 
    
         
            +
              def criteria_car_make
         
     | 
| 
      
 166 
     | 
    
         
            +
                "Car:
         
     | 
| 
      
 167 
     | 
    
         
            +
              make"
         
     | 
| 
      
 168 
     | 
    
         
            +
              end
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
       130 
170 
     | 
    
         
             
            end
         
     | 
    
        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:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 31
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
8 
     | 
    
         
             
              - 1
         
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 9 
     | 
    
         
            +
              - 2
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.1.2
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - Habibullah, Rahul, Jigyasa, Jyotsna, Hephzibah, Garima
         
     |