cocoapods-bin 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 47d1b612075c634316296ae0bec748e19bd49c51
4
- data.tar.gz: 2bc77e393e2bc09c4d220c0a0958d66dea7f98f8
3
+ metadata.gz: cf5d790603abfbbc6e4624f826b0102b94753d15
4
+ data.tar.gz: 976cfee2a3ebb99b648b6bf7f0e293fb662cadc2
5
5
  SHA512:
6
- metadata.gz: 6e3a1b6f29cd1c2329180c59f7db1b0725c60a548543bd40f94c5102f159b4fbd0121053c2f0f22e039ed2d8b886a2daceb410b51f1464ceeb27733cc427a508
7
- data.tar.gz: 6073a4b89470df4e755429518dc6320c0de5005e155ffd254a9d77302f26376ec45d259e2121ac5176ee9cbf996552c3fb8b165d2af27fad8160f767f3257129
6
+ metadata.gz: 3c187df578219cf4f1f465061614ffee3c84dc0a740998fcd4560acf5c1646aab11b71060f009cfbd56003bb7a7db3f60231751507ef739d2bedab7f26a665b7
7
+ data.tar.gz: 458effc98e7baeea263496fef51a39465eadf71f512ce0479dfd277e594fa7cadc5a814d567bc43ef066399ba7eedea6993728963f6dec197c1f988c21ac3aa7
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cocoapods-bin (0.1.1)
4
+ cocoapods-bin (0.1.2)
5
5
  cocoapods (~> 1.4)
6
6
  parallel
7
7
 
data/README.md CHANGED
@@ -2,11 +2,13 @@
2
2
 
3
3
  组件二进制化插件。
4
4
 
