Sha256: 1a162e8d4686892640557b1f09f98faaa4786886b62ccf9bd6850ebc9e2ebac1

Contents?: true

Size: 1.54 KB

Versions: 151

Compression:

Stored size: 1.54 KB

Contents

require 'delegate'
require 'forwardable'

module Generator
  class Implementation
    extend Forwardable
    include TemplateValuesFactory

    def_delegators :@repository, :tests_version, :example_solution, :tests_template, :minitest_tests, :canonical_data, :test_case

    def initialize(repository:, exercise:)
      @repository = repository
      @exercise = exercise
    end

    attr_reader :repository, :exercise

    def version
      tests_version.to_i
    end

    def update_tests_version
      tests_version.increment
    end

    def update_example_solution
      example_solution.update_version(version)
    end

    def build_tests
      minitest_tests.generate(
        template: tests_template.to_s,
        values: template_values
      )
    end
  end

  # This exists to give us a clue as to what we are delegating to.
  class ImplementationDelegator < SimpleDelegator
  end

  # A implementation that also logs its progress.
  class LoggingImplementation < ImplementationDelegator
    def initialize(implementation:, logger:)
      __setobj__ @implementation = implementation
      @logger = logger
    end

    def update_tests_version
      @implementation.update_tests_version
      @logger.debug "Incremented tests version to #{version}"
    end

    def update_example_solution
      @implementation.update_example_solution
      @logger.debug "Updated version in example solution to #{version}"
    end

    def build_tests
      @implementation.build_tests
      @logger.info "Generated #{exercise.slug} tests version #{version}"
    end
  end
end

Version data entries

151 entries across 151 versions & 1 rubygems

Version Path
trackler-2.2.1.137 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.136 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.135 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.134 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.133 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.132 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.131 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.130 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.129 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.128 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.127 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.126 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.125 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.124 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.123 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.122 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.121 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.120 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.119 tracks/ruby/lib/generator/implementation.rb
trackler-2.2.1.118 tracks/ruby/lib/generator/implementation.rb