validb 1.2.1 → 2.0.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/.gitignore +1 -0
- data/CHANGELOG.md +4 -0
- data/README.md +18 -11
- data/lib/tasks/validb.rake +1 -15
- data/lib/validb.rb +4 -2
- data/lib/validb/batcher.rb +5 -8
- data/lib/validb/checker.rb +4 -7
- data/lib/validb/counter.rb +14 -0
- data/lib/validb/file_system_logger_worker.rb +10 -0
- data/lib/validb/finder.rb +1 -1
- data/lib/validb/logger/file_system.rb +4 -3
- data/lib/validb/model_validator.rb +5 -9
- data/lib/validb/queue_monitor.rb +30 -0
- data/lib/validb/railtie.rb +2 -0
- data/lib/validb/record_validator.rb +2 -11
- data/lib/validb/tasker.rb +46 -0
- data/lib/validb/version.rb +1 -1
- data/spec/spec_helper.rb +7 -0
- data/spec/validb/batcher_spec.rb +9 -15
- data/spec/validb/checker_spec.rb +8 -21
- data/spec/validb/counter_spec.rb +13 -0
- data/spec/validb/file_system_logger_worker_spec.rb +14 -0
- data/spec/validb/finder_spec.rb +3 -3
- data/spec/validb/logger/file_system_spec.rb +3 -3
- data/spec/validb/model_validator_spec.rb +21 -16
- data/spec/validb/queue_monitor_spec.rb +14 -0
- data/spec/validb/record_validator_spec.rb +8 -13
- data/spec/validb/tasker_spec.rb +18 -0
- data/spec/validb/version_spec.rb +1 -1
- data/validb.gemspec +2 -0
- metadata +38 -5
- data/lib/validb/logger/base.rb +0 -11
- data/lib/validb/logger/console.rb +0 -9
- data/spec/validb/logger/console_spec.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36c876f755ed39d03ffa2089430e120485a33ef3
|
4
|
+
data.tar.gz: aee472a56c2a3a13d83da6cd6affecfddb4754c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 091a64b809e1652481cd32b847f34643246ae1772b9657e34bb24e2b7e17b2fcc9e908f7b1c8438c6809633deda8f66f08671e8cb12c60274831e04d64c4341a
|
7
|
+
data.tar.gz: e0fecdeef959242ec3f02bdb3ebdabca9c86aabaf632ea558505055a6a61a7376ec5d89e0833de55ffb0820a13f27e3d06adaee21cdb94e08b20192ca5b889f6
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -10,22 +10,15 @@
|
|
10
10
|
Check your database for invalid models.
|
11
11
|
|
12
12
|
## Installation
|
13
|
-
|
14
|
-
|
15
|
-
### Rails 3 In Gemfile
|
13
|
+
Add this line to your Gemfile
|
16
14
|
|
17
15
|
gem 'validb'
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
### All models, default logger
|
22
|
-
rake validb:validate
|
17
|
+
And then:
|
23
18
|
|
24
|
-
|
25
|
-
rake validb:validate models="Model,Model"
|
19
|
+
bundle
|
26
20
|
|
27
|
-
|
28
|
-
rake validb:validate logger="Validb::Logger::Console"
|
21
|
+
## Usage
|
29
22
|
|
30
23
|
### Generate config file in config/validb.json
|
31
24
|
rake validb:generate_config
|
@@ -43,5 +36,19 @@ Check your database for invalid models.
|
|
43
36
|
"batch_size": 1000
|
44
37
|
}
|
45
38
|
|
39
|
+
### Launch sidekiq
|
40
|
+
sidekiq -L log/sidekiq.log
|
41
|
+
|
42
|
+
### Validate all model records
|
43
|
+
rake validb:validate
|
44
|
+
|
45
|
+
### Validate specific model records
|
46
|
+
rake validb:validate models="Blog,Comment"
|
47
|
+
|
48
|
+
## Uses
|
49
|
+
[sidekiq](http://mperham.github.io/sidekiq)
|
50
|
+
|
51
|
+
[sidekiq_status](https://github.com/cryo28/sidekiq_status)
|
52
|
+
|
46
53
|
## License
|
47
54
|
Released under the MIT License
|
data/lib/tasks/validb.rake
CHANGED
@@ -2,23 +2,9 @@ namespace :validb do
|
|
2
2
|
desc "Check DB for invalid records"
|
3
3
|
task :validate => :environment do
|
4
4
|
models = ENV["models"] || ""
|
5
|
-
logger_class = ENV["logger"] || "Validb::Logger::FileSystem"
|
6
5
|
filename = ENV["config"] || default_configuration_file
|
7
6
|
|
8
|
-
|
9
|
-
Rails.application.eager_load!
|
10
|
-
ActiveRecord::Base.logger.level = 1
|
11
|
-
|
12
|
-
params = Validb::Configuration.new(filename).params
|
13
|
-
finder = Validb::Finder.new(params, models)
|
14
|
-
|
15
|
-
logger = logger_class.constantize.new
|
16
|
-
logger.prepare
|
17
|
-
|
18
|
-
started_at = Time.now
|
19
|
-
checker = Validb::Checker.new(params, logger)
|
20
|
-
checker.check(finder.models)
|
21
|
-
puts "\nFinished in #{Time.now-started_at} seconds"
|
7
|
+
Validb::Tasker.new(models, filename).run
|
22
8
|
end
|
23
9
|
|
24
10
|
desc "Generate config/validb.json"
|
data/lib/validb.rb
CHANGED
@@ -13,9 +13,11 @@ module Validb
|
|
13
13
|
autoload :Batcher, 'validb/batcher'
|
14
14
|
autoload :RecordValidator, 'validb/record_validator'
|
15
15
|
autoload :Parameters, 'validb/parameters'
|
16
|
+
autoload :FileSystemLoggerWorker, 'validb/file_system_logger_worker'
|
17
|
+
autoload :QueueMonitor, 'validb/queue_monitor'
|
18
|
+
autoload :Counter, 'validb/counter'
|
19
|
+
autoload :Tasker, 'validb/tasker'
|
16
20
|
module Logger
|
17
|
-
autoload :Base, 'validb/logger/base'
|
18
21
|
autoload :FileSystem, 'validb/logger/file_system'
|
19
|
-
autoload :Console, 'validb/logger/console'
|
20
22
|
end
|
21
23
|
end
|
data/lib/validb/batcher.rb
CHANGED
@@ -1,14 +1,11 @@
|
|
1
1
|
module Validb
|
2
2
|
class Batcher
|
3
|
+
include SidekiqStatus::Worker
|
3
4
|
|
4
|
-
def
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def validate(record_batch)
|
9
|
-
$stdout.print "."
|
10
|
-
record_batch.each do |record|
|
11
|
-
@record_validator.validate(record)
|
5
|
+
def perform(model_name, model_ids)
|
6
|
+
model_name.constantize.find(model_ids).each do |record|
|
7
|
+
record_validator = Validb::RecordValidator.new
|
8
|
+
record_validator.validate(record)
|
12
9
|
end
|
13
10
|
end
|
14
11
|
end
|
data/lib/validb/checker.rb
CHANGED
@@ -1,13 +1,10 @@
|
|
1
1
|
module Validb
|
2
2
|
class Checker
|
3
|
+
include SidekiqStatus::Worker
|
3
4
|
|
4
|
-
def
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def check(models)
|
9
|
-
models.each do |model|
|
10
|
-
@model_validator.validate(model)
|
5
|
+
def perform(model_names, batch_size)
|
6
|
+
model_names.each do |model_name|
|
7
|
+
Validb::ModelValidator.perform_async(model_name, batch_size)
|
11
8
|
end
|
12
9
|
end
|
13
10
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Validb
|
2
|
+
class Counter
|
3
|
+
def initialize(model_names)
|
4
|
+
@models = model_names.map(&:constantize)
|
5
|
+
end
|
6
|
+
|
7
|
+
def count
|
8
|
+
$stdout.puts("\nChecking models:")
|
9
|
+
@models.each do |model|
|
10
|
+
$stdout.puts("#{model}(#{model.table_name}) (#{model.count} records)")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/validb/finder.rb
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
module Validb
|
2
2
|
module Logger
|
3
|
-
class FileSystem
|
3
|
+
class FileSystem
|
4
4
|
def prepare
|
5
5
|
File.delete(filename) if File.exists?(filename)
|
6
|
+
File.open(filename, "w") {}
|
6
7
|
$stdout.puts("Writing output to #{filename}")
|
7
8
|
end
|
8
9
|
|
9
|
-
def out(
|
10
|
+
def out(message)
|
10
11
|
File.open(filename, "ab+") do |file|
|
11
|
-
file.puts(
|
12
|
+
file.puts(message)
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
@@ -1,15 +1,11 @@
|
|
1
1
|
module Validb
|
2
2
|
class ModelValidator
|
3
|
+
include SidekiqStatus::Worker
|
3
4
|
|
4
|
-
def
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
def validate(model)
|
10
|
-
$stdout.print "\nChecking #{model}(#{model.table_name}) (#{model.count} records)"
|
11
|
-
model.find_in_batches(batch_size: @params.batch_size) do |record_batch|
|
12
|
-
@batcher.validate(record_batch)
|
5
|
+
def perform(model_name, batch_size)
|
6
|
+
model_name.constantize.select(:id).find_in_batches(batch_size: batch_size) do |record_batch|
|
7
|
+
model_ids = record_batch.map(&:id)
|
8
|
+
Validb::Batcher.perform_async(model_name, model_ids)
|
13
9
|
end
|
14
10
|
end
|
15
11
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Validb
|
2
|
+
class QueueMonitor
|
3
|
+
|
4
|
+
def monitor
|
5
|
+
saved_time = Time.now
|
6
|
+
$stdout.print "\nValidating database records"
|
7
|
+
|
8
|
+
wait_for_completion
|
9
|
+
|
10
|
+
$stdout.puts "\nComplete in #{Time.now - saved_time} seconds"
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def wait_for_completion
|
16
|
+
while in_process_jobs?
|
17
|
+
sleep 1
|
18
|
+
$stdout.print "."
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def in_process_jobs?
|
23
|
+
statuses.detect { |job| job.status != "complete" }
|
24
|
+
end
|
25
|
+
|
26
|
+
def statuses
|
27
|
+
SidekiqStatus::Container.statuses
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/validb/railtie.rb
CHANGED
@@ -1,19 +1,10 @@
|
|
1
1
|
module Validb
|
2
2
|
class RecordValidator
|
3
3
|
|
4
|
-
def initialize(logger)
|
5
|
-
@logger = logger
|
6
|
-
end
|
7
|
-
|
8
4
|
def validate(record)
|
9
5
|
if !record.valid?
|
10
|
-
|
11
|
-
|
12
|
-
model: record.class.name,
|
13
|
-
id: record.id,
|
14
|
-
error_messages: record.errors.full_messages.join(',')
|
15
|
-
}
|
16
|
-
)
|
6
|
+
message = "FAIL: #{record.class.name}:#{record.id} - #{record.errors.full_messages.join(',')}"
|
7
|
+
Validb::FileSystemLoggerWorker.perform_async(message)
|
17
8
|
end
|
18
9
|
end
|
19
10
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Validb
|
2
|
+
class Tasker
|
3
|
+
|
4
|
+
def initialize(model_names, filename)
|
5
|
+
@model_names = model_names
|
6
|
+
@filename = filename
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
load_models_and_prepare_logger
|
11
|
+
output_model_table_record_count
|
12
|
+
validate_database_records
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def params
|
18
|
+
@params ||= Validb::Configuration.new(@filename).params
|
19
|
+
end
|
20
|
+
|
21
|
+
def finder
|
22
|
+
@finder ||= Validb::Finder.new(params, @model_names)
|
23
|
+
end
|
24
|
+
|
25
|
+
def load_models_and_prepare_logger
|
26
|
+
# force all models to load so we can find them
|
27
|
+
Rails.application.eager_load!
|
28
|
+
ActiveRecord::Base.logger.level = 1
|
29
|
+
Validb::Logger::FileSystem.new.prepare
|
30
|
+
end
|
31
|
+
|
32
|
+
def output_model_table_record_count
|
33
|
+
Validb::Counter.new(finder.models).count
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate_database_records
|
37
|
+
Validb::Checker.perform_async(finder.models, params.batch_size)
|
38
|
+
monitor_job_progress
|
39
|
+
end
|
40
|
+
|
41
|
+
def monitor_job_progress
|
42
|
+
queue_monitor = Validb::QueueMonitor.new
|
43
|
+
queue_monitor.monitor
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/validb/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,10 +1,17 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../lib/validb')
|
2
2
|
|
3
3
|
require "pry"
|
4
|
+
require "sidekiq"
|
5
|
+
require 'sidekiq/testing'
|
6
|
+
require 'sidekiq_status'
|
4
7
|
|
5
8
|
RSpec.configure do |config|
|
6
9
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
7
10
|
config.run_all_when_everything_filtered = true
|
11
|
+
|
12
|
+
config.after(:all) do
|
13
|
+
SidekiqStatus::Container.delete
|
14
|
+
end
|
8
15
|
end
|
9
16
|
|
10
17
|
RSpec::Matchers::OperatorMatcher.register(ActiveRecord::Relation, '=~', RSpec::Matchers::BuiltIn::MatchArray)
|
data/spec/validb/batcher_spec.rb
CHANGED
@@ -1,22 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Validb::Batcher do
|
4
|
-
describe "#
|
5
|
-
it "
|
6
|
-
|
7
|
-
|
8
|
-
Validb::Batcher.new
|
9
|
-
|
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)
|
4
|
+
describe "#perform" do
|
5
|
+
it "sends an invalid record logging event" do
|
6
|
+
record = Blog.new
|
7
|
+
record.save(validate: false)
|
8
|
+
batcher = Validb::Batcher.new
|
9
|
+
jid = Validb::Batcher.perform_async("Blog", [record.id])
|
17
10
|
|
18
|
-
|
19
|
-
|
11
|
+
expect {
|
12
|
+
batcher.perform(jid)
|
13
|
+
}.to change(Validb::FileSystemLoggerWorker.jobs, :size).by(1)
|
20
14
|
end
|
21
15
|
end
|
22
16
|
end
|
data/spec/validb/checker_spec.rb
CHANGED
@@ -1,27 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Validb::Checker do
|
4
|
-
describe "#
|
5
|
-
it "
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
describe "#check" do
|
14
|
-
it "validates the passed in models records" do
|
15
|
-
logger = double('logger')
|
16
|
-
params = double('params')
|
17
|
-
model_validator = double('model_validator')
|
18
|
-
Validb::ModelValidator.should_receive(:new).with(params, logger).and_return(model_validator)
|
19
|
-
checker = Validb::Checker.new(params, logger)
|
20
|
-
|
21
|
-
model_validator.should_receive(:validate).with(Blog)
|
22
|
-
model_validator.should_receive(:validate).with(Post)
|
23
|
-
|
24
|
-
checker.check([Blog, Post])
|
4
|
+
describe "#perform" do
|
5
|
+
it "generates validb model validator jobs" do
|
6
|
+
checker = Validb::Checker.new
|
7
|
+
jid = Validb::Batcher.perform_async(["Blog", "Post"], 100)
|
8
|
+
|
9
|
+
expect {
|
10
|
+
checker.perform(jid)
|
11
|
+
}.to change(Validb::ModelValidator.jobs, :size).by(2)
|
25
12
|
end
|
26
13
|
end
|
27
14
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Validb::Counter do
|
4
|
+
describe "#count" do
|
5
|
+
it "prints the model names, tables and record counts" do
|
6
|
+
counter = Validb::Counter.new(["Blog"])
|
7
|
+
$stdout.should_receive(:puts).with("\nChecking models:")
|
8
|
+
$stdout.should_receive(:puts).with("Blog(blogs) (1 records)")
|
9
|
+
|
10
|
+
counter.count
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Validb::FileSystemLoggerWorker do
|
4
|
+
describe "#perform" do
|
5
|
+
it "sends the message to the File System logger" do
|
6
|
+
Validb::Logger::FileSystem.any_instance.should_receive(:out).with("message")
|
7
|
+
|
8
|
+
logger = Validb::FileSystemLoggerWorker.new
|
9
|
+
jid = Validb::Batcher.perform_async("message")
|
10
|
+
|
11
|
+
logger.perform(jid)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/spec/validb/finder_spec.rb
CHANGED
@@ -17,7 +17,7 @@ describe Validb::Finder do
|
|
17
17
|
it "returns all the models with tables" do
|
18
18
|
params = Validb::Configuration.new("").params
|
19
19
|
finder = Validb::Finder.new(params, "")
|
20
|
-
finder.models.should == [Author, Blog, Comment, Post]
|
20
|
+
finder.models.should == ["Author", "Blog", "Comment", "Post"]
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -25,7 +25,7 @@ describe Validb::Finder do
|
|
25
25
|
it "returns all the selected models with tables" do
|
26
26
|
params = Validb::Configuration.new("").params
|
27
27
|
finder = Validb::Finder.new(params, "Post, Blog")
|
28
|
-
finder.models.should == [Blog, Post]
|
28
|
+
finder.models.should == ["Blog", "Post"]
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -33,7 +33,7 @@ describe Validb::Finder do
|
|
33
33
|
it "returns all the valid models with tables" do
|
34
34
|
params = Validb::Configuration.new("").params
|
35
35
|
finder = Validb::Finder.new(params, "Post, Blog, Fake")
|
36
|
-
finder.models.should == [Blog, Post]
|
36
|
+
finder.models.should == ["Blog", "Post"]
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -30,12 +30,12 @@ describe Validb::Logger::FileSystem do
|
|
30
30
|
describe "#out" do
|
31
31
|
it "writes the hash output to a file and prints an X" do
|
32
32
|
file = double('file')
|
33
|
+
message = "Blog:1 - Error message"
|
33
34
|
File.should_receive(:open).with("validb.log", "ab+").and_yield(file)
|
34
|
-
file.should_receive(:puts).with(
|
35
|
+
file.should_receive(:puts).with(message)
|
35
36
|
|
36
|
-
hash = { model: Blog, id: 1, error_messages: "Error message" }
|
37
37
|
file_logger = Validb::Logger::FileSystem.new
|
38
|
-
file_logger.out(
|
38
|
+
file_logger.out(message)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -1,25 +1,30 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Validb::ModelValidator do
|
4
|
-
describe "#
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
describe "#perform" do
|
5
|
+
context "with available records" do
|
6
|
+
it "creates a batcher job" do
|
7
|
+
record = Blog.new(title: "title")
|
8
|
+
record.save
|
9
|
+
model_validator = Validb::ModelValidator.new
|
10
|
+
jid = Validb::ModelValidator.perform_async("Blog", 100)
|
11
|
+
|
12
|
+
expect {
|
13
|
+
model_validator.perform(jid)
|
14
|
+
}.to change(Validb::Batcher.jobs, :size).by(1)
|
15
|
+
end
|
10
16
|
end
|
11
|
-
end
|
12
17
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
model_validator = Validb::ModelValidator.new(params, logger)
|
18
|
+
context "with no available records" do
|
19
|
+
it "does not create a batcher job" do
|
20
|
+
Blog.delete_all
|
21
|
+
model_validator = Validb::ModelValidator.new
|
22
|
+
jid = Validb::ModelValidator.perform_async("Blog", 100)
|
19
23
|
|
20
|
-
|
21
|
-
|
22
|
-
|
24
|
+
expect {
|
25
|
+
model_validator.perform(jid)
|
26
|
+
}.not_to change(Validb::Batcher.jobs, :size)
|
27
|
+
end
|
23
28
|
end
|
24
29
|
end
|
25
30
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Validb::QueueMonitor do
|
4
|
+
|
5
|
+
describe "#monitor" do
|
6
|
+
it "prints progress information" do
|
7
|
+
$stdout.should_receive(:print).with("\nValidating database records")
|
8
|
+
$stdout.should_receive(:puts)
|
9
|
+
|
10
|
+
queue_monitor = Validb::QueueMonitor.new
|
11
|
+
queue_monitor.monitor
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -4,29 +4,24 @@ 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)
|
9
7
|
record = Blog.new(title: "title")
|
8
|
+
record_validator = Validb::RecordValidator.new
|
10
9
|
|
11
|
-
|
12
|
-
|
10
|
+
expect {
|
11
|
+
record_validator.validate(record)
|
12
|
+
}.not_to change(Validb::FileSystemLoggerWorker.jobs, :size)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
context "with an invalid record" do
|
17
17
|
it "outputs the record information" do
|
18
|
-
|
19
|
-
record_validator = Validb::RecordValidator.new(logger)
|
18
|
+
record_validator = Validb::RecordValidator.new
|
20
19
|
record = Blog.new
|
21
20
|
record.save(validate: false)
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
error_messages: "Title can't be blank"
|
27
|
-
}
|
28
|
-
logger.should_receive(:out).with(hash)
|
29
|
-
record_validator.validate(record)
|
22
|
+
expect {
|
23
|
+
record_validator.validate(record)
|
24
|
+
}.to change(Validb::FileSystemLoggerWorker.jobs, :size).by(1)
|
30
25
|
end
|
31
26
|
end
|
32
27
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Validb::Tasker do
|
4
|
+
describe "#run" do
|
5
|
+
it "runs the database validation" do
|
6
|
+
filename = File.expand_path(File.dirname(__FILE__) + '/../config/validb.json')
|
7
|
+
tasker = Validb::Tasker.new("", filename)
|
8
|
+
|
9
|
+
tasker.should_receive(:load_models_and_prepare_logger)
|
10
|
+
Validb::Counter.any_instance.should_receive(:count)
|
11
|
+
Validb::QueueMonitor.any_instance.should_receive(:monitor)
|
12
|
+
|
13
|
+
expect {
|
14
|
+
tasker.run
|
15
|
+
}.to change(Validb::Checker.jobs, :size).by(1)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/spec/validb/version_spec.rb
CHANGED
data/validb.gemspec
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:
|
4
|
+
version: 2.0.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-04-
|
11
|
+
date: 2013-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sidekiq
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sidekiq_status
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
description: Check the contents of your database by validating the models.
|
28
56
|
email: jgeiger@gmail.com
|
29
57
|
executables: []
|
@@ -41,27 +69,32 @@ files:
|
|
41
69
|
- lib/validb/batcher.rb
|
42
70
|
- lib/validb/checker.rb
|
43
71
|
- lib/validb/configuration.rb
|
72
|
+
- lib/validb/counter.rb
|
73
|
+
- lib/validb/file_system_logger_worker.rb
|
44
74
|
- lib/validb/finder.rb
|
45
|
-
- lib/validb/logger/base.rb
|
46
|
-
- lib/validb/logger/console.rb
|
47
75
|
- lib/validb/logger/file_system.rb
|
48
76
|
- lib/validb/model_filterer.rb
|
49
77
|
- lib/validb/model_validator.rb
|
50
78
|
- lib/validb/parameters.rb
|
79
|
+
- lib/validb/queue_monitor.rb
|
51
80
|
- lib/validb/railtie.rb
|
52
81
|
- lib/validb/record_validator.rb
|
82
|
+
- lib/validb/tasker.rb
|
53
83
|
- lib/validb/version.rb
|
54
84
|
- spec/config/validb.json
|
55
85
|
- spec/spec_helper.rb
|
56
86
|
- spec/validb/batcher_spec.rb
|
57
87
|
- spec/validb/checker_spec.rb
|
58
88
|
- spec/validb/configuration_spec.rb
|
89
|
+
- spec/validb/counter_spec.rb
|
90
|
+
- spec/validb/file_system_logger_worker_spec.rb
|
59
91
|
- spec/validb/finder_spec.rb
|
60
|
-
- spec/validb/logger/console_spec.rb
|
61
92
|
- spec/validb/logger/file_system_spec.rb
|
62
93
|
- spec/validb/model_filterer_spec.rb
|
63
94
|
- spec/validb/model_validator_spec.rb
|
95
|
+
- spec/validb/queue_monitor_spec.rb
|
64
96
|
- spec/validb/record_validator_spec.rb
|
97
|
+
- spec/validb/tasker_spec.rb
|
65
98
|
- spec/validb/version_spec.rb
|
66
99
|
- validb.gemspec
|
67
100
|
homepage: http://github.com/jgeiger/validb
|
data/lib/validb/logger/base.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Validb::Logger::Console 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::Logger::Console.new
|
9
|
-
$stdout.should_receive(:puts).with("\nBlog:1 - Error message")
|
10
|
-
console_logger.out(hash)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|