solara 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/solara/lib/core/.DS_Store +0 -0
  3. data/solara/lib/core/aliases/alias_generator.rb +1 -0
  4. data/solara/lib/core/aliases/alias_generator_manager.rb +2 -1
  5. data/solara/lib/core/aliases/solara_terminal_setup.rb +1 -1
  6. data/solara/lib/core/brands/brand_font_switcher.rb +154 -0
  7. data/solara/lib/core/brands/brand_onboarder.rb +8 -6
  8. data/solara/lib/core/brands/brand_switcher.rb +232 -166
  9. data/solara/lib/core/brands/brands_manager.rb +15 -39
  10. data/solara/lib/core/dashboard/brand/BrandDetail.js +19 -0
  11. data/solara/lib/core/dashboard/brand/BrandDetailController.js +50 -8
  12. data/solara/lib/core/dashboard/brand/BrandDetailModel.js +9 -30
  13. data/solara/lib/core/dashboard/brand/BrandDetailView.js +49 -3
  14. data/solara/lib/core/dashboard/brand/InfoPlistStringCatalogManager.js +19 -0
  15. data/solara/lib/core/dashboard/brand/brand.html +209 -62
  16. data/solara/lib/core/dashboard/brand/source/BrandLocalSource.js +1 -1
  17. data/solara/lib/core/dashboard/brand/source/BrandRemoteSource.js +38 -53
  18. data/solara/lib/core/dashboard/brands/BrandsController.js +6 -5
  19. data/solara/lib/core/dashboard/brands/BrandsModel.js +2 -2
  20. data/solara/lib/core/dashboard/brands/BrandsView.js +2 -2
  21. data/solara/lib/core/dashboard/brands/brands.html +3 -1
  22. data/solara/lib/core/dashboard/component/AliasesBottomSheet.js +7 -5
  23. data/solara/lib/core/dashboard/dashboard_manager.rb +2 -0
  24. data/solara/lib/core/dashboard/dashboard_server.rb +1 -3
  25. data/solara/lib/core/dashboard/handler/brand_alisases_handler.rb +4 -11
  26. data/solara/lib/core/dashboard/handler/brand_configurations_manager.rb +11 -11
  27. data/solara/lib/core/dashboard/handler/{brand_configurations_handler.rb → brand_details_handler.rb} +4 -4
  28. data/solara/lib/core/dashboard/handler/brands_handler.rb +1 -1
  29. data/solara/lib/core/dashboard/handler/edit_section_handler.rb +8 -8
  30. data/solara/lib/core/doctor/brand_doctor.rb +31 -31
  31. data/solara/lib/core/doctor/doctor_manager.rb +0 -1
  32. data/solara/lib/core/doctor/project_doctor.rb +0 -1
  33. data/solara/lib/core/doctor/schema/platform/android/android_config.json +0 -4
  34. data/solara/lib/core/doctor/schema/platform/ios/InfoPlist.xcstrings +15 -0
  35. data/solara/lib/core/doctor/schema/platform/ios/ios_config.json +0 -5
  36. data/solara/lib/core/doctor/schema/platform/shared/brand_config.json +9 -0
  37. data/solara/lib/core/doctor/schema/platform/shared/theme.json +94 -9
  38. data/solara/lib/core/doctor/validator/brand_settings_validator.rb +6 -0
  39. data/solara/lib/core/doctor/validator/brand_settings_validator_manager.rb +9 -21
  40. data/solara/lib/core/doctor/validator/template/android_template_validation_config.yml +22 -4
  41. data/solara/lib/core/doctor/validator/template/flutter_template_validation_config.yml +22 -6
  42. data/solara/lib/core/doctor/validator/template/ios_template_validation_config.yml +22 -4
  43. data/solara/lib/core/scripts/brand_config_generator.rb +1 -0
  44. data/solara/lib/core/scripts/brand_config_manager.rb +2 -4
  45. data/solara/lib/core/scripts/brand_exporter.rb +1 -1
  46. data/solara/lib/core/scripts/brand_importer.rb +2 -3
  47. data/solara/lib/core/scripts/brand_offboarder.rb +5 -0
  48. data/solara/lib/core/scripts/brand_resources_manager.rb +127 -54
  49. data/solara/lib/core/scripts/directory_creator.rb +2 -2
  50. data/solara/lib/core/scripts/file_manager.rb +53 -19
  51. data/solara/lib/core/scripts/file_path.rb +175 -30
  52. data/solara/lib/core/scripts/folder_copier.rb +3 -7
  53. data/solara/lib/core/scripts/gitignore_manager.rb +21 -10
  54. data/solara/lib/core/scripts/interactive_file_system_validator.rb +8 -2
  55. data/solara/lib/core/scripts/platform/android/android_manifest_switcher.rb +3 -3
  56. data/solara/lib/core/scripts/platform/android/android_strings_switcher.rb +26 -24
  57. data/solara/lib/core/scripts/platform/android/gradle_switcher.rb +7 -6
  58. data/solara/lib/core/scripts/platform/ios/infoplist_string_catalog_manager.rb +123 -0
  59. data/solara/lib/core/scripts/platform/ios/infoplist_switcher.rb +59 -0
  60. data/solara/lib/core/scripts/platform/ios/ios_plist_manager.rb +11 -20
  61. data/solara/lib/core/scripts/platform/ios/plist_font_manager.rb +33 -0
  62. data/solara/lib/core/scripts/platform/ios/xcconfig_generator.rb +15 -3
  63. data/solara/lib/core/scripts/platform/ios/xcode_asset_manager.rb +2 -3
  64. data/solara/lib/core/scripts/platform/ios/xcode_project_manager.rb +80 -1
  65. data/solara/lib/core/scripts/platform/ios/xcode_project_switcher.rb +15 -34
  66. data/solara/lib/core/scripts/solara_logger.rb +10 -0
  67. data/solara/lib/core/scripts/solara_settings_manager.rb +26 -1
  68. data/solara/lib/core/scripts/strings_xml_manager.rb +17 -2
  69. data/solara/lib/core/scripts/theme_generator.rb +133 -130
  70. data/solara/lib/core/scripts/yaml_manager.rb +23 -0
  71. data/solara/lib/core/solara_configurator.rb +1 -1
  72. data/solara/lib/core/template/brands/android/android_config.json +0 -1
  73. data/solara/lib/core/template/brands/android/res/values/strings.xml +4 -0
  74. data/solara/lib/core/template/brands/ios/InfoPlist.xcstrings +30 -0
  75. data/solara/lib/core/template/brands/ios/ios_config.json +1 -2
  76. data/solara/lib/core/template/brands/shared/brand_config.json +1 -0
  77. data/solara/lib/core/template/brands/shared/theme.json +3 -3
  78. data/solara/lib/core/template/config/android_template_config.json +11 -1
  79. data/solara/lib/core/template/config/flutter_template_config.json +12 -2
  80. data/solara/lib/core/template/config/ios_template_config.json +11 -1
  81. data/solara/lib/core/template/project_template_generator.rb +8 -3
  82. data/solara/lib/solara/version.rb +1 -1
  83. data/solara/lib/solara.rb +8 -4
  84. data/solara/lib/solara_initializer.rb +5 -2
  85. data/solara/lib/solara_manager.rb +1 -1
  86. metadata +62 -43
  87. data/solara/lib/core/dashboard/handler/brand_section_handler.rb +0 -20
  88. data/solara/lib/core/doctor/validator/directory_structure_validator.rb +0 -38
  89. data/solara/lib/core/doctor/validator/file_structure_validator.rb +0 -37
  90. data/solara/lib/core/scripts/platform/ios/ios_file_path_manager.rb +0 -109
  91. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/.DS_Store +0 -0
  92. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/100.png +0 -0
  93. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/102.png +0 -0
  94. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/1024.png +0 -0
  95. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/114.png +0 -0
  96. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/120.png +0 -0
  97. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/128.png +0 -0
  98. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/144.png +0 -0
  99. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/152.png +0 -0
  100. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/16.png +0 -0
  101. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/167.png +0 -0
  102. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/172.png +0 -0
  103. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/180.png +0 -0
  104. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/196.png +0 -0
  105. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/20.png +0 -0
  106. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/216.png +0 -0
  107. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/256.png +0 -0
  108. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/29.png +0 -0
  109. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/32.png +0 -0
  110. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/40.png +0 -0
  111. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/48.png +0 -0
  112. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/50.png +0 -0
  113. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/512.png +0 -0
  114. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/55.png +0 -0
  115. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/57.png +0 -0
  116. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/58.png +0 -0
  117. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/60.png +0 -0
  118. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/64.png +0 -0
  119. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/66.png +0 -0
  120. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/72.png +0 -0
  121. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/76.png +0 -0
  122. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/80.png +0 -0
  123. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/87.png +0 -0
  124. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/88.png +0 -0
  125. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/92.png +0 -0
  126. /data/solara/lib/core/template/brands/ios/{assets → xcassets}/AppIcon.appiconset/Contents.json +0 -0
