broken_record 0.0.3 → 0.0.5

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZTEyNmRlZWM4NjUxZjdmNmE3ZWE0NjJlYzNmZDVjZDcyMTJkZGIwMw==
4
+ NmQyYTRiOTBhYjVhNTcyZTIzNTFhOWU3Y2JiNWY3NDFiYjk3ZTg5Ng==
5
5
  data.tar.gz: !binary |-
6
- NmYxZDNlZGI5NzJhZDRkODU1YmFkOTFlZWUyNTU0MGEyZDNmZTg4ZA==
6
+ MjNjMWEzNTgyNzNjMjRmNTQ4YmMyZTAyZTM1OTgwNjRiYWIzNGMwMw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDAyNDkxNDc2MzEyY2I1MGY3NTQ2MzVkZGI5NmM1ZWViNzE1YTc0OGJkMDkz
10
- MjQxMWM3NmNkYjc0ZGYxZmJlN2NjMTZkNWY5MGJkZWVmYzJjY2Y1ODAyODQ4
11
- MzkxZjRmZTQ1YjA3YTIxMzlhOTM2NThmNTE3NDllNDlhMDczOGQ=
9
+ NzI0Mjg0ZmI4N2EyNWMwNmQ0ZGQ4YzM1ZTJlOTBkNGYwNDQyYWM3MTAxMWJl
10
+ N2EyNGE0ODBhZTJiMDg4YTY3ZjAzZGY2NzdlMzlkNzhmYzg1NTg4MWFjZjZm
11
+ NjgzZTBlZTMzN2ZjNWYxN2RkZmFmOTdhNjBlOWVjYWFiOGMwMmU=
12
12
  data.tar.gz: !binary |-
13
- MWU0ZWQxZWViZjM5ZWY2YzI4NmRjYWIwZmRiOWM4ZDEzZTE2MmJkYjYyYTc0
14
- NjA5NDg5MWJlNzQxN2NjNDc1OTVkMjUyNTM0YTBjZmZjN2MxZTc5ZDM5YjI2
15
- OTEyY2NiYzg2MzkyMDRmNjgyYzQzOWUxNDY0YjljNWZmNWNmMWM=
13
+ YTczYzAzODkwOWM0ZTlmYjE4NmVhYzRmMjc3Mjk5YThkN2VkYTE1OWM3Y2I1
14
+ YTAxYTEyMmExY2ExZGFjOTUwMjM3YWQ4MWRkOWIzNjUxNWE1ZWQ1NzQ4OGIw
15
+ MDMxNTcyODIyMWZjOWIxYzRmMWVmOWY5YjJiODQ0MzY2NjQ1YzA=
@@ -9,4 +9,8 @@
9
9
 
10
10
  ## v0.0.3
11
11
 
12
- * Allow setting a per-model default scope
12
+ * Allow setting a per-model default scope
13
+
14
+ ## v0.0.5
15
+
16
+ * Show per-model test duration in log output
@@ -4,23 +4,23 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'broken_record/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "broken_record"
7
+ spec.name = 'broken_record'
8
8
  spec.version = BrokenRecord::VERSION
9
- spec.authors = ["Nicholas Gervasi"]
10
- spec.email = ["nick@zenpayroll.com"]
9
+ spec.authors = ['Nicholas Gervasi']
10
+ spec.email = ['nick@zenpayroll.com']
11
11
  spec.description = %q{Detects ActiveRecord models that are not valid.}
12
12
  spec.summary = %q{Provides a rake task for scanning your ActiveRecord models and detecting validation errors.}
13
- spec.homepage = ""
14
- spec.license = "MIT"
13
+ spec.homepage = 'https://github.com/nickgervasi/broken_record'
14
+ spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
19
+ spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency 'bundler', '~> 1.3'
22
22
 
23
- spec.add_runtime_dependency "rake"
24
- spec.add_runtime_dependency "parallel"
25
- spec.add_runtime_dependency "colorize"
23
+ spec.add_runtime_dependency 'rake', '~> 10'
24
+ spec.add_runtime_dependency 'parallel', '~> 0'
25
+ spec.add_runtime_dependency 'colorize', '0.5.8'
26
26
  end
@@ -16,7 +16,7 @@ module BrokenRecord
16
16
 
17
17
  def self.report_results(test_results)
18
18
  total_errors = 0
19
- test_results.each { |result| total_errors += result[:errors] }
19
+ test_results.each { |result| total_errors += result[:error_count] }
20
20
  if total_errors == 0
21
21
  puts "\nAll models validated successfully.".green
22
22
  else
@@ -31,29 +31,55 @@ module BrokenRecord
31
31
  end
