Sha256: 3fa0480fa3f27dadb2f760130812ce6599ff88f21833c5521ac1d638a25f792c

Contents?: true

Size: 903 Bytes

Versions: 5

Compression:

Stored size: 903 Bytes

Contents

# frozen_string_literal: true

class MiniDefender::Rules::Unique < MiniDefender::Rule
  def initialize(model, column)
    raise ArgumentError, 'model name must be a string or ActiveRecord::Base' unless model.is_a?(String)
    raise ArgumentError, 'Column name must be a string' unless column.is_a?(String)

    @model = model.camelcase.constantize
    @column = column
    @ignore = nil
  end

  def self.signature
    'unique'
  end

  def should_ignore(value)
    @ignore = value
    self
  end

  def self.make(args)
    raise ArgumentError, 'Model and column are required.' unless args.length == 2

    self.new(args[0], args[1])
  end

  def passes?(attribute, value, validator)
    query = @model.where(@column => value)
    query = query.where.not(@column, @ignore) unless @ignore.nil?
    query.exists?
  end

  def message(attribute, value, validator)
    "The value already exists."
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
mini_defender-0.1.4 lib/mini_defender/rules/unique.rb
mini_defender-0.1.3 lib/mini_defender/rules/unique.rb
mini_defender-0.1.2 lib/mini_defender/rules/unique.rb
mini_defender-0.1.1 lib/mini_defender/rules/unique.rb
mini_defender-0.1.0 lib/mini_defender/rules/unique.rb