flr 2.0.0 → 3.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf8e0a359356f8ea371d681026c47f7e4e649d144a0c1cda4acc051f07404cbd
4
- data.tar.gz: fbf661e81c360e715695c2b9906ccb0328ed07163a208aab3b1d50ef024a5423
3
+ metadata.gz: 4e7b9ee5330233ba9aac3017cd51d403139365b6f95bd0729e188671dfadfb35
4
+ data.tar.gz: 8be015c230dc9581326c39f7b5dd53074779e7f6291c911a18f9e9afac20ef7c
5
5
  SHA512:
6
- metadata.gz: 6263917c0732cc4b6e772fe024267b8854d9b0f99c6868f2326caa6986dc68015db43f5e24be2bf0f06a3478d84de900099289c6b6ae2780542eb492d50ff93a
7
- data.tar.gz: 87218e5d6f9d85fbce53246077b8a2e74e7e9df84fc45e221635b2b0c5980373177530b5bb6f4996d8cae1576f3ffc2d3beb741c49a99ee18f2a4c081f0444a8
6
+ metadata.gz: 3ae44108a8e59cd1680700276f5b1d47a6235c5624566c6195f17bd522d901b02182faecee8dba056c200723f57f54e379ca37a8483c0493dc6dfe5a3678e7e2
7
+ data.tar.gz: 98b5bf07ab3bce3305572555d58ef71037d9c6822aa1f4842fcb1d07e8090bf9a198b40cd269e08bbdd18103c4419d6b2b30f38b8cff6ce7300c9c2c613e937d
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  .rbenv-version
8
8
  .rbx/
9
9
  /concatenated.*
10
+ build/
10
11
 
11
12
  # Yardoc
12
13
  /.yardoc
@@ -1,3 +1,16 @@
1
+ ## 3.0.0
2
+
3
+ - Support for processing non-implied resource file
4
+
5
+ > - non-implied resource file: the resource file which is outside of `lib/` directory, for example:
6
+ > - `~/path/to/flutter_r_demo/assets/images/test.png`
7
+ > - `~/path/to/flutter_r_demo/assets/images/3.0x/test.png`
8
+ > - implied resource file: the resource file which is inside of `lib/` directory, for example:
9
+ > - `~/path/to/flutter_r_demo/lib/assets/images/hot_foot_N.png`
10
+ > - `~/path/to/flutter_r_demo/lib/assets/images/3.0x/hot_foot_N.png`
11
+
12
+ - New recommended flutter resource structure
13
+
1
14
  ## 2.0.0
2
15
 
3
16
  - New asset generation algorithm to support all kinds of standard or nonstandard image/text resource structure
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- flr (2.0.0)
4
+ flr (3.0.0)
5
5
  bundler (~> 2.0, >= 2.0.2)
6
6
  listen (~> 3.0, >= 3.2.1)
7
7
  thor (~> 1.0, >= 1.0.1)
@@ -4,7 +4,7 @@ module Flr
4
4
  # 条件检测器,提供检测各种条件是否合法的方法
5
5
  class Checker
6
6
 
7
- # check_pubspec_file_is_existed(flutter_dir) -> true
7
+ # check_pubspec_file_is_existed(flutter_project_dir) -> true
8
8
  #
9
9
  # 检测当前flutter工程目录是否存在pubspec.yaml文件
10
10
  # 若存在,返回true
@@ -12,16 +12,16 @@ module Flr
12
12
  #
13
13
  # === Examples
14
14
  #
15
- # flutter_dir = "~path/to/flutter_r_demo"
16
- # Checker.check_pubspec_file_is_existed(flutter_dir)
15
+ # flutter_project_dir = "~path/to/flutter_r_demo"
16
+ # Checker.check_pubspec_file_is_existed(flutter_project_dir)
17
17
  #
18
- def self.check_pubspec_file_is_existed(flutter_dir)
19
- pubspec_file_path = flutter_dir + "/pubspec.yaml"
18
+ def self.check_pubspec_file_is_existed(flutter_project_dir)
19
+ pubspec_file_path = flutter_project_dir + "/pubspec.yaml"
20
20
 
21
21
  if File.exist?(pubspec_file_path) == false
22
22
  message = <<-MESSAGE
23
23
  #{"[x]: #{pubspec_file_path} not found".error_style}
24
- #{"[*]: please make sure pubspec.yaml is existed in #{flutter_dir}".tips_style}
24
+ #{"[*]: please make sure pubspec.yaml is existed in #{flutter_project_dir}".tips_style}
25
25
  MESSAGE
26
26
 
27
27
  raise(message)
@@ -63,7 +63,7 @@ module Flr
63
63
  return true
