validb 0.0.3 → 0.1.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 +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +5 -2
- data/lib/tasks/validb.rake +10 -2
- data/lib/validb/batcher.rb +15 -0
- data/lib/validb/checker.rb +8 -6
- data/lib/validb/console_logger.rb +8 -0
- data/lib/validb/finder.rb +14 -16
- data/lib/validb/model_validator.rb +7 -14
- data/lib/validb/record_validator.rb +13 -2
- data/lib/validb/version.rb +1 -1
- data/lib/validb.rb +3 -1
- data/spec/validb/batcher_spec.rb +22 -0
- data/spec/validb/checker_spec.rb +17 -15
- data/spec/validb/console_logger_spec.rb +13 -0
- data/spec/validb/finder_spec.rb +13 -4
- data/spec/validb/model_validator_spec.rb +14 -7
- data/spec/validb/record_validator_spec.rb +13 -6
- data/spec/validb/version_spec.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28235bb827e10873757a172aa4341de2125825b5
|
4
|
+
data.tar.gz: 534c056bd73c20c1a720283757e569d64bfa9cec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b58b722f5f0f96b7aea4b0f9c89e228682145c4a3876dbaf9a3bd71fb7a56d5fcc60f2b1ac624c6c6c58fcbdc6c777762644dd64812b32338db1fb5ea09f9ca
|
7
|
+
data.tar.gz: 61ded8105b8e95ff8c116adf0ebb88e9ec51bc24e960d21595437b9b8b310c4d1681f6e8731ec19ec1392875dea5b5534478656fd8d5e2e07530bd8062c4a1e7
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 0.1.0, released 2013-03-26
|
2
|
+
* Rake task now takes parameters differently
|
3
|
+
* Classes now use instances, not class methods
|
4
|
+
* Add new logger class to allow for custom logging
|
5
|
+
|
1
6
|
## 0.0.3, released 2013-03-25
|
2
7
|
* Use table_exists? in place of table name
|
3
8
|
* Add progress indicator during run
|
data/README.md
CHANGED
@@ -13,11 +13,14 @@ Check your database for invalid models.
|
|
13
13
|
|
14
14
|
## Usage
|
15
15
|
|
16
|
-
### All models
|
16
|
+
### All models, default logger
|
17
17
|
rake validb:validate
|
18
18
|
|
19
19
|
### Specific models
|
20
|
-
rake validb:validate
|
20
|
+
rake validb:validate models="Model,Model"
|
21
|
+
|
22
|
+
### Specific logger
|
23
|
+
rake validb:validate logger="Validb::ConsoleLogger"
|
21
24
|
|
22
25
|
## License
|
23
26
|
Released under the MIT License
|
data/lib/tasks/validb.rake
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
namespace :validb do
|
2
2
|
desc "Check DB for invalid records"
|
3
|
-
task :validate
|
3
|
+
task :validate => :environment do
|
4
|
+
models = ENV["models"] || ""
|
5
|
+
logger = ENV["logger"] || "Validb::ConsoleLogger"
|
6
|
+
|
7
|
+
# force all models to load so we can find them
|
4
8
|
Rails.application.eager_load!
|
5
|
-
Validb::
|
9
|
+
finder = Validb::Finder.new(models)
|
10
|
+
|
11
|
+
console_logger = logger.constantize.new
|
12
|
+
checker = Validb::Checker.new(console_logger)
|
13
|
+
checker.check(finder.models)
|
6
14
|
end
|
7
15
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Validb
|
2
|
+
class Batcher
|
3
|
+
|
4
|
+
def initialize(logger)
|
5
|
+
@record_validator = RecordValidator.new(logger)
|
6
|
+
end
|
7
|
+
|
8
|
+
def validate(record_batch)
|
9
|
+
puts "."
|
10
|
+
record_batch.each do |record|
|
11
|
+
@record_validator.validate(record)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/validb/checker.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
module Validb
|
2
2
|
class Checker
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
|
4
|
+
def initialize(logger)
|
5
|
+
@model_validator = Validb::ModelValidator.new(logger)
|
6
|
+
end
|
7
|
+
|
8
|
+
def check(models)
|
9
|
+
models.each do |model|
|
10
|
+
@model_validator.validate(model)
|
9
11
|
end
|
10
12
|
end
|
11
13
|
end
|
data/lib/validb/finder.rb
CHANGED
@@ -1,24 +1,22 @@
|
|
1
1
|
module Validb
|
2
2
|
class Finder
|
3
|
-
class << self
|
4
|
-
def get_models(model_name_string)
|
5
|
-
model_name_string ||= ""
|
6
|
-
filter_models(model_name_string.split(",").map(&:strip))
|
7
|
-
end
|
8
3
|
|
9
|
-
|
4
|
+
def initialize(model_name_string)
|
5
|
+
@model_name_string = model_name_string || ""
|
6
|
+
end
|
7
|
+
|
8
|
+
def models
|
9
|
+
model_names.empty? ? all : all.select { |model| model_names.include?(model.name) }
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
private
|
13
|
+
|
14
|
+
def model_names
|
15
|
+
@model_names ||= @model_name_string.split(",").map(&:strip)
|
16
|
+
end
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
all.select { |model| model_names.include?(model.name) }
|
18
|
-
else
|
19
|
-
all
|
20
|
-
end
|
21
|
-
end
|
18
|
+
def all
|
19
|
+
@models ||= ActiveRecord::Base.descendants.select { |model| model.table_exists? }
|
22
20
|
end
|
23
21
|
end
|
24
22
|
end
|
@@ -1,21 +1,14 @@
|
|
1
1
|
module Validb
|
2
2
|
class ModelValidator
|
3
|
-
class << self
|
4
|
-
def validate(model)
|
5
|
-
puts "Checking #{model}"
|
6
3
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
private
|
4
|
+
def initialize(logger)
|
5
|
+
@batcher = Validb::Batcher.new(logger)
|
6
|
+
end
|
13
7
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
end
|
8
|
+
def validate(model)
|
9
|
+
puts "Checking #{model}"
|
10
|
+
model.find_in_batches do |record_batch|
|
11
|
+
@batcher.validate(record_batch)
|
19
12
|
end
|
20
13
|
end
|
21
14
|
end
|
@@ -1,8 +1,19 @@
|
|
1
1
|
module Validb
|
2
2
|
class RecordValidator
|
3
|
-
|
3
|
+
|
4
|
+
def initialize(logger)
|
5
|
+
@logger = logger
|
6
|
+
end
|
7
|
+
|
8
|
+
def validate(record)
|
4
9
|
if !record.valid?
|
5
|
-
|
10
|
+
@logger.out(
|
11
|
+
{
|
12
|
+
model: record.class.name,
|
13
|
+
id: record.id,
|
14
|
+
error_messages: record.errors.full_messages.join(',')
|
15
|
+
}
|
16
|
+
)
|
6
17
|
end
|
7
18
|
end
|
8
19
|
end
|
data/lib/validb/version.rb
CHANGED
data/lib/validb.rb
CHANGED
@@ -5,8 +5,10 @@ require 'validb/version'
|
|
5
5
|
|
6
6
|
module Validb
|
7
7
|
require 'validb/railtie' if defined?(Rails)
|
8
|
+
autoload :ConsoleLogger, 'validb/console_logger'
|
8
9
|
autoload :Checker, 'validb/checker'
|
9
10
|
autoload :Finder, 'validb/finder'
|
10
|
-
autoload :RecordValidator, 'validb/record_validator'
|
11
11
|
autoload :ModelValidator, 'validb/model_validator'
|
12
|
+
autoload :Batcher, 'validb/batcher'
|
13
|
+
autoload :RecordValidator, 'validb/record_validator'
|
12
14
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Validb::Batcher do
|
4
|
+
describe "#initialize" do
|
5
|
+
it "creates a batcher" do
|
6
|
+
logger = double('logger')
|
7
|
+
Validb::RecordValidator.should_receive(:new).with(logger)
|
8
|
+
Validb::Batcher.new(logger)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#validate" do
|
13
|
+
it "validates the batch of records" do
|
14
|
+
record_batch = [Blog.new(title: "Title")]
|
15
|
+
logger = double('logger')
|
16
|
+
batcher = Validb::Batcher.new(logger)
|
17
|
+
|
18
|
+
$stdout.should_receive(:puts).with(".")
|
19
|
+
batcher.validate(record_batch)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/spec/validb/checker_spec.rb
CHANGED
@@ -1,23 +1,25 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Validb::Checker do
|
4
|
-
describe "
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
Validb::ModelValidator.should_receive(:validate).with(Comment)
|
10
|
-
Validb::Checker.check("")
|
11
|
-
end
|
4
|
+
describe "#initialize" do
|
5
|
+
it "creates a checker" do
|
6
|
+
logger = double('logger')
|
7
|
+
Validb::ModelValidator.should_receive(:new).with(logger)
|
8
|
+
Validb::Checker.new(logger)
|
12
9
|
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#check" do
|
13
|
+
it "validates the passed in models records" do
|
14
|
+
logger = double('logger')
|
15
|
+
model_validator = double('model_validator')
|
16
|
+
Validb::ModelValidator.should_receive(:new).with(logger).and_return(model_validator)
|
17
|
+
checker = Validb::Checker.new(logger)
|
18
|
+
|
19
|
+
model_validator.should_receive(:validate).with(Blog)
|
20
|
+
model_validator.should_receive(:validate).with(Post)
|
13
21
|
|
14
|
-
|
15
|
-
it "validates the passed in model's records" do
|
16
|
-
Validb::ModelValidator.should_receive(:validate).with(Blog)
|
17
|
-
Validb::ModelValidator.should_receive(:validate).with(Post)
|
18
|
-
Validb::ModelValidator.should_not_receive(:validate).with(Comment)
|
19
|
-
Validb::Checker.check("Blog, Post")
|
20
|
-
end
|
22
|
+
checker.check([Blog, Post])
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Validb::ConsoleLogger do
|
4
|
+
describe "#out" do
|
5
|
+
it "prints the hash output" do
|
6
|
+
hash = { model: Blog, id: 1, error_messages: "Error message" }
|
7
|
+
|
8
|
+
console_logger = Validb::ConsoleLogger.new
|
9
|
+
$stdout.should_receive(:puts).with("Blog:1 - Error message")
|
10
|
+
console_logger.out(hash)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/spec/validb/finder_spec.rb
CHANGED
@@ -4,17 +4,26 @@ describe Validb::Finder do
|
|
4
4
|
class NoTable < ActiveRecord::Base
|
5
5
|
end
|
6
6
|
|
7
|
-
describe "
|
7
|
+
describe "#models" do
|
8
8
|
context "with an empty string" do
|
9
|
-
|
9
|
+
it "returns all the models with tables" do
|
10
|
+
finder = Validb::Finder.new("")
|
11
|
+
finder.models.should =~ [Post, Blog, Comment]
|
12
|
+
end
|
10
13
|
end
|
11
14
|
|
12
15
|
context "valid model names" do
|
13
|
-
|
16
|
+
it "returns all the selected models with tables" do
|
17
|
+
finder = Validb::Finder.new("Post, Blog")
|
18
|
+
finder.models.should =~ [Post, Blog]
|
19
|
+
end
|
14
20
|
end
|
15
21
|
|
16
22
|
context "with invalid model names" do
|
17
|
-
|
23
|
+
it "returns all the valid models with tables" do
|
24
|
+
finder = Validb::Finder.new("Post, Blog, Fake")
|
25
|
+
finder.models.should =~ [Post, Blog]
|
26
|
+
end
|
18
27
|
end
|
19
28
|
end
|
20
29
|
end
|
@@ -1,15 +1,22 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Validb::ModelValidator do
|
4
|
-
describe "#
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
describe "#initialize" do
|
5
|
+
it "creates a model validator" do
|
6
|
+
logger = double('logger')
|
7
|
+
Validb::Batcher.should_receive(:new).with(logger)
|
8
|
+
Validb::ModelValidator.new(logger)
|
9
|
+
end
|
10
|
+
end
|
8
11
|
|
9
|
-
|
12
|
+
describe "#validate" do
|
13
|
+
it "validates the records of the model" do
|
14
|
+
model = Blog
|
15
|
+
logger = double('logger')
|
16
|
+
model_validator = Validb::ModelValidator.new(logger)
|
10
17
|
|
11
|
-
|
12
|
-
|
18
|
+
$stdout.should_receive(:puts).with("Checking Blog")
|
19
|
+
model_validator.validate(model)
|
13
20
|
end
|
14
21
|
end
|
15
22
|
end
|
@@ -4,22 +4,29 @@ describe Validb::RecordValidator do
|
|
4
4
|
describe "#validate" do
|
5
5
|
context "with a valid record" do
|
6
6
|
it "validates the passed in record" do
|
7
|
+
logger = double(:logger)
|
8
|
+
record_validator = Validb::RecordValidator.new(logger)
|
7
9
|
record = Blog.new(title: "title")
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
Validb::RecordValidator.validate(record)
|
11
|
+
logger.should_not_receive(:out)
|
12
|
+
record_validator.validate(record)
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
15
16
|
context "with an invalid record" do
|
16
17
|
it "outputs the record information" do
|
18
|
+
logger = double(:logger)
|
19
|
+
record_validator = Validb::RecordValidator.new(logger)
|
17
20
|
record = Blog.new
|
18
21
|
record.save(validate: false)
|
19
22
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
+
hash = {
|
24
|
+
model: "Blog",
|
25
|
+
id: record.id,
|
26
|
+
error_messages: "Title can't be blank"
|
27
|
+
}
|
28
|
+
logger.should_receive(:out).with(hash)
|
29
|
+
record_validator.validate(record)
|
23
30
|
end
|
24
31
|
end
|
25
32
|
end
|
data/spec/validb/version_spec.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joey Geiger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-03-
|
11
|
+
date: 2013-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -38,14 +38,18 @@ files:
|
|
38
38
|
- Rakefile
|
39
39
|
- lib/tasks/validb.rake
|
40
40
|
- lib/validb.rb
|
41
|
+
- lib/validb/batcher.rb
|
41
42
|
- lib/validb/checker.rb
|
43
|
+
- lib/validb/console_logger.rb
|
42
44
|
- lib/validb/finder.rb
|
43
45
|
- lib/validb/model_validator.rb
|
44
46
|
- lib/validb/railtie.rb
|
45
47
|
- lib/validb/record_validator.rb
|
46
48
|
- lib/validb/version.rb
|
47
49
|
- spec/spec_helper.rb
|
50
|
+
- spec/validb/batcher_spec.rb
|
48
51
|
- spec/validb/checker_spec.rb
|
52
|
+
- spec/validb/console_logger_spec.rb
|
49
53
|
- spec/validb/finder_spec.rb
|
50
54
|
- spec/validb/model_validator_spec.rb
|
51
55
|
- spec/validb/record_validator_spec.rb
|