module Nullalign
Constants
- VERSION
Public Class Methods
generate_migration()
click to toggle source
# File lib/nullalign.rb, line 20 def self.generate_migration models = Nullalign::Models.new($LOAD_PATH) models.preload_all reporter = Nullalign::Reporter.new introspector = Nullalign::Introspectors::ValidatesPresenceOf.new problems = problems(models.all, introspector) if problems.empty? puts "Hooray! All presence validators are backed by a non-null constraint." else str = "class AddMissingNonnullConstraints < ActiveRecord::Migration[5.1]\n" str << " def change\n" null_constraints_by_table_name = problems.map do |model, columns| [model.name, model, columns] end.sort_by(&:first) counter = 0 null_constraints_by_table_name.each do |table_name, model, columns| columns.each do |constraint| counter += 1 str << " change_column_null :#{model.table_name}, :#{constraint.column}, false\n" end end str << " end\n" str << "end\n" filename = "db/migrate/#{Time.now.utc.strftime("%Y%m%d%H%M%S")}_add_missing_nonnull_constraints.rb" puts "Adding migration #{File.basename(filename)} containing #{counter} change_column_null entries" File.open(filename, "w") {|f| f.syswrite(str)} end end
run()
click to toggle source
# File lib/nullalign.rb, line 8 def self.run models = Nullalign::Models.new($LOAD_PATH) models.preload_all reporter = Nullalign::Reporter.new introspector = Nullalign::Introspectors::ValidatesPresenceOf.new problems = problems(models.all, introspector) reporter.report_validates_presence_problems(problems) problems.empty? end
Private Class Methods
problems(models, introspector)
click to toggle source
# File lib/nullalign.rb, line 53 def self.problems(models, introspector) models.map do |m| [m, introspector.missing_nonnull_constraints(m)] end.reject do |m, columns| columns.empty? end end