class PrettyValidation::Renderer

Attributes

table_name[R]

Public Class Methods

generate(dry_run: false) click to toggle source
# File lib/pretty_validation/renderer.rb, line 13
def self.generate(dry_run: false)
  if generate?(dry_run) && !File.directory?(validations_path)
    FileUtils.mkdir_p validations_path
  end

  Schema.table_names.each do |t|
    r = new t
    next if r.validations.empty?

    r.write! if generate?(dry_run)
  end
end
generate?(dry_run) click to toggle source
# File lib/pretty_validation/renderer.rb, line 26
def self.generate?(dry_run)
  PrettyValidation.config.auto_generate && !dry_run
end
new(table_name) click to toggle source
# File lib/pretty_validation/renderer.rb, line 30
def initialize(table_name)
  @table_name = table_name
end
validations_path() click to toggle source
# File lib/pretty_validation/renderer.rb, line 9
def self.validations_path
  File.join('app', 'validations')
end

Public Instance Methods

file_name() click to toggle source
# File lib/pretty_validation/renderer.rb, line 50
def file_name
  "#{module_name.underscore}.rb"
end
file_path() click to toggle source
# File lib/pretty_validation/renderer.rb, line 54
def file_path
  File.join(Renderer.validations_path, file_name)
end
messages() click to toggle source
# File lib/pretty_validation/renderer.rb, line 66
def messages
  [
    announce('generating'),
    render,
    announce('generated'),
    "\n"
  ].join
end
module_name() click to toggle source
# File lib/pretty_validation/renderer.rb, line 46
def module_name
  "#{table_name.classify}Validation"
end
render() click to toggle source
# File lib/pretty_validation/renderer.rb, line 34
    def render
      @render ||= <<-EOF
module #{module_name}
  extend ActiveSupport::Concern

  included do
    #{validations.join("\n    ")}
  end
end
      EOF
    end
validations() click to toggle source
# File lib/pretty_validation/renderer.rb, line 62
def validations
  sexy_validations + uniq_validations
end
write!() click to toggle source
# File lib/pretty_validation/renderer.rb, line 58
def write!
  File.write(file_path, render)
end

Private Instance Methods

announce(message) click to toggle source
# File lib/pretty_validation/renderer.rb, line 85
def announce(message)
  text = "#{module_name}: #{message}"
  length = [0, 75 - text.length].max
  "== #{text} #{'=' * length}\n"
end
sexy_validations() click to toggle source
# File lib/pretty_validation/renderer.rb, line 77
def sexy_validations
  Validation.sexy_validations(table_name)
end
uniq_validations() click to toggle source
# File lib/pretty_validation/renderer.rb, line 81
def uniq_validations
  Validation.unique_validations(table_name)
end