Class: Runbook::Generators::Project
- Inherits:
-
Thor::Group
- Object
- Thor::Group
- Runbook::Generators::Project
show all
- Includes:
- Base
- Defined in:
- lib/runbook/generators/project/project.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Base
included, set_base_options
Class Method Details
.description ⇒ Object
7
8
9
|
# File 'lib/runbook/generators/project/project.rb', line 7
def self.description
"Generate a project for your runbooks"
end
|
.long_description ⇒ Object
11
12
13
14
15
16
17
|
# File 'lib/runbook/generators/project/project.rb', line 11
def self.long_description
<<-LONG_DESC
This generator generates a project for your runbooks. It creates a
project skeleton to hold your runbooks, runbook extensions, shared
code, configuration, tests, and dependencies.
LONG_DESC
end
|
Instance Method Details
#create_base_file ⇒ Object
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/runbook/generators/project/project.rb', line 115
def create_base_file
target = File.join(
parent_options[:root],
_name,
"lib",
"#{_name}.rb",
)
template("templates/base_file.rb.tt", target)
end
|
#create_extensions_directory ⇒ Object
178
179
180
181
182
183
184
185
186
187
188
189
190
|
# File 'lib/runbook/generators/project/project.rb', line 178
def create_extensions_directory
dirs = [
parent_options[:root],
_name,
"lib",
"runbook",
"extensions",
]
target = File.join(*dirs)
empty_directory(target)
_keep_dir(target)
end
|
#create_gemfile ⇒ Object
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/runbook/generators/project/project.rb', line 95
def create_gemfile
target = File.join(
parent_options[:root],
_name,
"Gemfile",
)
template("templates/Gemfile.tt", target)
return unless @gemspec_file_contents
gems = @gemspec_file_contents.select do |line|
line =~ / spec.add_development_dependency/
end.map do |line|
line.gsub(/ spec.add_development_dependency/, "gem")
end.join
append_to_file(target, "\n#{gems}", verbose: false)
end
|
#create_generators_directory ⇒ Object
192
193
194
195
196
197
198
199
200
201
202
203
204
|
# File 'lib/runbook/generators/project/project.rb', line 192
def create_generators_directory
dirs = [
parent_options[:root],
_name,
"lib",
"runbook",
"generators",
]
target = File.join(*dirs)
empty_directory(target)
_keep_dir(target)
end
|
#create_lib_directory ⇒ Object
206
207
208
209
210
211
212
213
214
215
216
|
# File 'lib/runbook/generators/project/project.rb', line 206
def create_lib_directory
dirs = [
parent_options[:root],
_name,
@shared_lib_dir,
]
target = File.join(*dirs)
empty_directory(target)
_keep_dir(target)
end
|
#create_readme ⇒ Object
85
86
87
88
89
90
91
92
93
|
# File 'lib/runbook/generators/project/project.rb', line 85
def create_readme
target = File.join(
parent_options[:root],
_name,
"README.md",
)
template("templates/README.md.tt", target)
end
|
#create_ruby_gemset ⇒ Object
146
147
148
149
150
151
152
153
154
|
# File 'lib/runbook/generators/project/project.rb', line 146
def create_ruby_gemset
target = File.join(
parent_options[:root],
_name,
".ruby-gemset",
)
create_file(target, "#{_name}\n")
end
|
#create_ruby_version ⇒ Object
136
137
138
139
140
141
142
143
144
|
# File 'lib/runbook/generators/project/project.rb', line 136
def create_ruby_version
target = File.join(
parent_options[:root],
_name,
".ruby-version",
)
create_file(target, "ruby-#{RUBY_VERSION}\n")
end
|
#create_runbookfile ⇒ Object
156
157
158
159
160
161
162
163
164
|
# File 'lib/runbook/generators/project/project.rb', line 156
def create_runbookfile
target = File.join(
parent_options[:root],
_name,
"Runbookfile",
)
template("templates/Runbookfile.tt", target)
end
|
#create_runbooks_directory ⇒ Object
166
167
168
169
170
171
172
173
174
175
176
|
# File 'lib/runbook/generators/project/project.rb', line 166
def create_runbooks_directory
dirs = [
parent_options[:root],
_name,
"runbooks",
]
target = File.join(*dirs)
empty_directory(target)
_keep_dir(target)
end
|
#init_gem ⇒ Object
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/runbook/generators/project/project.rb', line 26
def init_gem
bundle_exists = "which bundle 2>&1 1>/dev/null"
raise "Please ensure bundle is installed" unless system(bundle_exists)
inside(parent_options[:root]) do
test = "--test #{options[:test]}"
continue = (
run("bundle gem #{_name} #{test} --no-coc --no-mit") ||
options[:pretend]
)
exit 1 unless continue
end
end
|
#modify_rakefile ⇒ Object
126
127
128
129
130
131
132
133
134
|
# File 'lib/runbook/generators/project/project.rb', line 126
def modify_rakefile
target = File.join(
parent_options[:root],
_name,
"Rakefile",
)
gsub_file(target, /^require "bundler\/gem_tasks"\n/, "", verbose: false)
end
|
#remove_bad_test ⇒ Object
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
|
# File 'lib/runbook/generators/project/project.rb', line 237
def remove_bad_test
path = [
parent_options[:root],
_name,
]
case options["test"]
when "rspec"
path << "spec"
path << "#{_name}_spec.rb"
when "minitest"
path << "test"
path << "#{_name}_test.rb"
end
target = File.join(*path)
bad_test = / .*version.*\n.*\n end\n\n/m
gsub_file(target, bad_test, "", verbose: false)
end
|
#remove_unneeded_files ⇒ Object
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
68
|
# File 'lib/runbook/generators/project/project.rb', line 40
def remove_unneeded_files
dirs = [
parent_options[:root],
_name,
]
gemspec_file = File.join(*dirs, "#{_name}.gemspec")
if File.exist?(gemspec_file)
@gemspec_file_contents = File.readlines(gemspec_file)
end
remove_file(gemspec_file)
readme = File.join(*dirs, "README.md")
remove_file(readme)
gemfile = File.join(*dirs, "Gemfile")
remove_file(gemfile)
base_file = File.join(*dirs, "lib", "#{_name}.rb")
remove_file(base_file)
version_file_path = [
"lib",
_name,
"version.rb",
]
version_file = File.join(*dirs, *version_file_path)
remove_file(version_file)
end
|
#runbook_project_overview ⇒ Object
257
258
259
260
261
262
263
264
265
266
267
268
269
270
|
# File 'lib/runbook/generators/project/project.rb', line 257
def runbook_project_overview
msg = [
"",
"Your runbook project was successfully created.",
"Remember to run `./bin/setup` in your project to install dependencies.",
"Add runbooks to the `runbooks` directory.",
"Add shared code to `#{@shared_lib_dir}`.",
"Execute runbooks using `bundle exec runbook exec <RUNBOOK_PATH>` from your project root.",
"See the README.md for more details.",
"\n",
]
say(msg.join("\n"))
end
|
#shared_lib_dir ⇒ Object
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/runbook/generators/project/project.rb', line 70
def shared_lib_dir
msg = [
"Where should shared runbook code live?",
"Use `lib/#{_name}` for runbook-only projects",
"Use `lib/#{_name}/runbook` for projects used for non-runbook tasks",
"Shared runbook code path:",
]
if options.has_key?("shared-lib-dir")
@shared_lib_dir = options["shared-lib-dir"]
else
@shared_lib_dir = ask(msg.join("\n"))
end
end
|
#update_bin_console ⇒ Object
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
|
# File 'lib/runbook/generators/project/project.rb', line 218
def update_bin_console
path = [
parent_options[:root],
_name,
"bin",
"console",
]
target = File.join(*path)
old_require = /require "#{_name}"/
new_require = %Q(require_relative "../lib/#{_name}")
new_require += "\n\nRunbook::Configuration.load_config"
gsub_file(target, old_require, new_require, verbose: false)
old_require = /require "#{_name}"/
new_require = %Q(require_relative "../lib/#{_name}")
gsub_file(target, old_require, new_require, verbose: false)
end
|