And that’s ‘“bi-truncate” not “bit-uncate”.
What’s it do?
1 2 |
"This is a test".bitruncate(:length => 6) ==> "Thi...est" "This is a test".bitruncate(:elength => 6) ==> "...a test" |
The default options are { :length => 30 } which will produce 15 characters from the front and 15 from the end, putting … marks in the middle.
For rails, I put this in my lib/core_extensions.rb file.
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 |
# # Copyright (c) 2009 Michael Graff. All rights reserved. # # Redistribution and use in source and binary forms, with or # without modification, are permitted provided that the following # conditions are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials provided # with the distribution. # 3. The name of Michael Graff may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY Michael Graff ``AS IS'' AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Micahel Graff # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY # OF SUCH DAMAGE. # class String # # Truncate from both ends of a string. The :length parameter, which defaults # to 30, will return the first 15 and the last 15 characters from a string # if it is longer than 30 characters. If it is shorter, the entire string # is returned. # # Another way to specify the front and back portions are with :flength and # :elength. If you specify one of these but not the other then you will # not get the missing part. e.g., :flength => 10 alone will return only # the first 10 charcters of the string. This is the same as the standard # truncate(s, :length => 10) helper. # # If a :length parameter is provided it will override any other lengths # specified. # def bitruncate(options = {}) maxlength = options[:length] || 0 flength = options[:flength] || 0 elength = options[:elength] || 0 omission = options[:omission] || '...' if maxlength == 0 && flength == 0 && elength == 0 maxlength = 30 end if maxlength != 0 flength = maxlength / 2 elength = maxlength / 2 end return self if length <= (flength + elength) front = '' back = '' if flength > 0 front = self[0..(flength - 1)] end if elength > 0 back = self[(length - elength)..(length)] end front + omission + back end end |