| 
									
										
										
										
											2011-12-10 19:18:06 +00:00
										 |  |  | # Redmine - project management software | 
					
						
							| 
									
										
										
										
											2017-06-25 08:40:31 +00:00
										 |  |  | # Copyright (C) 2006-2017  Jean-Philippe Lang | 
					
						
							| 
									
										
										
										
											2011-12-10 19:18:06 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  | # modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  | # as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  | # of the License, or (at your option) any later version. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | # GNU General Public License for more details. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | # along with this program; if not, write to the Free Software | 
					
						
							|  |  |  | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module Redmine | 
					
						
							|  |  |  |   module SubclassFactory | 
					
						
							| 
									
										
										
										
											2017-07-31 06:21:35 +00:00
										 |  |  |     def self.included(base) | 
					
						
							| 
									
										
										
										
											2011-12-10 19:18:06 +00:00
										 |  |  |       base.extend ClassMethods | 
					
						
							| 
									
										
										
										
											2017-07-31 06:21:35 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-12-10 19:18:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     module ClassMethods | 
					
						
							| 
									
										
										
										
											2012-10-17 17:29:27 +00:00
										 |  |  |       def get_subclass(class_name) | 
					
						
							| 
									
										
										
										
											2011-12-10 19:18:06 +00:00
										 |  |  |         klass = nil | 
					
						
							|  |  |  |         begin | 
					
						
							|  |  |  |           klass = class_name.to_s.classify.constantize | 
					
						
							|  |  |  |         rescue | 
					
						
							|  |  |  |           # invalid class name | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         unless subclasses.include? klass | 
					
						
							|  |  |  |           klass = nil | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2012-10-17 17:29:27 +00:00
										 |  |  |         klass | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # Returns an instance of the given subclass name | 
					
						
							|  |  |  |       def new_subclass_instance(class_name, *args) | 
					
						
							|  |  |  |         klass = get_subclass(class_name) | 
					
						
							| 
									
										
										
										
											2011-12-10 19:18:06 +00:00
										 |  |  |         if klass | 
					
						
							|  |  |  |           klass.new(*args) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |