Sha256: a35298e71e3603c6a77f6a69515ee229edfc7fa7b75b8022294bd34927938d16

Contents?: true

Size: 1.62 KB

Versions: 3

Compression:

Stored size: 1.62 KB

Contents

module Tdc
  module Generators
    #
    # Knows how to provide a configurable instance definition.
    #
    # Shared implementation between the StandardGenerator and the SingularGenerator abstract classes.
    #
    class ConfigurableGenerator < Tdc::Generators::GeneratorBase
      include Tdc::Generators::DefinitionSourcable

      attr_reader :instance_definition

      source_definition_from :instance_definition

      def run_resolvers_and_generate_instance
        run_atx_resolvers(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_atx_resolvers(instance_definition)
        atx_definitions = instance_definition.select { |k, _v| /_atx$/ =~ k }

        atx_definitions.each do |k, v|
          # Remove the original _atx attribute.
          instance_definition.delete(k)

          # Add a standard _at attribute.
          instance_definition[k.delete_suffix("x")] = eval(v) # rubocop:disable Security/Eval
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
tdc-0.3.2 lib/tdc/generators/configurable_generator.rb
tdc-0.3.1 lib/tdc/generators/configurable_generator.rb
tdc-0.3.0 lib/tdc/generators/configurable_generator.rb