Sha256: 3c0470010932aa3d1e7aca52216f3f1cc64f2ef0a2e5b2e2819a96ab384fa32e

Contents?: true

Size: 1.22 KB

Versions: 3

Compression:

Stored size: 1.22 KB

Contents

# frozen_string_literal: true

require "active_model/errors"
require "active_record/errors"

class Gutentag::TagValidations
  DEFAULTS = {
    :presence   => true,
    :uniqueness => {:case_sensitive => false}
  }.freeze
  DATABASE_ERROR_CLASSES = lambda {
    classes = []
    if ActiveRecord::VERSION::STRING.to_f > 4.0
      classes << ActiveRecord::NoDatabaseError
    end
    classes << Mysql2::Error     if defined?(::Mysql2)
    classes << PG::ConnectionBad if defined?(::PG)
    classes
  }.call.freeze

  def self.call(klass)
    new(klass).call
  end

  def initialize(klass)
    @klass = klass
  end

  def call
    klass.validates :name, validation_options.dup
  end

  private

  attr_reader :klass

  def add_length_validation?
    klass.table_exists? && limit.present?
  rescue *DATABASE_ERROR_CLASSES
    warn <<-MESSAGE
  The database is not currently available, and so Gutentag was not able to set
  up tag validations completely (in particular: adding a length limit to match
  database constraints).
    MESSAGE
    false
  end

  def limit
    @limit ||= klass.columns_hash["name"].limit
  end

  def validation_options
    return DEFAULTS unless add_length_validation?

    DEFAULTS.merge :length => {:maximum => limit}
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
gutentag-2.5.0 lib/gutentag/tag_validations.rb
gutentag-2.4.1 lib/gutentag/tag_validations.rb
gutentag-2.4.0 lib/gutentag/tag_validations.rb