64
64
  end
65
65
 
66
- # check_flr_assets_is_legal(flutter_dir, flr_config) -> resource_dir_result_tuple
66
+ # check_flr_assets_is_legal(flutter_project_dir, flr_config) -> resource_dir_result_tuple
67
67
  #
68
68
  # 检测当前flr配置信息中的assets配置是否合法
69
69
  # 若合法,返回资源目录结果三元组 resource_dir_result_triplet
@@ -88,12 +88,12 @@ module Flr
88
88
  # 判断flr的assets配置合法的标准是:assets配置的resource_dir数组中的legal_resource_dir数量大于0。
89
89
  #
90
90
  # === Examples
91
- # flutter_dir = "~/path/to/flutter_r_demo"
91
+ # flutter_project_dir = "~/path/to/flutter_r_demo"
92
92
  # assets_legal_resource_dir_array = ["~/path/to/flutter_r_demo/lib/assets/images", "~/path/to/flutter_r_demo/lib/assets/texts"]
93
93
  # fonts_legal_resource_dir_array = ["~/path/to/flutter_r_demo/lib/assets/fonts"]
94
94
  # illegal_resource_dir_array = ["~/path/to/flutter_r_demo/to/non-existed_folder"]
95
95
  #
96
- def self.check_flr_assets_is_legal(flutter_dir, flr_config)
96
+ def self.check_flr_assets_is_legal(flutter_project_dir, flr_config)
97
97
  core_version = flr_config["core_version"]
98
98
  dartfmt_line_length = flr_config["dartfmt_line_length"]
99
99
  assets_resource_dir_array = flr_config["assets"]
@@ -121,7 +121,7 @@ module Flr
121
121
  illegal_resource_dir_array = []
122
122
 
123
123
  assets_resource_dir_array.each do |relative_resource_dir|
124
- resource_dir = flutter_dir + "/" + relative_resource_dir
124
+ resource_dir = flutter_project_dir + "/" + relative_resource_dir
125
125
  if File.exist?(resource_dir) == true
126
126
  assets_legal_resource_dir_array.push(resource_dir)
127
127
  else
@@ -130,7 +130,7 @@ module Flr
130
130
  end
131
131
 
132
132
  fonts_resource_dir_array.each do |relative_resource_dir|
133
- resource_dir = flutter_dir + "/" + relative_resource_dir
133
+ resource_dir = flutter_project_dir + "/" + relative_resource_dir
134
134
  if File.exist?(resource_dir) == true
135
135
  fonts_legal_resource_dir_array.push(resource_dir)
136
136
  else
@@ -36,7 +36,9 @@ module Flr
36
36
  # display recommended flutter resource structure
37
37
  def self.display_recommended_flutter_resource_structure
38
38
  message = <<-MESSAGE
39
- Flr recommends the following flutter resource structure:
39
+ Flr recommends the following flutter resource structure schemes:
40
+
41
+ #{"------------------------------ scheme 1 ------------------------------".bold.bg_red}
40
42
 
41
43
  flutter_project_root_dir
42
44
  ├── build
@@ -84,6 +86,54 @@ Flr recommends the following flutter resource structure:
84
86
  #{"fonts:".tips_style}
85
87
  #{"- lib/assets/fonts".tips_style}
86
88
 
89
+ #{"------------------------------ scheme 2 ------------------------------".bold.bg_red}
90
+
91
+ flutter_project_root_dir
92
+ ├── build
93
+ │ ├── ..
94
+ ├── lib
95
+ │ ├── ..
96
+ ├── assets
97
+ │ ├── images #{"// image resource directory of all modules".red}
98
+ │ │ ├── \#{module} #{"// image resource directory of a module".red}
99
+ │ │ │ ├── \#{main_image_asset}
100
+ │ │ │ ├── \#{variant-dir} #{"// image resource directory of a variant".red}
101
+ │ │ │ │ ├── \#{image_asset_variant}
102
+ │ │ │
103
+ │ │ ├── home #{"// image resource directory of home module".red}
104
+ │ │ │ ├── home_badge.svg
105
+ │ │ │ ├── home_icon.png
106
+ │ │ │ ├── 3.0x #{"// image resource directory of a 3.0x-ratio-variant".red}
107
+ │ │ │ │ ├── home_icon.png
108
+ │ │ │
109
+ │ ├── texts #{"// text resource directory".red}
110
+ │ │ │ #{"// (you can also break it down further by module)".red}
111
+ │ │ └── test.json
112
+ │ │ └── test.yaml
113
+ │ │ │
114
+ │ ├── fonts #{"// font resource directory of all font-families".red}
115
+ │ │ ├── \#{font-family} #{"// font resource directory of a font-family".red}
116
+ │ │ │ ├── \#{font-family}-\#{font_weight_or_style}.ttf
117
+ │ │ │
118
+ │ │ ├── Amiri #{"// font resource directory of Amiri font-family".red}
119
+ │ │ │ ├── Amiri-Regular.ttf
120
+ │ │ │ ├── Amiri-Bold.ttf
121
+ │ │ │ ├── Amiri-Italic.ttf
122
+ │ │ │ ├── Amiri-BoldItalic.ttf
123
+ │ ├── ..
124
+
125
+ #{"[*]: Then config the resource directories that need to be scanned as follows:".tips_style}
126
+
127
+ #{"flr:".tips_style}
128
+ #{"core_version: #{Flr::CORE_VERSION}".tips_style}
129
+ #{"dartfmt_line_length: #{Flr::DARTFMT_LINE_LENGTH}".tips_style}
130
+ #{"# config the image and text resource directories that need to be scanned".tips_style}
131
+ #{"assets:".tips_style}
132
+ #{"- assets/images".tips_style}
133
+ #{"- assets/texts".tips_style}
134
+ #{"# config the font resource directories that need to be scanned".tips_style}
135
+ #{"fonts:".tips_style}
136
+ #{"- assets/fonts".tips_style}
87
137
  MESSAGE
