Class: Generamba::CLI::Application
- Inherits:
-
Thor
- Object
- Thor
- Generamba::CLI::Application
show all
- Includes:
- Generamba
- Defined in:
- lib/generamba/cli/cli.rb,
lib/generamba/cli/gen_command.rb,
lib/generamba/cli/setup_command.rb,
lib/generamba/cli/version_command.rb,
lib/generamba/cli/template/template_group.rb
Constant Summary
Constants included
from Generamba
AUTHOR_NAME_KEY, Generamba::C99IDENTIFIER, Generamba::CARTFILE_PATH_KEY, Generamba::CATALOGS_DIR, Generamba::CATALOGS_KEY, Generamba::COMPANY_KEY, GENERAMBA_CATALOG_NAME, GENERAMBA_HOME_DIR, PATH_TYPE_PROJECT, PATH_TYPE_TEST, PODFILE_PATH_KEY, PRODUCT_MODULE_NAME_KEY, PROJECT_FILE_PATH_KEY, PROJECT_GROUP_PATH_KEY, PROJECT_NAME_KEY, PROJECT_PREFIX_KEY, PROJECT_TARGETS_KEY, PROJECT_TARGET_KEY, RAMBAFILE_NAME, RAMBASPEC_EXTENSION, RAMBLER_CATALOG_REPO, RELEASE_DATE, RELEASE_LINK, SLASH_REGEX, TEMPLATES_FOLDER, TEMPLATES_KEY, TEMPLATE_AUTHOR_KEY, TEMPLATE_CODE_FILES_KEY, TEMPLATE_DECLARATION_BRANCH_KEY, TEMPLATE_DECLARATION_GIT_KEY, TEMPLATE_DECLARATION_LOCAL_KEY, TEMPLATE_DECLARATION_NAME_KEY, TEMPLATE_DEPENDENCIES_KEY, TEMPLATE_FILE_CUSTOM_NAME_KEY, TEMPLATE_FILE_IS_RESOURCE_KEY, TEMPLATE_FILE_NAME_KEY, TEMPLATE_FILE_PATH_KEY, TEMPLATE_LICENSE_KEY, TEMPLATE_NAME_KEY, TEMPLATE_SUMMARY_KEY, TEMPLATE_TEST_FILES_KEY, TEMPLATE_VERSION_KEY, TEST_FILE_PATH_KEY, TEST_GROUP_PATH_KEY, TEST_TARGETS_KEY, TEST_TARGET_KEY, USERNAME_KEY, USER_PREFERENCES_FILE, VERSION, XCODEPROJ_PATH_KEY
Instance Method Summary
collapse
Instance Method Details
#gen(module_name, template_name) ⇒ Object
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
68
69
70
71
72
73
|
# File 'lib/generamba/cli/gen_command.rb', line 27
def gen(module_name, template_name)
does_rambafile_exist = Dir[RAMBAFILE_NAME].count > 0
unless does_rambafile_exist
puts('Rambafile not found! Run `generamba setup` in the working directory instead!'.red)
return
end
rambafile_validator = Generamba::RambafileValidator.new
rambafile_validator.validate(RAMBAFILE_NAME)
setup_username_command = Generamba::CLI::SetupUsernameCommand.new
setup_username_command.setup_username
rambafile = YAML.load_file(RAMBAFILE_NAME)
code_module = CodeModule.new(module_name, rambafile, options)
module_validator = ModuleValidator.new
module_validator.validate(code_module)
module_info = ModuleInfoGenerator.new(code_module)
template = ModuleTemplate.new(template_name, module_info.scope)
parameters = GenCommandTableParametersFormatter.prepare_parameters_for_displaying(code_module, template_name)
PrintTable.print_values(
values: parameters,
title: "Summary for gen #{module_name}"
)
DependencyChecker.check_all_required_dependencies_has_in_podfile(template.dependencies, code_module.podfile_path)
DependencyChecker.check_all_required_dependencies_has_in_cartfile(template.dependencies, code_module.cartfile_path)
project = XcodeprojHelper.obtain_project(code_module.xcodeproj_path)
module_group_already_exists = XcodeprojHelper.module_with_group_path_already_exists(project, code_module.project_group_path)
if module_group_already_exists
replace_exists_module = yes?("#{module_name} module already exists. Replace? (yes/no)")
unless replace_exists_module
return
end
end
generator = Generamba::ModuleGenerator.new
generator.generate_module(module_name, code_module, template)
end
|
#setup ⇒ Object
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/generamba/cli/setup_command.rb', line 13
def setup
properties = {}
setup_username_command = Generamba::CLI::SetupUsernameCommand.new
setup_username_command.setup_username
properties[COMPANY_KEY] = ask('The company name which will be used in the headers:')
project_name = Pathname.new(Dir.getwd).basename.to_s
is_right_project_name = yes?("The name of your project is #{project_name}. Do you want to use it? (yes/no)")
properties[PROJECT_NAME_KEY] = is_right_project_name ? project_name : ask_non_empty_string('The project name:', 'Project name should not be empty')
properties[PROJECT_PREFIX_KEY] = ask('The project prefix (if any):')
xcodeproj_path = ask_file_with_path('*.xcodeproj',
'.xcodeproj file of the project')
properties[XCODEPROJ_PATH_KEY] = xcodeproj_path
project = Xcodeproj::Project.open(xcodeproj_path)
targets_prompt = ''
project.targets.each_with_index { |element, i| targets_prompt += ("#{i}. #{element.name}" + "\n") }
project_target = ask_index("Select the appropriate target for adding your MODULES (type the index):\n" + targets_prompt,project.targets)
include_tests = yes?('Are you using unit-tests in this project? (yes/no)')
test_target = nil
if include_tests
test_target = ask_index("Select the appropriate target for adding your TESTS (type the index):\n" + targets_prompt,project.targets)
end
should_add_all_modules_by_one_path = yes?('Do you want to add all your modules by one path? (yes/no)')
project_file_path = nil
project_group_path = nil
test_file_path = nil
test_group_path = nil
if should_add_all_modules_by_one_path || include_tests
should_use_same_paths = false
if should_add_all_modules_by_one_path
should_use_same_paths = yes?('Do you want to use the same paths for your files both in Xcode and the filesystem? (yes/no)')
end
if should_use_same_paths
if should_add_all_modules_by_one_path
project_group_path = ask('The default path for creating new modules:')
project_file_path = project_group_path
end
if include_tests
test_group_path = ask('The default path for creating tests:')
test_file_path = test_group_path
end
else
if should_add_all_modules_by_one_path
project_group_path = ask('The default path for creating new modules (in Xcode groups):')
project_file_path = ask('The default path for creating new modules (in the filesystem):')
end
if include_tests
test_group_path = ask('The default path for creating tests (in Xcode groups):')
test_file_path = ask('The default path for creating tests (in the filesystem):')
end
end
end
using_pods = yes?('Are you using Cocoapods? (yes/no)')
if using_pods
properties[PODFILE_PATH_KEY] = ask_file_with_path('Podfile', 'Podfile')
end
using_carthage = yes?('Are you using Carthage? (yes/no)')
if using_carthage
properties[CARTFILE_PATH_KEY] = ask_file_with_path('Cartfile', 'Cartfile')
end
should_add_templates = yes?('Do you want to add some well known templates to the Rambafile? (yes/no)')
if should_add_templates
properties[TEMPLATES_KEY] = [
'{name: rviper_controller}',
'{name: mvvm_controller}',
'{name: swifty_viper}'
]
end
properties[PROJECT_TARGET_KEY] = project_target.name if project_target
properties[PROJECT_FILE_PATH_KEY] = project_file_path if project_file_path
properties[PROJECT_GROUP_PATH_KEY] = project_group_path if project_group_path
properties[TEST_TARGET_KEY] = test_target.name if test_target
properties[TEST_FILE_PATH_KEY] = test_file_path if test_file_path
properties[TEST_GROUP_PATH_KEY] = test_group_path if test_group_path
PrintTable.print_values(
values: properties,
title: 'Summary for generamba setup'
)
Generamba::RambafileGenerator.create_rambafile(properties)
if should_add_templates
puts('Rambafile successfully created! Now run `generamba template install`.'.green)
else
puts('Rambafile successfully created!\n Go on and find some templates in our catalog using `generamba template list` command.\n Add any of them to the Rambafile and run `generamba template install`.'.green)
end
end
|
#version ⇒ Object
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/generamba/cli/version_command.rb', line 9
def version
options = {}
options['Version'] = Generamba::VERSION.green
options['Release date'] = Generamba::RELEASE_DATE.green
options['Change notes'] = Generamba::RELEASE_LINK.green
values = []
options.each do |title, value|
values.push("#{title}: #{value}")
end
output = values.join("\n")
puts(output)
end
|