flr 1.0.0 → 3.2.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.
@@ -8,20 +8,36 @@ module Flr
8
8
 
9
9
  # get_cur_flutter_project_root_dir -> String
10
10
  #
11
- # 获取当前flutter工程的根目录
11
+ # 获取flutter主工程的根目录
12
12
  #
13
- def self.get_cur_flutter_project_root_dir
13
+ def self.get_flutter_main_project_root_dir
14
14
  flutter_project_root_dir = "#{Pathname.pwd}"
15
15
  return flutter_project_root_dir
16
16
  end
17
17
 
18
- # get_pubspec_file_path -> String
18
+ # get_flutter_sub_project_root_dirs -> [sub_project_root_dir]
19
+ #
20
+ # 获取flutter主工程的所有子工程的根目录
21
+ #
22
+ def self.get_flutter_sub_project_root_dirs(flutter_main_project_root_dir)
23
+ flutter_sub_project_root_dir_array = []
24
+ Dir.glob(["#{flutter_main_project_root_dir}/*/pubspec.yaml"]).each do |file|
25
+ flutter_project_root_dir = File.dirname(file)
26
+ flutter_sub_project_root_dir_array.push(flutter_project_root_dir)
27
+ end
28
+ return flutter_sub_project_root_dir_array
29
+ end
30
+
31
+ # get_pubspec_file_path(flutter_project_dir) -> String
19
32
  #
20
33
  # 获取当前flutter工程的pubspec.yaml文件的路径
21
34
  #
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"
35
+ # === Examples
36
+ # flutter_project_dir = "~/path/to/flutter_r_demo"
37
+ # pubspec_file_path = "~/path/to/flutter_r_demo/pubspec.yaml"
38
+ #
39
+ def self.get_pubspec_file_path(flutter_project_dir)
40
+ file_path = flutter_project_dir + "/pubspec.yaml"
25
41
  return file_path
26
42
  end
27
43
 
@@ -79,6 +95,120 @@ module Flr
79
95
  return true
80
96
  end
81
97
 
98
+ # is_package_project_type?(flutter_project_dir) -> true or false
99
+ #
100
+ # 判断当前flutter工程的工程类型是不是Package工程类型
101
+ #
102
+ # flutter工程共有4种工程类型:
103
+ # - app:Flutter App工程,用于开发纯Flutter的App
104
+ # - module:Flutter Component工程,用于开发Flutter组件以嵌入iOS和Android原生工程
105
+ # - package:General Dart Package工程,用于开发一个供应用层开发者使用的包
106
+ # - plugin:Plugin Package工程(属于特殊的Dart Package工程),用于开发一个调用特定平台API的包
107
+ #
108
+ # flutter工程的工程类型可从flutter工程目录的 .metadata 文件中读取获得
109
+ # 如果不存在 .metadata 文件,则判断 pubspec.yaml 是否存在 author 配置,若存在,说明是一个 Package工程
110
+ #
111
+ def self.is_package_project_type?(flutter_project_dir)
112
+ metadata_file_path = flutter_project_dir + "/.metadata"
113
+
114
+ if File.exist?(metadata_file_path)
115
+ begin
116
+ metadata_file = File.open(metadata_file_path, 'r')
117
+ metadata_config = YAML.load(metadata_file)
118
+ project_type = metadata_config["project_type"]
119
+ if project_type.nil?
120
+ project_type = "unknown"
121
+ end
122
+ project_type = project_type.downcase
123
+
124
+ if project_type == "package" || project_type == "plugin"
125
+ return true
126
+ end
127
+
128
+ rescue YAML::SyntaxError => e
129
+ puts("YAML Syntax Error: #{e}".error_style)
130
+ puts("")
131
+ ensure
132
+ metadata_file.close
133
+ end
134
+ else
135
+ message = <<-MESSAGE
136
+ #{"[!]: warning, metadata file is missed, flr can not make sure to get a right project type of this flutter project".warning_style}
137
+ #{"[!]: then flr maybe generate buggy r.g.dart".warning_style}
138
+ #{"[*]: to fix it, you can manually copy the metadata file of a flutter project with same project type to #{metadata_file_path}".tips_style}
139
+
140
+ MESSAGE
141
+ puts(message)
142
+
143
+ begin
144
+ pubspec_file_path = get_pubspec_file_path(flutter_project_dir)
145
+ pubspec_config = load_pubspec_config_from_file(pubspec_file_path)
146
+ if pubspec_config.has_key?("author")
147
+ return true
148
+ end
149
+ rescue Exception => e
150
+ puts(e.message)
151
+ end
152
+ end
153
+
154
+ return false
155
+ end
156
+
157
+ # 判断当前文件是不是非SVG类图片资源文件
158
+ def self.is_non_svg_image_resource_file?(file)
159
+ file_extname = File.extname(file).downcase
160
+
161
+ if Flr::NON_SVG_IMAGE_FILE_TYPES.include?(file_extname)
162
+ return true;
163
+ end
164
+
165
+ return false
166
+ end
167
+
168
+ # 判断当前文件是不是SVG类图片资源文件
169
+ def self.is_svg_image_resource_file?(file)
170
+ file_extname = File.extname(file).downcase
171
+
172
+ if Flr::SVG_IMAGE_FILE_TYPES.include?(file_extname)
173
+ return true;
174
+ end
175
+
176
+ return false
177
+ end
178
+
179
+ # 判断当前文件是不是图片资源文件
180
+ def self.is_image_resource_file?(file)
181
+ file_extname = File.extname(file).downcase
182
+
183
+ if Flr::IMAGE_FILE_TYPES.include?(file_extname)
184
+ return true;
185
+ end
186
+
187
+ return false
188
+ end
189
+
190
+ # 判断当前文件是不是文本资源文件
191
+ def self.is_text_resource_file?(file)
192
+ file_extname = File.extname(file).downcase
193
+
194
+ if Flr::TEXT_FILE_TYPES.include?(file_extname)
195
+ return true;
196
+ end
197
+
198
+ return false
199
+ end
200
+
201
+ # 判断当前文件是不是字体资源文件
202
+ def self.is_font_resource_file?(file)
203
+ file_extname = File.extname(file).downcase
204
+
205
+ if Flr::FONT_FILE_TYPES.include?(file_extname)
206
+ return true;
207
+ end
208
+
209
+ return false
210
+ end
211
+
82
212
  # is_legal_resource_file??(file) -> true or false