88
138
 
89
139
  puts(message)
@@ -126,7 +176,7 @@ Flr recommends the following flutter resource structure:
126
176
  begin
127
177
  Checker.check_pubspec_file_is_existed(flutter_project_root_dir)
128
178
 
129
- pubspec_file_path = FileUtil.get_pubspec_file_path
179
+ pubspec_file_path = FileUtil.get_pubspec_file_path(flutter_project_root_dir)
130
180
 
131
181
  pubspec_config = FileUtil.load_pubspec_config_from_file(pubspec_file_path)
132
182
 
@@ -278,7 +328,7 @@ Flr recommends the following flutter resource structure:
278
328
  begin
279
329
  Checker.check_pubspec_file_is_existed(flutter_project_root_dir)
280
330
 
281
- pubspec_file_path = FileUtil.get_pubspec_file_path
331
+ pubspec_file_path = FileUtil.get_pubspec_file_path(flutter_project_root_dir)
282
332
 
283
333
  pubspec_config = FileUtil.load_pubspec_config_from_file(pubspec_file_path)
284
334
 
@@ -293,6 +343,7 @@ Flr recommends the following flutter resource structure:
293
343
  return
294
344
  end
295
345
 
346
+ is_package_project_type = FileUtil.is_package_project_type?(flutter_project_root_dir)
296
347
  package_name = pubspec_config["name"]
297
348
 
298
349
  # ----- Step-1 End -----
@@ -588,7 +639,7 @@ Flr recommends the following flutter resource structure:
588
639
  #
589
640
 
590
641
  r_dart_file.puts("\n")
591
- g__R_Image_AssetResource_class_code = CodeUtil.generate__R_Image_AssetResource_class(non_svg_image_asset_array, non_svg_image_asset_id_dict, package_name)
642
+ g__R_Image_AssetResource_class_code = CodeUtil.generate__R_Image_AssetResource_class(non_svg_image_asset_array, non_svg_image_asset_id_dict, package_name, is_package_project_type)
592
643
  r_dart_file.puts(g__R_Image_AssetResource_class_code)
593
644
 
594
645
  # ----- Step-13 End -----
@@ -598,7 +649,7 @@ Flr recommends the following flutter resource structure:
598
649
  #
599
650
 
600
651
  r_dart_file.puts("\n")
601
- g__R_Svg_AssetResource_class_code = CodeUtil.generate__R_Svg_AssetResource_class(svg_image_asset_array, svg_image_asset_id_dict, package_name)
652
+ g__R_Svg_AssetResource_class_code = CodeUtil.generate__R_Svg_AssetResource_class(svg_image_asset_array, svg_image_asset_id_dict, package_name, is_package_project_type)
602
653
  r_dart_file.puts(g__R_Svg_AssetResource_class_code)
603
654
 
604
655
  # ----- Step-14 End -----
@@ -608,7 +659,7 @@ Flr recommends the following flutter resource structure:
608
659
  #
609
660
 
610
661
  r_dart_file.puts("\n")
611
- g__R_Text_AssetResource_class_code = CodeUtil.generate__R_Text_AssetResource_class(text_asset_array, text_asset_id_dict, package_name)
662
+ g__R_Text_AssetResource_class_code = CodeUtil.generate__R_Text_AssetResource_class(text_asset_array, text_asset_id_dict, package_name, is_package_project_type)
612
663
  r_dart_file.puts(g__R_Text_AssetResource_class_code)
