From a47de6aaf577c569802cc589e44d7b00278e07f7 Mon Sep 17 00:00:00 2001 From: Peter Gumeson Date: Sat, 13 Jun 2009 14:51:15 -0700 Subject: [PATCH] Tidying up rails support --- lib/couchrest.rb | 2 +- lib/couchrest/support/rails.rb | 80 ++++++++++++++++------------------ 2 files changed, 38 insertions(+), 44 deletions(-) diff --git a/lib/couchrest.rb b/lib/couchrest.rb index 02a6fe2..c6e5e34 100644 --- a/lib/couchrest.rb +++ b/lib/couchrest.rb @@ -46,7 +46,7 @@ module CouchRest autoload :CastedModel, 'couchrest/more/casted_model' require File.join(File.dirname(__FILE__), 'couchrest', 'mixins') - require File.join(File.dirname(__FILE__), 'couchrest', 'support', 'rails') + require File.join(File.dirname(__FILE__), 'couchrest', 'support', 'rails') if defined?(Rails) # The CouchRest module methods handle the basic JSON serialization # and deserialization, as well as query parameters. The module also includes diff --git a/lib/couchrest/support/rails.rb b/lib/couchrest/support/rails.rb index 41957d4..ae0e29b 100644 --- a/lib/couchrest/support/rails.rb +++ b/lib/couchrest/support/rails.rb @@ -1,53 +1,47 @@ # This file contains various hacks for Rails compatibility. - -if defined?(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 self == Hash && other.is_a?(CouchRest::Document) - super - end +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 self == Hash && other.is_a?(CouchRest::Document) + super end +end +CouchRest::Document.class_eval do + # Need this when passing doc to a resourceful route + alias_method :to_param, :id - CouchRest::Document.class_eval do - # Need this when passing doc to a resourceful route - alias_method :to_param, :id - - # 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? - - # Gives extended doc a seamless logger - def logger - ActiveRecord::Base.logger - end + # 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? - CouchRest::CastedModel.class_eval do - # The to_param method is needed for rails to generate resourceful routes. - # In your controller, remember that it's actually the id of the document. - def id - return nil if base_doc.nil? - base_doc.id - end - alias_method :to_param, :id + # Gives extended doc a seamless logger + def logger + ActiveRecord::Base.logger end +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 +CouchRest::CastedModel.class_eval do + # The to_param method is needed for rails to generate resourceful routes. + # In your controller, remember that it's actually the id of the document. + def id + return nil if base_doc.nil? + base_doc.id end + alias_method :to_param, :id +end -end \ No newline at end of file +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