diff options
Diffstat (limited to 'spec/support/project.rb')
| -rw-r--r-- | spec/support/project.rb | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/spec/support/project.rb b/spec/support/project.rb new file mode 100644 index 0000000..a90dfd6 --- /dev/null +++ b/spec/support/project.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true +require 'securerandom' + +class Project + attr_reader :path + + def initialize(path = Pathname.pwd.join('tmp').join(SecureRandom.uuid)) + FileUtils.mkdir_p(path) + @path = Pathname(path) + end + + def mount(dir:) + FileUtils.cp_r("#{dir}/.", path) + end + + def chdir + Dir.chdir path do + yield + end + end + + def clone(repo, branch: 'master') + if branch.match?(/\b[0-9a-f]{5,40}\b/) + execute({}, 'git', 'clone', '--quiet', repo, path.to_s) + chdir do + execute({}, 'git', 'checkout', branch) + end + else + execute({}, 'git', 'clone', '--quiet', '--depth=1', '--single-branch', '--branch', branch, repo, path.to_s) + end + end + + def execute(env = {}, *args) + Bundler.with_unbundled_env do + system(env, *args, exception: true) + end + end + + def cleanup + FileUtils.rm_rf(path) if path.exist? + end +end |
