api_gen_helper 0.1.3 → 0.1.4
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/api_gen_helper/group_generator.rb +198 -42
- data/lib/api_gen_helper/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a1a829f9a8b59c8fb8cb99d686832bdd4a4a08e4
|
|
4
|
+
data.tar.gz: 6ddd5ac2534b5e1d4b42cd99e7637e09586371e5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 49313fb202e9897de18e908f4988f0e5d7eddb453e9199afbd56a7af9fbd7d0ad925c74c2439ac12cb2ca68fd8988896c3ea659ad383c45beb02bd218afda263
|
|
7
|
+
data.tar.gz: 122670ef0c3744d146d069e3664c958eb61abf2191f80c8054d5e6343af5c2e44b70fdcf5159c124ae06b2611b9cbe523d554bd92cdc27c4d20b8c050818883d
|
|
@@ -8,45 +8,30 @@ module ApiGenHelper
|
|
|
8
8
|
|
|
9
9
|
def generate_group(project_path, group_path, target_name)
|
|
10
10
|
project = obtain_project(project_path)
|
|
11
|
-
target_name = target_name
|
|
12
|
-
group_path = group_path
|
|
13
|
-
group_name = URI(group_path).path.split('/').last
|
|
14
|
-
|
|
15
|
-
group = project[group_path]
|
|
16
|
-
if !group.nil?
|
|
17
|
-
remove_build_file_recursivly(group)
|
|
18
|
-
group.clear
|
|
19
|
-
group.remove_from_project
|
|
20
|
-
end
|
|
21
11
|
|
|
22
|
-
|
|
12
|
+
clear_group(project, [target_name], group_path)
|
|
23
13
|
|
|
24
|
-
|
|
14
|
+
group = retrieve_group_or_create_if_needed(group_path, group_path, nil, project, true)
|
|
25
15
|
|
|
26
|
-
|
|
27
|
-
if proj_target.name == target_name
|
|
28
|
-
added_references_recursivly_for_target(proj_target, main_group)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
project.save()
|
|
32
|
-
end
|
|
16
|
+
prepare_main_group(group, group_path)
|
|
33
17
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
build_file.remove_from_project
|
|
39
|
-
end
|
|
40
|
-
else
|
|
41
|
-
remove_build_file_recursivly(child)
|
|
42
|
-
end
|
|
18
|
+
project.targets.each do |target|
|
|
19
|
+
if target.name == target_name
|
|
20
|
+
added_references_recursivly_for_target(target, group)
|
|
21
|
+
end
|
|
43
22
|
end
|
|
23
|
+
|
|
24
|
+
project.save()
|
|
44
25
|
end
|
|
45
26
|
|
|
46
27
|
def added_references_recursivly_for_target(target, group)
|
|
47
28
|
group.children.each do |child|
|
|
48
29
|
if child.isa == "PBXFileReference"
|
|
49
|
-
|
|
30
|
+
if is_bundle_resource?(child.name)
|
|
31
|
+
target.add_resources([child])
|
|
32
|
+
elsif is_compile_source?(child.name)
|
|
33
|
+
target.add_file_references([child])
|
|
34
|
+
end
|
|
50
35
|
else
|
|
51
36
|
added_references_recursivly_for_target(target, child)
|
|
52
37
|
end
|
|
@@ -60,8 +45,8 @@ module ApiGenHelper
|
|
|
60
45
|
Dir.entries(directory).each do |file_name|
|
|
61
46
|
next if file_name =~ /^\./
|
|
62
47
|
if File.file? File.join(directory, file_name)
|
|
63
|
-
|
|
64
|
-
group
|
|
48
|
+
file_path = File.join(directory, file_name)
|
|
49
|
+
xcode_file_reference = group.new_reference(file_path)
|
|
65
50
|
end
|
|
66
51
|
|
|
67
52
|
if File.directory? File.join(directory, file_name)
|
|
@@ -72,17 +57,6 @@ module ApiGenHelper
|
|
|
72
57
|
end
|
|
73
58
|
end
|
|
74
59
|
|
|
75
|
-
# Create group for specific target and project
|
|
76
|
-
# @param project [Xcodeproj::Project] The target xcodeproj file
|
|
77
|
-
# @param target [Xcodeproj::Project::Object::PBXNativeTarget] The target in xcodeproj file
|
|
78
|
-
# @param name [String] String name for group
|
|
79
|
-
# @param path [String] path for group
|
|
80
|
-
#
|
|
81
|
-
# @return [Xcodeproj::Project::Object::PBXGroup]
|
|
82
|
-
def create_group_from_directory(project, target, name, path)
|
|
83
|
-
group = project[target].new_group(name, path, :group)
|
|
84
|
-
end
|
|
85
|
-
|
|
86
60
|
# Open xcodoproj file
|
|
87
61
|
# @param project_name [String] String path for xcodeproj file
|
|
88
62
|
#
|
|
@@ -91,6 +65,188 @@ module ApiGenHelper
|
|
|
91
65
|
Xcodeproj::Project.open(project_name)
|
|
92
66
|
end
|
|
93
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 obtain_target(target_name, project)
|
|
74
|
+
project.targets.each do |target|
|
|
75
|
+
return target if target.name == target_name
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
error_description = "Cannot find a target with name #{target_name} in Xcode project"
|
|
79
|
+
raise StandardError, error_description
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# Adds a provided file to a specific Project and Target
|
|
84
|
+
# @param project [Xcodeproj::Project] The target xcodeproj file
|
|
85
|
+
# @param targets_name [String] Array of targets name
|
|
86
|
+
# @param group_path [Pathname] The Xcode group path for current file
|
|
87
|
+
# @param dir_path [Pathname] The directory path for current file
|
|
88
|
+
# @param file_group_path [String] Directory path
|
|
89
|
+
# @param file_name [String] Current file name
|
|
90
|
+
# @param file_is_resource [TrueClass or FalseClass] If true then file is resource
|
|
91
|
+
#
|
|
92
|
+
# @return [void]
|
|
93
|
+
def add_file_to_project_and_targets(project, targets_name, group_path, dir_path, file_group_path, file_name, file_is_resource = false)
|
|
94
|
+
file_path = dir_path
|
|
95
|
+
file_path = file_path.join(file_group_path) if file_group_path
|
|
96
|
+
file_path = file_path.join(file_name) if file_name
|
|
97
|
+
|
|
98
|
+
module_group = self.retrieve_group_or_create_if_needed(group_path, dir_path, file_group_path, project, true)
|
|
99
|
+
xcode_file = module_group.new_file(File.absolute_path(file_path))
|
|
100
|
+
|
|
101
|
+
targets_name.each do |target|
|
|
102
|
+
xcode_target = obtain_target(target, project)
|
|
103
|
+
|
|
104
|
+
if file_is_resource || self.is_bundle_resource?(file_name)
|
|
105
|
+
xcode_target.add_resources([xcode_file])
|
|
106
|
+
elsif self.is_compile_source?(file_name)
|
|
107
|
+
xcode_target.add_file_references([xcode_file])
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
# Finds or creates a group in a xcodeproj file with a given path
|
|
114
|
+
# @param group_path [Pathname] The Xcode group path for module
|
|
115
|
+
# @param dir_path [Pathname] The directory path for module
|
|
116
|
+
# @param file_group_path [String] Directory path
|
|
117
|
+
# @param project [Xcodeproj::Project] The working Xcode project file
|
|
118
|
+
# @param create_group_if_not_exists [TrueClass or FalseClass] If true nonexistent group will be created
|
|
119
|
+
#
|
|
120
|
+
# @return [PBXGroup]
|
|
121
|
+
def retrieve_group_or_create_if_needed(group_path, dir_path, file_group_path, project, create_group_if_not_exists)
|
|
122
|
+
group_names = path_names_from_path(group_path)
|
|
123
|
+
group_components_count = group_names.count
|
|
124
|
+
group_names += path_names_from_path(file_group_path) if file_group_path
|
|
125
|
+
|
|
126
|
+
final_group = project
|
|
127
|
+
|
|
128
|
+
group_names.each_with_index do |group_name, index|
|
|
129
|
+
next_group = final_group[group_name]
|
|
130
|
+
|
|
131
|
+
unless next_group
|
|
132
|
+
return nil unless create_group_if_not_exists
|
|
133
|
+
|
|
134
|
+
if group_path != dir_path && index == group_components_count-1
|
|
135
|
+
next_group = final_group.new_group(group_name, dir_path, :project)
|
|
136
|
+
else
|
|
137
|
+
next_group = final_group.new_group(group_name, group_name)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
final_group = next_group
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
final_group
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Get all files path from group path
|
|
148
|
+
# @param module_group [PBXGroup] The module group
|
|
149
|
+
# @param project [Xcodeproj::Project] The target xcodeproj file
|
|
150
|
+
#
|
|
151
|
+
# @return [[String]]
|
|
152
|
+
def files_path_from_group(module_group, _project)
|
|
153
|
+
files_path = []
|
|
154
|
+
|
|
155
|
+
module_group.recursive_children.each do |file_ref|
|
|
156
|
+
if file_ref.isa == 'PBXFileReference'
|
|
157
|
+
file_ref_path = configure_file_ref_path(file_ref)
|
|
158
|
+
files_path.push(file_ref_path)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
files_path
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def clear_group(project, targets_name, group_path)
|
|
166
|
+
module_group = retrieve_group_or_create_if_needed(group_path, nil, nil, project, false)
|
|
167
|
+
return unless module_group
|
|
168
|
+
|
|
169
|
+
files_path = files_path_from_group(module_group, project)
|
|
170
|
+
return unless files_path
|
|
171
|
+
|
|
172
|
+
files_path.each do |file_path|
|
|
173
|
+
remove_file_by_file_path(file_path, targets_name, project)
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
module_group.clear
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Remove build file from target build phase
|
|
180
|
+
# @param file_path [String] The path of the file
|
|
181
|
+
# @param targets_name [String] Array of targets
|
|
182
|
+
# @param project [Xcodeproj::Project] The target xcodeproj file
|
|
183
|
+
#
|
|
184
|
+
# @return [Void]
|
|
185
|
+
def remove_file_by_file_path(file_path, targets_name, project)
|
|
186
|
+
file_names = path_names_from_path(file_path)
|
|
187
|
+
|
|
188
|
+
build_phases = nil
|
|
189
|
+
|
|
190
|
+
if is_compile_source?(file_names.last)
|
|
191
|
+
build_phases = build_phases_from_targets(targets_name, project)
|
|
192
|
+
elsif is_bundle_resource?(file_names.last)
|
|
193
|
+
build_phases = resources_build_phase_from_targets(targets_name, project)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
remove_file_from_build_phases(file_path, build_phases)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def remove_file_from_build_phases(file_path, build_phases)
|
|
200
|
+
return if build_phases.nil?
|
|
201
|
+
|
|
202
|
+
build_phases.each do |build_phase|
|
|
203
|
+
build_phase.files.each do |build_file|
|
|
204
|
+
next if build_file.nil? || build_file.file_ref.nil?
|
|
205
|
+
|
|
206
|
+
build_file_path = configure_file_ref_path(build_file.file_ref)
|
|
207
|
+
|
|
208
|
+
if build_file_path == file_path
|
|
209
|
+
build_phase.remove_build_file(build_file)
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
# Find and return target build phases
|
|
216
|
+
# @param targets_name [String] Array of targets
|
|
217
|
+
# @param project [Xcodeproj::Project] The target xcodeproj file
|
|
218
|
+
#
|
|
219
|
+
# @return [[PBXSourcesBuildPhase]]
|
|
220
|
+
def build_phases_from_targets(targets_name, project)
|
|
221
|
+
build_phases = []
|
|
222
|
+
|
|
223
|
+
targets_name.each do |target_name|
|
|
224
|
+
xcode_target = obtain_target(target_name, project)
|
|
225
|
+
xcode_target.build_phases.each do |build_phase|
|
|
226
|
+
if build_phase.isa == 'PBXSourcesBuildPhase'
|
|
227
|
+
build_phases.push(build_phase)
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
build_phases
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Get configure file full path
|
|
236
|
+
# @param file_ref [PBXFileReference] Build file
|
|
237
|
+
#
|
|
238
|
+
# @return [String]
|
|
239
|
+
def configure_file_ref_path(file_ref)
|
|
240
|
+
build_file_ref_path = file_ref.hierarchy_path.to_s
|
|
241
|
+
build_file_ref_path[0] = ''
|
|
242
|
+
|
|
243
|
+
build_file_ref_path
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def path_names_from_path(path)
|
|
247
|
+
path.to_s.split('/')
|
|
248
|
+
end
|
|
249
|
+
|
|
94
250
|
#Create file reference for specific group
|
|
95
251
|
# @param group [Xcodeproj::Project::Object::PBXGroup] - group where create file reference
|
|
96
252
|
# @param path [String] path for file
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: api_gen_helper
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nikolay Aksenov
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-07-
|
|
11
|
+
date: 2017-07-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: xcodeproj
|