This file is indexed.

/usr/lib/ruby/vendor_ruby/ramaze/helper/formatting.rb is in ruby-ramaze 2012.12.08-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#          Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
# All files in this distribution are subject to the terms of the MIT license.

module Ramaze
  module Helper
    module Formatting
      module_function

      FORMATTING_NUMBER_COUNTER = {
        0  => 'no',
        2  => 'two',
        3  => 'three',
        4  => 'four',
        5  => 'five',
        6  => 'six',
        7  => 'seven',
        8  => 'eight',
        9  => 'nine',
        10 => 'ten'
      }

      # Answers with a representation of given +count+ with correct grammar.  If
      # no +items+ argument is given, and the +count+ argument is not 1, then we
      # first check whether the +item+ argument responds to ``#pluralize`` (for
      # example if you are using Sequel). If this doesn't work we append 's'
      # to the +item+ argument.
      #
      # @example usage
      #  number_counter(0, 'comment') # => 'no comments'
      #  number_counter(1, 'comment') # => 'one comment'
      #  number_counter(2, 'comment') # => '2 comments'
      #
      def number_counter(count, item, items = nil)
        count, item = count.to_i, item.to_s

        if count == 1
          "one #{item}"
        else
          items ||= item.respond_to?(:pluralize) ? item.pluralize : "#{item}s"
          prefix = FORMATTING_NUMBER_COUNTER[count] || count
          "#{prefix} #{items}"
        end
      end

      # Format a floating number nicely for display.
      #
      # @example
      #  number_format(123.123)           # => '123.123'
      #  number_format(123456.12345)      # => '123,456.12345'
      #  number_format(123456.12345, '.') # => '123.456,12345'
      #
      def number_format(n, delimiter = ',')
        delim_l, delim_r = delimiter == ',' ? %w[, .] : %w[. ,]
        h, r = n.to_s.split('.')
        [h.reverse.scan(/\d{1,3}/).join(delim_l).reverse, r].compact.join(delim_r)
      end

      # Answer with the ordinal version of a number.
      #
      # @example
      #  ordinal(1)   # => "1st"
      #  ordinal(2)   # => "2nd"
      #  ordinal(3)   # => "3rd"
      #  ordinal(13)  # => "13th"
      #  ordinal(33)  # => "33rd"
      #  ordinal(100) # => "100th"
      #  ordinal(133) # => "133rd"
      #
      def ordinal(number)
        number = number.to_i

        case number % 100
        when 11..13; "#{number}th"
        else
          case number % 10
          when 1; "#{number}st"
          when 2; "#{number}nd"
          when 3; "#{number}rd"
          else    "#{number}th"
          end
        end
      end

      # stolen and adapted from rails
      def time_diff(from_time, to_time = Time.now, include_seconds = false)
        distance_in_minutes = (((to_time - from_time).abs)/60).round
        distance_in_seconds = ((to_time - from_time).abs).round if include_seconds

        case distance_in_minutes
          when 0..1
            return (distance_in_minutes == 0) ? 'less than a minute' : '1 minute' unless include_seconds
            case distance_in_seconds
              when 0..4   then 'less than 5 seconds'
              when 5..9   then 'less than 10 seconds'
              when 10..19 then 'less than 20 seconds'
              when 20..39 then 'half a minute'
              when 40..59 then 'less than a minute'
              else             '1 minute'
            end

          when 2..44           then "#{distance_in_minutes} minutes"
          when 45..89          then 'about 1 hour'
          when 90..1439        then "about #{(distance_in_minutes.to_f / 60.0).round} hours"
          when 1440..2879      then '1 day'
          when 2880..43199     then "#{(distance_in_minutes / 1440).round} days"
          when 43200..86399    then 'about 1 month'
          when 86400..525959   then "#{(distance_in_minutes / 43200).round} months"
          when 525960..1051919 then 'about 1 year'
          else                      "over #{(distance_in_minutes / 525960).round} years"
        end
      end

      # Copied from actionpack, and revised by insane-dreamer to fix a bug
      # (original fails on some URLs)
      AUTO_LINK_RE = %r{
        (                          # leading text
          <\w+.*?>|                # leading HTML tag, or
          [^=!:'"/]|               # leading punctuation, or
          ^                        # beginning of line
        )
        (
          (?:https?://)|           # protocol spec, or
          (?:www\.)                # www.*
        )
        (
          [-\w]+                   # subdomain or domain
          (?:\.[-\w]+)*            # remaining subdomains or domain
          (?::\d+)?                # port
          (?:/(?:[~\w\+@%=\(\)-]|(?:[,.;:'][^\s<$]))*)* # path
          (?:\?[\w\+@%&=.;:-]+)?   # query string
          (?:\#[\w\-]*)?           # trailing anchor
        )
        ([[:punct:]]|<|$|)         # trailing text
      }x unless defined? AUTO_LINK_RE

      # Turns all urls into clickable links.  If a block is given, each url
      # is yielded and the result is used as the link text.
      def auto_link(text, opts = {})
        html_options = ' ' + opts.map{|k,v| "#{k}='#{v}'"}.join(' ') if opts.any?
        text.gsub(AUTO_LINK_RE) do
          all, a, b, c, d = $&, $1, $2, $3, $4
          if a =~ /<a\s/i # don't replace URL's that are already linked
            all
          else
            text = b + c
            text = yield(text) if block_given?
            %(#{a}<a href="#{b=="www."?"http://www.":b}#{c}"#{html_options}>#{text}</a>#{d})
          end
        end
      end
      alias autolink auto_link

      # takes a string and optional argument for outputting compliance HTML
      # instead of XHTML.
      #
      # @example
      #  nl2br "a\nb\n\c" #=> 'a<br />b<br />c'
      #
      def nl2br(string, xhtml = true)
        br = xhtml ? '<br />' : '<br>'
        string.gsub(/\n/, br)
      end

      def obfuscate_email(email, text = nil)
        obfuscated = []
        email.to_s.each_byte{|c| obfuscated << "&#%03d" % c }
        joined = obfuscated.join

        %(<a href="mailto:#{joined}">#{text || joined}</a>)
      end

      # Returns Hash with tags as keys and their weight as value.
      #
      # Example:
      #     tags = %w[ruby ruby code ramaze]
      #     tagcloud(tags)
      #     # => {"code"=>0.75, "ramaze"=>0.75, "ruby"=>1.0}
      #
      # The weight can be influenced by adjusting the +min+ and +max+
      # parameters, please make sure that +max+ is larger than +min+ to get
      # meaningful output.
      #
      # This is not thought as immediate output to your template but rather to
      # help either implementing your own algorithm or using the result as input
      # for your tagcloud.
      #
      # @example
      #  tagcloud(tags).each do |tag, weight|
      #    style = "font-size: %0.2fem" % weight
      #    %a{:style => style, :href => Rs(tag)}= h(tag)
      #  end
      #
      def tagcloud(tags, min = 0.5, max = 1.5)
        result = {}
        total = tags.size.to_f
        diff = max - min

        tags.uniq.each do |tag|
          count = tags.respond_to?(:count) ? tags.count(tag) : tags.select{|t| t==tag }.size
          result[tag] = ((count / total) * diff) + min
        end

        result
      end
    end # Formatting
  end # Helper
end # Ramaze