Skip to content

Commit 2913f88

Browse files
authored
Merge pull request #56 from sanders41/default-flag
Add CLI option to use default values without prompt
2 parents 673c4c5 + 29b1dde commit 2913f88

File tree

3 files changed

+199
-64
lines changed

3 files changed

+199
-64
lines changed

src/cli.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ pub enum Command {
3131
help = "If set the default package versions will be used instead of the latest"
3232
)]
3333
skip_download_latest_packages: bool,
34+
#[clap(
35+
short,
36+
long,
37+
help = "Use saved configuration and default values instead of prompting where possible"
38+
)]
39+
default: bool,
3440
},
3541

3642
/// Save default config values

src/main.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ fn main() {
3838
match args.command {
3939
Command::Create {
4040
skip_download_latest_packages,
41+
default,
4142
} => {
42-
let mut project_info = get_project_info();
43+
let mut project_info = get_project_info(default);
4344
project_info.download_latest_packages = !skip_download_latest_packages;
4445

4546
let create_result: Result<()>;

src/project_info.rs

Lines changed: 191 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,8 @@ pub fn is_valid_python_version(version: &str) -> bool {
133133
true
134134
}
135135

136-
fn copyright_year_prompt(license: &LicenseType) -> String {
136+
fn copyright_year_prompt(license: &LicenseType, default: Option<String>) -> String {
137137
let prompt_text = "Copyright Year".to_string();
138-
let mut default: Option<String> = None;
139-
if let Ok(now) = OffsetDateTime::now_local() {
140-
default = Some(now.year().to_string());
141-
};
142138
let prompt = Prompt {
143139
prompt_text,
144140
default,
@@ -169,7 +165,7 @@ fn copyright_year_prompt(license: &LicenseType) -> String {
169165
input
170166
}
171167

172-
pub fn get_project_info() -> ProjectInfo {
168+
pub fn get_project_info(use_defaults: bool) -> ProjectInfo {
173169
let config = match Config::load_config() {
174170
Ok(c) => c,
175171
Err(_) => Config::new(),
@@ -180,11 +176,15 @@ pub fn get_project_info() -> ProjectInfo {
180176
};
181177
let project_name = project_name_prompt.show_prompt();
182178
let project_slug_default = project_name.replace(' ', "-").to_lowercase();
183-
let project_slug_prompt = Prompt {
184-
prompt_text: "Project Slug".to_string(),
185-
default: Some(project_slug_default),
179+
let project_slug = if use_defaults {
180+
project_slug_default
181+
} else {
182+
let project_slug_prompt = Prompt {
183+
prompt_text: "Project Slug".to_string(),
184+
default: Some(project_slug_default),
185+
};
186+
project_slug_prompt.show_prompt()
186187
};
187-
let project_slug = project_slug_prompt.show_prompt();
188188

189189
if Path::new(&project_slug).exists() {
190190
let error_message = format!("The {project_slug} directory already exists");
@@ -193,84 +193,211 @@ pub fn get_project_info() -> ProjectInfo {
193193
}
194194

195195
let source_dir_default = project_name.replace(' ', "_").to_lowercase();
196-
let source_dir_prompt = Prompt {
197-
prompt_text: "Source Directory".to_string(),
198-
default: Some(source_dir_default),
196+
let source_dir = if use_defaults {
197+
source_dir_default
198+
} else {
199+
let source_dir_prompt = Prompt {
200+
prompt_text: "Source Directory".to_string(),
201+
default: Some(source_dir_default),
202+
};
203+
source_dir_prompt.show_prompt()
199204
};
200-
let source_dir = source_dir_prompt.show_prompt();
205+
201206
let project_description_prompt = Prompt {
202207
prompt_text: "Project Description".to_string(),
203208
default: None,
204209
};
205210
let project_description = project_description_prompt.show_prompt();
206-
let creator_prompt = Prompt {
207-
prompt_text: "Creator".to_string(),
208-
default: config.creator,
211+
212+
let creator = if use_defaults {
213+
if let Some(creator) = config.creator {
214+
creator
215+
} else {
216+
let creator_prompt = Prompt {
217+
prompt_text: "Creator".to_string(),
218+
default: config.creator,
219+
};
220+
creator_prompt.show_prompt()
221+
}
222+
} else {
223+
let creator_prompt = Prompt {
224+
prompt_text: "Creator".to_string(),
225+
default: config.creator,
226+
};
227+
creator_prompt.show_prompt()
209228
};
210-
let creator = creator_prompt.show_prompt();
211-
let email_prompt = Prompt {
212-
prompt_text: "Creator Email".to_string(),
213-
default: config.creator_email,
229+
230+
let creator_email = if use_defaults {
231+
if let Some(creator_email) = config.creator_email {
232+
creator_email
233+
} else {
234+
let creator_email_prompt = Prompt {
235+
prompt_text: "Creator Email".to_string(),
236+
default: config.creator_email,
237+
};
238+
creator_email_prompt.show_prompt()
239+
}
240+
} else {
241+
let creator_email_prompt = Prompt {
242+
prompt_text: "Creator Email".to_string(),
243+
default: config.creator_email,
244+
};
245+
creator_email_prompt.show_prompt()
214246
};
215-
let creator_email = email_prompt.show_prompt();
216-
let license = license_prompt(config.license);
217247

218-
let copyright_year: Option<String>;
219-
if let LicenseType::Mit = license {
220-
copyright_year = Some(copyright_year_prompt(&license));
248+
let license = if use_defaults {
249+
if let Some(l) = config.license {
250+
l
251+
} else {
252+
LicenseType::Mit
253+
}
221254
} else {
222-
copyright_year = None;
255+
license_prompt(config.license)
256+
};
257+
258+
let mut copyright_year: Option<String> = None;
259+
if let LicenseType::Mit = license {
260+
if let Ok(now) = OffsetDateTime::now_local() {
261+
if use_defaults {
262+
copyright_year = Some(now.year().to_string());
263+
} else {
264+
copyright_year = Some(copyright_year_prompt(&license, None));
265+
}
266+
}
223267
}
224268

225-
let version_prompt = Prompt {
226-
prompt_text: "Version".to_string(),
227-
default: Some("0.1.0".to_string()),
269+
let default_version = "0.1.0".to_string();
270+
let version = if use_defaults {
271+
default_version
272+
} else {
273+
let version_prompt = Prompt {
274+
prompt_text: "Version".to_string(),
275+
default: Some(default_version),
276+
};
277+
278+
version_prompt.show_prompt()
228279
};
229-
let version = version_prompt.show_prompt();
230280

231281
let python_version_default = match config.python_version {
232282
Some(python) => python,
233283
None => "3.11".to_string(),
234284
};
235-
let python_version = python_version_prompt(python_version_default);
285+
let python_version = if use_defaults {
286+
python_version_default
287+
} else {
288+
python_version_prompt(python_version_default)
289+
};
236290

237291
let min_python_version_default = match config.min_python_version {
238292
Some(python) => python,
239293
None => "3.8".to_string(),
240294
};
241-
let min_python_version = python_min_version_prompt(min_python_version_default);
295+
let min_python_version = if use_defaults {
296+
min_python_version_default
297+
} else {
298+
python_min_version_prompt(min_python_version_default)
299+
};
242300

243301
let github_actions_python_test_version_default =
244302
match config.github_actions_python_test_versions {
245-
Some(versions) => versions.join(", "),
246-
None => "3.8, 3.9, 3.10, 3.11".to_string(),
303+
Some(versions) => versions,
304+
None => vec![
305+
"3.8".to_string(),
306+
"3.9".to_string(),
307+
"3.10".to_string(),
308+
"3.11".to_string(),
309+
],
247310
};
248-
let github_actions_python_test_versions =
249-
github_actions_python_test_versions_prompt(github_actions_python_test_version_default);
250-
251-
let use_pyo3 = boolean_prompt(
252-
"Use pyo3\n 1 - Yes\n 2 - No\n Choose from[1, 2]".to_string(),
253-
config.use_pyo3,
254-
);
255-
let is_application = is_application_prompt(config.is_application);
256-
let max_line_length = max_line_length_prompt(config.max_line_length);
257-
258-
let use_dependabot = boolean_prompt(
259-
"Use Dependabot\n 1 - Yes\n 2 - No\n Choose from [1, 2]".to_string(),
260-
config.use_dependabot,
261-
);
262-
let use_continuous_deployment = boolean_prompt(
263-
"Use Continuous Deployment\n 1 - Yes\n 2 - No\n Choose from [1, 2]".to_string(),
264-
config.use_continuous_deployment,
265-
);
266-
let use_release_drafter = boolean_prompt(
267-
"Use Release Drafter\n 1 - Yes\n 2 - No\n Choose from [1, 2]".to_string(),
268-
config.use_release_drafter,
269-
);
270-
let use_multi_os_ci = boolean_prompt(
271-
"Use Multi OS CI\n 1 - Yes\n 2 - No\n Choose from [1, 2]".to_string(),
272-
config.use_multi_os_ci,
273-
);
311+
let github_actions_python_test_versions = if use_defaults {
312+
github_actions_python_test_version_default
313+
} else {
314+
github_actions_python_test_versions_prompt(github_actions_python_test_version_default)
315+
};
316+
317+
let use_pyo3 = if use_defaults {
318+
if let Some(c) = config.use_pyo3 {
319+
c
320+
} else {
321+
false
322+
}
323+
} else {
324+
boolean_prompt(
325+
"Use pyo3\n 1 - Yes\n 2 - No\n Choose from[1, 2]".to_string(),
326+
config.use_pyo3,
327+
)
328+
};
329+
330+
let is_application = if use_defaults {
331+
if let Some(app) = config.is_application {
332+
app
333+
} else {
334+
true
335+
}
336+
} else {
337+
is_application_prompt(config.is_application)
338+
};
339+
340+
let max_line_length = if use_defaults {
341+
if let Some(max) = config.max_line_length {
342+
max
343+
} else {
344+
100
345+
}
346+
} else {
347+
max_line_length_prompt(config.max_line_length)
348+
};
349+
350+
let use_dependabot = if use_defaults {
351+
if let Some(dependabot) = config.use_dependabot {
352+
dependabot
353+
} else {
354+
true
355+
}
356+
} else {
357+
boolean_prompt(
358+
"Use Dependabot\n 1 - Yes\n 2 - No\n Choose from [1, 2]".to_string(),
359+
config.use_dependabot,
360+
)
361+
};
362+
363+
let use_continuous_deployment = if use_defaults {
364+
if let Some(deploy) = config.use_continuous_deployment {
365+
deploy
366+
} else {
367+
true
368+
}
369+
} else {
370+
boolean_prompt(
371+
"Use Continuous Deployment\n 1 - Yes\n 2 - No\n Choose from [1, 2]".to_string(),
372+
config.use_continuous_deployment,
373+
)
374+
};
375+
376+
let use_release_drafter = if use_defaults {
377+
if let Some(drafter) = config.use_release_drafter {
378+
drafter
379+
} else {
380+
true
381+
}
382+
} else {
383+
boolean_prompt(
384+
"Use Release Drafter\n 1 - Yes\n 2 - No\n Choose from [1, 2]".to_string(),
385+
config.use_release_drafter,
386+
)
387+
};
388+
389+
let use_multi_os_ci = if use_defaults {
390+
if let Some(multi_os) = config.use_multi_os_ci {
391+
multi_os
392+
} else {
393+
true
394+
}
395+
} else {
396+
boolean_prompt(
397+
"Use Multi OS CI\n 1 - Yes\n 2 - No\n Choose from [1, 2]".to_string(),
398+
config.use_multi_os_ci,
399+
)
400+
};
274401

275402
ProjectInfo {
276403
project_name,
@@ -297,10 +424,11 @@ pub fn get_project_info() -> ProjectInfo {
297424
}
298425
}
299426

300-
fn github_actions_python_test_versions_prompt(default: String) -> Vec<String> {
427+
fn github_actions_python_test_versions_prompt(default: Vec<String>) -> Vec<String> {
428+
let default_str = default.join(", ");
301429
let prompt = Prompt {
302430
prompt_text: "Python Versions for Github Actions Testing".to_string(),
303-
default: Some(default),
431+
default: Some(default_str),
304432
};
305433
let input = prompt.show_prompt();
306434
let mut versions: Vec<String> = Vec::new();

0 commit comments

Comments
 (0)