83
213
  #
84
214
  # 判断当前资源文件是否合法
@@ -87,8 +217,8 @@ module Flr
87
217
  # 其file_basename_no_extension 由字母(a-z、A-Z)、数字(0-9)、其他合法字符('_', '+', '-', '.', '·', '!', '@', '&', '$', '¥')组成
88
218
  #
89
219
  # === Examples
90
- # good_file = "lib/assets/images/test.png"
91
- # bad_file = "lib/assets/images/~.png"
220
+ # good_file = "~/path/to/flutter_project/lib/assets/images/test.png"
221
+ # bad_file = "~/path/to/flutter_project/lib/assets/images/~.png"
92
222
  # is_legal_resource_file?(good_file) -> true
93
223
  # is_legal_resource_file?(bad_file) -> false
94
224
  #
@@ -105,25 +235,26 @@ module Flr
105
235
 
106
236
  # find_image_files(resource_dir) -> image_file_result_tuple
107
237
  #
108
- # 扫描指定的资源目录和其第1级子目录,查找所有图片文件
238
+ # 扫描指定的资源目录和其所有层级的子目录,查找所有图片文件
109
239
  # 返回图片文件结果二元组 image_file_result_tuple
110
240
  # image_file_result_tuple = [legal_image_file_array, illegal_image_file_array]
111
241
  #
112
242
  # 判断文件合法的标准参考 self.is_legal_resource_file? 方法
113
243
  #
114
244
  # === Examples
115
- # resource_dir = "lib/assets/images"
116
- # legal_image_file_array = ["lib/assets/images/test.png", "lib/assets/images/2.0x/test.png"]
117
- # illegal_image_file_array = ["lib/assets/images/~.png"]
245
+ # resource_dir = "~/path/to/flutter_project/lib/assets/images"
246
+ # legal_image_file_array = ["~/path/to/flutter_project/lib/assets/images/test.png", "~/path/to/flutter_project/lib/assets/images/2.0x/test.png"]
247
+ # illegal_image_file_array = ["~/path/to/flutter_project/lib/assets/images/~.png"]
118
248
  #
119
249
  def self.find_image_files(resource_dir)
120
250
  legal_image_file_array = []
121
251
  illegal_image_file_array = []
122
252
 
123
253
  pattern_file_types = Flr::IMAGE_FILE_TYPES.join(",")
