Sha256: f3ff3ec4ac9a3d7327c7f1068423a7d9ed06a5425475d63407b8a4453c98e9b4

Contents?: true

Size: 1.96 KB

Versions: 17

Compression:

Stored size: 1.96 KB

Contents

module Tdc
  module Generators
    #
    # Knows how to provide a configurable instance definition.
    #
    class StandardGenerator < Tdc::Generators::GeneratorBase
      include Tdc::Generators::DefinitionSourcable

      attr_reader :instance_definition

      source_definition_from :instance_definition

      def generate
        CatalogEntries.new.tap do |catalog_entries|
          instance_definitions.each do |instance_definition|
            configure_instance_definition(instance_definition)

            # Delete the tag so that the models do not need to filter it out.
            tag = instance_definition.delete("tag")

            generated = run_resolvers_and_generate_instance

            # Add generated instance to the catalog entries whenever a tag provided.
            catalog_entries.add_catalog_entry(tag, generated) if tag
          end
        end
      end

      def run_resolvers_and_generate_instance
        run_extended_attribute_interpreters(instance_definition)
        run_definition_resolvers(instance_definition)

        generate_instance
      end

      #
      # Hook method: subclasses are expected to define how to generate a model instance.
      #
      def generate_instance
        raise Tdc::MissingOverrideError, "Implement the 'generate_instance' method"
      end

      #
      # Hook method: subclasses may include the DefinitionResolvable concern to override.
      #
      def run_definition_resolvers(_instance_definition)
        # Do nothing
      end

      private

      def configure_instance_definition(instance_definition)
        @instance_definition = instance_definition

        configure_definition_source(instance_definition)
      end

      def run_extended_attribute_interpreters(instance_definition)
        interpreters.each { |interpreter| interpreter.interpret(instance_definition) }
      end

      def interpreters
        Tdc::ExtendedAttributes::InterpreterRegistry.instance.interpreters
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
tdc-1.1 lib/tdc/generators/standard_generator.rb
tdc-1.0 lib/tdc/generators/standard_generator.rb
tdc-0.6.2 lib/tdc/generators/standard_generator.rb
tdc-0.6.1 lib/tdc/generators/standard_generator.rb
tdc-0.6.0 lib/tdc/generators/standard_generator.rb
tdc-0.5.0 lib/tdc/generators/standard_generator.rb
tdc-0.4.7 lib/tdc/generators/standard_generator.rb
tdc-0.4.6.1 lib/tdc/generators/standard_generator.rb
tdc-0.4.6 lib/tdc/generators/standard_generator.rb
tdc-0.4.4.1 lib/tdc/generators/standard_generator.rb
tdc-0.4.4 lib/tdc/generators/standard_generator.rb
tdc-0.4.3.1 lib/tdc/generators/standard_generator.rb
tdc-0.4.3 lib/tdc/generators/standard_generator.rb
tdc-0.4.2 lib/tdc/generators/standard_generator.rb
tdc-0.4.1 lib/tdc/generators/standard_generator.rb
tdc-0.4.0 lib/tdc/generators/standard_generator.rb
tdc-0.3.9 lib/tdc/generators/standard_generator.rb