Sha256: bc37124a1e3de99e9d16222c88f452e7876afb3edd170fcf220e84f39086cc14

Contents?: true

Size: 1.16 KB

Versions: 2

Compression:

Stored size: 1.16 KB

Contents

require_relative '../spec_helper'
require 'kramdown'

RSpec.describe 'Documentation' do
  root = File.expand_path('../..', __dir__)
  files = Dir.glob(File.join(root, '*.md')) + Dir.glob(File.join(root, 'docs', '*.md'))
  code_types = [:codeblock, :codespan]

  files.each do |file|
    describe "from #{file}" do
      text = File.read(file)
      doc = Kramdown::Document.new(text, input: 'GFM')
      blocks = doc.root.children

      blocks.each do |block|
        # Only consider code blocks with language 'ruby'.
        next unless code_types.include?(block.type)
        next unless block.attr['class'] == 'language-ruby'

        it "has a valid sample at #{block.options[:location] + 1}" do
          code = block.value.strip

          # Replace lines of the form `<expression> # => <result>` with
          # assertions.
          #
          # For example,
          #
          #   2 + 2 # => 4
          #
          # will be replaced by
          #
          #   assert_equal(4, 2 + 2)
          #
          spec_code = code.gsub(/(^.+) # ?=> (.+$)/, 'assert_equal(\2, \1)')

          eval spec_code # rubocop:disable Security/Eval
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
reek-6.0.3 spec/quality/documentation_spec.rb
reek-6.0.2 spec/quality/documentation_spec.rb