module Inch
  class Config
    class << self
      attr_accessor :instance

      def run(&block)
        self.instance ||= new
        instance.update(&block)
        instance
      end
    end

    def update(&block)
      instance_eval(&block)
    end

    def development?
      @development
    end

    def development!
      @development = true
    end

    def evaluation(&block)
      @evaluation ||= Evaluation.new
      @evaluation.update(&block) if block
      @evaluation
    end

    class Evaluation
      def update(&block)
        instance_eval(&block)
      end

      def grade(symbol, &block)
        ::Inch::Evaluation::Grade.grade(symbol, &block)
      end

      def schema(constant_name, &block)
        constant = eval("::Inch::Evaluation::#{constant_name}")
        constant.criteria(&block)
      end
    end
  end
end