Sha256: b9425a387cff56d097ba7e8a4b8f1ee901b20233ac545fe0413efc269801083e

Contents?: true

Size: 1.12 KB

Versions: 172

Compression:

Stored size: 1.12 KB

Contents

require "./remote_data_file"

require "ecr"
require "json"

abstract class ExerciseGenerator
  METADATA_REPOSITORY = "problem-specifications"

  def self.generate
    new.generate
  end

  def generate
    raise "There are no test cases for #{exercise_name}" if test_cases.empty?
    File.write(test_file, to_s)
  end

  def describe_name
    exercise_name.split('-').map(&.capitalize).join
  end

  abstract def exercise_name
  abstract def test_cases

  private def root
    File.expand_path(File.join("..", "..", ".."), __FILE__)
  end

  private def test_file
    File.expand_path(File.join("exercises", exercise_name, "spec", "#{exercise_name.tr("-", "_")}_spec.cr"), root)
  end

  private def metadata_dir
    File.expand_path(File.join("..", METADATA_REPOSITORY, "exercises", exercise_name), root)
  end

  private def data
    local_data_file = File.join(metadata_dir, "canonical-data.json")
    if File.exists?(local_data_file)
      File.read(local_data_file)
    else
      remote_data_file = RemoteDataFile.new(exercise_name)
      File.read(remote_data_file.path)
    end
  end

  ECR.def_to_s "#{__DIR__}/templates/example.tt"
end

Version data entries

172 entries across 172 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.179 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.178 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.177 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.176 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.175 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.174 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.173 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.172 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.171 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.170 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.169 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.167 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.166 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.165 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.164 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.163 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.162 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.161 tracks/crystal/generator/src/exercise_generator.cr
trackler-2.2.1.160 tracks/crystal/generator/src/exercise_generator.cr