Sha256: faa3d7fca7a7e065b31495a9b1753e50807cf74aef66cd3ac73566d529fe278f

Contents?: true

Size: 1.05 KB

Versions: 4

Compression:

Stored size: 1.05 KB

Contents

module Brief
  class Publisher::HandlerManager

    attr_reader :publisher, :document

    def initialize(publisher, document)
      @publisher  = publisher
      @document   = document
    end

    def parser
      @parser ||= document.parser
    end

    def handlers
      find_parent = lambda do |parent_id|
        parser.tree.find(parent_id)
      end

      get_manager = -> { self }

      @handlers ||= publisher.order.inject({}) do |memo, level|
        config            = publisher.config_for_level(level)
        klass_name        = config.publish.klass
        klass             = klass_name.nil? ? Brief::Handlers::Base : (klass_name.to_s.constantize rescue Brief::Handlers::Base)

        memo[level] = parser.tree.level(level).map do |element|
          obj = klass.new(element)

          obj.parent(&find_parent)
          obj.get_manager(&get_manager)

          obj
        end

        memo
      end
    end

    def run
      publisher.order.each do |level|
        objects = handlers[level]
        objects.each(&:handle!)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
brief-0.0.5 lib/brief/publisher/handler_manager.rb
brief-0.0.4 lib/brief/publisher/handler_manager.rb
brief-0.0.3 lib/brief/publisher/handler_manager.rb
brief-0.0.2 lib/brief/publisher/handler_manager.rb