active_sanity 0.2.0 → 0.3.0
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.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +33 -0
- data/CHANGELOG.md +7 -1
- data/Gemfile +1 -6
- data/README.md +12 -2
- data/Rakefile +5 -7
- data/active_sanity.gemspec +16 -15
- data/features/check_sanity.feature +1 -1
- data/features/check_sanity_with_db_storage.feature +1 -1
- data/features/step_definitions/rails_app.rb +17 -20
- data/features/support/env.rb +5 -5
- data/lib/active_sanity.rb +0 -1
- data/lib/active_sanity/checker.rb +15 -8
- data/lib/active_sanity/invalid_record.rb +3 -2
- data/lib/active_sanity/railtie.rb +0 -1
- data/lib/active_sanity/tasks.rb +2 -3
- data/lib/active_sanity/version.rb +1 -1
- data/lib/generators/active_sanity/active_sanity_generator.rb +4 -4
- data/lib/generators/active_sanity/templates/create_invalid_records.rb +1 -2
- data/test/rails_template.rb +23 -15
- metadata +42 -32
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8248c888df98cac5aaf92207bc779e65d8f5ce6b
|
4
|
+
data.tar.gz: f6d28662717362e4ff29c15928764d377bd4568c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: eacaaa0e54fb59f9c86b61a24a38d0afe33a5a1412c187bb137e5853f4ef3a8238e0c4cb66ede65faf2ee2128f267870899e6da4bc0fc20325a65aeb9b9aa83b
|
7
|
+
data.tar.gz: e1ee326e7b619d50fb1453c4b585baf186ebb253c8d78d5b04bc11459d9183b35b3e3331d6c2eb1109d7c24135b485e1f9db10ec2b0cd3e104245ce44d9b2dba
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
AllCops:
|
2
|
+
Include:
|
3
|
+
- 'Gemfile'
|
4
|
+
- 'Rakefile'
|
5
|
+
- '*.gemspec'
|
6
|
+
- 'lib/**/*'
|
7
|
+
- 'test/**/*'
|
8
|
+
Exclude:
|
9
|
+
- 'features/**/*'
|
10
|
+
- 'test/rails_app/**/*'
|
11
|
+
RunRailsCops: false
|
12
|
+
Metrics/LineLength:
|
13
|
+
Enabled: false
|
14
|
+
Style/AlignHash:
|
15
|
+
EnforcedHashRocketStyle: table
|
16
|
+
EnforcedColonStyle: table
|
17
|
+
Style/Documentation:
|
18
|
+
Enabled: false
|
19
|
+
Style/RegexpLiteral:
|
20
|
+
Enabled: false
|
21
|
+
Style/CollectionMethods:
|
22
|
+
# Mapping from undesired method to desired_method
|
23
|
+
# e.g. to use `detect` over `find`:
|
24
|
+
#
|
25
|
+
# CollectionMethods:
|
26
|
+
# PreferredMethods:
|
27
|
+
# find: detect
|
28
|
+
PreferredMethods:
|
29
|
+
map: 'collect'
|
30
|
+
map!: 'collect!'
|
31
|
+
reduce: 'inject'
|
32
|
+
detect: 'find'
|
33
|
+
select: 'find_all'
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 0.3.0
|
2
|
+
|
3
|
+
* Add Rails ~4 compatibility.
|
4
|
+
* Does not rerun validations for the 'InvalidRecord' model on the second pass.
|
5
|
+
* batch size for fetched records is now configurable by setting ActiveSanity::Checker.batch_size after the gem has been loaded ie in 'config\application.rb' (or 'config\environments\test.rb') inside an 'after_initialize' block
|
6
|
+
|
1
7
|
## 0.2.0
|
2
8
|
|
3
9
|
* Add Rails ~3.1 compatibility. Pull Request [#6][] by [@skateinmars][].
|
@@ -15,4 +21,4 @@ Initial release.
|
|
15
21
|
[#1]: https://github.com/versapay/active_sanity/issues/1
|
16
22
|
[#6]: https://github.com/versapay/active_sanity/issues/6
|
17
23
|
[@skateinmars]: https://github.com/skateinmars
|
18
|
-
[@vraravam]: https://github.com/vraravam
|
24
|
+
[@vraravam]: https://github.com/vraravam
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -7,8 +7,9 @@ validation.
|
|
7
7
|
|
8
8
|
## Requirements
|
9
9
|
|
10
|
-
ActiveSanity 0.
|
11
|
-
ActiveSanity 0.
|
10
|
+
* ActiveSanity ~0.3 requires Rails ~4.0
|
11
|
+
* ActiveSanity ~0.2 requires Rails ~3.1
|
12
|
+
* ActiveSanity ~0.1 requires Rails ~3.0
|
12
13
|
|
13
14
|
## Install
|
14
15
|
|
@@ -38,6 +39,15 @@ The output might look like the following:
|
|
38
39
|
Flight | 123 | { "arrival_time" => ["can't be nil"], "departure_time" => ["is invalid"] }
|
39
40
|
Flight | 323 | { "arrival_time" => ["can't be nil"] }
|
40
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'):
|
43
|
+
|
44
|
+
class Application < Rails::Application
|
45
|
+
config.after_initialize do
|
46
|
+
ActiveSanity::Checker.batch_size = 439
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
41
51
|
## Contribute & Dev environment
|
42
52
|
|
43
53
|
Usual fork & pull request.
|
data/Rakefile
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler::GemHelper.install_tasks
|
3
3
|
|
4
|
-
task :
|
4
|
+
task default: :features
|
5
5
|
|
6
|
-
desc
|
6
|
+
desc 'Run features'
|
7
7
|
task :features do
|
8
|
-
|
8
|
+
fail 'Failed!' unless system('export RAILS_ENV=test && bundle exec cucumber features')
|
9
9
|
end
|
10
10
|
|
11
|
-
desc
|
11
|
+
desc 'Clean test rails app'
|
12
12
|
task :clean do
|
13
|
-
if system('rm -r test/rails_app')
|
14
|
-
puts "test/rails_app deleted successfully"
|
15
|
-
end
|
13
|
+
puts 'test/rails_app deleted successfully' if system('rm -r test/rails_app')
|
16
14
|
end
|
data/active_sanity.gemspec
CHANGED
@@ -1,26 +1,27 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
require
|
2
|
+
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'active_sanity/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
|
-
s.name =
|
6
|
+
s.name = 'active_sanity'
|
7
7
|
s.version = ActiveSanity::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = [
|
10
|
-
s.email = [
|
11
|
-
s.
|
12
|
-
s.
|
13
|
-
s.
|
14
|
-
s.homepage = "https://github.com/versapay/active_sanity"
|
9
|
+
s.authors = ['VersaPay', 'Philippe Creux']
|
10
|
+
s.email = ['philippe.creux@versapay.com']
|
11
|
+
s.summary = 'Checks Sanity of Active Record records'
|
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'
|
15
14
|
|
16
|
-
s.add_dependency
|
15
|
+
s.add_dependency 'rails', '>=4.0'
|
17
16
|
|
18
|
-
s.
|
19
|
-
|
20
|
-
s.add_development_dependency
|
17
|
+
s.required_ruby_version = '>= 1.9.3'
|
18
|
+
|
19
|
+
s.add_development_dependency 'rspec', '~>3.1'
|
20
|
+
s.add_development_dependency 'cucumber', '~>1.3'
|
21
|
+
s.add_development_dependency 'sqlite3', '~>1.3'
|
21
22
|
|
22
23
|
s.files = `git ls-files`.split("\n")
|
23
24
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
24
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
25
|
-
s.require_paths = [
|
25
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
26
|
+
s.require_paths = ['lib']
|
26
27
|
end
|
@@ -9,7 +9,7 @@ Feature: Check sanity
|
|
9
9
|
|
10
10
|
Scenario: Check sanity on empty database
|
11
11
|
When I run "rake db:check_sanity"
|
12
|
-
Then I should see "Checking the following models: Category,
|
12
|
+
Then I should see "Checking the following models: Category, Post, User"
|
13
13
|
Then I should not see any invalid records
|
14
14
|
|
15
15
|
Scenario: Check sanity on database with valid records
|
@@ -9,7 +9,7 @@ Feature: Check sanity with db storage
|
|
9
9
|
|
10
10
|
Scenario: Check sanity on empty database
|
11
11
|
When I run "rake db:check_sanity"
|
12
|
-
Then I should see "Checking the following models: Category,
|
12
|
+
Then I should see "Checking the following models: Category, Post, User"
|
13
13
|
Then the table "invalid_records" should be empty
|
14
14
|
|
15
15
|
Scenario: Check sanity on database with valid records
|
@@ -1,15 +1,15 @@
|
|
1
1
|
def setup_rails_app
|
2
|
-
return if File.directory?(
|
2
|
+
return if File.directory?('test/rails_app')
|
3
3
|
|
4
|
-
unless system
|
5
|
-
system(
|
6
|
-
|
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'
|
5
|
+
system('rm -fr test/rails_app')
|
6
|
+
fail 'Failed to generate test/rails_app'
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
10
|
Given /^I have a rails app using 'active_sanity'$/ do
|
11
|
-
Dir[
|
12
|
-
|
11
|
+
Dir['./test/rails_app/db/migrate/*create_invalid_records.rb'].each do |migration|
|
12
|
+
fail unless system("rm #{migration}")
|
13
13
|
end
|
14
14
|
|
15
15
|
setup_rails_app
|
@@ -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
|
-
|
26
|
+
fail unless system('cd ./test/rails_app && rails generate active_sanity && RAILS_ENV=test rake db:migrate')
|
27
27
|
|
28
28
|
require './test/rails_app/config/environment'
|
29
29
|
|
@@ -33,16 +33,16 @@ Given /^I have a rails app using 'active_sanity' with db storage$/ do
|
|
33
33
|
end
|
34
34
|
|
35
35
|
Given /^the database contains a few valid records$/ do
|
36
|
-
Author.create!(:
|
37
|
-
Publisher.create!(:
|
38
|
-
Category.create!(:
|
39
|
-
Post.create!(:
|
40
|
-
:
|
41
|
-
:
|
36
|
+
Author.create!(first_name: 'Greg', last_name: 'Bell', username: 'gregbell')
|
37
|
+
Publisher.create!(first_name: 'Sam', last_name: 'Vincent', username: 'samvincent')
|
38
|
+
Category.create!(name: 'Uncategorized')
|
39
|
+
Post.create!(author: Author.first, category: Category.first,
|
40
|
+
title: 'How ActiveAdmin changed the world', body: 'Lot of love.',
|
41
|
+
published_at: 4.years.from_now)
|
42
42
|
end
|
43
43
|
|
44
44
|
Given /^the first author's username is empty and the first post category_id is nil$/ do
|
45
|
-
Author.first.update_attribute(:username,
|
45
|
+
Author.first.update_attribute(:username, '')
|
46
46
|
Post.first.update_attribute(:category_id, nil)
|
47
47
|
end
|
48
48
|
|
@@ -58,13 +58,11 @@ Given /^the first post title is empty$/ do
|
|
58
58
|
Post.first.update_attribute('title', '')
|
59
59
|
end
|
60
60
|
|
61
|
-
|
62
61
|
When /^I run "([^"]*)"$/ do |command|
|
63
62
|
puts @output = `cd ./test/rails_app && export RAILS_ENV=test && bundle exec #{command} --trace; echo "RETURN:$?"`
|
64
|
-
|
63
|
+
fail unless @output['RETURN:0']
|
65
64
|
end
|
66
65
|
|
67
|
-
|
68
66
|
Then /^I should see the following invalid records:$/ do |table|
|
69
67
|
table.raw.each do |model, id, errors|
|
70
68
|
@output.should =~ /#{model}\s+\|\s+#{id}\s+\|\s+#{Regexp.escape errors}/
|
@@ -85,7 +83,7 @@ end
|
|
85
83
|
|
86
84
|
Then /^the table "([^"]*)" should contain:$/ do |_, table|
|
87
85
|
table.raw.each do |model, id, errors|
|
88
|
-
invalid_record = InvalidRecord.where(:
|
86
|
+
invalid_record = InvalidRecord.where(record_type: model, record_id: id).first
|
89
87
|
invalid_record.should be_an_instance_of(InvalidRecord)
|
90
88
|
errors = eval(errors)
|
91
89
|
errors.each do |k, v|
|
@@ -95,6 +93,5 @@ Then /^the table "([^"]*)" should contain:$/ do |_, table|
|
|
95
93
|
end
|
96
94
|
|
97
95
|
Then /^the table "([^"]*)" should not contain errors for "([^"]*)" "([^"]*)"$/ do |_, model, id|
|
98
|
-
|
96
|
+
InvalidRecord.where(record_type: model, record_id: id).first.should be_nil
|
99
97
|
end
|
100
|
-
|
data/features/support/env.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
ENV['BUNDLE_GEMFILE'] = File.expand_path('../../../Gemfile', __FILE__)
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
-
require
|
4
|
+
require 'bundler'
|
5
5
|
Bundler.setup
|
6
6
|
|
7
|
-
if File.directory?(
|
8
|
-
Dir.chdir(
|
9
|
-
|
7
|
+
if File.directory?('test/rails_app')
|
8
|
+
Dir.chdir('test/rails_app') do
|
9
|
+
fail unless system('rm -f db/migrate/*create_invalid_records.rb && RAILS_ENV=test rake db:drop db:create db:migrate')
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
After do
|
14
14
|
# Reset DB!
|
15
|
-
tables =
|
15
|
+
tables = %w(categories invalid_records posts users)
|
16
16
|
conn = ActiveRecord::Base.connection
|
17
17
|
tables.each do |table|
|
18
18
|
if conn.table_exists?(table)
|
data/lib/active_sanity.rb
CHANGED
@@ -1,11 +1,19 @@
|
|
1
1
|
module ActiveSanity
|
2
2
|
class Checker
|
3
|
+
class << self
|
4
|
+
attr_accessor :batch_size
|
5
|
+
end
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
Checker.batch_size ||= 500
|
9
|
+
end
|
10
|
+
|
3
11
|
def self.check!
|
4
12
|
new.check!
|
5
13
|
end
|
6
14
|
|
7
15
|
def check!
|
8
|
-
puts
|
16
|
+
puts 'Sanity Check'
|
9
17
|
puts "Checking the following models: #{models.join(', ')}"
|
10
18
|
|
11
19
|
# TODO: Wouldnt this list already be checked by the next all records call if those records do exist?
|
@@ -22,6 +30,7 @@ module ActiveSanity
|
|
22
30
|
load_all_models
|
23
31
|
|
24
32
|
@models ||= direct_active_record_base_descendants
|
33
|
+
@models -= [InvalidRecord]
|
25
34
|
end
|
26
35
|
|
27
36
|
protected
|
@@ -52,7 +61,7 @@ module ActiveSanity
|
|
52
61
|
def check_previously_invalid_records
|
53
62
|
return unless InvalidRecord.table_exists?
|
54
63
|
|
55
|
-
InvalidRecord.find_each do |invalid_record|
|
64
|
+
InvalidRecord.find_each(batch_size: Checker.batch_size) do |invalid_record|
|
56
65
|
begin
|
57
66
|
invalid_record.destroy if invalid_record.record.valid?
|
58
67
|
rescue
|
@@ -64,14 +73,12 @@ module ActiveSanity
|
|
64
73
|
|
65
74
|
# Go over every single record. When the record is not valid
|
66
75
|
# log it to STDOUT and into the invalid_records table if it exists.
|
67
|
-
#
|
68
76
|
def check_all_records
|
69
77
|
models.each do |model|
|
70
78
|
begin
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
end
|
79
|
+
# TODO: Can we filter based on those records that are already present in the 'invalid_records' table - especially since they have been re-verified in the method before?
|
80
|
+
model.find_each(batch_size: Checker.batch_size) do |record|
|
81
|
+
invalid_record!(record) unless record.valid?
|
75
82
|
end
|
76
83
|
rescue => e
|
77
84
|
# Rescue from exceptions (table does not exists,
|
@@ -98,7 +105,7 @@ module ActiveSanity
|
|
98
105
|
def store_invalid_record(record)
|
99
106
|
return unless InvalidRecord.table_exists?
|
100
107
|
|
101
|
-
invalid_record = InvalidRecord.where(:
|
108
|
+
invalid_record = InvalidRecord.where(record_type: type_of(record), record_id: record.id).first
|
102
109
|
invalid_record ||= InvalidRecord.new
|
103
110
|
invalid_record.record = record
|
104
111
|
invalid_record.validation_errors = record.errors.messages
|
@@ -1,6 +1,7 @@
|
|
1
1
|
class InvalidRecord < ActiveRecord::Base
|
2
|
-
belongs_to :record, :
|
2
|
+
belongs_to :record, polymorphic: true
|
3
3
|
serialize :validation_errors
|
4
4
|
|
5
|
-
|
5
|
+
validates :record, :validation_errors, presence: true
|
6
|
+
validates :record_id, presence: true, uniqueness: { scope: :record_type }
|
6
7
|
end
|
data/lib/active_sanity/tasks.rb
CHANGED
@@ -6,20 +6,20 @@ module ActiveSanity
|
|
6
6
|
include Rails::Generators::Migration
|
7
7
|
|
8
8
|
def self.source_root
|
9
|
-
|
9
|
+
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
|
10
10
|
end
|
11
11
|
|
12
12
|
def self.next_migration_number(dirname) #:nodoc:
|
13
13
|
next_migration_number = current_migration_number(dirname) + 1
|
14
14
|
if ActiveRecord::Base.timestamped_migrations
|
15
|
-
[Time.now.utc.strftime(
|
15
|
+
[Time.now.utc.strftime('%Y%m%d%H%M%S'), '%.14d' % next_migration_number].max
|
16
16
|
else
|
17
|
-
|
17
|
+
'%.3d' % next_migration_number
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
def create_migration_file
|
22
|
-
|
22
|
+
migration_template 'create_invalid_records.rb', 'db/migrate/create_invalid_records.rb'
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class CreateInvalidRecords < ActiveRecord::Migration
|
2
2
|
def self.up
|
3
3
|
create_table :invalid_records do |t|
|
4
|
-
t.references :record, :
|
4
|
+
t.references :record, polymorphic: true, null: false
|
5
5
|
t.text :validation_errors
|
6
6
|
t.timestamps
|
7
7
|
end
|
@@ -12,4 +12,3 @@ class CreateInvalidRecords < ActiveRecord::Migration
|
|
12
12
|
drop_table :invalid_records
|
13
13
|
end
|
14
14
|
end
|
15
|
-
|
data/test/rails_template.rb
CHANGED
@@ -2,46 +2,54 @@
|
|
2
2
|
# Generate some test models
|
3
3
|
|
4
4
|
# Post
|
5
|
-
generate :model,
|
5
|
+
generate :model, 'post title:string body:text published_at:datetime author_id:integer category_id:integer'
|
6
6
|
post_code = <<-CODE
|
7
7
|
belongs_to :author, :class_name => 'User'
|
8
8
|
belongs_to :category
|
9
9
|
accepts_nested_attributes_for :author
|
10
10
|
|
11
|
-
|
11
|
+
validates :author, :category, :title, :published_at, presence: true
|
12
12
|
CODE
|
13
|
-
inject_into_file 'app/models/post.rb', post_code, :
|
13
|
+
inject_into_file 'app/models/post.rb', post_code, after: "class Post < ActiveRecord::Base\n"
|
14
14
|
|
15
15
|
# Category
|
16
16
|
generate :model, 'category name:string description:text'
|
17
17
|
category_code = <<-CODE
|
18
18
|
has_many :posts
|
19
19
|
|
20
|
-
|
20
|
+
validates :name, presence: true
|
21
21
|
CODE
|
22
|
-
inject_into_file 'app/models/category.rb', category_code, :
|
22
|
+
inject_into_file 'app/models/category.rb', category_code, after: "class Category < ActiveRecord::Base\n"
|
23
23
|
|
24
24
|
# User
|
25
|
-
generate :model,
|
25
|
+
generate :model, 'user first_name:string last_name:string username:string type:string'
|
26
26
|
user_code = <<-CODE
|
27
27
|
has_many :posts, :foreign_key => 'author_id'
|
28
28
|
|
29
|
-
|
30
|
-
|
29
|
+
validates :first_name, :last_name, :username, presence: true
|
30
|
+
validates :username, length: { minimum: 3 }
|
31
31
|
CODE
|
32
|
-
inject_into_file 'app/models/user.rb', user_code, :
|
32
|
+
inject_into_file 'app/models/user.rb', user_code, after: "class User < ActiveRecord::Base\n"
|
33
33
|
|
34
34
|
# Author < User
|
35
|
-
create_file 'app/models/author.rb',
|
35
|
+
create_file 'app/models/author.rb', 'class Author < User; end'
|
36
36
|
# Publisher < User
|
37
|
-
create_file 'app/models/publisher.rb',
|
38
|
-
|
37
|
+
create_file 'app/models/publisher.rb', 'class Publisher < User; end'
|
39
38
|
|
40
39
|
# NotAModel
|
41
|
-
create_file 'app/models/not_a_model.rb',
|
40
|
+
create_file 'app/models/not_a_model.rb', 'class NotAModel; end'
|
42
41
|
|
43
42
|
# Add active_sanity
|
44
43
|
append_file 'Gemfile', "gem 'active_sanity', :path => '../../'"
|
45
44
|
|
46
|
-
|
47
|
-
|
45
|
+
# Configure for custom batch_size
|
46
|
+
custom_batch_size_code = <<-CODE
|
47
|
+
config.after_initialize do
|
48
|
+
ActiveSanity::Checker.batch_size = 439
|
49
|
+
end
|
50
|
+
CODE
|
51
|
+
|
52
|
+
inject_into_file 'config/application.rb', custom_batch_size_code, after: " < Rails::Application\n"
|
53
|
+
|
54
|
+
run 'bundle'
|
55
|
+
rake 'db:migrate'
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_sanity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- VersaPay
|
@@ -10,52 +9,64 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2015-02-23 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: rails
|
17
|
-
requirement:
|
18
|
-
none: false
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - ">="
|
21
19
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
20
|
+
version: '4.0'
|
23
21
|
type: :runtime
|
24
22
|
prerelease: false
|
25
|
-
version_requirements:
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '4.0'
|
26
28
|
- !ruby/object:Gem::Dependency
|
27
29
|
name: rspec
|
28
|
-
requirement:
|
29
|
-
none: false
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
|
-
- -
|
32
|
+
- - "~>"
|
32
33
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
+
version: '3.1'
|
34
35
|
type: :development
|
35
36
|
prerelease: false
|
36
|
-
version_requirements:
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '3.1'
|
37
42
|
- !ruby/object:Gem::Dependency
|
38
43
|
name: cucumber
|
39
|
-
requirement:
|
40
|
-
none: false
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
41
45
|
requirements:
|
42
|
-
- -
|
46
|
+
- - "~>"
|
43
47
|
- !ruby/object:Gem::Version
|
44
|
-
version: '
|
48
|
+
version: '1.3'
|
45
49
|
type: :development
|
46
50
|
prerelease: false
|
47
|
-
version_requirements:
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '1.3'
|
48
56
|
- !ruby/object:Gem::Dependency
|
49
57
|
name: sqlite3
|
50
|
-
requirement:
|
51
|
-
none: false
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
52
59
|
requirements:
|
53
|
-
- -
|
60
|
+
- - "~>"
|
54
61
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
62
|
+
version: '1.3'
|
56
63
|
type: :development
|
57
64
|
prerelease: false
|
58
|
-
version_requirements:
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.3'
|
59
70
|
description: Performs a Sanity Check of your database by logging all invalid Active
|
60
71
|
Records
|
61
72
|
email:
|
@@ -64,7 +75,8 @@ executables: []
|
|
64
75
|
extensions: []
|
65
76
|
extra_rdoc_files: []
|
66
77
|
files:
|
67
|
-
- .gitignore
|
78
|
+
- ".gitignore"
|
79
|
+
- ".rubocop.yml"
|
68
80
|
- CHANGELOG.md
|
69
81
|
- Gemfile
|
70
82
|
- README.md
|
@@ -85,27 +97,26 @@ files:
|
|
85
97
|
- test/rails_template.rb
|
86
98
|
homepage: https://github.com/versapay/active_sanity
|
87
99
|
licenses: []
|
100
|
+
metadata: {}
|
88
101
|
post_install_message:
|
89
102
|
rdoc_options: []
|
90
103
|
require_paths:
|
91
104
|
- lib
|
92
105
|
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
-
none: false
|
94
106
|
requirements:
|
95
|
-
- -
|
107
|
+
- - ">="
|
96
108
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
109
|
+
version: 1.9.3
|
98
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
-
none: false
|
100
111
|
requirements:
|
101
|
-
- -
|
112
|
+
- - ">="
|
102
113
|
- !ruby/object:Gem::Version
|
103
114
|
version: '0'
|
104
115
|
requirements: []
|
105
116
|
rubyforge_project:
|
106
|
-
rubygems_version:
|
117
|
+
rubygems_version: 2.2.2
|
107
118
|
signing_key:
|
108
|
-
specification_version:
|
119
|
+
specification_version: 4
|
109
120
|
summary: Checks Sanity of Active Record records
|
110
121
|
test_files:
|
111
122
|
- features/check_sanity.feature
|
@@ -113,4 +124,3 @@ test_files:
|
|
113
124
|
- features/step_definitions/rails_app.rb
|
114
125
|
- features/support/env.rb
|
115
126
|
- test/rails_template.rb
|
116
|
-
has_rdoc:
|