From c819c47aabd0cd4148da6d04ebee19d944a769da Mon Sep 17 00:00:00 2001 From: Christian John Lo Date: Thu, 11 Jul 2019 11:07:14 +0800 Subject: [PATCH] Added config in order to create logical folders and not actual ones in xcode --- lib/generamba/code_generation/code_module.rb | 4 +++- .../constants/rambafile_constants.rb | 2 ++ lib/generamba/helpers/xcodeproj_helper.rb | 21 +++++++++++-------- lib/generamba/module_generator.rb | 11 ++++++---- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/lib/generamba/code_generation/code_module.rb b/lib/generamba/code_generation/code_module.rb index cb433cb..32110b2 100644 --- a/lib/generamba/code_generation/code_module.rb +++ b/lib/generamba/code_generation/code_module.rb @@ -25,7 +25,8 @@ class CodeModule :test_targets, :podfile_path, :cartfile_path, - :custom_parameters + :custom_parameters, + :create_logical_groups def initialize(name, rambafile, options) # Base initialization @@ -69,6 +70,7 @@ def initialize(name, rambafile, options) @podfile_path = rambafile[PODFILE_PATH_KEY] if rambafile[PODFILE_PATH_KEY] @cartfile_path = rambafile[CARTFILE_PATH_KEY] if rambafile[CARTFILE_PATH_KEY] + @create_logical_groups = rambafile[CREATE_LOGICAL_GROUPS_KEY] if rambafile[CREATE_LOGICAL_GROUPS_KEY] end private diff --git a/lib/generamba/constants/rambafile_constants.rb b/lib/generamba/constants/rambafile_constants.rb index 7e8e153..b171cf0 100644 --- a/lib/generamba/constants/rambafile_constants.rb +++ b/lib/generamba/constants/rambafile_constants.rb @@ -18,6 +18,8 @@ module Generamba TEST_TARGETS_KEY = 'test_targets' TEST_FILE_PATH_KEY = 'test_file_path' TEST_GROUP_PATH_KEY = 'test_group_path' + + CREATE_LOGICAL_GROUPS_KEY = 'create_logical_groups' PODFILE_PATH_KEY = 'podfile_path' CARTFILE_PATH_KEY = 'cartfile_path' diff --git a/lib/generamba/helpers/xcodeproj_helper.rb b/lib/generamba/helpers/xcodeproj_helper.rb index 20d7ace..a48a494 100644 --- a/lib/generamba/helpers/xcodeproj_helper.rb +++ b/lib/generamba/helpers/xcodeproj_helper.rb @@ -19,12 +19,12 @@ def self.obtain_project(project_name) # @param file_is_resource [TrueClass or FalseClass] If true then file is resource # # @return [void] - def self.add_file_to_project_and_targets(project, targets_name, group_path, dir_path, file_group_path, file_name, file_is_resource = false) + def self.add_file_to_project_and_targets(project, targets_name, group_path, dir_path, file_group_path, file_name, file_is_resource = false, group_is_logical = false) file_path = dir_path - file_path = file_path.join(file_group_path) if file_group_path + file_path = file_path.join(file_group_path) if (file_group_path && !group_is_logical) file_path = file_path.join(file_name) if file_name - module_group = self.retrieve_group_or_create_if_needed(group_path, dir_path, file_group_path, project, true) + module_group = self.retrieve_group_or_create_if_needed(group_path, dir_path, file_group_path, project, true, group_is_logical) xcode_file = module_group.new_file(File.absolute_path(file_path)) targets_name.each do |target| @@ -45,8 +45,8 @@ def self.add_file_to_project_and_targets(project, targets_name, group_path, dir_ # @param directory_name [String] Current directory name # # @return [void] - def self.add_group_to_project(project, group_path, dir_path, directory_name) - self.retrieve_group_or_create_if_needed(group_path, dir_path, directory_name, project, true) + def self.add_group_to_project(project, group_path, dir_path, directory_name, group_is_logical = false) + self.retrieve_group_or_create_if_needed(group_path, dir_path, directory_name, project, true, group_is_logical) end # File is a compiled source @@ -71,7 +71,7 @@ def self.is_bundle_resource?(resource_name) # # @return [Void] def self.clear_group(project, targets_name, group_path) - module_group = self.retrieve_group_or_create_if_needed(group_path, nil, nil, project, false) + module_group = self.retrieve_group_or_create_if_needed(group_path, nil, nil, project, false, false) return unless module_group files_path = self.files_path_from_group(module_group, project) @@ -90,7 +90,7 @@ def self.clear_group(project, targets_name, group_path) # # @return [TrueClass or FalseClass] def self.module_with_group_path_already_exists(project, group_path) - module_group = self.retrieve_group_or_create_if_needed(group_path, nil, nil, project, false) + module_group = self.retrieve_group_or_create_if_needed(group_path, nil, nil, project, false, false) module_group.nil? ? false : true end @@ -104,11 +104,10 @@ def self.module_with_group_path_already_exists(project, group_path) # @param create_group_if_not_exists [TrueClass or FalseClass] If true nonexistent group will be created # # @return [PBXGroup] - def self.retrieve_group_or_create_if_needed(group_path, dir_path, file_group_path, project, create_group_if_not_exists) +def self.retrieve_group_or_create_if_needed(group_path, dir_path, file_group_path, project, create_group_if_not_exists, group_is_logical = false) group_names = path_names_from_path(group_path) group_components_count = group_names.count group_names += path_names_from_path(file_group_path) if file_group_path - final_group = project group_names.each_with_index do |group_name, index| @@ -119,6 +118,10 @@ def self.retrieve_group_or_create_if_needed(group_path, dir_path, file_group_pat if group_path != dir_path && index == group_components_count-1 next_group = final_group.new_group(group_name, dir_path, :project) + elsif index == group_components_count-1 && group_is_logical + next_group = final_group.new_group(group_name, group_name) + elsif group_is_logical + next_group = final_group.new_group(group_name) else next_group = final_group.new_group(group_name, group_name) end diff --git a/lib/generamba/module_generator.rb b/lib/generamba/module_generator.rb index 04635dc..08f8a5c 100755 --- a/lib/generamba/module_generator.rb +++ b/lib/generamba/module_generator.rb @@ -66,7 +66,7 @@ def process_files_if_needed(files, code_module, template, project, targets, grou file_group = dir_path.join(directory_name) FileUtils.mkdir_p file_group - XcodeprojHelper.add_group_to_project(project, group_path, dir_path, directory_name) + XcodeprojHelper.add_group_to_project(project, group_path, dir_path, directory_name, code_module.create_logical_groups) next end @@ -79,10 +79,11 @@ def process_files_if_needed(files, code_module, template, project, targets, grou # Generating the content of the code file and it's name file_name, file_content = ContentGenerator.create_file(file, module_info.scope, template) file_path = dir_path - file_path = file_path.join(file_group) if file_group + file_path = file_path.join(file_group) if (file_group && !code_module.create_logical_groups) file_path = file_path.join(file_name) if file_name # Creating the file in the filesystem + FileUtils.mkdir_p File.dirname(file_path) File.open(file_path, 'w+') do |f| f.write(file_content) @@ -97,8 +98,10 @@ def process_files_if_needed(files, code_module, template, project, targets, grou dir_path, file_group, file_name, - file_is_resource) + file_is_resource, + + code_module.create_logical_groups) end end end -end \ No newline at end of file +end