Sha256: 23ebe7ff03f0eedc20366eed111e59afd94256dfd3edc068b73a2b9842c77a36

Contents?: true

Size: 1.89 KB

Versions: 21

Compression:

Stored size: 1.89 KB

Contents

#!/usr/bin/env ruby

require 'erb'
require 'json'
require 'ostruct'

class Generator
  METADATA_REPOSITORY = 'x-common'.freeze

  attr_reader :name, :cases
  def initialize(name, cases)
    @name = name
    @cases = cases
  end

  def metadata_dir
    # rubocop:disable Metrics/LineLength
    File.expand_path(File.join('..', '..', '..', METADATA_REPOSITORY, 'exercises', name), __FILE__)
  end

  def data
    File.read(File.join(metadata_dir, 'canonical-data.json'))
  end

  def path_to(file)
    File.expand_path(File.join('..', '..', 'exercises', name, file), __FILE__)
  end

  def version
    @version ||= File.read(path_to('.version')).strip.to_i
  end

  def sha1
    `cd #{metadata_dir} && git log -1 --pretty=format:"%h"`
  end

  def test_cases
    cases.call(data)
  end

  def metadata_repository_missing_message
    <<-EOM.gsub(/^ {6}/, '')

      '#{METADATA_REPOSITORY}' repository not found.
      Try running the command:
        git clone https://github.com/exercism/#{METADATA_REPOSITORY}.git "#{metadata_dir}"

    EOM
  end

  def generate
    check_metadata_repository_exists
    generate_test_file
    increment_version
    increment_version_in_example
  end

  def check_metadata_repository_exists
    unless File.directory?(metadata_dir)
      STDERR.puts metadata_repository_missing_message
      fail Errno::ENOENT.new(metadata_dir)
    end
  end

  def generate_test_file
    File.open(path_to("#{name.gsub(/[ -]/, '_')}_test.rb"), 'w') do |f|
      template = File.read(path_to('example.tt'))
      f.write ERB.new(template, nil, '<>').result binding
    end
  end

  def increment_version
    File.open(path_to('.version'), 'w') do |f|
      f.write version + 1
    end
  end

  def increment_version_in_example
    contents = File.read(path_to('example.rb'))
    File.open(path_to('example.rb'), 'w') do |f|
      f.write contents.gsub("VERSION = #{version}", "VERSION = #{version + 1}")
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
trackler-2.0.3.8 tracks/ruby/lib/generator.rb
trackler-2.0.3.7 tracks/ruby/lib/generator.rb
trackler-2.0.3.6 tracks/ruby/lib/generator.rb
trackler-2.0.3.5 tracks/ruby/lib/generator.rb
trackler-2.0.3.4 tracks/ruby/lib/generator.rb
trackler-2.0.3.3 tracks/ruby/lib/generator.rb
trackler-2.0.3.2 tracks/ruby/lib/generator.rb
trackler-2.0.3.1 tracks/ruby/lib/generator.rb
trackler-2.0.3.0 tracks/ruby/lib/generator.rb
trackler-2.0.2.0 tracks/ruby/lib/generator.rb
trackler-2.0.1.2 tracks/ruby/lib/generator.rb
trackler-2.0.1.1 tracks/ruby/lib/generator.rb
trackler-2.0.1.0 tracks/ruby/lib/generator.rb
trackler-2.0.0.10 tracks/ruby/lib/generator.rb
trackler-2.0.0.9 tracks/ruby/lib/generator.rb
trackler-2.0.0.8 tracks/ruby/lib/generator.rb
trackler-2.0.0.7 tracks/ruby/lib/generator.rb
trackler-2.0.0.6 tracks/ruby/lib/generator.rb
trackler-2.0.0.5 tracks/ruby/lib/generator.rb
trackler-2.0.0.4 tracks/ruby/lib/generator.rb