From 5f5aa064098ce7e23b84db962eba2a559c8c814c Mon Sep 17 00:00:00 2001 From: Geoff Buesing Date: Wed, 1 Apr 2009 13:08:20 -0500 Subject: [PATCH] Adding Rails-related monkeypatches file, which isn't required by default. Contains fixes for Rails routing and Rails form error compatibility. --- lib/couchrest/support/rails.rb | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 lib/couchrest/support/rails.rb diff --git a/lib/couchrest/support/rails.rb b/lib/couchrest/support/rails.rb new file mode 100644 index 0000000..cea7ed2 --- /dev/null +++ b/lib/couchrest/support/rails.rb @@ -0,0 +1,35 @@ +# This file contains various hacks for Rails compatibility. +# To use, just require in environment.rb, like so: +# +# require 'couchrest/support/rails' + +class Hash + # Hack so that CouchRest::Document, which descends from Hash, + # doesn't appear to Rails routing as a Hash of options + def self.===(other) + return false if other.is_a?(CouchRest::Document) + super + end +end + + +CouchRest::Document.class_eval do + # Hack so that CouchRest::Document, which descends from Hash, + # doesn't appear to Rails routing as a Hash of options + def is_a?(o) + return false if o == Hash + super + end + alias_method :kind_of?, :is_a? +end + + +require Pathname.new(File.dirname(__FILE__)).join('..', 'validation', 'validation_errors') + +CouchRest::Validation::ValidationErrors.class_eval do + # Returns the total number of errors added. Two errors added to the same attribute will be counted as such. + # This method is called by error_messages_for + def count + errors.values.inject(0) { |error_count, errors_for_attribute| error_count + errors_for_attribute.size } + end +end