number_to_human_size (ActionView::Helpers::NumberHelper)

    # File lib/action_view/helpers/number_helper.rb, line 253
          def number_to_human_size(number, *args)
            return nil if number.nil?

            options = args.extract_options!
            options.symbolize_keys!

            defaults = I18n.translate('number.format''number.format', :locale => options[:locale], :raise => true) rescue {}
            human    = I18n.translate('number.human.format''number.human.format', :locale => options[:locale], :raise => true) rescue {}
            defaults = defaults.merge(human)

            unless args.empty?
              ActiveSupport::Deprecation.warn('number_to_human_size takes an option hash ' +
                'instead of a separate precision argument.', caller)
              precision = args[0] || defaults[:precision]
            end

            precision ||= (options[:precision] || defaults[:precision])
            separator ||= (options[:separator] || defaults[:separator])
            delimiter ||= (options[:delimiter] || defaults[:delimiter])

            storage_units_format = I18n.translate('number.human.storage_units.format''number.human.storage_units.format', :locale => options[:locale], :raise => true)

            if number.to_i < 1024
              unit = I18n.translate('number.human.storage_units.units.byte''number.human.storage_units.units.byte', :locale => options[:locale], :count => number.to_i, :raise => true)
              storage_units_format.gsub(/%n/, number.to_i.to_s).gsub(/%u/, unit)
            else
              max_exp  = STORAGE_UNITS.size - 1
              number   = Float(number)
              exponent = (Math.log(number) / Math.log(1024)).to_i # Convert to base 1024
              exponent = max_exp if exponent > max_exp # we need this to avoid overflow for the highest unit
              number  /= 1024 ** exponent

              unit_key = STORAGE_UNITS[exponent]
              unit = I18n.translate("number.human.storage_units.units.#{unit_key}""number.human.storage_units.units.#{unit_key}", :locale => options[:locale], :count => number, :raise => true)

              begin
                escaped_separator = Regexp.escape(separator)
                formatted_number = number_with_precision(number,
                  :precision => precision,
                  :separator => separator,
                  :delimiter => delimiter
                ).sub(/(\d)(#{escaped_separator}[1-9]*)?0+\z/, '\1\2').sub(/#{escaped_separator}\z/, '')
                storage_units_format.gsub(/%n/, formatted_number).gsub(/%u/, unit)
              rescue
                number
              end
            end
          end