Sha256: af83f66a7647574ba1d64c8faae4d51572121f28054ef2f5e323ac976fa4327f

Contents?: true

Size: 678 Bytes

Versions: 3

Compression:

Stored size: 678 Bytes

Contents

module Sexpr
  class Processor
    class Helper

      attr_accessor :next_in_chain

      def call(processor, sexpr, &bl)
        meth = :"on_#{sexpr.first}"
        meth = :"on_missing" unless respond_to?(meth)
        send(meth, processor, sexpr) do |r,n|
          next_call(r, n, bl)
        end
      end

      def on_missing(processor, sexpr)
        yield(processor, sexpr)
      end

    private

      def next_call(processor, sexpr, toplevel)
        if nic = next_in_chain
          nic.call(processor, sexpr, &toplevel)
        else
          toplevel.call(processor, sexpr)
        end
      end

    end # class Helper
  end # module Processor
end # module Sexpr

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sexpr-1.1.0 lib/sexpr/processor/helper.rb
sexpr-1.0.0 lib/sexpr/processor/helper.rb
sexpr-0.6.0 lib/sexpr/processor/helper.rb