613
664
 
614
665
  # ----- Step-15 End -----
@@ -726,7 +777,7 @@ Flr recommends the following flutter resource structure:
726
777
  begin
727
778
  Checker.check_pubspec_file_is_existed(flutter_project_root_dir)
728
779
 
729
- pubspec_file_path = FileUtil.get_pubspec_file_path
780
+ pubspec_file_path = FileUtil.get_pubspec_file_path(flutter_project_root_dir)
730
781
 
731
782
  pubspec_config = FileUtil.load_pubspec_config_from_file(pubspec_file_path)
732
783
 
@@ -34,12 +34,12 @@ module Flr
34
34
  return false
35
35
  end
36
36
 
37
- # generate_main_asset(flutter_dir, package_name, legal_resource_file) -> main_asset
37
+ # generate_main_asset(flutter_project_dir, package_name, legal_resource_file) -> main_asset
38
38
  #
39
39
  # 为当前资源文件生成 main_asset
40
40
  #
41
41
  # === Examples
42
- # flutter_dir = "~/path/to/flutter_r_demo"
42
+ # flutter_project_dir = "~/path/to/flutter_r_demo"
43
43
  # package_name = "flutter_r_demo"
44
44
  #
45
45
  # === Example-1
@@ -58,7 +58,15 @@ module Flr
58
58
  # legal_resource_file = "~/path/to/flutter_r_demo/lib/assets/fonts/Amiri/Amiri-Regular.ttf"
59
59
  # main_asset = "packages/flutter_r_demo/fonts/Amiri/Amiri-Regular.ttf"
60
60
  #
61
- def self.generate_main_asset(flutter_dir, package_name, legal_resource_file)
61
+ # === Example-4
62
+ # legal_resource_file = "~/path/to/flutter_r_demo/assets/images/test.png"
63
+ # main_asset = "assets/images/test.png"
64
+ #
65
+ # === Example-5
66
+ # legal_resource_file = "~/path/to/flutter_r_demo/assets/images/3.0x/test.png"
67
+ # main_asset = "assets/images/test.png"
68
+ #
69
+ def self.generate_main_asset(flutter_project_dir, package_name, legal_resource_file)
62
70
  # legal_resource_file: ~/path/to/flutter_r_demo/lib/assets/images/3.0x/test.png
63
71
  # to get main_resource_file: ~/path/to/flutter_r_demo/lib/assets/images/test.png
64
72
  main_resource_file = legal_resource_file
@@ -74,39 +82,55 @@ module Flr
74
82
  end
75
83
 
76
84
  # main_resource_file: ~/path/to/flutter_r_demo/lib/assets/images/test.png
77
- # main_relative_resource_file: lib/assets/images/test.png
78
- # to get main_implied_relative_resource_file: assets/images/test.png
79
- flutter_dir_prefix = "#{flutter_dir}/"
85
+ # to get main_relative_resource_file: lib/assets/images/test.png
86
+ flutter_project_dir_prefix = "#{flutter_project_dir}/"
80
87
  main_relative_resource_file = main_resource_file
81
- if main_relative_resource_file =~ /\A#{flutter_dir_prefix}/
82
- main_relative_resource_file["#{flutter_dir_prefix}"] = ""
88
+ if main_relative_resource_file =~ /\A#{flutter_project_dir_prefix}/
89
+ main_relative_resource_file["#{flutter_project_dir_prefix}"] = ""
83
90
  end
91
+
92
+ # 判断 main_relative_resource_file 是不是 implied_resource_file 类型
93
+ # implied_resource_file 的定义是:放置在 "lib/" 目录内 resource_file
94
+ # 具体实现是:main_relative_resource_file 的前缀若是 "lib/" ,则其是 implied_resource_file 类型;
95
+ #
96
+ # implied_relative_resource_file 生成 main_asset 的算法是: main_asset = "packages/#{package_name}/#{asset_name}"
97
+ # non-implied_relative_resource_file 生成 main_asset 的算法是: main_asset = "#{asset_name}"
98
+ #
84
99
  lib_prefix = "lib/"
