valid_items 0.0.4

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0bcd92760474c26d012a5c31b37cb539f12c7cdbd15f962551fc9d56a66bb8bc
4
+ data.tar.gz: 24b7f731c030a5aa187b0d9ab3f84a848fb351c72ea120a42eb2ef38939cfe71
5
+ SHA512:
6
+ metadata.gz: 2a8f7e5c1cac64cbfdf83f2443ff3069728c5347176a2a427603559968ca67b9273e5d48abfa2e34b2163dac1672e3b8206e8cce1187f4e2e611386a872f57bd
7
+ data.tar.gz: 3dd1b927af42e8452251da7b19ccce00d8afb5ebf599fc1bfb69c045e1b47fcd10174db53c70202fe2441e5da18375e0e496662907063d8993e5828c325ea0c8
@@ -0,0 +1,35 @@
1
+ require 'active_record'
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ class ValidItems
6
+ # Check that all your ActiveRecord Objects are still valid
7
+ #
8
+ # Example:
9
+ # >> ValidItems.checkup()
10
+ # => User id 203: {:name=>["can't be blank"]}
11
+ # >> ValidItems.checkup(email_report: 'example@example.com')
12
+ # => User id 203: {:name=>["can't be blank"]} and an email gets sent
13
+ # >> ValidItems.checkup(updated_at: 1.day.ago)
14
+ # => User id 203: {:name=>["can't be blank"]}
15
+ # Just want to check recent changes, in case of a large db
16
+ #
17
+ # Arguments:
18
+ # email_report: (String)
19
+ # updated_at: (ActiveSupport::TimeWithZone)
20
+ def self.checkup(email_report: nil, updated_at: 100.years.ago)
21
+ issues = []
22
+ ApplicationRecord.descendants.collect(&:name).each do |model|
23
+ model.constantize.where('updated_at > ?', updated_at).find_each do |item|
24
+ issues << "#{item.class} id #{item.id}: #{item.errors.messages}" if item.invalid?
25
+ end
26
+ end
27
+ return 'ok' if issues.blank?
28
+
29
+ if email_report.present?
30
+ mail(to: email_report,
31
+ subject: 'DB Issues Discovered')
32
+ end
33
+ puts issues
34
+ end
35
+ end
@@ -0,0 +1,8 @@
1
+ require 'minitest/autorun'
2
+ require 'valid_items'
3
+
4
+ class ValidItemsTest < Minitest::Test
5
+ def test_it_runs
6
+ assert_equal 'ok', ValidItems.checkup
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: valid_items
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Vinny Glennon
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-05-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '12.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '12.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.50.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.50.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: actionmailer
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">"
46
+ - !ruby/object:Gem::Version
47
+ version: '4.1'
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '6.0'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">"
56
+ - !ruby/object:Gem::Version
57
+ version: '4.1'
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '6.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: activerecord
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">"
66
+ - !ruby/object:Gem::Version
67
+ version: '4.1'
68
+ - - "<"
69
+ - !ruby/object:Gem::Version
70
+ version: '6.0'
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">"
76
+ - !ruby/object:Gem::Version
77
+ version: '4.1'
78
+ - - "<"
79
+ - !ruby/object:Gem::Version
80
+ version: '6.0'
81
+ description: Goes through all your Rails ActiveRecord objects and check if they are
82
+ all still pass your model validations. You may have added new validations to your
83
+ model since creating your object, or ran update_column in your console to solve
84
+ a production issue. Find issues in your db before others do. Inspired by a RailsConf
85
+ talk by Ryan Laughlin and his talk at http://www.rofreg.com/talks/railsconf2018
86
+ email: vinnyglennon@gmail.com
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - lib/valid_items.rb
92
+ - test/test_valid_items.rb
93
+ homepage: http://rubygems.org/gems/valid_items
94
+ licenses:
95
+ - MIT
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '1.9'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.7.6
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: Check that all your Rails ActiveRecord Objects still pass their model validations
117
+ test_files:
118
+ - test/test_valid_items.rb