solara 0.2.0 → 0.2.2

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.
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 +13 -8
  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.2
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