-
-
Notifications
You must be signed in to change notification settings - Fork 540
/
with_project.rb
67 lines (54 loc) · 1.56 KB
/
with_project.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
require_relative 'silently'
require_relative 'bundler'
require_relative 'with_tmp_directory'
require_relative 'within_project_directory'
module RSpec
module Support
module WithProject
private
KNOWN_ARGUMENTS = [:database, :template, :test].freeze
def with_project(project = "bookshelf", args = {})
with_tmp_directory do
create_project(project, args)
within_project_directory(project) do
setup_gemfile(gems: gem_dependencies(args), exclude_gems: args.fetch(:exclude_gems, []))
bundle_install
yield
end
end
end
def create_project(project, args)
silently "hanami new #{project}#{_create_project_args(args)}"
end
def gem_dependencies(args) # rubocop:disable Metrics/MethodLength
result = args.fetch(:gems, [])
case args.fetch(:console, nil)
when :pry
result << 'pry'
when :ripl
result << 'ripl'
end
case args.fetch(:server, nil)
when :puma
result << 'puma'
when :unicorn
result << 'unicorn'
when :thin
result << 'thin'
end
result
end
def _create_project_args(args)
return if args.empty?
flags = args.dup.keep_if { |k, _| KNOWN_ARGUMENTS.include?(k) }
result = flags.map do |arg, value|
"--#{arg}=#{value}"
end.join(" ")
" #{result}"
end
end
end
end
RSpec.configure do |config|
config.include RSpec::Support::WithProject, type: :cli
end