active_sanity 0.1.1 → 0.2.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.
- data/CHANGELOG.md +18 -0
- data/Gemfile +5 -0
- data/README.md +8 -9
- data/Rakefile +1 -1
- data/active_sanity.gemspec +1 -1
- data/features/check_sanity.feature +1 -1
- data/features/check_sanity_with_db_storage.feature +4 -4
- data/features/step_definitions/rails_app.rb +8 -19
- data/features/support/env.rb +1 -1
- data/lib/active_sanity/checker.rb +3 -3
- data/lib/active_sanity/version.rb +1 -1
- metadata +58 -89
data/CHANGELOG.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
## 0.2.0
|
2
|
+
|
3
|
+
* Add Rails ~3.1 compatibility. Pull Request [#6][] by [@skateinmars][].
|
4
|
+
|
5
|
+
## 0.1.1
|
6
|
+
|
7
|
+
* Fix bug where records stored with STI would be duplicated in the
|
8
|
+
database. Issue [#1][]. [@vraravam][]
|
9
|
+
|
10
|
+
## 0.1.0
|
11
|
+
|
12
|
+
Initial release.
|
13
|
+
|
14
|
+
<!--- The following link definition list is generated by PimpMyChangelog --->
|
15
|
+
[#1]: https://github.com/versapay/active_sanity/issues/1
|
16
|
+
[#6]: https://github.com/versapay/active_sanity/issues/6
|
17
|
+
[@skateinmars]: https://github.com/skateinmars
|
18
|
+
[@vraravam]: https://github.com/vraravam
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,15 @@
|
|
1
1
|
# Active Sanity
|
2
2
|
|
3
|
+
[](http://travis-ci.org/versapay/active_sanity)
|
4
|
+
|
3
5
|
Perform a sanity check on your database through active record
|
4
6
|
validation.
|
5
7
|
|
8
|
+
## Requirements
|
9
|
+
|
10
|
+
ActiveSanity 0.2.0 requires Rails ~ 3.1
|
11
|
+
ActiveSanity 0.1.1 requires Rails ~ 3.0
|
12
|
+
|
6
13
|
## Install
|
7
14
|
|
8
15
|
Add the following line to your Gemfile
|
@@ -31,14 +38,6 @@ The output might look like the following:
|
|
31
38
|
Flight | 123 | { "arrival_time" => ["can't be nil"], "departure_time" => ["is invalid"] }
|
32
39
|
Flight | 323 | { "arrival_time" => ["can't be nil"] }
|
33
40
|
|
34
|
-
## Known issues
|
35
|
-
|
36
|
-
There is a bug in Rails 3.0.5 with the unserialization of OrderedHash
|
37
|
-
storing arrays: only the last error of a given attribute gets retrieved
|
38
|
-
from the database.
|
39
|
-
|
40
|
-
See https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/6646-orderedhash-serialization-does-not-work-when-storing-arrays
|
41
|
-
|
42
41
|
## Contribute & Dev environment
|
43
42
|
|
44
43
|
Usual fork & pull request.
|
@@ -47,7 +46,7 @@ This gem is quite simple so I experiment using features only. To run the
|
|
47
46
|
acceptance test suite, just run:
|
48
47
|
|
49
48
|
bundle install
|
50
|
-
cucumber features
|
49
|
+
RAILS_ENV=test cucumber features
|
51
50
|
|
52
51
|
Using features only was kinda handsome until I had to deal with two
|
53
52
|
different database schema (with / without the table invalid_records) in
|
data/Rakefile
CHANGED
data/active_sanity.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.description = %q{Performs a Sanity Check of your database by logging all invalid Active Records}
|
14
14
|
s.homepage = "https://github.com/versapay/active_sanity"
|
15
15
|
|
16
|
-
s.add_dependency "rails", ">=3.
|
16
|
+
s.add_dependency "rails", ">=3.1.0"
|
17
17
|
|
18
18
|
s.add_development_dependency "rspec"
|
19
19
|
s.add_development_dependency "cucumber"
|
@@ -22,5 +22,5 @@ Feature: Check sanity
|
|
22
22
|
And the first author's username is empty and the first post category_id is nil
|
23
23
|
When I run "rake db:check_sanity"
|
24
24
|
Then I should see the following invalid records:
|
25
|
-
| User | 1 | {:username=>["can't be blank", "is too short (minimum is 3 characters)"
|
25
|
+
| User | 1 | {:username=>["can't be blank", "is too short (minimum is 3 characters)"]} |
|
26
26
|
| Post | 1 | {:category=>["can't be blank"]} |
|
@@ -22,7 +22,7 @@ Feature: Check sanity with db storage
|
|
22
22
|
And the first author's username is empty and the first post category_id is nil
|
23
23
|
When I run "rake db:check_sanity"
|
24
24
|
Then the table "invalid_records" should contain:
|
25
|
-
| User | 1 | {:username=>["is too short (minimum is 3 characters)"]} |
|
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
27
|
|
28
28
|
Scenario: Check sanity on database with invalid records now valid
|
@@ -30,7 +30,7 @@ Feature: Check sanity with db storage
|
|
30
30
|
And the first author's username is empty and the first post category_id is nil
|
31
31
|
When I run "rake db:check_sanity"
|
32
32
|
Then the table "invalid_records" should contain:
|
33
|
-
| User | 1 | {:username=>["is too short (minimum is 3 characters)"]} |
|
33
|
+
| User | 1 | {:username=>["can't be blank", "is too short (minimum is 3 characters)"]} |
|
34
34
|
| Post | 1 | {:category=>["can't be blank"]} |
|
35
35
|
|
36
36
|
Given the first author's username is "Greg"
|
@@ -44,12 +44,12 @@ Feature: Check sanity with db storage
|
|
44
44
|
And the first author's username is empty and the first post category_id is nil
|
45
45
|
When I run "rake db:check_sanity"
|
46
46
|
Then the table "invalid_records" should contain:
|
47
|
-
| User | 1 | {:username=>["is too short (minimum is 3 characters)"]} |
|
47
|
+
| User | 1 | {:username=>["can't be blank", "is too short (minimum is 3 characters)"]} |
|
48
48
|
| Post | 1 | {:category=>["can't be blank"]} |
|
49
49
|
|
50
50
|
Given the first post category is set
|
51
51
|
And the first post title is empty
|
52
52
|
When I run "rake db:check_sanity"
|
53
53
|
Then the table "invalid_records" should contain:
|
54
|
-
| User | 1 | {:username=>["is too short (minimum is 3 characters)"]} |
|
54
|
+
| User | 1 | {:username=>["can't be blank", "is too short (minimum is 3 characters)"]} |
|
55
55
|
| Post | 1 | {:title=>["can't be blank"]} |
|
@@ -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"
|
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
5
|
system("rm -fr test/rails_app")
|
6
6
|
raise "Failed to generate test/rails_app"
|
7
7
|
end
|
@@ -15,18 +15,21 @@ Given /^I have a rails app using 'active_sanity'$/ do
|
|
15
15
|
setup_rails_app
|
16
16
|
|
17
17
|
require './test/rails_app/config/environment'
|
18
|
+
|
19
|
+
# Reset connection
|
20
|
+
ActiveRecord::Base.connection.reconnect!
|
18
21
|
end
|
19
22
|
|
20
23
|
Given /^I have a rails app using 'active_sanity' with db storage$/ do
|
21
24
|
setup_rails_app
|
22
25
|
|
23
|
-
raise unless system("cd ./test/rails_app && rails generate active_sanity && rake db:migrate")
|
26
|
+
raise unless system("cd ./test/rails_app && rails generate active_sanity && RAILS_ENV=test rake db:migrate")
|
24
27
|
|
25
28
|
require './test/rails_app/config/environment'
|
26
29
|
|
27
30
|
# Reset connection
|
28
31
|
ActiveRecord::Base.connection.reconnect!
|
29
|
-
InvalidRecord.table_exists?
|
32
|
+
InvalidRecord.table_exists? # Looks up if table exists.
|
30
33
|
end
|
31
34
|
|
32
35
|
Given /^the database contains a few valid records$/ do
|
@@ -57,7 +60,7 @@ end
|
|
57
60
|
|
58
61
|
|
59
62
|
When /^I run "([^"]*)"$/ do |command|
|
60
|
-
puts @output = `cd ./test/rails_app && #{command}; echo "RETURN:$?"`
|
63
|
+
puts @output = `cd ./test/rails_app && export RAILS_ENV=test && bundle exec #{command} --trace; echo "RETURN:$?"`
|
61
64
|
raise unless @output['RETURN:0']
|
62
65
|
end
|
63
66
|
|
@@ -86,21 +89,7 @@ Then /^the table "([^"]*)" should contain:$/ do |_, table|
|
|
86
89
|
invalid_record.should be_an_instance_of(InvalidRecord)
|
87
90
|
errors = eval(errors)
|
88
91
|
errors.each do |k, v|
|
89
|
-
|
90
|
-
invalid_record.validation_errors[k].should == v
|
91
|
-
rescue RSpec::Expectations::ExpectationNotMetError => e
|
92
|
-
# A bug in serialization of ordered hash get rid of the array of
|
93
|
-
# errors. The following is stored in the db:
|
94
|
-
# --- !omap
|
95
|
-
# - :username: can't be blank
|
96
|
-
# - :username: is too short (minimum is 3 characters)
|
97
|
-
#
|
98
|
-
# https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/6646-orderedhash-serialization-does-not-work-when-storing-arrays
|
99
|
-
#
|
100
|
-
# You actually get the last error on an attribute only
|
101
|
-
#
|
102
|
-
invalid_record.validation_errors[k].should == v.last
|
103
|
-
end
|
92
|
+
invalid_record.validation_errors[k].should == v
|
104
93
|
end
|
105
94
|
end
|
106
95
|
end
|
data/features/support/env.rb
CHANGED
@@ -6,7 +6,7 @@ Bundler.setup
|
|
6
6
|
|
7
7
|
if File.directory?("test/rails_app")
|
8
8
|
Dir.chdir("test/rails_app") do
|
9
|
-
raise unless system("rm -f db/migrate/*create_invalid_records.rb && rake db:drop db:create db:migrate")
|
9
|
+
raise 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
|
|
@@ -26,7 +26,7 @@ module ActiveSanity
|
|
26
26
|
|
27
27
|
protected
|
28
28
|
|
29
|
-
# Require all files under /app/models.
|
29
|
+
# Require all files under /app/models.
|
30
30
|
# All models under /lib are required when the rails app loads.
|
31
31
|
def load_all_models
|
32
32
|
Dir["#{Rails.root}/app/models/**/*.rb"].each { |file_path| require file_path rescue nil }
|
@@ -101,7 +101,7 @@ module ActiveSanity
|
|
101
101
|
invalid_record = InvalidRecord.where(:record_type => type_of(record), :record_id => record.id).first
|
102
102
|
invalid_record ||= InvalidRecord.new
|
103
103
|
invalid_record.record = record
|
104
|
-
invalid_record.validation_errors = record.errors
|
104
|
+
invalid_record.validation_errors = record.errors.messages
|
105
105
|
invalid_record.save!
|
106
106
|
end
|
107
107
|
|
@@ -110,7 +110,7 @@ module ActiveSanity
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def pretty_errors(record)
|
113
|
-
record.errors.inspect.sub(/^#<OrderedHash (.*)>$/, '\1')
|
113
|
+
record.errors.messages.inspect.sub(/^#<OrderedHash (.*)>$/, '\1')
|
114
114
|
end
|
115
115
|
end
|
116
116
|
end
|
metadata
CHANGED
@@ -1,93 +1,71 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_sanity
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 1
|
10
|
-
version: 0.1.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- VersaPay
|
14
9
|
- Philippe Creux
|
15
10
|
autorequire:
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
dependencies:
|
22
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2012-05-25 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
23
16
|
name: rails
|
24
|
-
|
25
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: &70154013012080 !ruby/object:Gem::Requirement
|
26
18
|
none: false
|
27
|
-
requirements:
|
28
|
-
- -
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
|
31
|
-
segments:
|
32
|
-
- 3
|
33
|
-
- 0
|
34
|
-
- 0
|
35
|
-
version: 3.0.0
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 3.1.0
|
36
23
|
type: :runtime
|
37
|
-
version_requirements: *id001
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: rspec
|
40
24
|
prerelease: false
|
41
|
-
|
25
|
+
version_requirements: *70154013012080
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: rspec
|
28
|
+
requirement: &70154013011660 !ruby/object:Gem::Requirement
|
42
29
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
|
47
|
-
segments:
|
48
|
-
- 0
|
49
|
-
version: "0"
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
50
34
|
type: :development
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: cucumber
|
54
35
|
prerelease: false
|
55
|
-
|
36
|
+
version_requirements: *70154013011660
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: cucumber
|
39
|
+
requirement: &70154013011180 !ruby/object:Gem::Requirement
|
56
40
|
none: false
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
61
|
-
segments:
|
62
|
-
- 0
|
63
|
-
version: "0"
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
64
45
|
type: :development
|
65
|
-
version_requirements: *id003
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
|
-
name: sqlite3
|
68
46
|
prerelease: false
|
69
|
-
|
47
|
+
version_requirements: *70154013011180
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: sqlite3
|
50
|
+
requirement: &70154013010760 !ruby/object:Gem::Requirement
|
70
51
|
none: false
|
71
|
-
requirements:
|
72
|
-
- -
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
|
75
|
-
segments:
|
76
|
-
- 0
|
77
|
-
version: "0"
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
78
56
|
type: :development
|
79
|
-
|
80
|
-
|
81
|
-
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *70154013010760
|
59
|
+
description: Performs a Sanity Check of your database by logging all invalid Active
|
60
|
+
Records
|
61
|
+
email:
|
82
62
|
- philippe.creux@versapay.com
|
83
63
|
executables: []
|
84
|
-
|
85
64
|
extensions: []
|
86
|
-
|
87
65
|
extra_rdoc_files: []
|
88
|
-
|
89
|
-
files:
|
66
|
+
files:
|
90
67
|
- .gitignore
|
68
|
+
- CHANGELOG.md
|
91
69
|
- Gemfile
|
92
70
|
- README.md
|
93
71
|
- Rakefile
|
@@ -105,43 +83,34 @@ files:
|
|
105
83
|
- lib/generators/active_sanity/active_sanity_generator.rb
|
106
84
|
- lib/generators/active_sanity/templates/create_invalid_records.rb
|
107
85
|
- test/rails_template.rb
|
108
|
-
has_rdoc: true
|
109
86
|
homepage: https://github.com/versapay/active_sanity
|
110
87
|
licenses: []
|
111
|
-
|
112
88
|
post_install_message:
|
113
89
|
rdoc_options: []
|
114
|
-
|
115
|
-
require_paths:
|
90
|
+
require_paths:
|
116
91
|
- lib
|
117
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
118
93
|
none: false
|
119
|
-
requirements:
|
120
|
-
- -
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
|
123
|
-
|
124
|
-
- 0
|
125
|
-
version: "0"
|
126
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
99
|
none: false
|
128
|
-
requirements:
|
129
|
-
- -
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
|
132
|
-
segments:
|
133
|
-
- 0
|
134
|
-
version: "0"
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
135
104
|
requirements: []
|
136
|
-
|
137
105
|
rubyforge_project:
|
138
|
-
rubygems_version: 1.
|
106
|
+
rubygems_version: 1.8.11
|
139
107
|
signing_key:
|
140
108
|
specification_version: 3
|
141
109
|
summary: Checks Sanity of Active Record records
|
142
|
-
test_files:
|
110
|
+
test_files:
|
143
111
|
- features/check_sanity.feature
|
144
112
|
- features/check_sanity_with_db_storage.feature
|
145
113
|
- features/step_definitions/rails_app.rb
|
146
114
|
- features/support/env.rb
|
147
115
|
- test/rails_template.rb
|
116
|
+
has_rdoc:
|