32
32
  end
33
33
 
34
+ def self.log(model, &block)
35
+ logger = new
36
+ logger.start_log
37
+ logger.log_header "Validating model #{model}... ".ljust(70)
38
+
39
+ yield(logger)
40
+
41
+ logger.log_result
42
+ logger.result
43
+ end
44
+
34
45
  # Instance Methods
35
46
 
36
47
  def initialize
37
- @errors = 0
38
- @stdout = ""
48
+ @header = ''
49
+ @errors = []
50
+
51
+ @stdout = ''
39
52
  end
40
53
 
41
- def log_error(message)
42
- @stdout << "[FAIL]\n".red if @errors == 0
43
- @stdout << "#{message.red}\n"
44
- @errors += 1
54
+ def log_header(header_message)
55
+ @header = header_message
56
+ end
57
+
58
+ def start_log
59
+ @start_time = Time.now
45
60
  end
46
61
 
47
- def log_message(message)
48
- @stdout << "#{message}"
62
+ def log_error(message)
63
+ @errors << "#{message.red}\n"
49
64
  end
50
65
 
51
66
  def log_result
52
- @stdout << "[PASS]\n".green if @errors == 0
67
+ @stdout << @header
68
+
69
+ if @errors.empty?
70
+ @stdout << '[PASS]'.green
71
+ else
72
+ @stdout << '[FAIL]'.red
73
+ end
74
+
75
+ duration = (Time.now - @start_time).round(3)
76
+ @stdout << " (#{duration}s)\n"
77
+
78
+ @stdout << @errors.join
53
79
  end
54
80
 
55
81
  def result
56
- { stdout: @stdout, errors: @errors}
82
+ { stdout: @stdout, error_count: @errors.count}
57
83
  end
58
84
  end
59
85
  end
@@ -46,33 +46,29 @@ module BrokenRecord
46
46
  def validate_model(model)
47
47
  ActiveRecord::Base.connection.reconnect!
48
48
 
49
- logger = BrokenRecord::Logger.new
50
- logger.log_message "Validating model #{model}... ".ljust(70)
51
-
52
- begin
53
- if BrokenRecord::Config.default_scopes[model]
54
- model_scope = model.instance_exec &BrokenRecord::Config.default_scopes[model]
55
- else
56
- model_scope = model.unscoped
57
- end
49
+ BrokenRecord::Logger.log(model) do |logger|
50
+ begin
51
+ if BrokenRecord::Config.default_scopes[model]
52
+ model_scope = model.instance_exec &BrokenRecord::Config.default_scopes[model]
53
+ else
54
+ model_scope = model.unscoped
55
+ end
58
56
 
59
- model_scope.find_each do |r|
60
- begin
61
- if !r.valid?
62
- message = " Invalid record in #{model} id=#{r.id}."
63
- r.errors.each { |attr,msg| message << "\n #{attr} - #{msg}" }
64
- logger.log_error message
57
+ model_scope.find_each do |r|
58
+ begin
59
+ if !r.valid?
60
+ message = " Invalid record in #{model} id=#{r.id}."
61
+ r.errors.each { |attr,msg| message << "\n #{attr} - #{msg}" }
62
+ logger.log_error message
63
+ end
64
+ rescue Exception => msg
65
+ logger.log_error " Exception for record in #{model} id=#{r.id} - #{msg}."
65
66
  end
66
- rescue Exception => msg
67
- logger.log_error " Exception for record in #{model} id=#{r.id} - #{msg}."
68
67
  end
68
+ rescue Exception => msg
69
+ logger.log_error " Error querying model #{model} - #{msg}."
69
70
  end
70
- rescue Exception => msg
71
- logger.log_error " Error querying model #{model} - #{msg}."
72
71
  end
73
-
74
- logger.log_result
75
- logger.result
76
72
  end
77
73
  end
78
74
  end
@@ -1,3 +1,3 @@
1
1
  module BrokenRecord
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: broken_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicholas Gervasi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-26 00:00:00.000000000 Z
11
+ date: 2014-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,44 +28,44 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '10'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '10'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: parallel
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: colorize
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 0.5.8
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 0.5.8
69
69
  description: Detects ActiveRecord models that are not valid.
70
70
  email:
71
71
  - nick@zenpayroll.com
@@ -87,7 +87,7 @@ files:
87
87
  - lib/broken_record/scanner.rb
88
88
  - lib/broken_record/tasks.rb
89
89
  - lib/broken_record/version.rb
90
- homepage: ''
90
+ homepage: https://github.com/nickgervasi/broken_record
91
91
  licenses:
92
92
  - MIT
93
93
  metadata: {}