Class: Atomy::Pattern::QuasiQuote::MatchWalker
- Defined in:
- lib/atomy/pattern/quasi_quote.rb
Instance Method Summary collapse
Instance Method Details
#go(a, b) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# 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) ⇒ Object
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# 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 |