class Object
Public Instance Methods
arraydiff(a,b)
click to toggle source
# File lib/miniredparse.rb, line 1248 def arraydiff(a,b) a==b and return [a,false] (Array===a or a=[a]) result= a.dup diff=false size= a.size >= b.size ? a.size : b.size size.times{|i| ai=a[i] bi=b[i] if Array===ai and Array===bi result_i,diff_i= arraydiff(ai,bi) diff||=diff_i result[i]=result_i elsif ai!=bi next if Regexp===ai and ai.to_s==bi.to_s and ai.options==bi.options diff=true result[i]={ai=>bi} elsif ai.nil? result[i]={'size mismatch'=>"#{a.size} for #{b.size}"} if a.size!=b.size diff=true end if i.nonzero? and Hash===result[i] and Hash===result[i-1] old=result[i-1] oldkeys=old.keys oldvals=old.values if Reg::Subseq===oldkeys.first oldkeys=oldkeys.children oldval=oldvals.children end result[i-1..i]=[ {-[*oldkeys+result[i].keys]=>-[*oldvals+result[i].values]} ] end } return result,diff end