85
- main_implied_relative_resource_file = main_relative_resource_file;
86
- if main_implied_relative_resource_file =~ /\A#{lib_prefix}/
87
- main_implied_relative_resource_file[lib_prefix] = ""
100
+ if main_relative_resource_file =~ /\A#{lib_prefix}/
101
+ # main_relative_resource_file: lib/assets/images/test.png
102
+ # to get asset_name: assets/images/test.png
103
+ asset_name = main_relative_resource_file
104
+ asset_name[lib_prefix] = ""
105
+
106
+ main_asset = "packages/#{package_name}/#{asset_name}"
107
+ return main_asset
108
+ else
109
+ # main_relative_resource_file: assets/images/test.png
110
+ # to get asset_name: assets/images/test.png
111
+ asset_name = main_relative_resource_file
112
+
113
+ main_asset = asset_name
114
+ return main_asset
88
115
  end
89
-
90
- main_asset = "packages/#{package_name}/#{main_implied_relative_resource_file}"
91
- return main_asset
92
116
  end
93
117
 
94
- # generate_image_assets(flutter_dir, package_name, legal_image_file_array) -> image_asset_array
118
+ # generate_image_assets(flutter_project_dir, package_name, legal_image_file_array) -> image_asset_array
95
119
  #
96
120
  # 遍历指定资源目录下扫描找到的legal_image_file数组生成image_asset数组
97
121
  #
98
122
  # === Examples
99
- # flutter_dir = "~/path/to/flutter_r_demo"
123
+ # flutter_project_dir = "~/path/to/flutter_r_demo"
100
124
  # package_name = "flutter_r_demo"
101
125
  # legal_image_file_array = ["~/path/to/flutter_r_demo/lib/assets/images/test.png", "~/path/to/flutter_r_demo/lib/assets/images/3.0x/test.png"]
102
126
  # image_asset_array = ["packages/flutter_r_demo/assets/images/test.png"]
103
127
  #
104
- def self.generate_image_assets(flutter_dir, package_name, legal_image_file_array)
128
+ def self.generate_image_assets(flutter_project_dir, package_name, legal_image_file_array)
105
129
 
106
130
  image_asset_array = []
107
131
 
108
132
  legal_image_file_array.each do |legal_image_file|
109
- image_asset = generate_main_asset(flutter_dir, package_name, legal_image_file)
133
+ image_asset = generate_main_asset(flutter_project_dir, package_name, legal_image_file)
110
134
  image_asset_array.push(image_asset)
111
135
  end
112
136
 
@@ -114,22 +138,22 @@ module Flr
114
138
  return image_asset_array
115
139
  end
116
140
 
117
- # generate_text_assets(flutter_dir, package_name, legal_text_file_array) -> text_asset_array
141
+ # generate_text_assets(flutter_project_dir, package_name, legal_text_file_array) -> text_asset_array
118
142
  #
119
143
  # 遍历指定资源目录下扫描找到的legal_text_file数组生成text_asset数组
120
144
  #
121
145
  # === Examples
122
- # flutter_dir = "~/path/to/flutter_r_demo"
146
+ # flutter_project_dir = "~/path/to/flutter_r_demo"
123
147
  # package_name = "flutter_r_demo"
124
148
  # legal_text_file_array = ["~path/to/flutter_r_demo/lib/assets/jsons/test.json"]
125
149
  # text_asset_array = ["packages/flutter_r_demo/assets/jsons/test.json"]
126
150
  #
127
- def self.generate_text_assets(flutter_dir, package_name, legal_text_file_array)
151
+ def self.generate_text_assets(flutter_project_dir, package_name, legal_text_file_array)
128
152
 
129
153
  text_asset_array = []
130
154
 
131
155
  legal_text_file_array.each do |legal_text_file|
132
- text_asset = generate_main_asset(flutter_dir, package_name, legal_text_file)
156
+ text_asset = generate_main_asset(flutter_project_dir, package_name, legal_text_file)
133
157
  text_asset_array.push(text_asset)
134
158
  end
135
159
 
@@ -137,22 +161,22 @@ module Flr
137
161
  return text_asset_array
138
162
  end
139
163
 
140
- # generate_font_asset_configs(flutter_dir, package_name, legal_font_file_array) -> font_asset_config_array
164
+ # generate_font_asset_configs(flutter_project_dir, package_name, legal_font_file_array) -> font_asset_config_array
141
165
  #
142
166
  # 遍历指定资源目录下扫描找到的legal_font_file数组生成font_asset_config数组
143
167
  #
144
168
  # === Examples
145
- # flutter_dir = "~/path/to/flutter_r_demo"
169
+ # flutter_project_dir = "~/path/to/flutter_r_demo"
146
170
  # package_name = "flutter_r_demo"
147
171
  # legal_font_file_array = ["~path/to/flutter_r_demo/lib/assets/fonts/Amiri/Amiri-Regular.ttf"]
148
172
  # font_asset_config_array -> [{"asset": "packages/flutter_r_demo/assets/fonts/Amiri/Amiri-Regular.ttf"}]
149
173
  #
