File tree Expand file tree Collapse file tree 2 files changed +52
-0
lines changed
Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Original file line number Diff line number Diff line change @@ -86,6 +86,24 @@ impl PBXObjectCollection {
8686 self . get_fs_references ( |fs_reference| fs_reference. is_group ( ) )
8787 }
8888
89+ /// Get PBXGroup with by name or path
90+ pub fn get_group_by_name_or_path < ' a , S : AsRef < str > > (
91+ & ' a self ,
92+ name_or_path : S ,
93+ ) -> Option < ( String , Rc < RefCell < PBXFSReference > > ) > {
94+ let name = name_or_path. as_ref ( ) ;
95+ self . groups ( ) . into_iter ( ) . find ( |( _, o) | {
96+ let group = o. borrow ( ) ;
97+ if let Some ( n) = group. name ( ) {
98+ return n == name;
99+ } else if let Some ( p) = group. path ( ) {
100+ return p == name;
101+ } else {
102+ false
103+ }
104+ } )
105+ }
106+
89107 /// Get all PBXProject
90108 pub fn projects < ' a > ( & ' a self ) -> Vec < ( String , Rc < RefCell < PBXProject > > ) > {
91109 self . iter ( )
Original file line number Diff line number Diff line change @@ -124,6 +124,27 @@ impl PBXFSReference {
124124 pub fn parent ( & self ) -> Option < Rc < RefCell < Self > > > {
125125 self . parent . upgrade ( )
126126 }
127+
128+ /// Get File from the group
129+ ///
130+ /// NOTE: This will return None if self is file
131+ pub fn get_file < S : AsRef < str > > ( & self , name : S ) -> Option < Rc < RefCell < PBXFSReference > > > {
132+ let name = name. as_ref ( ) ;
133+ self . children ( ) . into_iter ( ) . find ( |o| {
134+ if !o. borrow ( ) . is_file ( ) {
135+ return false ;
136+ }
137+ let file = o. borrow ( ) ;
138+
139+ if let Some ( n) = file. name ( ) {
140+ n == name
141+ } else if let Some ( p) = file. path ( ) {
142+ p == name
143+ } else {
144+ false
145+ }
146+ } )
147+ }
127148}
128149
129150impl Eq for PBXFSReference { }
@@ -178,4 +199,17 @@ mod tests {
178199 main_group. children_references( )
179200 )
180201 }
202+ #[ test]
203+ fn get_file ( ) {
204+ use crate :: pbxproj:: test_demo_file;
205+ let project = test_demo_file ! ( demo1) ;
206+ let source_group = project
207+ . objects ( )
208+ . get_group_by_name_or_path ( "Source" )
209+ . unwrap ( )
210+ . 1 ;
211+ let source_group = source_group. borrow ( ) ;
212+ let file = source_group. get_file ( "Log.swift" ) ;
213+ assert ! ( file. is_some( ) )
214+ }
181215}
You can’t perform that action at this time.
0 commit comments