5
+ [基于 CocoaPods 的组件二进制化实践](https://triplecc.github.io/2019/01/21/%E5%9F%BA%E4%BA%8ECocoaPods%E7%9A%84%E7%BB%84%E4%BB%B6%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8C%96%E5%AE%9E%E8%B7%B5/)
6
+
5
7
  ## 概要
6
8
 
7
9
  本插件所关联的组件二进制化策略:
8
10
 
9
- 预先将打包成 `.a` 或者 `.framework` 的组件(接入此插件必须使用 `.framework`)保存到静态服务器上,并在 `install` 时,去下载组件对应的二进制版本,以减少组件编译时间,达到加快 App 打包、组件 lint、组件发布等操作的目的。
11
+ 预先将打包成 `.a` 或者 `.framework` 的组件(目前接入此插件必须使用 `.framework`)保存到静态服务器上,并在 `install` 时,去下载组件对应的二进制版本,以减少组件编译时间,达到加快 App 打包、组件 lint、组件发布等操作的目的。
10
12
 
11
13
  使用本插件需要提供以下资源:
12
14
 
@@ -34,31 +36,31 @@
34
36
  你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息样式如下:
35
37
 
36
38
  ---
37
- code_repo_url: git@git.2dfire.net:ios/cocoapods-spec.git
38
- binary_repo_url: git@git.2dfire.net:ios/cocoapods-spec-binary.git
39
+ code_repo_url: git@git.xxxxxx.net:ios/cocoapods-spec.git
40
+ binary_repo_url: git@git.xxxxxx.net:ios/cocoapods-spec-binary.git
39
41
  binary_download_url: http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip
40
42
  download_file_type: zip
41
43
 
42
44
 
43
45
  源码私有源 Git 地址
44
- 旧值:git@git.2dfire.net:ios/cocoapods-spec.git
46
+ 旧值:git@git.xxxxxx.net:ios/cocoapods-spec.git
45
47
  >
46
48
  ```
47
49
 
48
- 按提示输入源码私有源、二进制私有源、二进制下载地址、下载文件类型后,插件就配置完成了。
50
+ 按提示输入源码私有源、二进制私有源、二进制下载地址、下载文件类型后,插件就配置完成了。其中 `binary_download_url` 需要预留组件名称与组件版本占位符,插件内部会依次替换 `%s` 为相应组件的值。
49
51
 
50
52
  `cococapod-bin` 也支持从 url 下载配置文件,方便对多台机器进行配置:
51
53
 
52
54
  ```shell
53
- ➜ ~ pod bin init --bin-url=http://git.2dfire.net/qingmu/cocoapods-tdfire-binary-config/raw/master/bin.yml
55
+ ➜ ~ pod bin init --bin-url=http://git.xxxxxx.net/qingmu/cocoapods-tdfire-binary-config/raw/master/bin.yml
54
56
  ```
55
57
 
56
58
  配置文件模版内容如下,根据不同团队的需求定制即可:
57
59
 
58
60
  ```yaml
59
61
  ---
60
- code_repo_url: git@git.2dfire.net:ios/cocoapods-spec.git
61
- binary_repo_url: git@git.2dfire.net:ios/cocoapods-spec-binary.git
62
+ code_repo_url: git@git.xxxxxx.net:ios/cocoapods-spec.git
63
+ binary_repo_url: git@git.xxxxxx.net:ios/cocoapods-spec-binary.git
62
64
  binary_download_url: http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip
63
65
  download_file_type: zip
64
66
  ```
@@ -206,7 +208,7 @@ TODO: Add long description of the pod here.
206
208
  'A' => ['A/Assets/*']
207
209
  }
208
210
  s.subspec 'B' do |ss|
209
- ss.dependency 'YYModel'
211
+ ss.dependency 'YYModel'
210
212
  ss.source_files = 'A/Classes/**/*'
211
213
  end
212
214
  end
@@ -233,6 +235,7 @@ TODO: Add long description of the pod here.
233
235
  ss.public_header_files = "#{s.name}.framework/Headers/*", "#{s.name}.framework/Versions/A/Headers/*"
234
236
  # 结合实际打包后的资源产出文件类型编写
235
237
  ss.resources = "#{s.name}.framework/Resources/*.{bundle}", "#{s.name}.framework/Versions/A/Resources/*.{bundle}"
238
+ ss.dependency 'YYModel'
236
239
  end
237
240
 
238
241
  s.subspec 'B' do |ss|
@@ -280,7 +283,12 @@ end
280
283
  "resources": [
281
284
  "A.framework/Resources/*.{bundle}",
282
285
  "A.framework/Versions/A/Resources/*.{bundle}"
283
- ]
286
+ ],
287
+ "dependencies": {
288
+ "YYModel": [
289
+
290
+ ]
291
+ }
284
292
  },
285
293
  {
286
294
  "name": "B",
@@ -292,10 +300,9 @@ end
292
300
  }
293
301
  ]
294
302
  }
295
-
296
303
  ```
297
304
 
298
- #### pod bin spec lint
305
+ #### pod bin spec lint
299
306
 
300
307
  ```shell
301
308
  ➜ ~ pod bin spec lint --help
@@ -388,13 +395,13 @@ Resolving dependencies of `Podfile`
388
395
  ```yaml
389
396
  ...
390
397
  SPEC REPOS:
391
- "git@git.2dfire.net:ios/cocoapods-spec-binary.git":
398
+ "git@git.xxxxxx.net:ios/cocoapods-spec-binary.git":
392
399
  - AFNetworking
393
400
  - Aspects
394
401
  - CocoaSecurity
395
402
  - DACircularProgress
396
403
  ...
397
- "git@git.2dfire.net:ios/cocoapods-spec.git":
404
+ "git@git.xxxxxx.net:ios/cocoapods-spec.git":
398
405
  - ActivityForRestApp
399
406
  - AMapFrameworks
400
407
  - AssemblyComponent
@@ -433,6 +440,20 @@ end
433
440
  set_use_source_pods ['YYModel']
434
441
  ```
435
442
 
443
+ 如果 CocoaPods 版本为 1.5.3 ,终端会输出以下内容,表示 YYModel 的参照源从二进制私有源切换到了源码私有源:
444
+
445
+ ```shell
446
+ Analyzing dependencies
447
+ Fetching podspec for `A` from `../`
448
+ Downloading dependencies
449
+ Using A (0.1.0)
450
+ Installing YYModel 1.0.4.2 (source changed to `git@git.xxxxxx.net:ios/cocoapods-spec.git` from `git@git.xxxxxx.net:ios/cocoapods-spec-binary.git`)
451
+ Generating Pods project
452
+ Integrating client project
453
+ Sending stats
454
+ Pod installation complete! There is 1 dependency from the Podfile and 2 total pods installed.
455
+ ```
456
+
436
457
  #### 其他设置
437
458
 
438
459
  插件默认开启多线程下载组件资源,如果要禁用这个功能,Podfile 添加以下代码即可:
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
8
8
  spec.version = CBin::VERSION
9
9
  spec.authors = ['tripleCC']
10
10
  spec.email = ['triplec.linux@gmail.com']
11
- spec.description = %q{组件二进制化插件.}
12
- spec.summary = %q{组件二进制化插件。利用源码私有源与二进制私有源实现对组件依赖类型的切换.}
13
- spec.homepage = 'https://github.com/EXAMPLE/cocoapods-bin'
11
+ spec.description = %q{cocoapods pods source switcher.}
12
+ spec.summary = %q{cocoapods-bin is a plugin which helps develpers switching pods between source code and binary.}
13
+ spec.homepage = 'https://github.com/tripleCC/cocoapods-bin'
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -5,41 +5,41 @@ module Pod
5
5
  self.summary = '展示二进制 pods .'
6
6
 
7
7
  def self.options
8
- [
9
- ['--code', '展示源码 pods'],
10
- ['--diff', '展示缺少二进制版本的源码 pods'],
11
- ['--update', '展示前执行 `pod bin repo update`'],
12
- ].concat(super)
13
- end
8
+ [
9
+ ['--code', '展示源码 pods'],
10
+ ['--diff', '展示缺少二进制版本的源码 pods'],
11
+ ['--update', '展示前执行 `pod bin repo update`'],
12
+ ].concat(super)
13
+ end
14
14
 
15
15
  def initialize(argv)
16
- @update = argv.flag?('update')
17
- @code = argv.flag?('code')
18
- @diff = argv.flag?('diff')
19
- super
20
- end
16
+ @update = argv.flag?('update')
17
+ @code = argv.flag?('code')
18
+ @diff = argv.flag?('diff')
19
+ super
20
+ end
21
21
 
22
- def run
23
- update_if_necessary!
22
+ def run
23
+ update_if_necessary!
24
24
 
25
- source = @code ? code_source : binary_source
25
+ source = @code ? code_source : binary_source
26
26
 
27
- sets = if @diff
28
- binary_pod_set_names = binary_source.pod_sets.map(&:name)
29
- sets = code_source.pod_sets.reject { |set| binary_pod_set_names.include?(set.name) }
30
- else
31
- source.pod_sets
32
- end
27
+ sets = if @diff
28
+ binary_pod_set_names = binary_source.pod_sets.map(&:name)
29
+ sets = code_source.pod_sets.reject { |set| binary_pod_set_names.include?(set.name) }
30
+ else
31
+ source.pod_sets
32
+ end
33
33
 
34
- sets.each { |set| UI.pod(set, :name_and_version) }
35
- UI.puts "\n#{sets.count} pods were found"
36
- end
34
+ sets.each { |set| UI.pod(set, :name_and_version) }
35
+ UI.puts "\n#{sets.count} pods were found"
36
+ end
37
37
 
38
- def update_if_necessary!
38
+ def update_if_necessary!
39
39
  UI.section("\nUpdating Spec Repositories\n".yellow) do
40
- Pod::Command::Bin::Repo::Update.new(CLAide::ARGV.new([])).run
40
+ Pod::Command::Bin::Repo::Update.new(CLAide::ARGV.new([])).run
41
41
  end if @update
42
- end
42
+ end
43
43
  end
44
44
  end
45
45
  end
@@ -5,54 +5,54 @@ module Pod
5
5
  self.summary = '打开 workspace 工程.'
6
6
 
7
7
  def self.options
8
- [
9
- ['--install', '先执行 install, 再执行 open. 相当于 pod install && pod bin open'],
10
- ['--update', '先执行 update, 再执行 open. 相当于 pod update && pod bin open'],
11
- ['--deep=5', '查找深度.'],
12
- ]
13
- end
8
+ [
9
+ ['--install', '先执行 install, 再执行 open. 相当于 pod install && pod bin open'],
10
+ ['--update', '先执行 update, 再执行 open. 相当于 pod update && pod bin open'],
11
+ ['--deep=5', '查找深度.'],
12
+ ]
13
+ end
14
14
 
15
15
  def initialize(argv)
16
- @install = argv.flag?('install')
17
- @update = argv.flag?('update')
18
- @deep = argv.option('deep').try(:to_i) || 3
19
- super
20
- end
21
-
22
- def run
23
- if @install || @update
24
- command_class = Object.const_get("Pod::Command::#{@install ? 'Install' : 'Update'}")
25
- command = command_class.new(CLAide::ARGV.new([]))
26
- command.validate!
27
- command.run
28
- end
29
-
30
- path = find_in_children(Pathname.pwd.children, @deep) ||
31
- find_in_parent(Pathname.pwd.parent, @deep)
32
- if path
33
- `open #{path}`
34
- else
35
- UI.puts "#{Pathname.pwd} 目录, 搜索上下深度 #{@deep} , 无法找到 xcworkspace 文件.".red
36
- end
37
- end
38
-
39
- def find_in_children(paths, deep)
40
- deep -= 1
41
- pathname = paths.find { |ph| ph.extname == '.xcworkspace' }
42
-
43
- return pathname if pathname || paths.empty? || deep <= 0
44
-
45
- find_in_children(paths.select(&:directory?).flat_map(&:children), deep)
46
- end
47
-
48
- def find_in_parent(path, deep)
49
- deep -= 1
50
- pathname = path.children.find {|fn| fn.extname == '.xcworkspace'}
51
-
52
- return pathname if pathname || deep <= 0
53
-
54
- find_in_parent(path.parent, deep)
55
- end
16
+ @install = argv.flag?('install')
17
+ @update = argv.flag?('update')
18
+ @deep = argv.option('deep').try(:to_i) || 3
19
+ super
20
+ end
21
+
22
+ def run
23
+ if @install || @update
24
+ command_class = Object.const_get("Pod::Command::#{@install ? 'Install' : 'Update'}")
25
+ command = command_class.new(CLAide::ARGV.new([]))
26
+ command.validate!
27
+ command.run
28
+ end
29
+
30
+ path = find_in_children(Pathname.pwd.children, @deep) ||
31
+ find_in_parent(Pathname.pwd.parent, @deep)
32
+ if path
33
+ `open #{path}`
34
+ else
35
+ UI.puts "#{Pathname.pwd} 目录, 搜索上下深度 #{@deep} , 无法找到 xcworkspace 文件.".red
36
+ end
37
+ end
38
+
39
+ def find_in_children(paths, deep)
40
+ deep -= 1
41
+ pathname = paths.find { |ph| ph.extname == '.xcworkspace' }
42
+
43
+ return pathname if pathname || paths.empty? || deep <= 0
44
+
45
+ find_in_children(paths.select(&:directory?).flat_map(&:children), deep)
46
+ end
47
+
48
+ def find_in_parent(path, deep)
49
+ deep -= 1
50
+ pathname = path.children.find {|fn| fn.extname == '.xcworkspace'}
51
+
52
+ return pathname if pathname || deep <= 0
53
+
54
+ find_in_parent(path.parent, deep)
55
+ end
56
56
  end
57
57
  end
58
58
  end
@@ -3,38 +3,38 @@ require 'parallel'
3
3
  module Pod
4
4
  class Command
5
5
  class Bin < Command
6
- class Repo < Bin
7
- class Update < Repo
8
- self.summary = '更新私有源'
6
+ class Repo < Bin
7
+ class Update < Repo
8
+ self.summary = '更新私有源'
9
9
 
10
- self.arguments = [
11
- CLAide::Argument.new('NAME', false),
12
- ]
10
+ self.arguments = [
11
+ CLAide::Argument.new('NAME', false),
12
+ ]
13
13
 
14
- def self.options
14
+ def self.options
15
15
  [
16
16
  ['--all', '更新所有私有源,默认只更新二进制相关私有源'],
17
17
  ].concat(super)
18
18
  end
19
19
 
20
- def initialize(argv)
21
- @all = argv.flag?('all')
22
- @name = argv.shift_argument
23
- super
24
- end
20
+ def initialize(argv)
21
+ @all = argv.flag?('all')
22
+ @name = argv.shift_argument
23
+ super
24
+ end
25
25
 
26
- def run
27
- show_output = !config.silent?
28
- if @name || @all
29
- config.sources_manager.update(@name, show_output)
30
- else
31
- Parallel.each(valid_sources, in_threads: 4) do |source|
32
- source.update(show_output)
33
- end
34
- end
35
- end
36
- end
37
- end
26
+ def run
27
+ show_output = !config.silent?
28
+ if @name || @all
29
+ config.sources_manager.update(@name, show_output)
30
+ else
31
+ Parallel.each(valid_sources, in_threads: 4) do |source|
32
+ source.update(show_output)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
38
  end
39
39
  end
40
40
  end
@@ -5,62 +5,62 @@ module Pod
5
5
  self.summary = '查找二进制 spec.'
6
6
 
7
7
  self.arguments = [
8
- CLAide::Argument.new('QUERY', true),
9
- ]
8
+ CLAide::Argument.new('QUERY', true),
9
+ ]
10
10
 
