generamba 0.6.2 → 0.7.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/lib/generamba.rb +1 -0
- data/lib/generamba/cli/gen_command.rb +14 -4
- data/lib/generamba/cli/setup_command.rb +1 -1
- data/lib/generamba/cli/setup_username_command.rb +1 -1
- data/lib/generamba/cli/template/template_create_command.rb +1 -1
- data/lib/generamba/cli/template/template_group.rb +2 -0
- data/lib/generamba/cli/template/template_install_command.rb +7 -0
- data/lib/generamba/cli/template/template_list_command.rb +21 -0
- data/lib/generamba/cli/template/template_search_command.rb +27 -0
- data/lib/generamba/cli/thor_extension.rb +1 -1
- data/lib/generamba/code_generation/Rambafile.liquid +11 -11
- data/lib/generamba/code_generation/code_module.rb +95 -2
- data/lib/generamba/configuration/project_configuration.rb +1 -0
- data/lib/generamba/constants/rambafile_constants.rb +2 -0
- data/lib/generamba/helpers/rambafile_validator.rb +18 -8
- data/lib/generamba/helpers/template_helper.rb +1 -1
- data/lib/generamba/helpers/xcodeproj_helper.rb +22 -16
- data/lib/generamba/module_generator.rb +36 -41
- data/lib/generamba/template/helpers/catalog_downloader.rb +27 -0
- data/lib/generamba/template/installer/catalog_installer.rb +2 -2
- data/lib/generamba/template/installer/local_installer.rb +2 -2
- data/lib/generamba/template/installer/remote_installer.rb +2 -2
- data/lib/generamba/template/processor/template_processor.rb +4 -8
- data/lib/generamba/tools/string-colorize.rb +23 -0
- data/lib/generamba/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86031870069f4fd70b4aab732b9cd8b3b148bd73
|
4
|
+
data.tar.gz: 5cfaf9db6ee20956d3ca39a3540ed60ca1680437
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e11bd68fe9b713a03773084ff0aaf91584fb6fae2ec01eba3136b8ff8dda3d9b1d8c348f7d11ba4a4988570c9009c6be8a0247c6d8c299321aeb7d1926de349
|
7
|
+
data.tar.gz: 6488c2d30051969a72b09eca9da7c99f9382b13dee0c642d5cbb70be0791863f021719e51559e3ffb1a3edda8db4c26303aed04c8588e02bbff78d5143874100
|
data/lib/generamba.rb
CHANGED
@@ -6,14 +6,22 @@ module Generamba::CLI
|
|
6
6
|
|
7
7
|
include Generamba
|
8
8
|
|
9
|
-
desc 'gen [MODULE_NAME] [
|
9
|
+
desc 'gen [MODULE_NAME] [TEMPLATE_NAME]', 'Creates a new VIPER module with a given name from a specific template'
|
10
10
|
method_option :description, :aliases => '-d', :desc => 'Provides a full description to the module'
|
11
|
+
method_option :module_targets, :desc => 'Specifies project targets for adding new module files'
|
12
|
+
method_option :module_file_path, :desc => 'Specifies a location in the filesystem for new files'
|
13
|
+
method_option :module_group_path, :desc => 'Specifies a location in Xcode groups for new files'
|
14
|
+
method_option :module_path, :desc => 'Specifies a location (both in the filesystem and Xcode) for new files'
|
15
|
+
method_option :test_targets, :desc => 'Specifies project targets for adding new test files'
|
16
|
+
method_option :test_file_path, :desc => 'Specifies a location in the filesystem for new test files'
|
17
|
+
method_option :test_group_path, :desc => 'Specifies a location in Xcode groups for new test files'
|
18
|
+
method_option :test_path, :desc => 'Specifies a location (both in the filesystem and Xcode) for new test files'
|
11
19
|
def gen(module_name, template_name)
|
12
20
|
|
13
21
|
does_rambafile_exist = Dir[RAMBAFILE_NAME].count > 0
|
14
22
|
|
15
23
|
if (does_rambafile_exist == false)
|
16
|
-
puts('Rambafile not found! Run `generamba setup` in the working directory instead!')
|
24
|
+
puts('Rambafile not found! Run `generamba setup` in the working directory instead!'.red)
|
17
25
|
return
|
18
26
|
end
|
19
27
|
|
@@ -26,9 +34,11 @@ module Generamba::CLI
|
|
26
34
|
default_module_description = "#{module_name} module"
|
27
35
|
module_description = options[:description] ? options[:description] : default_module_description
|
28
36
|
|
29
|
-
|
30
|
-
|
37
|
+
template = ModuleTemplate.new(template_name)
|
38
|
+
code_module = CodeModule.new(module_name, module_description, options)
|
31
39
|
|
40
|
+
generator = Generamba::ModuleGenerator.new()
|
41
|
+
generator.generate_module(module_name, code_module, template)
|
32
42
|
end
|
33
43
|
|
34
44
|
end
|
@@ -67,7 +67,7 @@ module Generamba::CLI
|
|
67
67
|
properties[TEST_GROUP_PATH_KEY] = test_group_path
|
68
68
|
|
69
69
|
Generamba::RambafileGenerator.create_rambafile(properties)
|
70
|
-
|
70
|
+
puts('Rambafile successfully created! Now add some templates to the Rambafile and run `generamba template install`.'.green)
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
@@ -5,7 +5,7 @@ module Generamba::CLI
|
|
5
5
|
def setup_username
|
6
6
|
username = Generamba::UserPreferences.obtain_username
|
7
7
|
if username == nil
|
8
|
-
puts('The author name is not configured!')
|
8
|
+
puts('The author name is not configured!'.red)
|
9
9
|
git_username = Git.init.config['user.name']
|
10
10
|
if git_username != nil && yes?("Your name in git is configured as #{git_username}. Do you want to use it in code headers? (yes/no)")
|
11
11
|
username = git_username
|
@@ -23,7 +23,7 @@ module Generamba::CLI
|
|
23
23
|
|
24
24
|
template_creator = Generamba::TemplateCreator.new
|
25
25
|
template_creator.create_template(properties)
|
26
|
-
|
26
|
+
puts("The template #{template_name} is successfully generated! Now add some file templates into it.".green)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'generamba/cli/template/template_install_command.rb'
|
2
2
|
require 'generamba/cli/template/template_create_command.rb'
|
3
|
+
require 'generamba/cli/template/template_list_command.rb'
|
4
|
+
require 'generamba/cli/template/template_search_command.rb'
|
3
5
|
|
4
6
|
module Generamba::CLI
|
5
7
|
class Application < Thor
|
@@ -3,6 +3,13 @@ module Generamba::CLI
|
|
3
3
|
|
4
4
|
desc 'install', 'Installs all the templates specified in the Rambafile from the current directory'
|
5
5
|
def install
|
6
|
+
does_rambafile_exist = Dir[RAMBAFILE_NAME].count > 0
|
7
|
+
|
8
|
+
if (does_rambafile_exist == false)
|
9
|
+
puts('Rambafile not found! Run `generamba setup` in the working directory instead!'.red)
|
10
|
+
return
|
11
|
+
end
|
12
|
+
|
6
13
|
template_processor = Generamba::TemplateProcessor.new
|
7
14
|
template_processor.install_templates
|
8
15
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'generamba/template/helpers/catalog_downloader.rb'
|
2
|
+
|
3
|
+
module Generamba::CLI
|
4
|
+
class Template < Thor
|
5
|
+
include Generamba
|
6
|
+
|
7
|
+
desc 'list', 'Prints out the list of all templates available in the shared GitHub catalog'
|
8
|
+
def list
|
9
|
+
downloader = CatalogDownloader.new
|
10
|
+
generamba_catalog_path = downloader.download_catalog(GENERAMBA_CATALOG_NAME, RAMBLER_CATALOG_REPO)
|
11
|
+
|
12
|
+
generamba_catalog_path.children.select { |child|
|
13
|
+
child.directory? && child.split.last.to_s[0] != '.'
|
14
|
+
}.map { |template_path|
|
15
|
+
template_path.split.last.to_s
|
16
|
+
}.each { |template_name|
|
17
|
+
puts(template_name)
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'generamba/template/helpers/catalog_downloader.rb'
|
2
|
+
|
3
|
+
module Generamba::CLI
|
4
|
+
class Template < Thor
|
5
|
+
include Generamba
|
6
|
+
|
7
|
+
desc 'search [SEARCH_STRING]', 'Searches a template with a given name in the shared GitHub catalog'
|
8
|
+
def search(term)
|
9
|
+
downloader = CatalogDownloader.new
|
10
|
+
generamba_catalog_path = downloader.download_catalog(GENERAMBA_CATALOG_NAME, RAMBLER_CATALOG_REPO)
|
11
|
+
|
12
|
+
generamba_catalog_path.children.select { |child|
|
13
|
+
child.directory? && child.split.last.to_s[0] != '.'
|
14
|
+
}.map { |template_path|
|
15
|
+
template_path.split.last.to_s
|
16
|
+
}.select { |template_name|
|
17
|
+
template_name.include?(term)
|
18
|
+
}.map { |template_name|
|
19
|
+
keywords = term.squeeze.strip.split(' ').compact.uniq
|
20
|
+
matcher = Regexp.new('(' + keywords.join('|') + ')')
|
21
|
+
template_name.gsub(matcher) { |match| "#{match}".yellow }
|
22
|
+
}.each { |template_name|
|
23
|
+
puts(template_name)
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -3,8 +3,8 @@ company: {{ company }}
|
|
3
3
|
|
4
4
|
### Xcode project settings
|
5
5
|
project_name: {{ project_name }}
|
6
|
-
prefix: {{ prefix }}
|
7
6
|
xcodeproj_path: {{ xcodeproj_path }}
|
7
|
+
{% if prefix != "" %}prefix: {{ prefix }}{% endif %}
|
8
8
|
|
9
9
|
### Code generation settings section
|
10
10
|
# The main project target name
|
@@ -16,19 +16,19 @@ project_file_path: {{ project_file_path }}
|
|
16
16
|
# The Xcode group path to new modules
|
17
17
|
project_group_path: {{ project_group_path }}
|
18
18
|
|
19
|
-
### Tests generation settings section
|
20
|
-
# The tests target name
|
21
|
-
test_target: {{ test_target }}
|
19
|
+
{% if test_target != "" or test_file_path != "" or test_group_path != "" %}### Tests generation settings section{% endif %}
|
20
|
+
{% if test_target != "" %}# The tests target name
|
21
|
+
test_target: {{ test_target }}{% endif %}
|
22
22
|
|
23
|
-
# The file path for new tests
|
24
|
-
test_file_path: {{ test_file_path }}
|
23
|
+
{% if test_file_path != "" %}# The file path for new tests
|
24
|
+
test_file_path: {{ test_file_path }}{% endif %}
|
25
25
|
|
26
|
-
# The Xcode group path to new tests
|
27
|
-
test_group_path: {{ test_group_path }}
|
26
|
+
{% if test_group_path != "" %}# The Xcode group path to new tests
|
27
|
+
test_group_path: {{ test_group_path }}{% endif %}
|
28
28
|
|
29
|
-
### Dependencies settings section
|
30
|
-
podfile_path: {{ podfile_path }}
|
31
|
-
cartfile_path: {{ cartfile_path }}
|
29
|
+
{% if podfile_path != "" or cartfile_path != "" %}### Dependencies settings section{% endif %}
|
30
|
+
{% if podfile_path != "" %}podfile_path: {{ podfile_path }}{% endif %}
|
31
|
+
{% if cartfile_path != "" %}cartfile_path: {{ cartfile_path }}{% endif %}
|
32
32
|
|
33
33
|
### Templates
|
34
34
|
templates:
|
@@ -2,11 +2,32 @@ module Generamba
|
|
2
2
|
|
3
3
|
# Represents currently generating code module
|
4
4
|
class CodeModule
|
5
|
-
attr_reader :name,
|
5
|
+
attr_reader :name,
|
6
|
+
:description,
|
7
|
+
:module_file_path,
|
8
|
+
:module_group_path,
|
9
|
+
:test_file_path,
|
10
|
+
:test_group_path,
|
11
|
+
:project_targets,
|
12
|
+
:test_targets
|
6
13
|
|
7
|
-
def initialize(name, description)
|
14
|
+
def initialize(name, description, options)
|
8
15
|
@name = name
|
9
16
|
@description = description
|
17
|
+
|
18
|
+
@project_targets = options[:module_targets].split(',') if options[:module_targets]
|
19
|
+
@test_targets = options[:test_targets].split(',') if options[:test_targets]
|
20
|
+
|
21
|
+
@module_file_path = Pathname.new(options[:module_file_path]) if options[:module_file_path]
|
22
|
+
@module_group_path = Pathname.new(options[:module_group_path]) if options[:module_group_path]
|
23
|
+
@test_file_path = Pathname.new(options[:test_file_path]) if options[:test_file_path]
|
24
|
+
@test_group_path = Pathname.new(options[:test_group_path]) if options[:test_group_path]
|
25
|
+
|
26
|
+
# The priority is given to `module_path` and 'test_path' options
|
27
|
+
@module_file_path = Pathname.new(options[:module_path]) if options[:module_path]
|
28
|
+
@module_group_path = Pathname.new(options[:module_path]) if options[:module_path]
|
29
|
+
@test_file_path = Pathname.new(options[:test_path]) if options[:test_path]
|
30
|
+
@test_group_path = Pathname.new(options[:test_path]) if options[:test_path]
|
10
31
|
end
|
11
32
|
|
12
33
|
def author
|
@@ -28,5 +49,77 @@ module Generamba
|
|
28
49
|
def project_name
|
29
50
|
ProjectConfiguration.project_name
|
30
51
|
end
|
52
|
+
|
53
|
+
def module_file_path
|
54
|
+
return @module_file_path != nil ?
|
55
|
+
@module_file_path :
|
56
|
+
Pathname.new(ProjectConfiguration.project_file_path)
|
57
|
+
.join(@name)
|
58
|
+
end
|
59
|
+
|
60
|
+
def module_group_path
|
61
|
+
return @module_group_path != nil ?
|
62
|
+
@module_group_path :
|
63
|
+
Pathname.new(ProjectConfiguration.project_group_path)
|
64
|
+
.join(@name)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_file_path
|
68
|
+
if @test_file_path == nil
|
69
|
+
if ProjectConfiguration.test_file_path == nil
|
70
|
+
return nil
|
71
|
+
end
|
72
|
+
|
73
|
+
return Pathname.new(ProjectConfiguration.test_file_path)
|
74
|
+
.join(@name)
|
75
|
+
end
|
76
|
+
return @test_file_path
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_group_path
|
80
|
+
if @test_group_path == nil
|
81
|
+
if ProjectConfiguration.test_group_path == nil
|
82
|
+
return nil
|
83
|
+
end
|
84
|
+
|
85
|
+
return Pathname.new(ProjectConfiguration.test_group_path)
|
86
|
+
.join(@name)
|
87
|
+
end
|
88
|
+
return @test_group_path
|
89
|
+
end
|
90
|
+
|
91
|
+
def project_targets
|
92
|
+
targets = Array.new
|
93
|
+
if ProjectConfiguration.project_target != nil
|
94
|
+
targets = [ProjectConfiguration.project_target]
|
95
|
+
end
|
96
|
+
|
97
|
+
if ProjectConfiguration.project_targets != nil
|
98
|
+
targets = ProjectConfiguration.project_targets
|
99
|
+
end
|
100
|
+
|
101
|
+
if @project_targets != nil
|
102
|
+
targets = @project_targets
|
103
|
+
end
|
104
|
+
|
105
|
+
return targets
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_targets
|
109
|
+
targets = Array.new
|
110
|
+
if ProjectConfiguration.test_target != nil
|
111
|
+
targets = [ProjectConfiguration.test_target]
|
112
|
+
end
|
113
|
+
|
114
|
+
if ProjectConfiguration.test_targets != nil
|
115
|
+
targets = ProjectConfiguration.test_targets
|
116
|
+
end
|
117
|
+
|
118
|
+
if @test_targets != nil
|
119
|
+
targets = @test_targets
|
120
|
+
end
|
121
|
+
|
122
|
+
return targets
|
123
|
+
end
|
31
124
|
end
|
32
125
|
end
|
@@ -7,10 +7,12 @@ module Generamba
|
|
7
7
|
XCODEPROJ_PATH_KEY = 'xcodeproj_path'
|
8
8
|
|
9
9
|
PROJECT_TARGET_KEY = 'project_target'
|
10
|
+
PROJECT_TARGETS_KEY = 'project_targets'
|
10
11
|
PROJECT_FILE_PATH_KEY = 'project_file_path'
|
11
12
|
PROJECT_GROUP_PATH_KEY = 'project_group_path'
|
12
13
|
|
13
14
|
TEST_TARGET_KEY = 'test_target'
|
15
|
+
TEST_TARGETS_KEY = 'test_targets'
|
14
16
|
TEST_FILE_PATH_KEY = 'test_file_path'
|
15
17
|
TEST_GROUP_PATH_KEY = 'test_group_path'
|
16
18
|
|
@@ -12,23 +12,33 @@ module Generamba
|
|
12
12
|
mandatory_fields = [COMPANY_KEY,
|
13
13
|
PROJECT_NAME_KEY,
|
14
14
|
XCODEPROJ_PATH_KEY,
|
15
|
-
PROJECT_TARGET_KEY,
|
16
15
|
PROJECT_FILE_PATH_KEY,
|
17
16
|
PROJECT_GROUP_PATH_KEY,
|
18
|
-
TEST_TARGET_KEY,
|
19
|
-
TEST_FILE_PATH_KEY,
|
20
|
-
TEST_GROUP_PATH_KEY,
|
21
17
|
TEMPLATES_KEY]
|
22
18
|
|
23
|
-
|
19
|
+
interchangable_fields = [[PROJECT_TARGETS_KEY, PROJECT_TARGET_KEY]]
|
20
|
+
|
21
|
+
mandatory_fields.each do |field|
|
24
22
|
if preferences.has_key?(field) == false
|
25
|
-
error_description = "Rambafile is broken! Cannot find #{field} field, which is mandatory. Either add it manually, or run *generamba setup*."
|
23
|
+
error_description = "Rambafile is broken! Cannot find #{field} field, which is mandatory. Either add it manually, or run *generamba setup*.".red
|
24
|
+
raise StandardError.new(error_description)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
interchangable_fields.each do |fields_array|
|
29
|
+
has_value = false
|
30
|
+
fields_array.each do |field|
|
31
|
+
has_value = preferences.has_key?(field) || has_value
|
32
|
+
end
|
33
|
+
|
34
|
+
if has_value == false
|
35
|
+
error_description = "Rambafile is broken! Cannot find any of #{fields_array} fields, one of them is mandatory. Either add it manually, or run *generamba setup*.".red
|
26
36
|
raise StandardError.new(error_description)
|
27
37
|
end
|
28
|
-
|
38
|
+
end
|
29
39
|
|
30
40
|
if preferences[TEMPLATES_KEY] == nil
|
31
|
-
error_description = "You can't run *generamba gen* without any templates installed. Add their declarations to a Rambafile and run *generamba template install*."
|
41
|
+
error_description = "You can't run *generamba gen* without any templates installed. Add their declarations to a Rambafile and run *generamba template install*.".red
|
32
42
|
raise StandardError.new(error_description)
|
33
43
|
end
|
34
44
|
|
@@ -23,7 +23,7 @@ module Generamba
|
|
23
23
|
.join(TEMPLATES_FOLDER)
|
24
24
|
.join(template_name)
|
25
25
|
|
26
|
-
error_description = "Cannot find #{template_name}! Add it to the Rambafile and run *generamba template install*"
|
26
|
+
error_description = "Cannot find template named #{template_name}! Add it to the Rambafile and run *generamba template install*".red
|
27
27
|
raise StandardError.new(error_description) if path.exist? == false
|
28
28
|
|
29
29
|
return path
|
@@ -11,33 +11,23 @@ module Generamba
|
|
11
11
|
Xcodeproj::Project.open(project_name)
|
12
12
|
end
|
13
13
|
|
14
|
-
# Returns an AbstractTarget class for a given name
|
15
|
-
# @param target_name [String] The name of the target
|
16
|
-
# @param project [Xcodeproj::Project] The target xcodeproj file
|
17
|
-
#
|
18
|
-
# @return [Xcodeproj::AbstractTarget]
|
19
|
-
def self.obtain_target(target_name, project)
|
20
|
-
project.targets.each { |target|
|
21
|
-
if target.name == target_name
|
22
|
-
return target
|
23
|
-
end
|
24
|
-
}
|
25
|
-
end
|
26
|
-
|
27
14
|
# Adds a provided file to a specific Project and Target
|
28
15
|
# @param project [Xcodeproj::Project] The target xcodeproj file
|
29
|
-
# @param
|
16
|
+
# @param targets [AbstractTarget] Array of tatgets
|
30
17
|
# @param group_path [Pathname] The Xcode group path for current file
|
31
18
|
# @param file_path [Pathname] The file path for current file
|
32
19
|
#
|
33
20
|
# @return [void]
|
34
|
-
def self.
|
21
|
+
def self.add_file_to_project_and_targets(project, targets, group_path, file_path)
|
35
22
|
module_group = self.retreive_or_create_group(group_path, project)
|
36
23
|
xcode_file = module_group.new_file(File.absolute_path(file_path))
|
37
24
|
|
38
25
|
file_name = File.basename(file_path)
|
39
26
|
if File.extname(file_name) == '.m'
|
40
|
-
target
|
27
|
+
targets.each do |target|
|
28
|
+
xcode_target = self.obtain_target(target, project)
|
29
|
+
xcode_target.add_file_references([xcode_file])
|
30
|
+
end
|
41
31
|
end
|
42
32
|
end
|
43
33
|
|
@@ -75,6 +65,22 @@ module Generamba
|
|
75
65
|
return final_group
|
76
66
|
end
|
77
67
|
|
68
|
+
# Returns an AbstractTarget class for a given name
|
69
|
+
# @param target_name [String] The name of the target
|
70
|
+
# @param project [Xcodeproj::Project] The target xcodeproj file
|
71
|
+
#
|
72
|
+
# @return [Xcodeproj::AbstractTarget]
|
73
|
+
def self.obtain_target(target_name, project)
|
74
|
+
project.targets.each do |target|
|
75
|
+
if target.name == target_name
|
76
|
+
return target
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
error_description = "Cannot find a target with name #{target_name} in Xcode project".red
|
81
|
+
raise StandardError.new(error_description)
|
82
|
+
end
|
83
|
+
|
78
84
|
# Splits the provided Xcode group path to an array of separate groups
|
79
85
|
# @param group_path The full group path
|
80
86
|
#
|
@@ -7,61 +7,56 @@ module Generamba
|
|
7
7
|
# Responsible for creating the whole code module using information from the CLI
|
8
8
|
class ModuleGenerator
|
9
9
|
|
10
|
-
def generate_module(
|
11
|
-
# Setting up CodeModule and ModuleTemplate objects.
|
12
|
-
# TODO: Move it to the CLI infrastructure
|
13
|
-
code_module = CodeModule.new(name, description)
|
14
|
-
template = ModuleTemplate.new(template_name)
|
15
|
-
|
10
|
+
def generate_module(name, code_module, template)
|
16
11
|
# Setting up Xcode objects
|
17
12
|
project = XcodeprojHelper.obtain_project(ProjectConfiguration.xcodeproj_path)
|
18
|
-
project_target = XcodeprojHelper.obtain_target(ProjectConfiguration.project_target,
|
19
|
-
project)
|
20
|
-
test_target = XcodeprojHelper.obtain_target(ProjectConfiguration.test_target,
|
21
|
-
project)
|
22
13
|
|
23
14
|
# Configuring file paths
|
24
|
-
|
25
|
-
.join(name)
|
26
|
-
test_dir_path = Pathname.new(ProjectConfiguration.test_file_path)
|
27
|
-
.join(name)
|
28
|
-
FileUtils.mkdir_p module_dir_path
|
29
|
-
FileUtils.mkdir_p test_dir_path
|
15
|
+
FileUtils.mkdir_p code_module.module_file_path
|
30
16
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
test_group_path = Pathname.new(ProjectConfiguration.test_group_path)
|
35
|
-
.join(name)
|
17
|
+
if code_module.test_file_path != nil
|
18
|
+
FileUtils.mkdir_p code_module.test_file_path
|
19
|
+
end
|
36
20
|
|
37
21
|
# Creating code files
|
38
22
|
puts('Creating code files...')
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
23
|
+
process_files_if_needed(template.code_files,
|
24
|
+
name,
|
25
|
+
code_module,
|
26
|
+
template,
|
27
|
+
project,
|
28
|
+
code_module.project_targets,
|
29
|
+
code_module.module_group_path,
|
30
|
+
code_module.module_file_path)
|
47
31
|
|
48
32
|
# Creating test files
|
49
33
|
puts('Creating test files...')
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
34
|
+
process_files_if_needed(template.test_files,
|
35
|
+
name,
|
36
|
+
code_module,
|
37
|
+
template,
|
38
|
+
project,
|
39
|
+
code_module.test_targets,
|
40
|
+
code_module.test_group_path,
|
41
|
+
code_module.test_file_path)
|
58
42
|
|
59
43
|
# Saving the current changes in the Xcode project
|
60
44
|
project.save
|
61
|
-
puts("Module
|
45
|
+
puts("Module successfully created!\n" +
|
46
|
+
"Name: #{name}".green + "\n" +
|
47
|
+
"Module file path: #{code_module.module_file_path}".green + "\n" +
|
48
|
+
"Module group path: #{code_module.module_group_path}".green + "\n" +
|
49
|
+
"Test file path: #{code_module.test_file_path}".green + "\n" +
|
50
|
+
"Test group path: #{code_module.test_group_path}".green)
|
62
51
|
end
|
63
52
|
|
64
|
-
def
|
53
|
+
def process_files_if_needed(files, name, code_module, template, project, targets, group_path, dir_path)
|
54
|
+
# It's possible that current project doesn't test targets configured, so it doesn't need to generate tests.
|
55
|
+
# The same is for files property - a template can have only test or project files
|
56
|
+
if targets.count == 0 || files == nil || files.count == 0 || dir_path == nil || group_path == nil
|
57
|
+
return
|
58
|
+
end
|
59
|
+
|
65
60
|
XcodeprojHelper.clear_group(project, group_path)
|
66
61
|
files.each do |file|
|
67
62
|
# The target file's name consists of three parameters: project prefix, module name and template file name.
|
@@ -87,8 +82,8 @@ module Generamba
|
|
87
82
|
end
|
88
83
|
|
89
84
|
# Creating the file in the Xcode project
|
90
|
-
XcodeprojHelper.
|
91
|
-
|
85
|
+
XcodeprojHelper.add_file_to_project_and_targets(project,
|
86
|
+
targets,
|
92
87
|
group_path.join(file_group),
|
93
88
|
file_path)
|
94
89
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'git'
|
2
|
+
|
3
|
+
module Generamba
|
4
|
+
|
5
|
+
# Provides the functionality to download template catalogs from the remote repository
|
6
|
+
class CatalogDownloader
|
7
|
+
|
8
|
+
# Clones a template catalog from a remote repository
|
9
|
+
#
|
10
|
+
# @param name [String] The name of the template catalog
|
11
|
+
# @param url [String] The url of the repository
|
12
|
+
#
|
13
|
+
# @return [Pathname] A filepath to the downloaded catalog
|
14
|
+
def download_catalog(name, url)
|
15
|
+
catalog_local_path = Pathname.new(ENV['HOME'])
|
16
|
+
.join(GENERAMBA_HOME_DIR)
|
17
|
+
.join(CATALOGS_DIR)
|
18
|
+
FileUtils.rm_rf catalog_local_path
|
19
|
+
FileUtils.mkdir_p catalog_local_path
|
20
|
+
|
21
|
+
Git.clone(url, name, :path => catalog_local_path)
|
22
|
+
|
23
|
+
return catalog_local_path
|
24
|
+
.join(name)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -21,13 +21,13 @@ module Generamba
|
|
21
21
|
rambaspec_exist = Generamba::RambaspecValidator.validate_spec_existance(template_name, template_path)
|
22
22
|
|
23
23
|
if rambaspec_exist == false
|
24
|
-
error_description = "Cannot find #{template_name + RAMBASPEC_EXTENSION} in the template catalog. Try another name."
|
24
|
+
error_description = "Cannot find #{template_name + RAMBASPEC_EXTENSION} in the template catalog. Try another name.".red
|
25
25
|
raise StandardError.new(error_description)
|
26
26
|
end
|
27
27
|
|
28
28
|
rambaspec_valid = Generamba::RambaspecValidator.validate_spec(template_name, template_path)
|
29
29
|
if rambaspec_valid == false
|
30
|
-
error_description = "#{template_name + RAMBASPEC_EXTENSION} is not valid."
|
30
|
+
error_description = "#{template_name + RAMBASPEC_EXTENSION} is not valid.".red
|
31
31
|
raise StandardError.new(error_description)
|
32
32
|
end
|
33
33
|
|
@@ -13,13 +13,13 @@ module Generamba
|
|
13
13
|
rambaspec_exist = Generamba::RambaspecValidator.validate_spec_existance(template_name, local_path)
|
14
14
|
|
15
15
|
if rambaspec_exist == false
|
16
|
-
error_description = "Cannot find #{template_name + RAMBASPEC_EXTENSION} in the specified directory. Try another path or name."
|
16
|
+
error_description = "Cannot find #{template_name + RAMBASPEC_EXTENSION} in the specified directory. Try another path or name.".red
|
17
17
|
raise StandardError.new(error_description)
|
18
18
|
end
|
19
19
|
|
20
20
|
rambaspec_valid = Generamba::RambaspecValidator.validate_spec(template_name, local_path)
|
21
21
|
if rambaspec_valid == false
|
22
|
-
error_description = "#{template_name + RAMBASPEC_EXTENSION} is not valid."
|
22
|
+
error_description = "#{template_name + RAMBASPEC_EXTENSION} is not valid.".red
|
23
23
|
raise StandardError.new(error_description)
|
24
24
|
end
|
25
25
|
|
@@ -22,13 +22,13 @@ module Generamba
|
|
22
22
|
rambaspec_exist = Generamba::RambaspecValidator.validate_spec_existance(template_name, template_dir)
|
23
23
|
if rambaspec_exist == false
|
24
24
|
FileUtils.rm_rf(temp_path)
|
25
|
-
error_description = "Cannot find #{template_name + RAMBASPEC_EXTENSION} in the root directory of specified repository."
|
25
|
+
error_description = "Cannot find #{template_name + RAMBASPEC_EXTENSION} in the root directory of specified repository.".red
|
26
26
|
raise StandardError.new(error_description)
|
27
27
|
end
|
28
28
|
|
29
29
|
rambaspec_valid = Generamba::RambaspecValidator.validate_spec(template_name, template_dir)
|
30
30
|
if rambaspec_valid == false
|
31
|
-
error_description = "#{template_name + RAMBASPEC_EXTENSION} is not valid."
|
31
|
+
error_description = "#{template_name + RAMBASPEC_EXTENSION} is not valid.".red
|
32
32
|
raise StandardError.new(error_description)
|
33
33
|
end
|
34
34
|
|
@@ -2,6 +2,7 @@ require 'generamba/template/processor/template_declaration.rb'
|
|
2
2
|
require 'generamba/template/installer/local_installer.rb'
|
3
3
|
require 'generamba/template/installer/remote_installer.rb'
|
4
4
|
require 'generamba/template/installer/catalog_installer.rb'
|
5
|
+
require 'generamba/template/helpers/catalog_downloader.rb'
|
5
6
|
require 'git'
|
6
7
|
|
7
8
|
module Generamba
|
@@ -22,7 +23,7 @@ module Generamba
|
|
22
23
|
}
|
23
24
|
|
24
25
|
if !templates || templates.count == 0
|
25
|
-
error_description = 'You must specify at least one template in Rambafile under the key *project_templates*'
|
26
|
+
error_description = 'You must specify at least one template in Rambafile under the key *project_templates*'.red
|
26
27
|
raise StandardError.new(error_description)
|
27
28
|
end
|
28
29
|
|
@@ -51,13 +52,8 @@ module Generamba
|
|
51
52
|
|
52
53
|
puts('Updating shared generamba-catalog specs...')
|
53
54
|
|
54
|
-
|
55
|
-
|
56
|
-
.join(CATALOGS_DIR)
|
57
|
-
FileUtils.rm_rf catalog_local_path
|
58
|
-
FileUtils.mkdir_p catalog_local_path
|
59
|
-
|
60
|
-
Git.clone(RAMBLER_CATALOG_REPO, GENERAMBA_CATALOG_NAME, :path => catalog_local_path)
|
55
|
+
downloader = CatalogDownloader.new
|
56
|
+
downloader.download_catalog(GENERAMBA_CATALOG_NAME, RAMBLER_CATALOG_REPO)
|
61
57
|
end
|
62
58
|
|
63
59
|
# Provides the appropriate strategy for a given template type
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Adds a number of methods for colorizing output strings
|
2
|
+
class String
|
3
|
+
|
4
|
+
def colorize(color_code)
|
5
|
+
"\e[#{color_code}m#{self}\e[0m"
|
6
|
+
end
|
7
|
+
|
8
|
+
def red
|
9
|
+
colorize(31)
|
10
|
+
end
|
11
|
+
|
12
|
+
def green
|
13
|
+
colorize(32)
|
14
|
+
end
|
15
|
+
|
16
|
+
def yellow
|
17
|
+
colorize(33)
|
18
|
+
end
|
19
|
+
|
20
|
+
def blue
|
21
|
+
colorize(34)
|
22
|
+
end
|
23
|
+
end
|
data/lib/generamba/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: generamba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Egor Tolstoy
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-12-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -165,6 +165,8 @@ files:
|
|
165
165
|
- lib/generamba/cli/template/template_create_command.rb
|
166
166
|
- lib/generamba/cli/template/template_group.rb
|
167
167
|
- lib/generamba/cli/template/template_install_command.rb
|
168
|
+
- lib/generamba/cli/template/template_list_command.rb
|
169
|
+
- lib/generamba/cli/template/template_search_command.rb
|
168
170
|
- lib/generamba/cli/thor_extension.rb
|
169
171
|
- lib/generamba/code_generation/Rambafile.liquid
|
170
172
|
- lib/generamba/code_generation/code_module.rb
|
@@ -186,6 +188,7 @@ files:
|
|
186
188
|
- lib/generamba/template/creator/new_template/Tests/Service/service_tests.m.liquid
|
187
189
|
- lib/generamba/template/creator/new_template/template.rambaspec.liquid
|
188
190
|
- lib/generamba/template/creator/template_creator.rb
|
191
|
+
- lib/generamba/template/helpers/catalog_downloader.rb
|
189
192
|
- lib/generamba/template/helpers/rambaspec_validator.rb
|
190
193
|
- lib/generamba/template/installer/abstract_installer.rb
|
191
194
|
- lib/generamba/template/installer/catalog_installer.rb
|
@@ -193,6 +196,7 @@ files:
|
|
193
196
|
- lib/generamba/template/installer/remote_installer.rb
|
194
197
|
- lib/generamba/template/processor/template_declaration.rb
|
195
198
|
- lib/generamba/template/processor/template_processor.rb
|
199
|
+
- lib/generamba/tools/string-colorize.rb
|
196
200
|
- lib/generamba/version.rb
|
197
201
|
homepage: https://github.com/rambler-ios/Generamba
|
198
202
|
licenses:
|