require 'lib/string_helper' module Connectors module Helpers module UpdateCommand # this module adds methods #update and "#{resource_name}_update" (they are synonyms). # We need second method name to forward methods from MongoConnector to resources connectors. def self.included(base) resource_name = StringHelper.underscore_class(base) method_name = "#{resource_name}_update".to_sym alias_method method_name, :update end def update(record) record.validate! collection.update({"_id" => record.id}, record.to_mongo_hash) rescue Mongo::OperationFailure => e if e.message =~ /^11000/ resource_name = StringHelper.underscore_class(record.class) raise InvalidRecord.new("Duplicate key error: #{resource_name} with id '#{record.id}'") end end end end end