Sha256: 77736c88d82c502f757224791ae7a30d42089e55d9ae92799d2f9aea4931111f
Contents?: true
Size: 1.65 KB
Versions: 7
Compression:
Stored size: 1.65 KB
Contents
module Neo4j module ActiveNode # This mixin replace the original save method and performs validation before the save. module Validations extend ActiveSupport::Concern include Neo4j::Shared::Validations # @return [Boolean] true if valid def valid?(context = nil) context ||= (new_record? ? :create : :update) super(context) errors.empty? end module ClassMethods def validates_uniqueness_of(*attr_names) validates_with UniquenessValidator, _merge_attributes(attr_names) end end class UniquenessValidator < ::ActiveModel::EachValidator def initialize(options) super(options.reverse_merge(:case_sensitive => true)) end def validate_each(record, attribute, value) conditions = scope_conditions(record) # TODO: Added as find(:name => nil) throws error value = "" if value == nil conditions[attribute] = options[:case_sensitive] ? value : /^#{Regexp.escape(value.to_s)}$/i found = record.class.as(:result).where(conditions) found = found.where("NOT ID(result) = {record_neo_id}").params(record_neo_id: record.neo_id) if record.persisted? record.errors.add(attribute, :taken, options.except(:case_sensitive, :scope).merge(:value => value)) if found.exists? end def message(instance) super || "has already been taken" end def scope_conditions(instance) Array(options[:scope] || []).inject({}) do |conditions, key| conditions.merge(key => instance[key]) end end end end end end
Version data entries
7 entries across 7 versions & 1 rubygems