Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion lib/generamba/code_generation/code_module.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions lib/generamba/constants/rambafile_constants.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
21 changes: 12 additions & 9 deletions lib/generamba/helpers/xcodeproj_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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|
Expand All @@ -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
Expand All @@ -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)
Expand All @@ -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

Expand All @@ -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|
Expand All @@ -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
Expand Down
11 changes: 7 additions & 4 deletions lib/generamba/module_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand All @@ -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
end