2009-09-22 6 views
1

J'essaie de tester mes applications rails javascript en utilisant jruby 1.3.1, célérité et culerity. L'application elle-même fonctionne sous Ruby 1.8.7 + passager Phusion (et fonctionne très bien, sans essai :))Émulation de each_slice sans bloc en ruby ​​<1.8.7

Tout l'installation sage fonctionne très bien, mais mon application utilise some_enumerable.each_slice(10) pour diviser un éventail plus large en sous-tableau plus petit avec 10 elelents chaque .

Celerity besoin de jruby et jruby est seulement ruby ​​1.8.6 compatible et par conséquent ne supporte pas un each_slice sans bloc.

Je pense à la définition d'une initalizer qui ajoute cette fonctionnalité si RUBY_PLATFORM == "java" (ou RUBY_VERSION < 1.8.7)

loin je suis arrivé (le code de la cause défunte):

if true #ruby 1.8.6 
module Enumerable 
    alias_method :original_each_slice, :each_slice 
    def each_slice(count, &block) 
    # call original method in 1.8.6 
    if block_given? 
     original_each_slice(count, block) 
    else 
     self.enum_for(:original_each_slice, count).to_a 
    end 
    end 
end 
end 

Ce code ne fonctionne évidemment pas et j'apprécierais vraiment que quelqu'un me pointe vers une solution.

Merci!

Mise à jour: Solution grâce à sepp2k me montrant mes erreurs:

if RUBY_VERSION < "1.8.7" 
    require 'enumerator' 
    module Enumerable 
    alias_method :original_each_slice, :each_slice 
    def each_slice(count, &block) 
     if block_given? 
     # call original method when used with block 
     original_each_slice(count, &block) 
     else 
     # no block -> emulate 
     self.enum_for(:original_each_slice, count) 
     end 
    end 
    end 
end 

Répondre

2

original_each_slice(count, block) devrait être original_each_slice(count, &block).

De plus, si vous omettez le to_a, vous serez plus proche du comportement de 1.8.7+, qui renvoie un énumérateur, pas un tableau.

(Ne pas oublier de require 'enumerator' BTW)

Questions connexes