class Atomy::Pattern::QuasiQuote::MatchWalker
Public Instance Methods
go(a, b)
click to toggle source
# File lib/atomy/pattern/quasi_quote.rb, line 110 def go(a, b) if a.is_a?(Atomy::Pattern) a.matches?(b) elsif b.is_a?(a.class) a.each_attribute do |attr, val| return false unless val == b.send(attr) end a.each_child do |attr, val| theirval = b.send(attr) if val.is_a?(Array) # TODO test that theirval is an array too return false unless go_array(val, theirval) else return false unless go(val, b.send(attr)) end end true else false end end
go_array(as, bs)
click to toggle source
# File lib/atomy/pattern/quasi_quote.rb, line 134 def go_array(as, bs) splat = nil req_size = 0 as.each do |a| if a.is_a?(Atomy::Pattern::Splat) splat = a break end req_size += 1 end if splat return false unless bs.size >= req_size else return false unless bs.size == req_size end req_size.times do |i| return false unless go(as[i], bs[i]) end if splat return false unless splat.matches?(bs[req_size..-1]) end true end