julik live

ranges.rb

Навеяло постом маньяка...

Кстати по-моему очень хорошая идея - а в случае overflow сериализованного массива либо обнулять его (ибо информация не критичная) либо заменять на [1..последний_топик_в_форуме].

 module Enumerable
   def to_ranges
     compact.sort.uniq.inject([]) do | result, elem |
       result = [elem..elem] if result.length.zero?
       if [result[-1].end, result[-1].end.succ].include?(elem)
         result[-1] = result[-1].begin..elem
       else
         result.push elem..elem
       end
       result
     end
   end

   def member_includes?(item)
     find{|r| r.include?(item)} ? true : false
   end

   def implant(item)
    (map{|e| e.to_a }.flatten + Array(item)).to_ranges
   end

   def implant!(item)
     replace(implant(item))
   end
 end

implant конечно можно и поэкономнее сделать но было лень :-)

Suspects: Веб-стройка

 
comments powered by Disqus

Aspirine not included.