124
- # dir/*{.png.,.jpg} : 查找当前目录的指定类型文件
125
- # dir/*/*{.png.,.jpg}: 查找当前目录的第1级子目录的指定类型文件
126
- Dir.glob(["#{resource_dir}/*{#{pattern_file_types}}", "#{resource_dir}/*/*{#{pattern_file_types}}"]).each do |file|
254
+ # dir/*{.png,.jpg} : 查找当前目录的指定类型文件
255
+ # dir/*/*{.png,.jpg}: 查找当前目录的第1级子目录的指定类型文件
256
+ # dir/**/*{.png,.jpg}: 查找当前目录和其所有子目录的指定类型文件
257
+ Dir.glob(["#{resource_dir}/**/*{#{pattern_file_types}}"]).each do |file|
127
258
  if is_legal_resource_file?(file)
128
259
  legal_image_file_array.push(file)
129
260
  else
@@ -144,9 +275,9 @@ module Flr
144
275
  # 判断文件合法的标准参考 self.is_legal_resource_file? 方法
145
276
  #
146
277
  # === Examples
147
- # resource_dir = "lib/assets/jsons"
148
- # legal_text_file_array = ["lib/assets/jsons/city.json", "lib/assets/jsons/mock/city.json"]
149
- # illegal_text_file_array = ["lib/assets/jsons/~.json"]
278
+ # resource_dir = "~/path/to/flutter_project/lib/assets/jsons"
279
+ # legal_text_file_array = ["~/path/to/flutter_project/lib/assets/jsons/city.json", "~/path/to/flutter_project/lib/assets/jsons/mock/city.json"]
280
+ # illegal_text_file_array = ["~/path/to/flutter_project/lib/assets/jsons/~.json"]
150
281
  #
151
282
  def self.find_text_files(resource_dir)
152
283
  legal_text_file_array = []
@@ -171,7 +302,8 @@ module Flr
171
302
  # 扫描指定的资源目录,返回其所有第一级子目录
172
303
  #
173
304
  # === Examples
174
- # top_child_dir_array = ["lib/assets/fonts/Amiri", "lib/assets/fonts/Open_Sans"]
305
+ # resource_dir = "~/path/to/flutter_project/lib/assets/fonts"
306
+ # top_child_dir_array = ["~/path/to/flutter_project/lib/assets/fonts/Amiri", "~/path/to/flutter_project/lib/assets/fonts/Open_Sans"]
175
307
  #
176
308
  def self.find_top_child_dirs(resource_dir)
177
309
  top_child_dir_array = []
@@ -194,9 +326,9 @@ module Flr
194
326
  # 判断文件合法的标准参考 self.is_legal_resource_file? 方法
195
327
  #
196
328
  # === Examples
197
- # font_family_dir = "lib/assets/fonts/Amiri"
198
- # legal_font_file_array = ["lib/assets/fonts/Amiri/Amiri-Regular.ttf", "lib/assets/fonts/Amiri/Amiri-Bold.ttf"]
199
- # illegal_font_file_array = ["lib/assets/fonts/Amiri/~.ttf"]
329
+ # font_family_dir = "~/path/to/flutter_project/lib/assets/fonts/Amiri"
330
+ # legal_font_file_array = ["~/path/to/flutter_project/lib/assets/fonts/Amiri/Amiri-Regular.ttf", "~/path/to/flutter_project/lib/assets/fonts/Amiri/Amiri-Bold.ttf"]
331
+ # illegal_font_file_array = ["~/path/to/flutter_project/lib/assets/fonts/Amiri/~.ttf"]
200
332
  #
201
333
  def self.find_font_files_in_font_family_dir(font_family_dir)
202
334
  legal_font_file_array = []
data/lib/flr/version.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  module Flr
2
2
  # 工具版本号
3
- VERSION = "1.0.0"
3
+ VERSION = "3.2.0"
4
4
 
5
5
  # 核心逻辑版本号
6
- CORE_VERSION = "1.0.0"
6
+ CORE_VERSION = "3.2.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: 1.0.0
4
+ version: 3.2.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-03-29 00:00:00.000000000 Z
11
+ date: 2021-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -124,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  requirements: []
127
- rubygems_version: 3.0.3
127
+ rubygems_version: 3.2.13
128
128
  signing_key:
129
129
  specification_version: 4
130
130
  summary: 'Flr(Flutter-R): A Flutter Resource Manager CLI TooL.'