@@ -15,7 +15,7 @@ class SolaraManager
15
15
  def initialize
16
16
  end
17
17
 
18
- def init(platform, brand_key, brand_name)
18
+ def init(brand_key, brand_name)
19
19
  SolaraInitializer.new(brand_key, brand_name).init
20
20
  end
21
21
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Malek Kamel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-11 00:00:00.000000000 Z
11
+ date: 2024-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.4.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: plist
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.7.1
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 3.7.1
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: bundler
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -152,6 +166,7 @@ files:
152
166
  - solara/lib/core/aliases/alias_generator.rb
153
167
  - solara/lib/core/aliases/alias_generator_manager.rb
154
168
  - solara/lib/core/aliases/solara_terminal_setup.rb
169
+ - solara/lib/core/brands/brand_font_switcher.rb
155
170
  - solara/lib/core/brands/brand_onboarder.rb
156
171
  - solara/lib/core/brands/brand_switcher.rb
157
172
  - solara/lib/core/brands/brands_manager.rb
@@ -161,6 +176,7 @@ files:
161
176
  - solara/lib/core/dashboard/brand/BrandDetailController.js
162
177
  - solara/lib/core/dashboard/brand/BrandDetailModel.js
163
178
  - solara/lib/core/dashboard/brand/BrandDetailView.js
