lib/neo4j/active_node/validations.rb in neo4j-3.0.0.alpha.9 vs lib/neo4j/active_node/validations.rb in neo4j-3.0.0.alpha.10

- old
+ new

@@ -1,45 +1,27 @@ 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 - include ActiveModel::Validations - module ClassMethods - def validates_uniqueness_of(*attr_names) - validates_with UniquenessValidator, _merge_attributes(attr_names) - end - end - - # Implements the ActiveModel::Validation hook method. - # @see http://rubydoc.info/docs/rails/ActiveModel/Validations:read_attribute_for_validation - def read_attribute_for_validation(key) - respond_to?(key) ? send(key) : self[key] - end - - # The validation process on save can be skipped by passing false. The regular Model#save method is - # replaced with this when the validations module is mixed in, which it is by default. - # @param [Hash] options the options to create a message with. - # @option options [true, false] :validate if false no validation will take place - # @return [Boolean] true if it saved it successfully - def save(options={}) - result = perform_validations(options) ? super : false - if !result - Neo4j::Transaction.current.failure if Neo4j::Transaction.current - end - result - end - # @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 @@ -55,12 +37,11 @@ conditions[attribute] = /^#{Regexp.escape(value.to_s)}$/i end # prevent that same object is returned # TODO: add negative condtion to not return current record - found = record.class.where(conditions).to_a - found.delete(record) + found = record.class.where(conditions).to_a.select{|f| f.neo_id != record.neo_id} if found.count > 0 record.errors.add(attribute, :taken, options.except(:case_sensitive, :scope).merge(:value => value)) end end @@ -74,21 +55,8 @@ conditions.merge(key => instance[key]) end end end - private - def perform_validations(options={}) - perform_validation = case options - when Hash - options[:validate] != false - end - - if perform_validation - valid?(options.is_a?(Hash) ? options[:context] : nil) - else - true - end - end end end end