From 2d3d3718b4dae9b086dbd7a181b455c182b3a1a0 Mon Sep 17 00:00:00 2001
From: Mehmet Emin INAC <minac@gitlab.com>
Date: Mon, 20 Apr 2020 10:25:37 +0200
Subject: [PATCH] Extend Guard config to continuously run specs under ee
 directory

---
 Guardfile | 51 +++++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 41 insertions(+), 10 deletions(-)

diff --git a/Guardfile b/Guardfile
index 21ee2a9d6104..baaa52bd2046 100644
--- a/Guardfile
+++ b/Guardfile
@@ -2,28 +2,51 @@
 
 # More info at https://github.com/guard/guard#readme
 
+require "guard/rspec/dsl"
+
 cmd = ENV['GUARD_CMD'] || (ENV['SPRING'] ? 'spring rspec' : 'bundle exec rspec')
 
-guard :rspec, cmd: cmd do
-  require "guard/rspec/dsl"
-  dsl = Guard::RSpec::Dsl.new(self)
+directories %w(app ee lib spec)
+
+rspec_context_for = proc do |context_path|
+  OpenStruct.new(to_s: "spec").tap do |rspec|
+    rspec.spec_dir = "#{context_path}spec"
+    rspec.spec = ->(m) { Guard::RSpec::Dsl.detect_spec_file_for(rspec, m) }
+    rspec.spec_helper = "#{rspec.spec_dir}/spec_helper.rb"
+    rspec.spec_files = %r{^#{rspec.spec_dir}/.+_spec\.rb$}
+    rspec.spec_support = %r{^#{rspec.spec_dir}/support/(.+)\.rb$}
+  end
+end
+
+rails_context_for = proc do |context_path, exts|
+  OpenStruct.new.tap do |rails|
+    rails.app_files = %r{^#{context_path}app/(.+)\.rb$}
+
+    rails.views = %r{^#{context_path}app/(views/.+/[^/]*\.(?:#{exts}))$}
+    rails.view_dirs = %r{^#{context_path}app/views/(.+)/[^/]*\.(?:#{exts})$}
+    rails.layouts = %r{^#{context_path}app/layouts/(.+)/[^/]*\.(?:#{exts})$}
 
-  directories %w(app ee lib spec)
+    rails.controllers = %r{^#{context_path}app/controllers/(.+)_controller\.rb$}
+    rails.routes = "#{context_path}config/routes.rb"
+    rails.app_controller = "#{context_path}app/controllers/application_controller.rb"
+    rails.spec_helper = "#{context_path}spec/rails_helper.rb"
+  end
+end
 
+guard_setup = proc do |context_path|
   # RSpec files
-  rspec = dsl.rspec
+  rspec = rspec_context_for.call(context_path)
   watch(rspec.spec_helper) { rspec.spec_dir }
   watch(rspec.spec_support) { rspec.spec_dir }
   watch(rspec.spec_files)
 
   # Ruby files
-  ruby = dsl.ruby
-  dsl.watch_spec_files_for(ruby.lib_files)
+  watch(%r{^#{context_path}(lib/.+)\.rb$}) { |m| rspec.spec.call(m[1]) }
 
   # Rails files
-  rails = dsl.rails(view_extensions: %w(erb haml slim))
-  dsl.watch_spec_files_for(rails.app_files)
-  dsl.watch_spec_files_for(rails.views)
+  rails = rails_context_for.call(context_path, %w(erb haml slim))
+  watch(rails.app_files) { |m| rspec.spec.call(m[1]) }
+  watch(rails.views)     { |m| rspec.spec.call(m[1]) }
 
   watch(rails.controllers) do |m|
     [
@@ -41,3 +64,11 @@ guard :rspec, cmd: cmd do
   watch(rails.view_dirs)     { |m| rspec.spec.call("features/#{m[1]}") }
   watch(rails.layouts)       { |m| rspec.spec.call("features/#{m[1]}") }
 end
+
+context_paths = ['', 'ee/']
+
+context_paths.each do |context_path|
+  guard :rspec, cmd: cmd, spec_paths: ["#{context_path}spec/"] do
+    guard_setup.call(context_path)
+  end
+end
-- 
GitLab