generamba 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +39 -14
- data/lib/generamba/cli/gen_command.rb +3 -4
- data/lib/generamba/code_generation/code_module.rb +12 -7
- data/lib/generamba/helpers/gen_command_table_parameters_formatter.rb +5 -5
- data/lib/generamba/helpers/module_info_generator.rb +1 -0
- data/lib/generamba/helpers/module_validator.rb +63 -5
- data/lib/generamba/helpers/rambafile_validator.rb +0 -87
- data/lib/generamba/helpers/xcodeproj_helper.rb +4 -1
- data/lib/generamba/module_generator.rb +26 -28
- data/lib/generamba/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 26c38791a3b444b271d70177be32f673d9c40adb
|
|
4
|
+
data.tar.gz: c6c5052b488f919e873dd2522ae29839accaff39
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 906ce76cc09b5c08321f42d03d91bd391482818bdf4fa8b252857905d517bad494b89cced56278e3209a46884539c2bf5a0f086e50ffd31a8712880aa4440693
|
|
7
|
+
data.tar.gz: 0d62fadb4919f0d1420e704cdcde37e875c43d7be692e34dd9ee3fb3e9dffb85b3e239cf156610b39cba9396f27f04f4ec7ca28abea957da776b5c9ac9e392f5
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## [1.1.0](https://github.com/rambler-ios/Generamba/tree/1.1.0) (2016-09-05)
|
|
4
|
+
[Full Changelog](https://github.com/rambler-ios/Generamba/compare/1.0.0...1.1.0)
|
|
5
|
+
|
|
6
|
+
**Implemented enhancements:**
|
|
7
|
+
|
|
8
|
+
- Refactoring rambafile and module validation [\#144](https://github.com/rambler-ios/Generamba/issues/144)
|
|
9
|
+
- Update gen command parameters table [\#142](https://github.com/rambler-ios/Generamba/issues/142)
|
|
10
|
+
- If statement in .rambaspec [\#128](https://github.com/rambler-ios/Generamba/issues/128)
|
|
11
|
+
- Ask user, he want create all modules by one path? [\#126](https://github.com/rambler-ios/Generamba/issues/126)
|
|
12
|
+
|
|
13
|
+
**Fixed bugs:**
|
|
14
|
+
|
|
15
|
+
- Generates files with a wrongs paths. [\#138](https://github.com/rambler-ios/Generamba/issues/138)
|
|
16
|
+
- Install templates from git repo is broken? [\#135](https://github.com/rambler-ios/Generamba/issues/135)
|
|
17
|
+
- Error creating the Xcode group path to new modules [\#129](https://github.com/rambler-ios/Generamba/issues/129)
|
|
18
|
+
|
|
19
|
+
**Closed issues:**
|
|
20
|
+
|
|
21
|
+
- Error: `parse': \(Rambafile\): block sequence entries are not allowed [\#127](https://github.com/rambler-ios/Generamba/issues/127)
|
|
22
|
+
|
|
23
|
+
**Merged pull requests:**
|
|
24
|
+
|
|
25
|
+
- \[RESOLVED\] Added question in setup command \#126 [\#146](https://github.com/rambler-ios/Generamba/pull/146) ([Beniamiiin](https://github.com/Beniamiiin))
|
|
26
|
+
- \[RESOLVED\] Updated logic of rambafile and module validation \#144 [\#145](https://github.com/rambler-ios/Generamba/pull/145) ([Beniamiiin](https://github.com/Beniamiiin))
|
|
27
|
+
- \[RESOLVED\] Updated gen command parameters table \#142 [\#143](https://github.com/rambler-ios/Generamba/pull/143) ([Beniamiiin](https://github.com/Beniamiiin))
|
|
28
|
+
- \[RESOLVED\] Added ability use custom parameters in rambaspec \#128 [\#141](https://github.com/rambler-ios/Generamba/pull/141) ([Beniamiiin](https://github.com/Beniamiiin))
|
|
29
|
+
- \[FIXED\] Fixed bug \#138 [\#140](https://github.com/rambler-ios/Generamba/pull/140) ([Beniamiiin](https://github.com/Beniamiiin))
|
|
30
|
+
- Added product\_module\_name to code\_module [\#139](https://github.com/rambler-ios/Generamba/pull/139) ([mogol](https://github.com/mogol))
|
|
31
|
+
- A little refactoring [\#137](https://github.com/rambler-ios/Generamba/pull/137) ([Beniamiiin](https://github.com/Beniamiiin))
|
|
32
|
+
- Support Ruby 2.3.1 [\#134](https://github.com/rambler-ios/Generamba/pull/134) ([ivaravko](https://github.com/ivaravko))
|
|
33
|
+
- Helpers code style [\#133](https://github.com/rambler-ios/Generamba/pull/133) ([ivaravko](https://github.com/ivaravko))
|
|
34
|
+
- Adds Code Climate config [\#132](https://github.com/rambler-ios/Generamba/pull/132) ([ivaravko](https://github.com/ivaravko))
|
|
35
|
+
|
|
3
36
|
## [1.0.0](https://github.com/rambler-ios/Generamba/tree/1.0.0) (2016-07-23)
|
|
4
37
|
[Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.7.8...1.0.0)
|
|
5
38
|
|
|
@@ -10,17 +43,14 @@
|
|
|
10
43
|
- Gem dependency of cocoapods-core-0.39.0 [\#114](https://github.com/rambler-ios/Generamba/issues/114)
|
|
11
44
|
- Remove adding module name in module\_group\_path if it set from cli [\#98](https://github.com/rambler-ios/Generamba/issues/98)
|
|
12
45
|
- Check for missing Carthage dependencies [\#83](https://github.com/rambler-ios/Generamba/issues/83)
|
|
13
|
-
-
|
|
46
|
+
- Automatic tests generation based on protocols and class interfaces [\#71](https://github.com/rambler-ios/Generamba/issues/71)
|
|
47
|
+
- Track all modules created by Generamba [\#70](https://github.com/rambler-ios/Generamba/issues/70)
|
|
14
48
|
|
|
15
49
|
**Fixed bugs:**
|
|
16
50
|
|
|
17
51
|
- Can't add file with type . Only 'source' and 'resource' are acceptable [\#116](https://github.com/rambler-ios/Generamba/issues/116)
|
|
18
52
|
- If option --module-group-path starts with '/' Generamba add folder with empty name in root folder [\#99](https://github.com/rambler-ios/Generamba/issues/99)
|
|
19
53
|
|
|
20
|
-
**Closed issues:**
|
|
21
|
-
|
|
22
|
-
- Generamba as file converter [\#41](https://github.com/rambler-ios/Generamba/issues/41)
|
|
23
|
-
|
|
24
54
|
## [0.7.8](https://github.com/rambler-ios/Generamba/tree/0.7.8) (2016-05-16)
|
|
25
55
|
[Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.7.7...0.7.8)
|
|
26
56
|
|
|
@@ -66,6 +96,7 @@
|
|
|
66
96
|
|
|
67
97
|
**Implemented enhancements:**
|
|
68
98
|
|
|
99
|
+
- Asks the user if he needed tests in `generamba setup` command [\#85](https://github.com/rambler-ios/Generamba/issues/85)
|
|
69
100
|
- Improve the visualization of commands with parameters [\#69](https://github.com/rambler-ios/Generamba/issues/69)
|
|
70
101
|
- Can we introduce something similar to view partials in rails \(for duplicated parts of views\) [\#62](https://github.com/rambler-ios/Generamba/issues/62)
|
|
71
102
|
|
|
@@ -88,6 +119,7 @@
|
|
|
88
119
|
**Closed issues:**
|
|
89
120
|
|
|
90
121
|
- Can we use constants from rambafile in templates? [\#81](https://github.com/rambler-ios/Generamba/issues/81)
|
|
122
|
+
- Arguments for `generamba gen Name modulename` [\#80](https://github.com/rambler-ios/Generamba/issues/80)
|
|
91
123
|
|
|
92
124
|
## [0.7.2](https://github.com/rambler-ios/Generamba/tree/0.7.2) (2016-01-10)
|
|
93
125
|
[Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.7.1...0.7.2)
|
|
@@ -100,6 +132,7 @@
|
|
|
100
132
|
**Fixed bugs:**
|
|
101
133
|
|
|
102
134
|
- Don't set target in swift projects [\#65](https://github.com/rambler-ios/Generamba/issues/65)
|
|
135
|
+
- Errors if default path is empty [\#64](https://github.com/rambler-ios/Generamba/issues/64)
|
|
103
136
|
- Default template set can not be used [\#60](https://github.com/rambler-ios/Generamba/issues/60)
|
|
104
137
|
- Incorrect behavior when generate module which already exists [\#52](https://github.com/rambler-ios/Generamba/issues/52)
|
|
105
138
|
|
|
@@ -114,7 +147,7 @@
|
|
|
114
147
|
|
|
115
148
|
**Implemented enhancements:**
|
|
116
149
|
|
|
117
|
-
-
|
|
150
|
+
- Podfile path setup during generamba setup needs clarification [\#50](https://github.com/rambler-ios/Generamba/issues/50)
|
|
118
151
|
|
|
119
152
|
**Fixed bugs:**
|
|
120
153
|
|
|
@@ -127,17 +160,9 @@
|
|
|
127
160
|
## [0.7.0](https://github.com/rambler-ios/Generamba/tree/0.7.0) (2015-12-13)
|
|
128
161
|
[Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.6.2...0.7.0)
|
|
129
162
|
|
|
130
|
-
**Fixed bugs:**
|
|
131
|
-
|
|
132
|
-
- undefined method `each' for nil:NilClass \(NoMethodError\) [\#37](https://github.com/rambler-ios/Generamba/issues/37)
|
|
133
|
-
|
|
134
163
|
## [0.6.2](https://github.com/rambler-ios/Generamba/tree/0.6.2) (2015-11-25)
|
|
135
164
|
[Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.6.1...0.6.2)
|
|
136
165
|
|
|
137
|
-
**Fixed bugs:**
|
|
138
|
-
|
|
139
|
-
- Can't install template from git repo [\#36](https://github.com/rambler-ios/Generamba/issues/36)
|
|
140
|
-
|
|
141
166
|
## [0.6.1](https://github.com/rambler-ios/Generamba/tree/0.6.1) (2015-11-21)
|
|
142
167
|
[Full Changelog](https://github.com/rambler-ios/Generamba/compare/0.6.0...0.6.1)
|
|
143
168
|
|
|
@@ -16,8 +16,8 @@ module Generamba::CLI
|
|
|
16
16
|
method_option :description, :aliases => '-d', :desc => 'Provides a full description to the module'
|
|
17
17
|
method_option :author, :desc => 'Specifies the author name for generated module'
|
|
18
18
|
method_option :project_targets, :desc => 'Specifies project targets for adding new module files'
|
|
19
|
-
method_option :
|
|
20
|
-
method_option :
|
|
19
|
+
method_option :project_file_path, :desc => 'Specifies a location in the filesystem for new files'
|
|
20
|
+
method_option :project_group_path, :desc => 'Specifies a location in Xcode groups for new files'
|
|
21
21
|
method_option :module_path, :desc => 'Specifies a location (both in the filesystem and Xcode) for new files'
|
|
22
22
|
method_option :test_targets, :desc => 'Specifies project targets for adding new test files'
|
|
23
23
|
method_option :test_file_path, :desc => 'Specifies a location in the filesystem for new test files'
|
|
@@ -25,7 +25,6 @@ module Generamba::CLI
|
|
|
25
25
|
method_option :test_path, :desc => 'Specifies a location (both in the filesystem and Xcode) for new test files'
|
|
26
26
|
method_option :custom_parameters, :type => :hash, :default => {}, :desc => 'Specifies extra parameters in format `key1:value1 key2:value2` for usage during code generation'
|
|
27
27
|
def gen(module_name, template_name)
|
|
28
|
-
|
|
29
28
|
does_rambafile_exist = Dir[RAMBAFILE_NAME].count > 0
|
|
30
29
|
|
|
31
30
|
unless does_rambafile_exist
|
|
@@ -58,7 +57,7 @@ module Generamba::CLI
|
|
|
58
57
|
DependencyChecker.check_all_required_dependencies_has_in_cartfile(template.dependencies, code_module.cartfile_path)
|
|
59
58
|
|
|
60
59
|
project = XcodeprojHelper.obtain_project(code_module.xcodeproj_path)
|
|
61
|
-
module_group_already_exists = XcodeprojHelper.module_with_group_path_already_exists(project, code_module.
|
|
60
|
+
module_group_already_exists = XcodeprojHelper.module_with_group_path_already_exists(project, code_module.project_group_path)
|
|
62
61
|
|
|
63
62
|
if module_group_already_exists
|
|
64
63
|
replace_exists_module = yes?("#{module_name} module already exists. Replace? (yes/no)")
|
|
@@ -3,7 +3,7 @@ module Generamba
|
|
|
3
3
|
SLASH_REGEX = /^\/|\/$/
|
|
4
4
|
C99IDENTIFIER = /[^\w]/
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
PATH_TYPE_PROJECT = 'project'
|
|
7
7
|
PATH_TYPE_TEST = 'test'
|
|
8
8
|
|
|
9
9
|
# Represents currently generating code module
|
|
@@ -17,8 +17,8 @@ module Generamba
|
|
|
17
17
|
:project_name,
|
|
18
18
|
:product_module_name,
|
|
19
19
|
:xcodeproj_path,
|
|
20
|
-
:
|
|
21
|
-
:
|
|
20
|
+
:project_file_path,
|
|
21
|
+
:project_group_path,
|
|
22
22
|
:test_file_path,
|
|
23
23
|
:test_group_path,
|
|
24
24
|
:project_targets,
|
|
@@ -37,10 +37,13 @@ module Generamba
|
|
|
37
37
|
|
|
38
38
|
@prefix = rambafile[PROJECT_PREFIX_KEY]
|
|
39
39
|
@project_name = rambafile[PROJECT_NAME_KEY]
|
|
40
|
-
|
|
40
|
+
|
|
41
|
+
@product_module_name = rambafile[PRODUCT_MODULE_NAME_KEY]
|
|
42
|
+
@product_module_name = @project_name.gsub(C99IDENTIFIER, '_') if !@product_module_name && @project_name
|
|
43
|
+
|
|
41
44
|
@xcodeproj_path = rambafile[XCODEPROJ_PATH_KEY]
|
|
42
45
|
|
|
43
|
-
setup_file_and_group_paths(rambafile[PROJECT_FILE_PATH_KEY], rambafile[PROJECT_GROUP_PATH_KEY],
|
|
46
|
+
setup_file_and_group_paths(rambafile[PROJECT_FILE_PATH_KEY], rambafile[PROJECT_GROUP_PATH_KEY], PATH_TYPE_PROJECT)
|
|
44
47
|
setup_file_and_group_paths(rambafile[TEST_FILE_PATH_KEY], rambafile[TEST_GROUP_PATH_KEY], PATH_TYPE_TEST)
|
|
45
48
|
|
|
46
49
|
@project_targets = [rambafile[PROJECT_TARGET_KEY]] if rambafile[PROJECT_TARGET_KEY]
|
|
@@ -57,17 +60,19 @@ module Generamba
|
|
|
57
60
|
@project_targets = options[:project_targets].split(',') if options[:project_targets]
|
|
58
61
|
@test_targets = options[:test_targets].split(',') if options[:test_targets]
|
|
59
62
|
|
|
60
|
-
setup_file_and_group_paths(options[:
|
|
63
|
+
setup_file_and_group_paths(options[:project_file_path], options[:project_group_path], PATH_TYPE_PROJECT)
|
|
61
64
|
setup_file_and_group_paths(options[:test_file_path], options[:test_group_path], PATH_TYPE_TEST)
|
|
62
65
|
|
|
63
66
|
# The priority is given to `module_path` and 'test_path' options
|
|
64
|
-
setup_file_and_group_paths(options[:module_path], options[:module_path],
|
|
67
|
+
setup_file_and_group_paths(options[:module_path], options[:module_path], PATH_TYPE_PROJECT)
|
|
65
68
|
setup_file_and_group_paths(options[:test_path], options[:test_path], PATH_TYPE_TEST)
|
|
66
69
|
|
|
67
70
|
@podfile_path = rambafile[PODFILE_PATH_KEY] if rambafile[PODFILE_PATH_KEY]
|
|
68
71
|
@cartfile_path = rambafile[CARTFILE_PATH_KEY] if rambafile[CARTFILE_PATH_KEY]
|
|
69
72
|
end
|
|
70
73
|
|
|
74
|
+
private
|
|
75
|
+
|
|
71
76
|
def setup_file_and_group_paths(file_path, group_path, path_type)
|
|
72
77
|
if file_path || group_path
|
|
73
78
|
variable_name = "#{path_type}_file_path"
|
|
@@ -7,11 +7,11 @@ module Generamba
|
|
|
7
7
|
def self.prepare_parameters_for_displaying(code_module, template_name)
|
|
8
8
|
params = {}
|
|
9
9
|
|
|
10
|
-
params['Targets'] = code_module.project_targets.join(',')
|
|
11
|
-
params['Module path'] = code_module.
|
|
10
|
+
params['Targets'] = code_module.project_targets.join(',') if code_module.project_targets
|
|
11
|
+
params['Module path'] = code_module.project_file_path if code_module.project_file_path
|
|
12
12
|
|
|
13
|
-
if code_module.
|
|
14
|
-
params['Module group path'] = code_module.
|
|
13
|
+
if code_module.project_file_path != code_module.project_group_path
|
|
14
|
+
params['Module group path'] = code_module.project_group_path
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
params['Test targets'] = code_module.test_targets.join(',') if code_module.test_targets
|
|
@@ -23,7 +23,7 @@ module Generamba
|
|
|
23
23
|
|
|
24
24
|
params['Template'] = template_name
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
unless code_module.custom_parameters.empty?
|
|
27
27
|
params['Custom parameters'] = code_module.custom_parameters.to_json
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -8,6 +8,7 @@ module Generamba
|
|
|
8
8
|
'name' => code_module.name,
|
|
9
9
|
'description' => code_module.description,
|
|
10
10
|
'project_name' => code_module.project_name,
|
|
11
|
+
'product_module_name' => code_module.product_module_name,
|
|
11
12
|
'project_targets' => code_module.project_targets,
|
|
12
13
|
'test_targets' => code_module.test_targets
|
|
13
14
|
}
|
|
@@ -2,18 +2,17 @@ module Generamba
|
|
|
2
2
|
# Provides methods for validating module
|
|
3
3
|
class ModuleValidator
|
|
4
4
|
|
|
5
|
+
TARGET_TYPE_PROJECT = 'project'
|
|
6
|
+
TARGET_TYPE_TEST = 'test'
|
|
7
|
+
|
|
5
8
|
# Method validates module
|
|
6
9
|
# @param code_module [CodeModule] The instance of CodeModule
|
|
7
10
|
#
|
|
8
11
|
# @return [Void]
|
|
9
12
|
def validate(code_module)
|
|
10
13
|
mandatory_fields = [COMPANY_KEY,
|
|
11
|
-
PROJECT_PREFIX_KEY,
|
|
12
14
|
PROJECT_NAME_KEY,
|
|
13
|
-
XCODEPROJ_PATH_KEY
|
|
14
|
-
PROJECT_TARGETS_KEY,
|
|
15
|
-
'module_file_path',
|
|
16
|
-
'module_group_path']
|
|
15
|
+
XCODEPROJ_PATH_KEY]
|
|
17
16
|
|
|
18
17
|
mandatory_fields.each do |field|
|
|
19
18
|
unless code_module.instance_variable_get("@#{field}")
|
|
@@ -21,6 +20,65 @@ module Generamba
|
|
|
21
20
|
exit
|
|
22
21
|
end
|
|
23
22
|
end
|
|
23
|
+
|
|
24
|
+
project_failure_fields = all_project_failure_fields(code_module)
|
|
25
|
+
test_failure_fields = all_test_failure_fields(code_module)
|
|
26
|
+
failure_fields = project_failure_fields + test_failure_fields
|
|
27
|
+
|
|
28
|
+
if failure_fields.count > 0
|
|
29
|
+
puts "Module is broken! *#{failure_fields}* field cannot be empty, because it is mandatory.".red
|
|
30
|
+
exit
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
# Method which return all project failure fields
|
|
37
|
+
# @param code_module [CodeModule] The instance of CodeModule
|
|
38
|
+
#
|
|
39
|
+
# @return [Array]
|
|
40
|
+
def all_project_failure_fields(code_module)
|
|
41
|
+
return [] if !code_module.project_targets && !code_module.project_file_path && !code_module.project_group_path
|
|
42
|
+
|
|
43
|
+
all_nil_mandatory_fields_for_target_type(TARGET_TYPE_PROJECT, code_module)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Method which return all test failure fields
|
|
47
|
+
# @param code_module [CodeModule] The instance of CodeModule
|
|
48
|
+
#
|
|
49
|
+
# @return [Array]
|
|
50
|
+
def all_test_failure_fields(code_module)
|
|
51
|
+
return [] if !code_module.test_targets && !code_module.test_file_path && !code_module.test_group_path
|
|
52
|
+
|
|
53
|
+
all_nil_mandatory_fields_for_target_type(TARGET_TYPE_TEST, code_module)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Method which return all failure fields for target_type
|
|
57
|
+
# @param target_type [String] "project" or "test"
|
|
58
|
+
# @param code_module [CodeModule] The instance of CodeModule
|
|
59
|
+
#
|
|
60
|
+
# @return [Array]
|
|
61
|
+
def all_nil_mandatory_fields_for_target_type(target_type, code_module)
|
|
62
|
+
fields = []
|
|
63
|
+
|
|
64
|
+
variable_name = "#{target_type}_targets"
|
|
65
|
+
|
|
66
|
+
unless code_module.instance_variable_get("@#{variable_name}")
|
|
67
|
+
target_const_value = Generamba.const_get(target_type.upcase + '_TARGET_KEY')
|
|
68
|
+
targets_const_value = Generamba.const_get(target_type.upcase + '_TARGETS_KEY')
|
|
69
|
+
fields.push(target_const_value)
|
|
70
|
+
fields.push(targets_const_value)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
variable_name = "#{target_type}_file_path"
|
|
74
|
+
file_path_const_value = Generamba.const_get(target_type.upcase + '_FILE_PATH_KEY')
|
|
75
|
+
fields.push(file_path_const_value) unless code_module.instance_variable_get("@#{variable_name}")
|
|
76
|
+
|
|
77
|
+
variable_name = "#{target_type}_group_path"
|
|
78
|
+
group_path_const_value = Generamba.const_get(target_type.upcase + '_GROUP_PATH_KEY')
|
|
79
|
+
fields.push(group_path_const_value) unless code_module.instance_variable_get("@#{variable_name}")
|
|
80
|
+
|
|
81
|
+
fields
|
|
24
82
|
end
|
|
25
83
|
|
|
26
84
|
end
|
|
@@ -9,97 +9,10 @@ module Generamba
|
|
|
9
9
|
file_contents = open(path).read
|
|
10
10
|
preferences = file_contents.empty? ? {} : YAML.load(file_contents).to_hash
|
|
11
11
|
|
|
12
|
-
mandatory_fields = [COMPANY_KEY,
|
|
13
|
-
PROJECT_NAME_KEY,
|
|
14
|
-
XCODEPROJ_PATH_KEY]
|
|
15
|
-
|
|
16
|
-
mandatory_fields.each do |field|
|
|
17
|
-
unless preferences[field]
|
|
18
|
-
puts "Rambafile is broken! *#{field}* field cannot be empty, because it is mandatory. Either add it manually, or run *generamba setup*.".red
|
|
19
|
-
exit
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
project_failure_fields = all_project_failure_fields(preferences)
|
|
24
|
-
test_failure_fields = all_test_failure_fields(preferences)
|
|
25
|
-
failure_fields = project_failure_fields + test_failure_fields
|
|
26
|
-
|
|
27
|
-
if failure_fields.count > 0
|
|
28
|
-
puts "Rambafile is broken! Cannot find any of #{failure_fields} fields, one of them is mandatory. Either add it manually, or run *generamba setup*.".red
|
|
29
|
-
exit
|
|
30
|
-
end
|
|
31
|
-
|
|
32
12
|
unless preferences[TEMPLATES_KEY]
|
|
33
13
|
puts "You can't run *generamba gen* without any templates installed. Add their declarations to a Rambafile and run *generamba template install*.".red
|
|
34
14
|
exit
|
|
35
15
|
end
|
|
36
16
|
end
|
|
37
|
-
|
|
38
|
-
private
|
|
39
|
-
|
|
40
|
-
# Method which return all project failure fields
|
|
41
|
-
# @param preferences [Hash] Converted Rambafile
|
|
42
|
-
#
|
|
43
|
-
# @return [Array]
|
|
44
|
-
def all_project_failure_fields(preferences)
|
|
45
|
-
file_path = preferences[PROJECT_FILE_PATH_KEY]
|
|
46
|
-
group_path = preferences[PROJECT_GROUP_PATH_KEY]
|
|
47
|
-
|
|
48
|
-
return [] if !file_path || !group_path
|
|
49
|
-
|
|
50
|
-
all_nil_mandatory_fields_for_target_type('project', preferences)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Method which return all test failure fields
|
|
54
|
-
# @param preferences [Hash] Converted Rambafile
|
|
55
|
-
#
|
|
56
|
-
# @return [Array]
|
|
57
|
-
def all_test_failure_fields(preferences)
|
|
58
|
-
target = preferences[TEST_TARGET_KEY]
|
|
59
|
-
targets = preferences[TEST_TARGETS_KEY]
|
|
60
|
-
file_path = preferences[TEST_FILE_PATH_KEY]
|
|
61
|
-
group_path = preferences[TEST_GROUP_PATH_KEY]
|
|
62
|
-
|
|
63
|
-
has_test_fields = target || targets || file_path || group_path
|
|
64
|
-
|
|
65
|
-
return [] unless has_test_fields
|
|
66
|
-
|
|
67
|
-
all_nil_mandatory_fields_for_target_type('test', preferences)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# Method which return all failure fields for target_type
|
|
71
|
-
# @param target_type [String] "project" or "test"
|
|
72
|
-
# @param preferences [Hash] Converted Rambafile
|
|
73
|
-
#
|
|
74
|
-
# @return [Array]
|
|
75
|
-
def all_nil_mandatory_fields_for_target_type(target_type, preferences)
|
|
76
|
-
target_type = target_type.upcase
|
|
77
|
-
|
|
78
|
-
target_const_value = Generamba.const_get(target_type + '_TARGET_KEY')
|
|
79
|
-
targets_const_value = Generamba.const_get(target_type + '_TARGETS_KEY')
|
|
80
|
-
|
|
81
|
-
target = preferences[target_const_value]
|
|
82
|
-
targets = preferences[targets_const_value]
|
|
83
|
-
|
|
84
|
-
fields = []
|
|
85
|
-
|
|
86
|
-
if !target && (!targets || (targets && targets.count == 0))
|
|
87
|
-
fields.push(target_const_value)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
file_path_const_value = Generamba.const_get(target_type + '_FILE_PATH_KEY')
|
|
91
|
-
|
|
92
|
-
unless preferences[file_path_const_value]
|
|
93
|
-
fields.push(file_path_const_value)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
group_path_const_value = Generamba.const_get(target_type + '_GROUP_PATH_KEY')
|
|
97
|
-
|
|
98
|
-
unless preferences[group_path_const_value]
|
|
99
|
-
fields.push(group_path_const_value)
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
fields
|
|
103
|
-
end
|
|
104
17
|
end
|
|
105
18
|
end
|
|
@@ -20,7 +20,10 @@ module Generamba
|
|
|
20
20
|
#
|
|
21
21
|
# @return [void]
|
|
22
22
|
def self.add_file_to_project_and_targets(project, targets_name, group_path, dir_path, file_group_path, file_name, file_is_resource = false)
|
|
23
|
-
file_path = dir_path
|
|
23
|
+
file_path = dir_path
|
|
24
|
+
file_path = file_path.join(file_group_path) if file_group_path
|
|
25
|
+
file_path = file_path.join(file_name) if file_name
|
|
26
|
+
|
|
24
27
|
module_group = self.retrieve_group_or_create_if_needed(group_path, dir_path, file_group_path, project, true)
|
|
25
28
|
xcode_file = module_group.new_file(File.absolute_path(file_path))
|
|
26
29
|
|
|
@@ -13,36 +13,31 @@ module Generamba
|
|
|
13
13
|
project = XcodeprojHelper.obtain_project(code_module.xcodeproj_path)
|
|
14
14
|
|
|
15
15
|
# Configuring file paths
|
|
16
|
-
FileUtils.mkdir_p code_module.
|
|
17
|
-
|
|
18
|
-
if code_module.test_file_path != nil
|
|
19
|
-
FileUtils.mkdir_p code_module.test_file_path
|
|
20
|
-
end
|
|
16
|
+
FileUtils.mkdir_p code_module.project_file_path if code_module.project_file_path
|
|
17
|
+
FileUtils.mkdir_p code_module.test_file_path if code_module.test_file_path
|
|
21
18
|
|
|
22
19
|
# Creating code files
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
20
|
+
if code_module.project_targets && code_module.project_group_path && code_module.project_file_path
|
|
21
|
+
puts('Creating code files...')
|
|
22
|
+
process_files_if_needed(template.code_files,
|
|
23
|
+
code_module,
|
|
24
|
+
template,
|
|
25
|
+
project,
|
|
26
|
+
code_module.project_targets,
|
|
27
|
+
code_module.project_group_path,
|
|
28
|
+
code_module.project_file_path)
|
|
29
|
+
end
|
|
32
30
|
|
|
33
31
|
# Creating test files
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if included_tests
|
|
32
|
+
if code_module.test_targets && code_module.test_group_path && code_module.test_file_path
|
|
37
33
|
puts('Creating test files...')
|
|
38
34
|
process_files_if_needed(template.test_files,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
code_module.test_file_path)
|
|
35
|
+
code_module,
|
|
36
|
+
template,
|
|
37
|
+
project,
|
|
38
|
+
code_module.test_targets,
|
|
39
|
+
code_module.test_group_path,
|
|
40
|
+
code_module.test_file_path)
|
|
46
41
|
end
|
|
47
42
|
|
|
48
43
|
# Saving the current changes in the Xcode project
|
|
@@ -50,13 +45,13 @@ module Generamba
|
|
|
50
45
|
|
|
51
46
|
puts 'Module successfully created!'
|
|
52
47
|
puts "Name: #{name}".green
|
|
53
|
-
puts "
|
|
54
|
-
puts "
|
|
48
|
+
puts "Project file path: #{code_module.project_file_path}".green if code_module.project_file_path
|
|
49
|
+
puts "Project group path: #{code_module.project_group_path}".green if code_module.project_group_path
|
|
55
50
|
puts "Test file path: #{code_module.test_file_path}".green if code_module.test_file_path
|
|
56
51
|
puts "Test group path: #{code_module.test_group_path}".green if code_module.test_group_path
|
|
57
52
|
end
|
|
58
53
|
|
|
59
|
-
def process_files_if_needed(files,
|
|
54
|
+
def process_files_if_needed(files, code_module, template, project, targets, group_path, dir_path)
|
|
60
55
|
# It's possible that current project doesn't test targets configured, so it doesn't need to generate tests.
|
|
61
56
|
# The same is for files property - a template can have only test or project files
|
|
62
57
|
if targets.count == 0 || files == nil || files.count == 0 || dir_path == nil || group_path == nil
|
|
@@ -76,12 +71,15 @@ module Generamba
|
|
|
76
71
|
end
|
|
77
72
|
|
|
78
73
|
file_group = File.dirname(file[TEMPLATE_NAME_KEY])
|
|
74
|
+
file_group = nil if file_group == '.'
|
|
79
75
|
|
|
80
76
|
module_info = ModuleInfoGenerator.new(code_module)
|
|
81
77
|
|
|
82
78
|
# Generating the content of the code file and it's name
|
|
83
79
|
file_name, file_content = ContentGenerator.create_file(file, module_info.scope, template)
|
|
84
|
-
file_path = dir_path
|
|
80
|
+
file_path = dir_path
|
|
81
|
+
file_path = file_path.join(file_group) if file_group
|
|
82
|
+
file_path = file_path.join(file_name) if file_name
|
|
85
83
|
|
|
86
84
|
# Creating the file in the filesystem
|
|
87
85
|
FileUtils.mkdir_p File.dirname(file_path)
|
data/lib/generamba/version.rb
CHANGED