Sha256: 323860b9f46a366118aac684c6459d6ced0992db163bd18a3fd232d056ba8757

Contents?: true

Size: 1.11 KB

Versions: 12

Compression:

Stored size: 1.11 KB

Contents

require "yard"

module Lookbook
  class PreviewParser
    def initialize(paths, tags = nil)
      @paths = paths
      @after_parse_callbacks = []
      @after_parse_once_callbacks = []
      @parsing = false

      define_tags(tags)
      YARD::Parser::SourceParser.after_parse_list { run_callbacks }
    end

    def parse(&block)
      unless @parsing
        @parsing = true
        @after_parse_once_callbacks << block if block
        YARD::Registry.clear
        YARD.parse(paths)
      end
    end

    def after_parse(&block)
      @after_parse_callbacks << block
    end

    def paths
      PathUtils.normalize_paths(@paths).map { |path| "#{path}/**/*preview.rb" }
    end

    protected

    def callbacks
      [
        *@after_parse_callbacks,
        *@after_parse_once_callbacks
      ]
    end

    def run_callbacks
      callbacks.each { |cb| cb.call(YARD::Registry) }
      @after_parse_once_callbacks = []
      @parsing = false
    end

    def define_tags(tags = nil)
      tags.to_h.each do |name, tag|
        YARD::Tags::Library.define_tag(tag[:label], name, Lookbook::TagProvider)
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
lookbook-1.5.5 lib/lookbook/preview_parser.rb
lookbook-1.5.4 lib/lookbook/preview_parser.rb
lookbook-1.5.3 lib/lookbook/preview_parser.rb
lookbook-1.5.2 lib/lookbook/preview_parser.rb
lookbook-1.5.1 lib/lookbook/preview_parser.rb
lookbook-1.5.0 lib/lookbook/preview_parser.rb
lookbook-1.4.5 lib/lookbook/preview_parser.rb
lookbook-1.4.4 lib/lookbook/preview_parser.rb
lookbook-1.4.3 lib/lookbook/preview_parser.rb
lookbook-1.4.2 lib/lookbook/preview_parser.rb
lookbook-1.4.1 lib/lookbook/preview_parser.rb
lookbook-1.4.0 lib/lookbook/preview_parser.rb