Sha256: 3916dd9ec3e5a5356f138f45238bf031520b194c71c2482fe79ab01be057f4ad

Contents?: true

Size: 1.13 KB

Versions: 8

Compression:

Stored size: 1.13 KB

Contents

require 'rhet-butler/slide-traverser'
module RhetButler
  class IncludeProcessor < SlideTraverser
    Collector = Struct.new(:group, :slides, :loader)
    attr_accessor :root_group

    def initialize(loader)
      @loader = loader
      super()
    end

    def current_loader
      if target_stack.empty?
        return @loader
      else
        return target_stack.last.loader
      end
    end

    def setup
      descend(@root_group, @root_group)
    end

    def descend(source, dest)
      unless Collector === dest
        dest = Collector.new(dest, [], current_loader)
      end
      super(source, dest)
    end

    def ascend
      target = target_stack.pop
      unless target == target_stack.last
        target.group.slides = target.slides
      end
      iter_stack.pop
    end

    def on_include(includer)
      loader = includer.load(current_loader)
      collector = target_stack.last.dup
      collector.loader = loader
      descend(includer, collector)
    end

    def on_slide(slide)
      target_stack.last.slides << slide
    end

    def on_group(group)
      target_stack.last.slides << group
      super
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
rhet-butler-0.14.1 lib/rhet-butler/include-processor.rb
rhet-butler-0.14.0 lib/rhet-butler/include-processor.rb
rhet-butler-0.13.0 lib/rhet-butler/include-processor.rb
rhet-butler-0.12.1 lib/rhet-butler/include-processor.rb
rhet-butler-0.11.1 lib/rhet-butler/include-processor.rb
rhet-butler-0.11.0 lib/rhet-butler/include-processor.rb
rhet-butler-0.10.0 lib/rhet-butler/include-processor.rb
rhet-butler-0.9.0 lib/rhet-butler/include-processor.rb