179
+ - solara/lib/core/dashboard/brand/InfoPlistStringCatalogManager.js
164
180
  - solara/lib/core/dashboard/brand/brand.html
165
181
  - solara/lib/core/dashboard/brand/source/BrandLocalSource.js
166
182
  - solara/lib/core/dashboard/brand/source/BrandRemoteSource.js
@@ -179,10 +195,9 @@ files:
179
195
  - solara/lib/core/dashboard/dashboard_server.rb
180
196
  - solara/lib/core/dashboard/handler/base_handler.rb
181
197
  - solara/lib/core/dashboard/handler/brand_alisases_handler.rb
182
- - solara/lib/core/dashboard/handler/brand_configurations_handler.rb
183
198
  - solara/lib/core/dashboard/handler/brand_configurations_manager.rb
199
+ - solara/lib/core/dashboard/handler/brand_details_handler.rb
184
200
  - solara/lib/core/dashboard/handler/brand_icon_handler.rb
185
- - solara/lib/core/dashboard/handler/brand_section_handler.rb
186
201
  - solara/lib/core/dashboard/handler/brands_handler.rb
187
202
  - solara/lib/core/dashboard/handler/current_brand_handler.rb
188
203
  - solara/lib/core/dashboard/handler/doctor_handler.rb
@@ -207,13 +222,13 @@ files:
207
222
  - solara/lib/core/doctor/schema/brand_configurations.json
208
223
  - solara/lib/core/doctor/schema/platform/android/android_config.json
