Sha256: f936b2f1e1f75465c8474735812f02da5470a4c6a76aed039a3759fd14c822f7

Contents?: true

Size: 1.09 KB

Versions: 2

Compression:

Stored size: 1.09 KB

Contents

RSpec::Matchers.define :have_correct_syntax do
  match do |file_path|
    source = File.read(file_path)
    extension = File.extname(file_path)
    case extension
      when '.rb', '.rake'
        check_ruby_syntax(source)
      when '.rhtml', '.erb'
        check_erb_syntax(source)
      when '.haml'
        check_haml_syntax(source)
      else
        raise "Checking syntax for #{extension} files is not yet supported"
    end

  end

  define_method :check_ruby_syntax do |code|
    begin
      eval('__crash_me__;' + code)
    rescue SyntaxError
      false
    rescue NameError
      true
    end
  end

  define_method :check_erb_syntax do |code|
    require 'action_view'
    require 'ostruct'

    begin
      view = ActionView::Template::Handlers::ERB.call(OpenStruct.new(source: code))
      eval('__crash_me__; ' + view)
    rescue SyntaxError
      false
    rescue NameError
      true
    end
  end

  define_method :check_haml_syntax do |code|
    require 'haml'

    begin
      Haml::Engine.new(code)
    rescue Haml::SyntaxError
      false
    rescue NameError
      true
    end
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ammeter-1.1.1 lib/ammeter/rspec/generator/matchers/have_correct_syntax.rb
ammeter-1.1.0 lib/ammeter/rspec/generator/matchers/have_correct_syntax.rb