Sha256: e67fba69a800d82eceb9b46d53fe8f6a6c61f23e17ea03488e8d4e706be18588

Contents?: true

Size: 1.4 KB

Versions: 90

Compression:

Stored size: 1.4 KB

Contents

require 'exercise_cases'

class WordyCase < OpenStruct
  def test_name
    'test_%s' % description.downcase.tr(' ', '_')
  end

  def workload
    [
      "question = '#{input}'",
      indent(4, assertion),
    ].join("\n")
  end

  def skipped
    index.zero? ? '# skip' : 'skip'
  end

  private

  def indent(size, lines)
    lines.lines.each_with_object('') { |line, obj| obj << ' ' * size + line }
  end

  def assertion
    return error_assertion unless expected
    return message_assertion if message

    "assert_equal(#{expected}, WordProblem.new(question).answer)"
  end

  def error_assertion
    [
      'assert_raises ArgumentError do',
      indent(2, 'WordProblem.new(question).answer'),
      'end',
    ].join("\n")
  end

  def message_assertion
    [
      'answer = WordProblem.new(question).answer',
      "message = \"#{message % '#{answer}'}\"",
      "assert_equal(#{expected}, answer, message)",
    ].join("\n")
  end
end

class WordyCase::PreProcessor
  class << self
    def call(row)
      row.merge('message' => message_for(row))
    end

    private

    def message_for(row)
      return unless row['input'] == 'What is -3 plus 7 multiplied by -2?'

      'You should ignore order of precedence. -3 + 7 * -2 = -8, not %s'
    end
  end
end

WordyCases = proc do |data|
  JSON.parse(data)['cases'].map.with_index do |row, i|
    WordyCase.new(WordyCase::PreProcessor.call(row).merge(index: i))
  end
end

Version data entries

90 entries across 90 versions & 1 rubygems

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