209
224
  - solara/lib/core/doctor/schema/platform/android/android_signing.json
225
+ - solara/lib/core/doctor/schema/platform/ios/InfoPlist.xcstrings
210
226
  - solara/lib/core/doctor/schema/platform/ios/ios_config.json
211
227
  - solara/lib/core/doctor/schema/platform/ios/ios_signing.json
228
+ - solara/lib/core/doctor/schema/platform/shared/brand_config.json
212
229
  - solara/lib/core/doctor/schema/platform/shared/theme.json
213
230
  - solara/lib/core/doctor/validator/brand_settings_validator.rb
214
231
  - solara/lib/core/doctor/validator/brand_settings_validator_manager.rb
215
- - solara/lib/core/doctor/validator/directory_structure_validator.rb
216
- - solara/lib/core/doctor/validator/file_structure_validator.rb
217
232
  - solara/lib/core/doctor/validator/json_file_validator.rb
218
233
  - solara/lib/core/doctor/validator/json_schema_validator.rb
219
234
  - solara/lib/core/doctor/validator/project_filesystem_validator.rb
@@ -238,8 +253,10 @@ files:
238
253
  - solara/lib/core/scripts/platform/android/android_strings_switcher.rb
239
254
  - solara/lib/core/scripts/platform/android/gradle_switcher.rb
240
255
  - solara/lib/core/scripts/platform/android/properties_generator.rb
241
- - solara/lib/core/scripts/platform/ios/ios_file_path_manager.rb
256
+ - solara/lib/core/scripts/platform/ios/infoplist_string_catalog_manager.rb
257
+ - solara/lib/core/scripts/platform/ios/infoplist_switcher.rb
242
258
  - solara/lib/core/scripts/platform/ios/ios_plist_manager.rb
259
+ - solara/lib/core/scripts/platform/ios/plist_font_manager.rb
243
260
  - solara/lib/core/scripts/platform/ios/xcconfig_generator.rb
244
261
  - solara/lib/core/scripts/platform/ios/xcode_asset_manager.rb
245
262
  - solara/lib/core/scripts/platform/ios/xcode_project_manager.rb
@@ -267,45 +284,47 @@ files:
267
284
  - solara/lib/core/template/brands/android/res/mipmap-xxhdpi/ic_launcher_round.png
268
285
  - solara/lib/core/template/brands/android/res/mipmap-xxxhdpi/ic_launcher.png
269
286
  - solara/lib/core/template/brands/android/res/mipmap-xxxhdpi/ic_launcher_round.png
287
+ - solara/lib/core/template/brands/android/res/values/strings.xml
270
288
  - solara/lib/core/template/brands/brands.json
271
- - solara/lib/core/template/brands/ios/assets/.DS_Store
272
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/100.png
273
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/102.png
274
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/1024.png
275
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/114.png
276
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/120.png
277
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/128.png
278
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/144.png
279
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/152.png
280
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/16.png
281
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/167.png
282
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/172.png
283
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/180.png
284
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/196.png
285
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/20.png
286
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/216.png
287
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/256.png
288
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/29.png
289
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/32.png
290
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/40.png
291
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/48.png
292
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/50.png
293
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/512.png
294
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/55.png
295
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/57.png
296
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/58.png
297
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/60.png
298
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/64.png
299
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/66.png
300
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/72.png
301
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/76.png
302
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/80.png
303
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/87.png
304
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/88.png
305
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/92.png
306
- - solara/lib/core/template/brands/ios/assets/AppIcon.appiconset/Contents.json
289
+ - solara/lib/core/template/brands/ios/InfoPlist.xcstrings
307
290
  - solara/lib/core/template/brands/ios/ios_config.json
308
291
  - solara/lib/core/template/brands/ios/ios_signing.json
