| 
									
										
										
										
											2011-09-01 02:07:24 +00:00
										 |  |  | # Redmine - project management software | 
					
						
							| 
									
										
										
										
											2012-05-05 12:56:53 +00:00
										 |  |  | # Copyright (C) 2006-2012  Jean-Philippe Lang | 
					
						
							| 
									
										
										
										
											2008-04-26 11:59:51 +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. | 
					
						
							| 
									
										
										
										
											2011-09-01 02:07:24 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2008-04-26 11:59:51 +00:00
										 |  |  | # 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. | 
					
						
							| 
									
										
										
										
											2011-09-01 02:07:24 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2008-04-26 11:59:51 +00:00
										 |  |  | # 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 #:nodoc: | 
					
						
							|  |  |  |   module CoreExtensions #:nodoc: | 
					
						
							|  |  |  |     module String #:nodoc: | 
					
						
							|  |  |  |       # Custom string conversions | 
					
						
							|  |  |  |       module Conversions | 
					
						
							|  |  |  |         # Parses hours format and returns a float | 
					
						
							|  |  |  |         def to_hours | 
					
						
							|  |  |  |           s = self.dup | 
					
						
							|  |  |  |           s.strip! | 
					
						
							| 
									
										
										
										
											2009-01-09 17:32:46 +00:00
										 |  |  |           if s =~ %r{^(\d+([.,]\d+)?)h?$} | 
					
						
							|  |  |  |             s = $1 | 
					
						
							|  |  |  |           else | 
					
						
							| 
									
										
										
										
											2008-04-26 11:59:51 +00:00
										 |  |  |             # 2:30 => 2.5 | 
					
						
							|  |  |  |             s.gsub!(%r{^(\d+):(\d+)$}) { $1.to_i + $2.to_i / 60.0 } | 
					
						
							|  |  |  |             # 2h30, 2h, 30m => 2.5, 2, 0.5 | 
					
						
							| 
									
										
										
										
											2012-04-11 17:37:13 +00:00
										 |  |  |             s.gsub!(%r{^((\d+)\s*(h|hours?))?\s*((\d+)\s*(m|min)?)?$}i) { |m| ($1 || $4) ? ($2.to_i + $5.to_i / 60.0) : m[0] } | 
					
						
							| 
									
										
										
										
											2008-04-26 11:59:51 +00:00
										 |  |  |           end | 
					
						
							|  |  |  |           # 2,5 => 2.5 | 
					
						
							|  |  |  |           s.gsub!(',', '.') | 
					
						
							| 
									
										
										
										
											2008-04-30 09:09:28 +00:00
										 |  |  |           begin; Kernel.Float(s); rescue; nil; end | 
					
						
							| 
									
										
										
										
											2008-04-26 11:59:51 +00:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2011-09-01 02:07:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-10 15:09:19 +00:00
										 |  |  |         # Object#to_a removed in ruby1.9 | 
					
						
							|  |  |  |         if RUBY_VERSION > '1.9' | 
					
						
							|  |  |  |           def to_a | 
					
						
							|  |  |  |             [self.dup] | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2008-04-26 11:59:51 +00:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |