active_sanity 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8248c888df98cac5aaf92207bc779e65d8f5ce6b
4
- data.tar.gz: f6d28662717362e4ff29c15928764d377bd4568c
3
+ metadata.gz: 5cf8143fcceaa8ee3dd6fe9ceff8f66844b62f47
4
+ data.tar.gz: e07b90a22a9591f456786e02a816d683b876f70c
5
5
  SHA512:
6
- metadata.gz: eacaaa0e54fb59f9c86b61a24a38d0afe33a5a1412c187bb137e5853f4ef3a8238e0c4cb66ede65faf2ee2128f267870899e6da4bc0fc20325a65aeb9b9aa83b
7
- data.tar.gz: e1ee326e7b619d50fb1453c4b585baf186ebb253c8d78d5b04bc11459d9183b35b3e3331d6c2eb1109d7c24135b485e1f9db10ec2b0cd3e104245ce44d9b2dba
6
+ metadata.gz: 1072acfdf533b9ae67c1d6d146978e2c472a356c3d2f4acb6f23d3bc72dadb21196c0675a4f63cae9871f78c05c5c763d3f59d1b9d908e0e7960012817f882cd
7
+ data.tar.gz: 57c275494f381403304da75d3a3193d5e544481c4e2141d56ff959d5fc23ad0adc2b623f51e36300b062dcbfdbf8566a6a306fed49c0bd40836610560eb804f7
data/.gitignore CHANGED
@@ -5,3 +5,4 @@
5
5
  Gemfile.lock
6
6
  pkg/*
7
7
  test/rails_app
8
+ active_sanity.ignore.yml
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'http://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in active_sanity.gemspec
4
4
  gemspec
5
+
6
+ gem 'sqlite3'
data/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # Active Sanity
2
2
 
3
- [![Build Status](https://secure.travis-ci.org/versapay/active_sanity.png)](http://travis-ci.org/versapay/active_sanity)
3
+ [![Build Status](https://secure.travis-ci.org/pcreux/active_sanity.png)](http://travis-ci.org/pcreux/active_sanity)
4
4
 
5
5
  Perform a sanity check on your database through active record
6
6
  validation.
7
7
 
8
8
  ## Requirements
9
9
 
10
- * ActiveSanity ~0.3 requires Rails ~4.0
10
+ * ActiveSanity ~0.3 and ~0.4 requires Rails ~4.0
11
11
  * ActiveSanity ~0.2 requires Rails ~3.1
12
12
  * ActiveSanity ~0.1 requires Rails ~3.0
13
13
 
@@ -29,7 +29,7 @@ Just run:
29
29
  rake db:check_sanity
30
30
 
31
31
  ActiveSanity will iterate over every records of all your models to check
32
- weither they're valid or not. It will save invalid records in the table
32
+ whether they're valid or not. It will save invalid records in the table
33
33
  invalid_records if it exists and output all invalid records.
34
34
 
35
35
  The output might look like the following:
@@ -39,7 +39,7 @@ The output might look like the following:
39
39
  Flight | 123 | { "arrival_time" => ["can't be nil"], "departure_time" => ["is invalid"] }
40
40
  Flight | 323 | { "arrival_time" => ["can't be nil"] }
41
41
 
42
- By default, the number of records fetched from the database for validation is set to 500. If this causes any issues in your domain/codebase, you can configure it this way in 'config\application.rb' (or 'config\environments\test.rb'):
42
+ By default, the number of records fetched from the database for validation is set to 500. If this causes any issues in your domain/codebase, you can configure it this way in `config\application.rb` (or `config\environments\test.rb`):
43
43
 
44
44
  class Application < Rails::Application
45
45
  config.after_initialize do
@@ -47,6 +47,12 @@ By default, the number of records fetched from the database for validation is se
47
47
  end
48
48
  end
49
49
 
50
+ If you want to ignore certain models from being verified, you can create a file named `active_sanity.ignore.yml` at the root of your project with the following structure
51
+
52
+ models:
53
+ - '<name of class to ignore>'
54
+ - '<name of class to ignore>'
55
+
50
56
 
51
57
  ## Contribute & Dev environment
52
58
 
@@ -6,13 +6,13 @@ Gem::Specification.new do |s|
6
6
  s.name = 'active_sanity'
7
7
  s.version = ActiveSanity::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ['VersaPay', 'Philippe Creux']
10
- s.email = ['philippe.creux@versapay.com']
9
+ s.authors = ['Philippe Creux']
10
+ s.email = ['pcreux@gmail.com']
11
11
  s.summary = 'Checks Sanity of Active Record records'
12
12
  s.description = 'Performs a Sanity Check of your database by logging all invalid Active Records'
13
- s.homepage = 'https://github.com/versapay/active_sanity'
13
+ s.homepage = 'https://github.com/pcreux/active_sanity'
14
14
 
15
- s.add_dependency 'rails', '>=4.0'
15
+ s.add_dependency 'rails', '< 5.0'
16
16
 
17
17
  s.required_ruby_version = '>= 1.9.3'
18
18
 
File without changes
@@ -24,3 +24,10 @@ Feature: Check sanity
24
24
  Then I should see the following invalid records:
25
25
  | User | 1 | {:username=>["can't be blank", "is too short (minimum is 3 characters)"]} |
26
26
  | Post | 1 | {:category=>["can't be blank"]} |
27
+
28
+ Scenario: Check sanity on database with invalid records with ignored classes
29
+ Given the database contains a few valid records
30
+ And the first author's username is empty and the first post category_id is nil
31
+ And the User class is ignored
32
+ When I run "rake db:check_sanity"
33
+ Then I should see "Checking the following models: Category, Post"
@@ -1,7 +1,7 @@
1
1
  def setup_rails_app
2
2
  return if File.directory?('test/rails_app')
3
3
 
4
- unless system 'bundle exec rails new test/rails_app -m test/rails_template.rb && cd ./test/rails_app && RAILS_ENV=test rake db:migrate'
4
+ unless system 'bundle exec rails new test/rails_app -m test/rails_template.rb && cd ./test/rails_app && RAILS_ENV=test bundle exec rake db:migrate'
5
5
  system('rm -fr test/rails_app')
6
6
  fail 'Failed to generate test/rails_app'
7
7
  end
@@ -23,7 +23,7 @@ end
23
23
  Given /^I have a rails app using 'active_sanity' with db storage$/ do
24
24
  setup_rails_app
25
25
 
26
- fail unless system('cd ./test/rails_app && rails generate active_sanity && RAILS_ENV=test rake db:migrate')
26
+ fail unless system('cd ./test/rails_app && bundle exec rails generate active_sanity && RAILS_ENV=test bundle exec rake db:migrate')
27
27
 
28
28
  require './test/rails_app/config/environment'
29
29
 
@@ -46,6 +46,10 @@ Given /^the first author's username is empty and the first post category_id is n
46
46
  Post.first.update_attribute(:category_id, nil)
47
47
  end
48
48
 
49
+ Given /^the User class is ignored$/ do
50
+ system("echo 'models: User' > active_sanity.ignore.yml")
51
+ end
52
+
49
53
  Given /^the first author's username is "([^"]*)"$/ do |username|
50
54
  Author.first.update_attribute('username', username)
51
55
  end
@@ -59,7 +63,7 @@ Given /^the first post title is empty$/ do
59
63
  end
60
64
 
61
65
  When /^I run "([^"]*)"$/ do |command|
62
- puts @output = `cd ./test/rails_app && export RAILS_ENV=test && bundle exec #{command} --trace; echo "RETURN:$?"`
66
+ puts @output = `cd ./test/rails_app && RAILS_ENV=test bundle exec #{command} --trace; echo "RETURN:$?"`
63
67
  fail unless @output['RETURN:0']
64
68
  end
65
69
 
@@ -31,6 +31,12 @@ module ActiveSanity
31
31
 
32
32
  @models ||= direct_active_record_base_descendants
33
33
  @models -= [InvalidRecord]
34
+ if File.exist?('active_sanity.ignore.yml')
35
+ yaml_contents = YAML.load_file('active_sanity.ignore.yml')
36
+ model_names_to_ignore = Array(yaml_contents['models'] || []).uniq
37
+ @models = @models.reject { |model| model_names_to_ignore.include?(model.name) }
38
+ end
39
+ @models
34
40
  end
35
41
 
36
42
  protected
@@ -54,7 +60,8 @@ module ActiveSanity
54
60
  #
55
61
  # Should return: [Account, User]
56
62
  def direct_active_record_base_descendants
57
- ActiveRecord::Base.descendants.select(&:descends_from_active_record?).sort_by(&:name)
63
+ parent_class = defined?(ApplicationRecord) ? ApplicationRecord : ActiveRecord::Base
64
+ parent_class.descendants.select(&:descends_from_active_record?).sort_by(&:name)
58
65
  end
59
66
 
60
67
  # Remove records that are now valid from the list of invalid records.
@@ -1,3 +1,3 @@
1
1
  module ActiveSanity
2
- VERSION = '0.3.0'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -19,8 +19,18 @@ module ActiveSanity
19
19
  end
20
20
 
21
21
  def create_migration_file
22
- migration_template 'create_invalid_records.rb', 'db/migrate/create_invalid_records.rb'
22
+ migration_template 'create_invalid_records.rb.erb', 'db/migrate/create_invalid_records.rb'
23
23
  end
24
+
25
+ # Used by migration file
26
+ def rails_version
27
+ if Rails.version >= "5"
28
+ "[#{Rails.version.gsub(/\.\d+$/, '')}]" # 5.0
29
+ else
30
+ nil
31
+ end
32
+ end
33
+
24
34
  end
25
35
  end
26
36
  end
@@ -1,11 +1,10 @@
1
- class CreateInvalidRecords < ActiveRecord::Migration
1
+ class CreateInvalidRecords < ActiveRecord::Migration<%= rails_version %>
2
2
  def self.up
3
3
  create_table :invalid_records do |t|
4
4
  t.references :record, polymorphic: true, null: false
5
5
  t.text :validation_errors
6
6
  t.timestamps
7
7
  end
8
- add_index :invalid_records, [:record_type, :record_id]
9
8
  end
10
9
 
11
10
  def self.down
@@ -1,6 +1,7 @@
1
-
2
1
  # Generate some test models
3
2
 
3
+ BASE_MODEL_CLASS = Rails.version >= "5." ? "ApplicationRecord" : "ActiveRecord::Base"
4
+
4
5
  # Post
5
6
  generate :model, 'post title:string body:text published_at:datetime author_id:integer category_id:integer'
6
7
  post_code = <<-CODE
@@ -10,7 +11,7 @@ post_code = <<-CODE
10
11
 
11
12
  validates :author, :category, :title, :published_at, presence: true
12
13
  CODE
13
- inject_into_file 'app/models/post.rb', post_code, after: "class Post < ActiveRecord::Base\n"
14
+ inject_into_file 'app/models/post.rb', post_code, after: "class Post < #{BASE_MODEL_CLASS}\n"
14
15
 
15
16
  # Category
16
17
  generate :model, 'category name:string description:text'
@@ -19,7 +20,7 @@ category_code = <<-CODE
19
20
 
20
21
  validates :name, presence: true
21
22
  CODE
22
- inject_into_file 'app/models/category.rb', category_code, after: "class Category < ActiveRecord::Base\n"
23
+ inject_into_file 'app/models/category.rb', category_code, after: "class Category < #{BASE_MODEL_CLASS}\n"
23
24
 
24
25
  # User
25
26
  generate :model, 'user first_name:string last_name:string username:string type:string'
@@ -29,7 +30,7 @@ user_code = <<-CODE
29
30
  validates :first_name, :last_name, :username, presence: true
30
31
  validates :username, length: { minimum: 3 }
31
32
  CODE
32
- inject_into_file 'app/models/user.rb', user_code, after: "class User < ActiveRecord::Base\n"
33
+ inject_into_file 'app/models/user.rb', user_code, after: "class User < #{BASE_MODEL_CLASS}\n"
33
34
 
34
35
  # Author < User
35
36
  create_file 'app/models/author.rb', 'class Author < User; end'
@@ -52,4 +53,4 @@ CODE
52
53
  inject_into_file 'config/application.rb', custom_batch_size_code, after: " < Rails::Application\n"
53
54
 
54
55
  run 'bundle'
55
- rake 'db:migrate'
56
+ rake 'db:drop db:create db:migrate'
metadata CHANGED
@@ -1,30 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_sanity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
- - VersaPay
8
7
  - Philippe Creux
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-02-23 00:00:00.000000000 Z
11
+ date: 2017-08-20 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rails
16
15
  requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
- - - ">="
17
+ - - "<"
19
18
  - !ruby/object:Gem::Version
20
- version: '4.0'
19
+ version: '5.0'
21
20
  type: :runtime
22
21
  prerelease: false
23
22
  version_requirements: !ruby/object:Gem::Requirement
24
23
  requirements:
25
- - - ">="
24
+ - - "<"
26
25
  - !ruby/object:Gem::Version
27
- version: '4.0'
26
+ version: '5.0'
28
27
  - !ruby/object:Gem::Dependency
29
28
  name: rspec
30
29
  requirement: !ruby/object:Gem::Requirement
@@ -70,7 +69,7 @@ dependencies:
70
69
  description: Performs a Sanity Check of your database by logging all invalid Active
71
70
  Records
72
71
  email:
73
- - philippe.creux@versapay.com
72
+ - pcreux@gmail.com
74
73
  executables: []
75
74
  extensions: []
76
75
  extra_rdoc_files: []
@@ -82,6 +81,7 @@ files:
82
81
  - README.md
83
82
  - Rakefile
84
83
  - active_sanity.gemspec
84
+ - commits.csv
85
85
  - features/check_sanity.feature
86
86
  - features/check_sanity_with_db_storage.feature
87
87
  - features/step_definitions/rails_app.rb
@@ -93,9 +93,9 @@ files:
93
93
  - lib/active_sanity/tasks.rb
94
94
  - lib/active_sanity/version.rb
95
95
  - lib/generators/active_sanity/active_sanity_generator.rb
96
- - lib/generators/active_sanity/templates/create_invalid_records.rb
96
+ - lib/generators/active_sanity/templates/create_invalid_records.rb.erb
97
97
  - test/rails_template.rb
98
- homepage: https://github.com/versapay/active_sanity
98
+ homepage: https://github.com/pcreux/active_sanity
99
99
  licenses: []
100
100
  metadata: {}
101
101
  post_install_message:
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  version: '0'
115
115
  requirements: []
116
116
  rubyforge_project:
117
- rubygems_version: 2.2.2
117
+ rubygems_version: 2.4.5.1
118
118
  signing_key:
119
119
  specification_version: 4
120
120
  summary: Checks Sanity of Active Record records