292
+ - solara/lib/core/template/brands/ios/xcassets/.DS_Store
293
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/100.png
294
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/102.png
295
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/1024.png
296
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/114.png
297
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/120.png
298
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/128.png
299
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/144.png
300
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/152.png
301
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/16.png
302
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/167.png
303
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/172.png
304
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/180.png
305
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/196.png
306
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/20.png
307
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/216.png
308
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/256.png
309
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/29.png
310
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/32.png
311
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/40.png
312
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/48.png
313
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/50.png
314
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/512.png
315
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/55.png
316
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/57.png
317
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/58.png
318
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/60.png
319
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/64.png
320
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/66.png
321
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/72.png
322
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/76.png
323
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/80.png
324
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/87.png
325
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/88.png
326
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/92.png
327
+ - solara/lib/core/template/brands/ios/xcassets/AppIcon.appiconset/Contents.json
309
328
  - solara/lib/core/template/brands/shared/.DS_Store
310
329
  - solara/lib/core/template/brands/shared/brand_config.json
311
330
  - solara/lib/core/template/brands/shared/theme.json
@@ -1,20 +0,0 @@
1
- class BrandSectionHandler < BaseHandler
2
- def mount
3
- @server.mount_proc("/section") do |req, res|
4
- begin
5
- query = CGI.parse(req.query_string)
6
- path = query['path']&.first
7
- if File.exist?(path)
8
- res.body = File.read(path)
9
- res['Content-Type'] = 'application/json'
10
- else
11
- res.status = 404
12
- res.body = JSON.generate({ error: "Config file not found: #{path}" })
13
- res['Content-Type'] = 'application/json'
14
- end
15
- rescue StandardError => e
16
- handle_error(res, e, "Error in brand section handler")
17
- end
18
- end
19
- end
20
- end
@@ -1,38 +0,0 @@
1
- Dir[File.expand_path('*.rb', __dir__)].each { |file| require_relative file }
2
-
3
- class DirectoryStructure
4
- attr_reader :path, :use_glob
5
-
6
- def initialize(path, use_glob: true)
7
- @path = path
8
- @use_glob = use_glob
9
- end
10
-
11
- def self.expand(pattern, use_glob: true)
12
- if use_glob
13
- Dir.glob(pattern).select { |path| File.directory?(path) }.map do |path|
14
- DirectoryStructure.new(path, use_glob: use_glob)
15
- end
16
- else
17
- [DirectoryStructure.new(pattern, use_glob: use_glob)]
18
- end
19
- end
20
- end
21
-
22
- class DirectoryStructureValidator < ValidationStrategy
23
- def initialize(dir)
24
- @dir = dir
25
- end
26
-
27
- def validate(project_path)
28
- full_path = File.join(project_path, @dir.path)
29
- paths = @dir.use_glob ? DirectoryStructure.expand(full_path) : [@dir]
30
-
31
- if paths.any? { |path| File.directory?(path.path) }
32
- Solara.logger.passed("Directory exists: '#{@dir.path}'")
33
- else
34
- raise ValidationError, "Directory missing: '#{@dir.path}'"
35
- end
36
- end
37
-
38
- end
@@ -1,37 +0,0 @@
1
- Dir[File.expand_path('*.rb', __dir__)].each { |file| require_relative file }
2
-
3
- class FileStructure
4
- attr_reader :path, :use_glob
5
-
6
- def initialize(path, use_glob: true)
7
- @path = path
8
- @use_glob = use_glob
9
- end
10
-
11
- def self.expand(pattern, use_glob: true)
12
- if use_glob
13
- Dir.glob(pattern).select { |path| File.file?(path) }.map do |path|
14
- FileStructure.new(path, use_glob: use_glob)
15
- end
16
- else
17
- [FileStructure.new(pattern, use_glob: use_glob)]
18
- end
19
- end
20
- end
21
-
22
- class FileStructureValidator < ValidationStrategy
23
- def initialize(file)
24
- @file = file
25
- end
26
-
27
- def validate(project_path)
28
- full_path = File.join(project_path, @file.path)
29
- paths = @file.use_glob ? FileStructure.expand(full_path) : [@file]
30
-
31
- if paths.any? { |path| File.file?(path.path) }
32
- Solara.logger.passed("File exists: '#{@file.path}'")
33
- else
34
- raise ValidationError, "File missing: '#{@file.path}'"
35
- end
36
- end
37
- end
@@ -1,109 +0,0 @@
1
- Dir.glob("#{__dir__}/*.rb").each { |file| require file }
2
- require 'singleton'
3
- require 'pathname'
4
-
5
- class IOSFilePathManager
6
- include Singleton
7
-
8
- def initialize
9
- @platform = SolaraSettingsManager.instance.platform
10
- @project_root = SolaraSettingsManager.instance.project_root
11
- end
12
-
13
- def xcode_project
14
- path = ProjectSettingsManager.instance.value('xcodeproj', Platform::IOS)
15
- File.join(@project_root, path)
16
- end
17
-
18
- def xcode_project_directory
19
- Pathname.new(xcode_project).parent.to_s
20
- end
21
-
22
- def brand_assets(brand_key)
23
- File.join(FilePath.brands, brand_key, FilePath.ios, 'assets')
24
- end
25
-
26
- def brand_xcconfig
27
- File.join(artifacts, 'Brand.xcconfig')
28
- end
29
-
30
- def artifacts
31
- case @platform
32
- when Platform::Flutter
33
- return File.join(@project_root, FilePath.ios, 'Flutter', 'Artifacts')
34
- when Platform::IOS
35
- return File.join(xcode_project_directory, 'Artifacts')
36
- else
37
- raise ArgumentError, "Invalid platform: #{@platform}"
38
- end
39
- end
40
-
41
- def info_plist
42
- path = ProjectSettingsManager.instance.value('Info.plist', Platform::IOS)
43
- File.join(@project_root, path)
44
- end
45
-
46
- def assets
47
- path = ProjectSettingsManager.instance.value('Assets.xcassets', Platform::IOS)
48
- File.join(@project_root, path)
49
- end
50
-
51
- def assets_directory
52
- File.dirname(assets)
53
- end
54
-
55
- def assets_artifacts
56
- File.join(assets_directory, 'Assets.xcassets', 'Artifacts')
57
- end
58
-
59
- def assets_artifcats
60
- File.join(assets, 'Artifacts')
61
- end
62
-
63
- def app_xcconfig(name)
64
- case @platform
65
- when Platform::Flutter
66
- return File.join(@project_root, FilePath.ios, 'Flutter', name)
67
- when Platform::IOS
68
- return File.join(xcode_project_directory, 'XCConfig', name)
69
- else
70
- raise ArgumentError, "Invalid platform: #{@platform}"
71
- end
72
- end
73
-
74
- def app_xcconfig_directory
75
- Pathname.new(app_xcconfig('Debug.xcconfig')).parent.to_s
76
- end
77
-
78
- def brand_app_icon(brand_key)
79
- File.join(FilePath.brands, brand_key, FilePath.ios, 'assets', 'AppIcon.appiconset')
80
- end
81
-
82
- def brand_app_icon_image(brand_key)
83
- appicon_set_path = brand_app_icon(brand_key)
84
-
85
- if appicon_set_path.nil?
86
- raise "Error: AppIcon.appiconset not found for brand #{brand_key}"
87
- end
88
-
89
- contents_json_path = File.join(appicon_set_path, 'Contents.json')
90
-
91
- unless File.exist?(contents_json_path)
92
- raise "Error: Contents.json not found in AppIcon.appiconset for brand #{brand_key}"
93
- end
94
-
95
- contents = JSON.parse(File.read(contents_json_path))
96
-
97
- largest_image = contents['images'].max_by do |img|
98
- size = img['size'].scan(/(\d+)x(\d+)/).first&.map(&:to_i)
99
- size ? size[0] * size[1] : 0
100
- end
101
-
102
- if largest_image
103
- File.join(appicon_set_path, largest_image['filename'])
104
- else
105
- raise "No images found in Contents.json for brand #{brand_key}"
106
- end
107
- end
108
-
109
- end