11
11
  def self.options
12
- [
13
- ['--code', '查找源码 spec'],
14
- ['--stats', '展示额外信息'],
15
- ['--no-pager', '不以 pager 形式展示'],
16
- ['--regex', '`QUERY` 视为正则'],
17
- ]
18
- end
12
+ [
13
+ ['--code', '查找源码 spec'],
14
+ ['--stats', '展示额外信息'],
15
+ ['--no-pager', '不以 pager 形式展示'],
16
+ ['--regex', '`QUERY` 视为正则'],
17
+ ]
18
+ end
19
19
 
20
- def initialize(argv)
21
- @code = argv.flag?('code')
22
- @stats = argv.flag?('stats')
23
- @use_pager = argv.flag?('pager', true)
24
- @use_regex = argv.flag?('regex')
25
- @query = argv.arguments! unless argv.arguments.empty?
26
- super
27
- end
20
+ def initialize(argv)
21
+ @code = argv.flag?('code')
22
+ @stats = argv.flag?('stats')
23
+ @use_pager = argv.flag?('pager', true)
24
+ @use_regex = argv.flag?('regex')
25
+ @query = argv.arguments! unless argv.arguments.empty?
26
+ super
27
+ end
28
28
 
29
- def validate!
30
- super
31
- help! '必须指定查找的组件.' unless @query
32
- end
29
+ def validate!
30
+ super
31
+ help! '必须指定查找的组件.' unless @query
32
+ end
33
33
 
