class StringSnip

Public Class Methods

index_conv(str, value) click to toggle source
# File lib/milkode/common/string_snip.rb, line 31
def self.index_conv(str, value)
  if (value < 0)
    str.size + value
  else
    value
  end
end
new(size = 256, delimiter = '<<snip>>', pri = nil) click to toggle source
# File lib/milkode/common/string_snip.rb, line 3
def initialize(size = 256, delimiter = '<<snip>>', pri = nil)
  @size = size
  @delimiter = delimiter
  @pri = pri
end
ranges_compound(ranges) click to toggle source
# File lib/milkode/common/string_snip.rb, line 43
def self.ranges_compound(ranges)
  result = []
  
  index = 0
  while (ranges.size > 0)
    if (ranges.size > 1 && ranges[0].end + 1 >= ranges[1].begin)
      v1, v2 = ranges.shift(2)
      ranges.unshift v1.begin..((v1.end > v2.end) ? v1.end : v2.end)
    else
      result << ranges.shift
    end
  end

  result
end
ranges_conv(ranges, str) click to toggle source
# File lib/milkode/common/string_snip.rb, line 27
def self.ranges_conv(ranges, str)
  ranges.map {|i| index_conv(str, i.begin)..index_conv(str, i.end)}
end
ranges_sort(ranges) click to toggle source
# File lib/milkode/common/string_snip.rb, line 39
def self.ranges_sort(ranges)
  ranges.sort_by{|i| i.begin}
end

Public Instance Methods

snip(str, ranges) click to toggle source
# File lib/milkode/common/string_snip.rb, line 9
def snip(str, ranges)
  @str = str
  @ranges = ranges

  # no snip
  return @str if (@str.size <= @size)

  # snip
  @ranges = StringSnip::ranges_conv(@ranges, @str)
  @ranges = StringSnip::ranges_sort(@ranges)
  @ranges = StringSnip::ranges_compound(@ranges)

  # result
  results = []
  @ranges.each {|r| results << @str[r] }
  return results.join(@delimiter)
end