Commit 8c8826d5 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Custom singleton implementation for MetaTagRegistry.

By default MetaTagRegistry.instance will return a registry that's
loaded with builtin tags.  This instance can be overridden for
testing and for loading custom tags.

This greatly simplifies tests and makes them faster as we no more
need to ensure that MetaTagRegistry has been loaded with builtins
before running the tests.  The registry is only instanciated once
for the general case and second time for running special tests
against itself.  Previously initialization happened multiple times.
parent 4ddb119d
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
require 'singleton'
require "jsduck/meta_tag_loader"

module JsDuck

  # Access to meta-tags
  class MetaTagRegistry
    include Singleton

    @@instance = nil

    # Returns singleton instance of MetaTagRegistry.
    # By default this will be auto-loaded with builtin tags.
    def self.instance
      if !@@instance
        @@instance = MetaTagRegistry.new
        @@instance.load([:builtins])
      end
      @@instance
    end

    # Allows injecting another MetaTagRegistry to be used as a global instance.
    def self.instance=(instance)
      @@instance = instance
    end


    def initialize
      @tags = []
+4 −1
Original line number Diff line number Diff line
@@ -124,7 +124,10 @@ module JsDuck
        read_filenames(canonical(fname))
      end
      validate
      MetaTagRegistry.instance.load([:builtins] + @meta_tag_paths)

      reg = MetaTagRegistry.new
      reg.load([:builtins] + @meta_tag_paths)
      MetaTagRegistry.instance = reg
    end

    def create_option_parser
+0 −4
Original line number Diff line number Diff line
@@ -2,10 +2,6 @@ require "jsduck/aggregator"
require "jsduck/source_file"

describe JsDuck::Aggregator do
  before(:all) do
    JsDuck::MetaTagRegistry.instance.load([:builtins])
  end

  def parse(string)
    agr = JsDuck::Aggregator.new
    agr.aggregate(JsDuck::SourceFile.new(string))
+0 −5
Original line number Diff line number Diff line
require "jsduck/aggregator"
require "jsduck/source_file"
require "jsduck/meta_tag_registry"

describe JsDuck::Aggregator do
  before(:all) do
    JsDuck::MetaTagRegistry.instance.load([:builtins])
  end

  def parse(string)
    agr = JsDuck::Aggregator.new
    agr.aggregate(JsDuck::SourceFile.new(string))
+0 −4
Original line number Diff line number Diff line
@@ -2,10 +2,6 @@ require "jsduck/aggregator"
require "jsduck/source_file"

describe JsDuck::Aggregator do
  before(:all) do
    JsDuck::MetaTagRegistry.instance.load([:builtins])
  end

  def parse(string)
    agr = JsDuck::Aggregator.new
    agr.aggregate(JsDuck::SourceFile.new(string))
Loading