150
- def self.generate_font_asset_configs(flutter_dir, package_name, legal_font_file_array)
174
+ def self.generate_font_asset_configs(flutter_project_dir, package_name, legal_font_file_array)
151
175
 
152
176
  font_asset_config_array = []
153
177
 
154
178
  legal_font_file_array.each do |legal_font_file|
155
- font_asset = generate_main_asset(flutter_dir, package_name, legal_font_file)
179
+ font_asset = generate_main_asset(flutter_project_dir, package_name, legal_font_file)
156
180
  font_asset_config = Hash["asset" => font_asset]
157
181
  font_asset_config_array.push(font_asset_config)
158
182
  end
@@ -210,54 +210,105 @@ class AssetResource {
210
210
  # 为当前asset生成注释
211
211
  #
212
212
  # === Examples
213
- # asset = "packages/flutter_r_demo/assets/images/test.png"
214
213
  # package_name = "flutter_r_demo"
214
+ #
215
+ # === Example-1
216
+ # asset = "packages/flutter_r_demo/assets/images/test.png"
217
+ # asset_comment = "asset: lib/assets/images/test.png"
218
+ #
219
+ # === Example-2
220
+ # asset = "assets/images/test.png"
215
221
  # asset_comment = "asset: assets/images/test.png"
216
222
  #
217
223
  def self.generate_asset_comment (asset, package_name)
224
+ packages_prefix = "packages/#{package_name}/"
225
+
226
+ if asset =~ /\A#{packages_prefix}/
227
+ # asset: packages/flutter_r_demo/assets/images/test.png
228
+ # to get assetName: assets/images/test.png
229
+ asset_name = asset.dup
230
+ asset_name[packages_prefix] = ""
231
+
232
+ asset_comment = "asset: lib/#{asset_name}"
233
+ return asset_comment
234
+ else
235
+ # asset: assets/images/test.png
236
+ # to get assetName: assets/images/test.png
237
+ asset_name = asset.dup
238
+
239
+ asset_comment = "asset: #{asset_name}"
240
+ return asset_comment
241
+ end
218
242
 
219
- asset_name = asset.dup
220
- asset_name["packages/#{package_name}/"] = ""
221
-
222
- asset_comment = "asset: #{asset_name}"
223
-
224
- return asset_comment
225
243
  end
226
244
 
227
- # generate_AssetResource_property(asset, asset_id_dict, package_name, prior_asset_type) -> string
245
+ # generate_AssetResource_property(asset, asset_id_dict, package_name, is_package_project_type, prior_asset_type) -> string
228
246
  #
229
247
  # 为当前 asset 生成 AssetResource property 的代码
230
248
  #
231
- def self.generate_AssetResource_property(asset, asset_id_dict, package_name, prior_asset_type = ".*")
232
-
249
+ def self.generate_AssetResource_property(asset, asset_id_dict, package_name, is_package_project_type, prior_asset_type = ".*")
233
250
  asset_id = asset_id_dict[asset]
234
251
  asset_comment = generate_asset_comment(asset, package_name)
235
252
 
236
- asset_name = asset.dup
237
- asset_name["packages/#{package_name}/"] = ""
253
+ asset_name = ""
254
+ needPackage = false
255
+
256
+ packages_prefix = "packages/#{package_name}/"
257
+ if asset =~ /\A#{packages_prefix}/
258
+ # asset: packages/flutter_r_demo/assets/images/test.png
259
+ # to get asset_name: assets/images/test.png
260
+ asset_name = asset.dup
261
+ asset_name[packages_prefix] = ""
262
+
263
+ needPackage = true
264
+ else
265
+ # asset: assets/images/test.png
266
+ # to get asset_name: assets/images/test.png
267
+ asset_name = asset.dup
268
+
269
+ if is_package_project_type
270
+ needPackage = true
271
+ else
272
+ needPackage = false
273
+ end
274
+
275
+ end
276
+
238
277
  # 对字符串中的 '$' 进行转义处理:'$' -> '\$'
278
+ # asset_name: assets/images/test$.png
279
+ # to get escaped_asset_name: assets/images/test\$.png
239
280
  escaped_asset_name = asset_name.gsub(/[$]/, "\\$")
240
281
 
241
- code = <<-CODE
282
+ if needPackage
283
+ code = <<-CODE
242
284
  /// #{asset_comment}
243
285
  // ignore: non_constant_identifier_names
244
286
  final #{asset_id} = const AssetResource("#{escaped_asset_name}", packageName: R.package);
245
- CODE
287
+ CODE
246
288
 
247
- return code
289
+ return code
290
+ else
291
+ code = <<-CODE
292
+ /// #{asset_comment}
293
+ // ignore: non_constant_identifier_names
294
+ final #{asset_id} = const AssetResource("#{escaped_asset_name}", packageName: null);
295
+ CODE
296
+
297
+ return code
298
+ end
248
299
  end
249
300
 
250
- # generate__R_Image_AssetResource_class(non_svg_image_asset_array, non_svg_image_asset_id_dict, package_name) -> string
301
+ # generate__R_Image_AssetResource_class(non_svg_image_asset_array, non_svg_image_asset_id_dict, package_name, is_package_project_type) -> string
251
302
  #
252
303
  # 根据模板,为 non_svg_image_asset_array(非svg类的图片资产数组)生成 _R_Image_AssetResource class 的代码
253
304
  #
254
- def self.generate__R_Image_AssetResource_class(non_svg_image_asset_array, non_svg_image_asset_id_dict, package_name)
305
+ def self.generate__R_Image_AssetResource_class(non_svg_image_asset_array, non_svg_image_asset_id_dict, package_name, is_package_project_type)
255
306
 
256
307
  all_g_AssetResource_property_code = ""
257
308
 
258
309
  non_svg_image_asset_array.each do |image_asset|
259
310
  all_g_AssetResource_property_code += "\n"
260
- g_AssetResource_property_code = generate_AssetResource_property(image_asset, non_svg_image_asset_id_dict, package_name, Flr::PRIOR_NON_SVG_IMAGE_FILE_TYPE)
311
+ g_AssetResource_property_code = generate_AssetResource_property(image_asset, non_svg_image_asset_id_dict, package_name, is_package_project_type, Flr::PRIOR_NON_SVG_IMAGE_FILE_TYPE)
261
312
  all_g_AssetResource_property_code += g_AssetResource_property_code
262
313
  end
263
314
 
@@ -272,17 +323,17 @@ class _R_Image_AssetResource {
272
323
  return code
273
324
  end
274
325
 
275
- # generate__R_Svg_AssetResource_class(svg_image_asset_array, svg_image_asset_id_dict, package_name) -> string
326
+ # generate__R_Svg_AssetResource_class(svg_image_asset_array, svg_image_asset_id_dict, package_name, is_package_project_type) -> string
276
327
  #
277
328
  # 根据模板,为 svg_image_asset_array(svg类的图片资产数组)生成 _R_Svg_AssetResource class 的代码
278
329
  #
279
- def self.generate__R_Svg_AssetResource_class(svg_image_asset_array, svg_image_asset_id_dict, package_name)
330
+ def self.generate__R_Svg_AssetResource_class(svg_image_asset_array, svg_image_asset_id_dict, package_name, is_package_project_type)
280
331
 
281
332
  all_g_AssetResource_property_code = ""
282
333
 
283
334
  svg_image_asset_array.each do |image_asset|
284
335
  all_g_AssetResource_property_code += "\n"
285
- g_AssetResource_property_code = generate_AssetResource_property(image_asset, svg_image_asset_id_dict, package_name, Flr::PRIOR_SVG_IMAGE_FILE_TYPE)
336
+ g_AssetResource_property_code = generate_AssetResource_property(image_asset, svg_image_asset_id_dict, package_name, is_package_project_type, Flr::PRIOR_SVG_IMAGE_FILE_TYPE)
286
337
  all_g_AssetResource_property_code += g_AssetResource_property_code
287
338
  end
288
339
 
@@ -297,17 +348,17 @@ class _R_Svg_AssetResource {
297
348
  return code
298
349
  end
299
350
 
300
- # generate__R_Text_AssetResource_class(text_asset_array, text_asset_id_dict, package_name) -> string
351
+ # generate__R_Text_AssetResource_class(text_asset_array, text_asset_id_dict, package_name, is_package_project_typ) -> string
301
352
  #
302
353
  # 根据模板,为 text_asset_array(文本资产数组)生成 _R_Text_AssetResource class 的代码
303
354
  #
304
- def self.generate__R_Text_AssetResource_class(text_asset_array, text_asset_id_dict, package_name)
355
+ def self.generate__R_Text_AssetResource_class(text_asset_array, text_asset_id_dict, package_name, is_package_project_type)
305
356
 
306
357
  all_g_AssetResource_property_code = ""
307
358
 
308
359
  text_asset_array.each do |text_asset|
309
360
  all_g_AssetResource_property_code += "\n"
310
- g_AssetResource_property_code = generate_AssetResource_property(text_asset, text_asset_id_dict, package_name, Flr::PRIOR_TEXT_FILE_TYPE)
361
+ g_AssetResource_property_code = generate_AssetResource_property(text_asset, text_asset_id_dict, package_name, is_package_project_type, Flr::PRIOR_TEXT_FILE_TYPE)
311
362
  all_g_AssetResource_property_code += g_AssetResource_property_code
312
363
  end
313
364
 
@@ -15,13 +15,16 @@ module Flr
15
15
  return flutter_project_root_dir
16
16
  end
17
17
 
18
- # get_pubspec_file_path -> String
18
+ # get_pubspec_file_path(flutter_project_dir) -> String
19
19
  #
20
20
  # 获取当前flutter工程的pubspec.yaml文件的路径
21
21
  #
22
- def self.get_pubspec_file_path
23
- flutter_project_root_dir = self.get_cur_flutter_project_root_dir
24
- file_path = flutter_project_root_dir + "/pubspec.yaml"
22
+ # === Examples
23
+ # flutter_project_dir = "~/path/to/flutter_r_demo"
24
+ # pubspec_file_path = "~/path/to/flutter_r_demo/pubspec.yaml"
25
+ #
26
+ def self.get_pubspec_file_path(flutter_project_dir)
27
+ file_path = flutter_project_dir + "/pubspec.yaml"
25
28
  return file_path
26
29
  end
27
30
 
@@ -79,6 +82,65 @@ module Flr
79
82
  return true
80
83
  end
81
84
 
85
+ # is_package_project_type?(flutter_project_dir) -> true or false
86
+ #
87
+ # 判断当前flutter工程的工程类型是不是Package工程类型
88
+ #
89
+ # flutter工程共有4种工程类型:
90
+ # - app:Flutter App工程,用于开发纯Flutter的App
91
+ # - module:Flutter Component工程,用于开发Flutter组件以嵌入iOS和Android原生工程
92
+ # - package:General Dart Package工程,用于开发一个供应用层开发者使用的包
93
+ # - plugin:Plugin Package工程(属于特殊的Dart Package工程),用于开发一个调用特定平台API的包
94
+ #
95
+ # flutter工程的工程类型可从flutter工程目录的 .metadata 文件中读取获得
96
+ # 如果不存在 .metadata 文件,则判断 pubspec.yaml 是否存在 author 配置,若存在,说明是一个 Package工程
97
+ #
98
+ def self.is_package_project_type?(flutter_project_dir)
99
+ metadata_file_path = flutter_project_dir + "/.metadata"
100
+
101
+ if File.exist?(metadata_file_path)
102
+ begin
103
+ metadata_file = File.open(metadata_file_path, 'r')
104
+ metadata_config = YAML.load(metadata_file)
105
+ project_type = metadata_config["project_type"]
106
+ if project_type.nil?
107
+ project_type = "unknown"
108
+ end
109
+ project_type = project_type.downcase
110
+
111
+ if project_type == "package" || project_type == "plugin"
112
+ return true
113
+ end
114
+
115
+ rescue YAML::SyntaxError => e
116
+ puts("YAML Syntax Error: #{e}".error_style)
117
+ puts("")
118
+ ensure
119
+ metadata_file.close
120
+ end
121
+ else
122
+ message = <<-MESSAGE
123
+ #{"[!]: warning, metadata file is missed, flr can not make sure to get a right project type of this flutter project".warning_style}
124
+ #{"[!]: then flr maybe generate buggy r.g.dart".warning_style}
125
+ #{"[*]: to fix it, you can manually copy the metadata file of a flutter project with same project type to #{metadata_file_path}".tips_style}
126
+
127
+ MESSAGE
128
+ puts(message)
129
+
130
+ begin
131
+ pubspec_file_path = get_pubspec_file_path(flutter_project_dir)
132
+ pubspec_config = load_pubspec_config_from_file(pubspec_file_path)
133
+ if pubspec_config.has_key?("author")
134
+ return true
135
+ end
136
+ rescue Exception => e
137
+ puts(e.message)
138
+ end
139
+ end
140
+
141
+ return false
142
+ end
143
+
82
144
  # 判断当前文件是不是非SVG类图片资源文件
83
145
  def self.is_non_svg_image_resource_file?(file)
84
146
  file_extname = File.extname(file).downcase
@@ -1,9 +1,9 @@
1
1
  module Flr
2
2
  # 工具版本号
3
- VERSION = "2.0.0"
3
+ VERSION = "3.0.0"
4
4
 
5
5
  # 核心逻辑版本号
6
- CORE_VERSION = "2.0.0"
6
+ CORE_VERSION = "3.0.0"
7
7
 
8
8
  class Version < Array
9
9
  def initialize str
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flr
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - York
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-09 00:00:00.000000000 Z
11
+ date: 2020-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler