diff .svn/pristine/20/2098d41250dd6484652b4b39b955e37f96aa4bb6.svn-base @ 909:cbb26bc654de redmine-1.3

Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author Chris Cannam
date Fri, 24 Feb 2012 19:09:32 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.svn/pristine/20/2098d41250dd6484652b4b39b955e37f96aa4bb6.svn-base	Fri Feb 24 19:09:32 2012 +0000
@@ -0,0 +1,114 @@
+
+require 'active_record'
+
+module ActiveRecord
+  class Base
+    include Redmine::I18n
+
+    # Translate attribute names for validation errors display
+    def self.human_attribute_name(attr)
+      l("field_#{attr.to_s.gsub(/_id$/, '')}", :default => attr)
+    end
+  end
+end
+
+module ActiveRecord
+  class Errors
+    def full_messages(options = {})
+      full_messages = []
+
+      @errors.each_key do |attr|
+        @errors[attr].each do |message|
+          next unless message
+
+          if attr == "base"
+            full_messages << message
+          elsif attr == "custom_values"
+            # Replace the generic "custom values is invalid"
+            # with the errors on custom values
+            @base.custom_values.each do |value|
+              value.errors.each do |attr, msg|
+                full_messages << value.custom_field.name + ' ' + msg
+              end
+            end
+          else
+            attr_name = @base.class.human_attribute_name(attr)
+            full_messages << attr_name + ' ' + message.to_s
+          end
+        end
+      end
+      full_messages
+    end
+  end
+end
+
+module ActionView
+  module Helpers
+    module DateHelper
+      # distance_of_time_in_words breaks when difference is greater than 30 years
+      def distance_of_date_in_words(from_date, to_date = 0, options = {})
+        from_date = from_date.to_date if from_date.respond_to?(:to_date)
+        to_date = to_date.to_date if to_date.respond_to?(:to_date)
+        distance_in_days = (to_date - from_date).abs
+
+        I18n.with_options :locale => options[:locale], :scope => :'datetime.distance_in_words' do |locale|
+          case distance_in_days
+            when 0..60     then locale.t :x_days,             :count => distance_in_days.round
+            when 61..720   then locale.t :about_x_months,     :count => (distance_in_days / 30).round
+            else                locale.t :over_x_years,       :count => (distance_in_days / 365).floor
+          end
+        end
+      end
+    end
+  end
+end
+
+ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| "#{html_tag}" }
+
+module AsynchronousMailer
+  # Adds :async_smtp and :async_sendmail delivery methods
+  # to perform email deliveries asynchronously
+  %w(smtp sendmail).each do |type|
+    define_method("perform_delivery_async_#{type}") do |mail|
+      Thread.start do
+        send "perform_delivery_#{type}", mail
+      end
+    end
+  end
+
+  # Adds a delivery method that writes emails in tmp/emails for testing purpose
+  def perform_delivery_tmp_file(mail)
+    dest_dir = File.join(Rails.root, 'tmp', 'emails')
+    Dir.mkdir(dest_dir) unless File.directory?(dest_dir)
+    File.open(File.join(dest_dir, mail.message_id.gsub(/[<>]/, '') + '.eml'), 'wb') {|f| f.write(mail.encoded) }
+  end
+end
+
+ActionMailer::Base.send :include, AsynchronousMailer
+
+module TMail
+  # TMail::Unquoter.convert_to_with_fallback_on_iso_8859_1 introduced in TMail 1.2.7
+  # triggers a test failure in test_add_issue_with_japanese_keywords(MailHandlerTest)
+  class Unquoter
+    class << self
+      alias_method :convert_to, :convert_to_without_fallback_on_iso_8859_1
+    end
+  end
+
+  # Patch for TMail 1.2.7. See http://www.redmine.org/issues/8751
+  class Encoder
+    def puts_meta(str)
+      add_text str
+    end
+  end
+end
+
+module ActionController
+  module MimeResponds
+    class Responder
+      def api(&block)
+        any(:xml, :json, &block)
+      end
+    end
+  end
+end