ne-sachirou/stream_stat

View on GitHub
example/example.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

# Example code reader
#
# example        := head empty_line description empty_line code
# head           := non_empty_line*
# description    := comment_line+
# code           := /.+/m
# empty_line     := /^\s*$/
# non_empty_line := /^\s*\S+.*$/
# comment_line   := /^#.*$/
class Example
  attr_reader :description, :code

  class << self
    def all
      Dir["#{__dir__}/*.rb"]
        .select { |file| File.basename(file, '.rb') =~ /\d+/ }
        .collect { |file| new file }
    end
  end

  def initialize(file)
    @file = file
    content = drop_head File.read(file, encoding: Encoding::UTF_8).each_line
    description_lines = content.take_while { |line| line[0] == '#' }
    @description = description_lines.join('').gsub(/^#\s*/, '').strip
    @code = content.drop(description_lines.size).join('').strip
  end

  def eval
    load @file
  end

  private

  def drop_head(content)
    content.drop_while { |line| line =~ /^\s*\S+.*$/ }.drop(1)
  end
end