34
- def run
35
- query_regex = @query.reduce([]) { |result, q|
36
- result << (@use_regex ? q : Regexp.escape(q))
37
- }.join(' ').strip
34
+ def run
35
+ query_regex = @query.reduce([]) { |result, q|
36
+ result << (@use_regex ? q : Regexp.escape(q))
37
+ }.join(' ').strip
38
38
 
39
- source = @code ? code_source : binary_source
39
+ source = @code ? code_source : binary_source
40
40
 
41
- aggregate = Pod::Source::Aggregate.new([source])
42
- sets = aggregate.search_by_name(query_regex, true)
41
+ aggregate = Pod::Source::Aggregate.new([source])
42
+ sets = aggregate.search_by_name(query_regex, true)
43
43
 
44
- if(@use_pager)
45
- UI.with_pager { print_sets(sets) }
46
- else
47
- print_sets(sets)
48
- end
49
- end
44
+ if(@use_pager)
45
+ UI.with_pager { print_sets(sets) }
46
+ else
47
+ print_sets(sets)
48
+ end
49
+ end
50
50
 
51
- def print_sets(sets)
52
- sets.each do |set|
53
- begin
54
- if @stats
55
- UI.pod(set, :stats)
56
- else
57
- UI.pod(set, :normal)
58
- end
59
- rescue DSLError
60
- UI.warn "Skipping `#{set.name}` because the podspec contains errors."
61
- end
62
- end
63
- end
51
+ def print_sets(sets)
52
+ sets.each do |set|
53
+ begin
54
+ if @stats
55
+ UI.pod(set, :stats)
56
+ else
57
+ UI.pod(set, :normal)
58
+ end
59
+ rescue DSLError
60
+ UI.warn "Skipping `#{set.name}` because the podspec contains errors."
61
+ end
62
+ end
63
+ end
64
64
  end
