| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  | require 'lib/string_helper' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module Connectors | 
					
						
							|  |  |  |   module Helpers | 
					
						
							|  |  |  |     module UpdateCommand | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-14 16:51:40 +03:00
										 |  |  |       # 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. | 
					
						
							| 
									
										
										
										
											2015-02-12 13:01:05 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |       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 |