Sha256: 26b8d8196bf074be4753f7e4e3ca7ae2f21cf702eddc0134a0a4dcd3bb2d3a61

Contents?: true

Size: 1.89 KB

Versions: 90

Compression:

Stored size: 1.89 KB

Contents

require 'erb'

module Generator
  module Files
    module GeneratorCases
      module_function

      def available(track_path)
        generator_glob = File.join(track_path, 'lib', '*_cases.rb')
        Dir[generator_glob].sort.map { |filename| exercise_name(filename) }
      end

      def filename(exercise_name)
        "#{exercise_name.tr('-', '_')}_cases"
      end

      def proc_name(exercise_name)
        filename(exercise_name).split('_').map(&:capitalize).join
      end

      def exercise_name(filename)
        %r{([^/]*)_cases\.rb$}.match(filename).captures[0].tr('_', '-')
      end
    end

    module TrackFiles
      include Exercise

      def tests_version
        TestsVersionFile.new(filename: File.join(exercise_path, '.meta', '.version'))
      end

      def example_solution
        ExampleSolutionFile.new(filename: File.join(exercise_path, 'example.rb'))
      end

      def minitest_tests
        MinitestTestsFile.new(filename: File.join(exercise_path, minitest_tests_filename))
      end

      def tests_template
        TestsTemplateFile.new(filename: File.join(exercise_path, 'example.tt'))
      end

      private

      def exercise_path
        File.join(paths.track, 'exercises', exercise_name)
      end

      def minitest_tests_filename
        "#{exercise_name.gsub(/[ -]/, '_')}_test.rb"
      end
    end

    class TestsVersionFile < Writable
      def to_i
        to_s.to_i
      end

      def increment
        save(to_i + 1)
      end
    end

    class ExampleSolutionFile < Writable
      def update_version(version)
        content = to_s.gsub(/VERSION = \d+/, "VERSION = #{version}")
        save(content)
      end
    end

    class MinitestTestsFile < Writable
      def generate(template:, values:)
        content = ERB.new(template, nil, '<>').result values.get_binding
        save(content)
      end
    end

    class TestsTemplateFile < Readable
    end
  end
end

Version data entries

90 entries across 90 versions & 1 rubygems

Version Path
trackler-2.1.0.1 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.1.0.0 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.55 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.54 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.53 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.52 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.51 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.50 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.49 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.48 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.47 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.46 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.45 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.44 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.43 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.42 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.41 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.40 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.39 tracks/ruby/lib/generator/files/track_files.rb
trackler-2.0.8.38 tracks/ruby/lib/generator/files/track_files.rb