DannyBen/enforce

View on GitHub
lib/enforce/dsl.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Enforce
  class DSL
    attr_reader :last_file

    def file(name)
      pass = File.exist?(name)
      @last_file = name

      add_result message: "file `#{name}`", pass: pass

      return unless pass

      yield if block_given?
    end

    def no_file(name)
      pass = !File.exist?(name)
      add_result message: "no file `#{name}`", pass: pass
    end

    def folder(name, &block)
      pass = Dir.exist?(name)
      add_result message: "folder `#{name}`", pass: pass

      return unless pass && block

      Dir.chdir name, &block
    end

    def no_folder(name)
      pass = !Dir.exist?(name)
      add_result message: "no folder `#{name}`", pass: pass
    end

    def text(content)
      pass = File.read(last_file).include?(content)
      add_result message: "text `#{content}`", pass: pass
    end

    def no_text(content)
      pass = !File.read(last_file).include?(content)
      add_result message: "no_text `#{content}`", pass: pass
    end

    def regex(content)
      pass = File.read(last_file).match?(content)
      add_result message: "regex `#{content.inspect}`", pass: pass
    end

    def no_regex(content)
      pass = !File.read(last_file).match?(content)
      add_result message: "no_regex `#{content.inspect}`", pass: pass
    end

    def line(content)
      pass = File.readlines(last_file).map(&:strip).include?(content)
      add_result message: "line `#{content}`", pass: pass
    end

    def no_line(content)
      pass = !File.readlines(last_file).map(&:strip).include?(content)
      add_result message: "no line `#{content}`", pass: pass
    end

    def results
      @results ||= []
    end

    def passed_results
      results.select { |result| result[:pass] }
    end

    def failed_results
      results.reject { |result| result[:pass] }
    end

  protected

    def add_result(result)
      results.push result unless results.include? result
      handle(**result)
    end

    def handle(result)
      # Do nothing, should be overridden
    end
  end
end