Sha256: 05a182555755054a5b37033e6cd81f3efc2a862015f8e8d7d93536a513a344c3

Contents?: true

Size: 1.71 KB

Versions: 1

Compression:

Stored size: 1.71 KB

Contents

require 'quarry/spec/step'

module Quarry

  module Spec

    # = Specification Markup
    #
    class Markup #Specification

      attr :file
      attr :steps

      #
      def initialize(file)
        @file  = file
        @steps = []
        parse
      end

      #
      def parse
        lineno = 0
        text   = ''
        File.open(file, 'r') do |f|
          f.readlines.each_with_index do |line, lineno|
            case line
            when /^\s*$/
              parse_section(text, lineno)
              text = ''
            else
              text << line
            end
          end
        end
      end

      #
      def parse_section(text, lineno)
        return if text.strip == ''
        case text
        when /\A[-=].*?$/, /[-=]\s*\Z/
          #text << line
          steps << Header.new(self, text, lineno)
        when /^\s+/
          last = steps.last
          case last
          when Step, Macro
            last.code << "\n\n#{text.rstrip}"
          when Comment
            if last.macro?
              steps << Macro.new(self, text, lineno, last.type)
            else
              steps << Step.new(self, text, lineno)
            end
          else
            steps << Step.new(self, text, lineno)
          end
        else
          steps << Comment.new(self, text, lineno)
        end
      end

      #
      def description
        File.basename(file)
      end

      # Convert Markdown Specification to Spec object.
      #def to_spec
      #  spec = Design::Spec.new(description)
      #  clauses.each do |text, code|
      #    spec.prove(text) do
      #      instance_eval(code)
      #    end
      #  end
      #  return spec
      #end

    end#class

  end#module Spec

end#module Quarry

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
quarry-0.4.0 lib/quarry/spec/markup.rb