def compile
      if !Dir.exist?('.spectro')
        abort "\n" + "This folder has not been initialzed as an Spectro project. Please run ".white.on_red + " spectro init ".white.on_light_black + " before compiling.".white.on_red + "\n\n"
      end

      undefined_yaml = YAML::Store.new(".spectro/undefined.yml")
      undefined_yaml.transaction do
        targets().map do |path|
          missing_specs = missing_specs_from_file(path)

          next if missing_specs.empty?

          undefined_yaml[path] = missing_specs
        end
      end

      return self
    end
def compile
      if !Dir.exist?('.spectro')
        abort "\n" + "This folder has not been initialzed as an Spectro project. Please run ".white.on_red + " spectro init ".white.on_light_black + " before compiling.".white.on_red + "\n\n"
      end

      undefined_yaml = YAML::Store.new(".spectro/undefined.yml")
      undefined_yaml.transaction do
        targets().map do |path|
          missing_specs = missing_specs_from_file(path)

          next if missing_specs.empty?

          undefined_yaml[path] = missing_specs
        end
      end

      return self
    end
Filters the project files keeping those that make use of Spectro.
 It then parses them, check for missing implementations
 and creates an .spectro/undefined.yml with their specs.

 @return [Spectro::Compiler] self