65
65
  end
66
66
  end
@@ -1,76 +1,76 @@
1
1
  require 'yaml'
2
2
 
3
3
  module CBin
4
- class Config
5
- def config_file
6
- File.expand_path("#{Pod::Config.instance.home_dir}/bin.yml")
7
- end
4
+ class Config
5
+ def config_file
6
+ File.expand_path("#{Pod::Config.instance.home_dir}/bin.yml")
7
+ end
8
8
 
9
9
 
10
- def template_hash
11
- {
12
- 'code_repo_url' => { description: '源码私有源 Git 地址', default: 'git@git.2dfire.net:ios/cocoapods-spec.git' },
13
- 'binary_repo_url' => { description: '二进制私有源 Git 地址', default: 'git@git.2dfire.net:ios/cocoapods-spec-binary.git' },
14
- 'binary_download_url' => { description: '二进制下载地址,内部会依次传入组件名称与版本,替换字符串中的 %s ', default: 'http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip' },
15
- # 'binary_type' => { description: '二进制打包类型', default: 'framework', selection: %w[framework library] },
16
- 'download_file_type' => { description: '下载二进制文件类型', default: 'zip', selection: %w[zip tgz tar tbz txz dmg] },
17
- }
18
- end
10
+ def template_hash
11
+ {
12
+ 'code_repo_url' => { description: '源码私有源 Git 地址', default: 'git@git.2dfire.net:ios/cocoapods-spec.git' },
13
+ 'binary_repo_url' => { description: '二进制私有源 Git 地址', default: 'git@git.2dfire.net:ios/cocoapods-spec-binary.git' },
14
+ 'binary_download_url' => { description: '二进制下载地址,内部会依次传入组件名称与版本,替换字符串中的 %s ', default: 'http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip' },
15
+ # 'binary_type' => { description: '二进制打包类型', default: 'framework', selection: %w[framework library] },
16
+ 'download_file_type' => { description: '下载二进制文件类型', default: 'zip', selection: %w[zip tgz tar tbz txz dmg] },
17
+ }
18
+ end
19
19
 
20
- def sync_config(config)
21
- File.open(config_file, 'w+') do |f|
20
+ def sync_config(config)
21
+ File.open(config_file, 'w+') do |f|
22
22
  f.write(config.to_yaml)
23
23
  end
24
- end
24
+ end
25
25
 
26
- def default_config
27
- @default_config ||= Hash[template_hash.map { |k, v| [k, v[:default]] }]
28
- end
26
+ def default_config
27
+ @default_config ||= Hash[template_hash.map { |k, v| [k, v[:default]] }]
28
+ end
29
29
 
30
- private
30
+ private
31
31
 
32
- def load_config
33
- if File.exists?(config_file)
34
- YAML.load_file(config_file)
35
- else
36
- default_config
37
- end
38
- end
32
+ def load_config
33
+ if File.exists?(config_file)
34
+ YAML.load_file(config_file)
35
+ else
36
+ default_config
37
+ end
38
+ end
39
39
 
40
- def config
41
- @config ||= begin
42
- @config = OpenStruct.new load_config
43
- validate!
44
- @config
45
- end
46
- end
40
+ def config
41
+ @config ||= begin
42
+ @config = OpenStruct.new load_config
43
+ validate!
44
+ @config
45
+ end
46
+ end
47
47
 
48
- def validate!
49
- template_hash.each do |k, v|
50
- selection = v[:selection]
51
- next if !selection || selection.empty?
52
- config_value = @config.send(k)
53
- next unless config_value
54
- raise Pod::Informative, "#{k} 字段的值必须限定在可选值 [ #{selection.join(' / ')} ] 内".red unless selection.include?(config_value)
55
- end
56
- end
48
+ def validate!
49
+ template_hash.each do |k, v|
50
+ selection = v[:selection]
51
+ next if !selection || selection.empty?
52
+ config_value = @config.send(k)
53
+ next unless config_value
54
+ raise Pod::Informative, "#{k} 字段的值必须限定在可选值 [ #{selection.join(' / ')} ] 内".red unless selection.include?(config_value)
55
+ end
56
+ end
57
57
 
58
- def respond_to_missing?(method, include_private = false)
59
- config.respond_to?(method) || super
60
- end
58
+ def respond_to_missing?(method, include_private = false)
59
+ config.respond_to?(method) || super
60
+ end
61
61
 
62
- def method_missing(method, *args, &block)
63
- if config.respond_to?(method)
64
- config.send(method, *args)
65
- elsif template_hash.keys.include?(method.to_s)
66
- raise Pod::Informative, "#{method} 字段必须在配置文件 #{config_file} 中设置, 请执行 init 命令配置或手动修改配置文件".red
67
- else
68
- super
69
- end
70
- end
71
- end
62
+ def method_missing(method, *args, &block)
63
+ if config.respond_to?(method)
64
+ config.send(method, *args)
65
+ elsif template_hash.keys.include?(method.to_s)
66
+ raise Pod::Informative, "#{method} 字段必须在配置文件 #{config_file} 中设置, 请执行 init 命令配置或手动修改配置文件".red
67
+ else
68
+ super
69
+ end
70
+ end
71
+ end
72
72
 
73
- def self.config
74
- @config ||= Config.new
75
- end
73
+ def self.config
74
+ @config ||= Config.new
75
+ end
76
76
  end